<?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>112546</bug_id>
          
          <creation_ts>2013-03-18 02:53:31 -0700</creation_ts>
          <short_desc>[GTK] Build GTK-specific, non-layer-violating source code into WebCore-independent libPlatformGtk.la</short_desc>
          <delta_ts>2013-03-28 11:56:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>110330</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mkwst+watchlist</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>856932</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 02:53:31 -0700</bug_when>
    <thetext>SSIA. There&apos;s already some amount of GTK-specific source files that contain no platform layer violations and can be migrated to Source/Platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856945</commentid>
    <comment_count>1</comment_count>
      <attachid>193514</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 03:21:35 -0700</bug_when>
    <thetext>Created attachment 193514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856952</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 03:32:01 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856955</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 03:32:24 -0700</bug_when>
    <thetext>Attachment 193514 did not pass style-queue:

Source/Platform/gtk/GtkClickCounter.cpp:78:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkClickCounter.cpp:79:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkClickCounter.cpp:79:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:47:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/RedirectedXCompositeWindow.h:73:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:44:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:50:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:156:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:157:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:159:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:161:  Extra space between return and VK_NUMPAD2  [whitespace/declaration] [3]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:167:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:215:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:221:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:269:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:280:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:289:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:438:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:442:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:446:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:450:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:454:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:458:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:462:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:466:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:470:  Should have a space between // and comment  [whitespace/comments] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:528:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/Platform/gtk/PlatformKeyboardEventGtk.cpp:560:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:140:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/RedirectedXCompositeWindow.cpp:240:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/Platform/gtk/UserAgentGtk.cpp:92:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/Platform/gtk/audio/AudioBusGtk.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/KURLGtk.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:62:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:63:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:64:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:68:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:69:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:103:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/network/CredentialBackingStore.cpp:57:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkInputMethodFilter.h:93:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&quot;
Source/Platform/gtk/GtkPopupMenu.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/GtkPopupMenu.cpp:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:56:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:57:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:58:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:59:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:60:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:61:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:64:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:65:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:66:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:67:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:68:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:69:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:70:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:71:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:72:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:73:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:74:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:78:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:79:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:80:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:81:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:82:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:83:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:85:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:86:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:87:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:88:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:91:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:92:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:93:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:94:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:95:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:96:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:97:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:98:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:99:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:110:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:123:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:125:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:127:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:140:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:141:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:142:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:151:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:152:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:153:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:154:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:159:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:160:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:161:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:162:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:163:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:164:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:165:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:166:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:168:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:169:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:172:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:173:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:174:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:176:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:178:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:179:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:180:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:181:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:186:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:188:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:189:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:190:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:191:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:192:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:194:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:195:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:196:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:199:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:200:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:201:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:202:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:203:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:204:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:205:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:206:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:207:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:209:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:213:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:214:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:215:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:216:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:217:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:219:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:220:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:221:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:222:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:223:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:226:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:227:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:228:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:234:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:235:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:236:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:240:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:243:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:247:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:248:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:249:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:250:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:253:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:254:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:255:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:257:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:258:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:259:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:260:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:263:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:267:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:268:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:269:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:270:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:271:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:272:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:273:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:275:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:276:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:277:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:280:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:281:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:282:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:283:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:284:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:285:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:286:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:287:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:288:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:289:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:290:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:294:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:296:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:297:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:298:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:299:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:300:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:302:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:303:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:304:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:307:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:308:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:309:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:310:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:311:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:312:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:313:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:314:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:315:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:316:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:317:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:321:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:322:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:323:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:324:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:325:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:326:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:327:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:328:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:329:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:330:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:331:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:334:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:336:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:337:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:338:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:339:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:340:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:341:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:342:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:343:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/CursorGtk.h:344:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/TemporaryLinkStubs.cpp:42:  More than one command on the same line  [whitespace/newline] [4]
Source/Platform/gtk/SharedBufferGtk.cpp:24:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/graphics/GdkCairoUtilities.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/gtk/graphics/GdkCairoUtilities.cpp:36:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/graphics/GdkCairoUtilities.cpp:37:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:140:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:142:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/KeyBindingTranslator.cpp:146:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/graphics/ColorGtk.cpp:37:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/graphics/ColorGtk.cpp:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/graphics/ColorGtk.cpp:39:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/DragIcon.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/gtk/DragIcon.cpp:88:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/Platform/gtk/graphics/GdkCairoUtilities.h:29:  The parameter name &quot;surface&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/gtk/graphics/ImageGtk.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/graphics/ImageGtk.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/graphics/ImageGtk.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/graphics/ImageGtk.cpp:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/graphics/ImageGtk.cpp:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/PlatformWheelEventGtk.cpp:29:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/gtk/PlatformWheelEventGtk.cpp:61:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/Platform/gtk/PlatformWheelEventGtk.cpp:75:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/Platform/gtk/LocalizedStringsGtk.cpp:33:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/gtk/LocalizedStringsGtk.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/LocalizedStringsGtk.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/LocalizedStringsGtk.cpp:513:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/LocalizedStringsGtk.cpp:514:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/LocalizedStringsGtk.cpp:653:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/gtk/GtkInputMethodFilter.cpp:140:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/Platform/gtk/MIMETypeRegistryGtk.cpp:41:  Extra space before [  [whitespace/braces] [5]
Source/Platform/gtk/ContextMenuItemGtk.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/FileSystemGtk.cpp:98:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readabFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;GNUmakefile.am&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platform/GNUmakefile.am&apos;, u&apos;Source/Platform/GNUmakefile.list.am&apos;, u&apos;Source/Platform/gtk/CompositionResults.h&apos;, u&apos;Source/Platform/gtk/ContextMenuGtk.cpp&apos;, u&apos;Source/Platform/gtk/ContextMenuItemGtk.cpp&apos;, u&apos;Source/Platform/gtk/CursorGtk.cpp&apos;, u&apos;Source/Platform/gtk/CursorGtk.h&apos;, u&apos;Source/Platform/gtk/DragIcon.cpp&apos;, u&apos;Source/Platform/gtk/DragIcon.h&apos;, u&apos;Source/Platform/gtk/EventLoopGtk.cpp&apos;, u&apos;Source/Platform/gtk/FileSystemGtk.cpp&apos;, u&apos;Source/Platform/gtk/GOwnPtrGtk.cpp&apos;, u&apos;Source/Platform/gtk/GOwnPtrGtk.h&apos;, u&apos;Source/Platform/gtk/GRefPtrGtk.cpp&apos;, u&apos;Source/Platform/gtk/GRefPtrGtk.h&apos;, u&apos;Source/Platform/gtk/GtkAuthenticationDialog.cpp&apos;, u&apos;Source/Platform/gtk/GtkAuthenticationDialog.h&apos;, u&apos;Source/Platform/gtk/GtkClickCounter.cpp&apos;, u&apos;Source/Platform/gtk/GtkClickCounter.h&apos;, u&apos;Source/Platform/gtk/GtkInputMethodFilter.cpp&apos;, u&apos;Source/Platform/gtk/GtkInputMethodFilter.h&apos;, u&apos;Source/Platform/gtk/GtkPopupMenu.cpp&apos;, u&apos;Source/Platform/gtk/GtkPopupMenu.h&apos;, u&apos;Source/Platform/gtk/GtkUtilities.cpp&apos;, u&apos;Source/Platform/gtk/GtkUtilities.h&apos;, u&apos;Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp&apos;, u&apos;Source/Platform/gtk/KURLGtk.cpp&apos;, u&apos;Source/Platform/gtk/KeyBindingTranslator.cpp&apos;, u&apos;Source/Platform/gtk/KeyBindingTranslator.h&apos;, u&apos;Source/Platform/gtk/LanguageGtk.cpp&apos;, u&apos;Source/Platform/gtk/LocalizedStringsGtk.cpp&apos;, u&apos;Source/Platform/gtk/LoggingGtk.cpp&apos;, u&apos;Source/Platform/gtk/MIMETypeRegistryGtk.cpp&apos;, u&apos;Source/Platform/gtk/MainFrameScrollbarGtk.cpp&apos;, u&apos;Source/Platform/gtk/MainFrameScrollbarGtk.h&apos;, u&apos;Source/Platform/gtk/PlatformKeyboardEventGtk.cpp&apos;, u&apos;Source/Platform/gtk/PlatformMouseEventGtk.cpp&apos;, u&apos;Source/Platform/gtk/PlatformScreenGtk.cpp&apos;, u&apos;Source/Platform/gtk/PlatformWheelEventGtk.cpp&apos;, u&apos;Source/Platform/gtk/RedirectedXCompositeWindow.cpp&apos;, u&apos;Source/Platform/gtk/RedirectedXCompositeWindow.h&apos;, u&apos;Source/Platform/gtk/RunLoopGtk.cpp&apos;, u&apos;Source/Platform/gtk/SharedBufferGtk.cpp&apos;, u&apos;Source/Platform/gtk/SharedTimerGtk.cpp&apos;, u&apos;Source/Platform/gtk/SoundGtk.cpp&apos;, u&apos;Source/Platform/gtk/TemporaryLinkStubs.cpp&apos;, u&apos;Source/Platform/gtk/UserAgentGtk.cpp&apos;, u&apos;Source/Platform/gtk/UserAgentGtk.h&apos;, u&apos;Source/Platform/gtk/audio/AudioBusGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/ColorGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/GdkCairoUtilities.cpp&apos;, u&apos;Source/Platform/gtk/graphics/GdkCairoUtilities.h&apos;, u&apos;Source/Platform/gtk/graphics/ImageGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/IntPointGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/IntRectGtk.cpp&apos;, u&apos;Source/Platform/gtk/network/CredentialBackingStore.cpp&apos;, u&apos;Source/Platform/gtk/network/CredentialBackingStore.h&apos;, u&apos;Source/Platform/gtk/text/TextBreakIteratorInternalICUGtk.cpp&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.am&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/platform/audio/gtk/AudioBusGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/ColorGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h&apos;, u&apos;Source/WebCore/platform/graphics/gtk/ImageGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/IntPointGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/IntRectGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/CompositionResults.h&apos;, u&apos;Source/WebCore/platform/gtk/ContextMenuGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/CursorGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/CursorGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/DragIcon.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DragIcon.h&apos;, u&apos;Source/WebCore/platform/gtk/EventLoopGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/FileSystemGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GOwnPtrGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GOwnPtrGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/GRefPtrGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GRefPtrGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkClickCounter.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkClickCounter.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkInputMethodFilter.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkPopupMenu.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkPopupMenu.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkUtilities.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkUtilities.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkWidgetBackingStoreX11.cpp&apos;, u&apos;Source/WebCore/platform/gtk/KURLGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/KeyBindingTranslator.cpp&apos;, u&apos;Source/WebCore/platform/gtk/KeyBindingTranslator.h&apos;, u&apos;Source/WebCore/platform/gtk/LanguageGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/LoggingGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/MainFrameScrollbarGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PlatformScreenGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp&apos;, u&apos;Source/WebCore/platform/gtk/RedirectedXCompositeWindow.h&apos;, u&apos;Source/WebCore/platform/gtk/RunLoopGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SharedBufferGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SharedTimerGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SoundGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/TemporaryLinkStubs.cpp&apos;, u&apos;Source/WebCore/platform/gtk/UserAgentGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/UserAgentGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/po/ChangeLog&apos;, u&apos;Source/WebCore/platform/gtk/po/POTFILES.in&apos;, u&apos;Source/WebCore/platform/network/gtk/CredentialBackingStore.cpp&apos;, u&apos;Source/WebCore/platform/network/gtk/CredentialBackingStore.h&apos;, u&apos;Source/WebCore/platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.am&apos;, u&apos;Source/WebKit2/Shared/NativeWebKeyboardEvent.h&apos;, u&apos;Source/WebKit2/Shared/gtk/WebEventFactory.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebInspectorProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.h&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/GNUmakefile.am&apos;, u&apos;Tools/TestWebKitAPI/GNUmakefile.am&apos;, u&apos;Tools/TestWebKitAPI/gtk/PlatformWebViewGtk.cpp&apos;]&quot; exit_code: 1
ility/comparison_to_zero] [5]
Source/Platform/gtk/FileSystemGtk.cpp:109:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/Platform/gtk/FileSystemGtk.cpp:122:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/Platform/gtk/FileSystemGtk.cpp:137:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/Platform/gtk/FileSystemGtk.cpp:165:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/Platform/gtk/FileSystemGtk.cpp:179:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/Platform/gtk/FileSystemGtk.cpp:258:  Declaration has space between type name and * in GPatternSpec *pspec  [whitespace/declaration] [3]
Source/Platform/gtk/FileSystemGtk.cpp:332:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/FileSystemGtk.cpp:341:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/FileSystemGtk.cpp:350:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/gtk/GtkClickCounter.h:38:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/Platform/gtk/LanguageGtk.cpp:23:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/LanguageGtk.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/LanguageGtk.cpp:38:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/PlatformMouseEventGtk.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/CursorGtk.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/gtk/LoggingGtk.cpp:23:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/Platform/gtk/SharedTimerGtk.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/gtk/SharedTimerGtk.cpp:65:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/Platform/gtk/GtkAuthenticationDialog.cpp:200:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkAuthenticationDialog.cpp:204:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkAuthenticationDialog.cpp:205:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkAuthenticationDialog.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkAuthenticationDialog.cpp:212:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkAuthenticationDialog.cpp:213:  Use 0 instead of NULL.  [readability/null] [5]
Source/Platform/gtk/GtkPopupMenu.h:71:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/Platform/gtk/GtkPopupMenu.h:73:  Omit int when using unsigned  [runtime/unsigned] [1]
Total errors found: 362 in 88 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>856963</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-18 03:52:01 -0700</bug_when>
    <thetext>I&apos;m not sure I got this right, but isn&apos;t platform layer supposed to be independent from WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856986</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 04:36:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m not sure I got this right, but isn&apos;t platform layer supposed to be independent from WebCore?

Yes, it is supposed to and this patch preserves that. Only the code already independent of WebCore is moved, with only the Source/WebCore/platform directory and some of its subdirectories (along with ANGLE and Source/Platform/gtk directories and their subdirectories) listed as places where headers from the platform layer should be searched for.

This prevents including headers from other parts of WebCore, like modules, editing or DOM code and catches any layer violations (of which, with the current patch, there are none).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856995</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-18 04:49:04 -0700</bug_when>
    <thetext>But some of the files moved implement WebCore stuff like conxtext menu, cursors, etc. no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857002</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 04:58:34 -0700</bug_when>
    <thetext>These classes seem to be independent of WebCore, i.e. there&apos;s no inclusion of headers outside of Source/WebCore/platform. I believe this basically means that such source code from the platform layer is independent of WebCore yet still resides under Source/WebCore simply because that&apos;s where the platform layer code is currently located, but is intended to move to Source/Platform (bug #75664).

The move of such code isn&apos;t yet possible due to not all build systems being ready for the migration. In the case of GTK port, after it&apos;s moved, it would be built into libPlatform.la.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857041</commentid>
    <comment_count>8</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-03-18 06:08:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; But some of the files moved implement WebCore stuff like conxtext menu, cursors, etc. no?

That means WebCore depends on them, not the other way around. The problem is code that lives in platform using stuff from WebCore, such as DOM objects, FrameView, and so on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857119</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-03-18 08:03:32 -0700</bug_when>
    <thetext>Hrm. Shouldn&apos;t we move in tandem with other ports? ANGLE should probably be in its own convenience library instead of either libplatform or libWebCore. I regret putting it there now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857155</commentid>
    <comment_count>10</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 08:51:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Hrm. Shouldn&apos;t we move in tandem with other ports?

Hah, I&apos;d like to see that though other ports are not yet actively working on this (or at least don&apos;t seem to). Anyway, the source code I&apos;m planning to migrate first is GTK-specific only so it shouldn&apos;t affect other ports, yet I understand and agree that the migration should work out best if done by all ports in a time frame of a week or two instead of the more probable month or more.

(In reply to comment #9)
&gt; ANGLE should probably be in its own convenience library instead of either libplatform or libWebCore. I regret putting it there now.

I reckon it should be put into a libLevelDB.la-like library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857160</commentid>
    <comment_count>11</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 08:57:20 -0700</bug_when>
    <thetext>As an alternative to jumping head-first into the migration of the GTK-specific source code I&apos;d propose keeping the source code in its current place but have it build into libPlatformGtk, keeping the libPlatformGtk.la library independent of WebCore. This is pretty much what this patch does minus the source files&apos; migration.

This would still make it possible to incrementally remove the remaining WebCore dependencies in the GTK-specific source code, thinning out libWebCoreGtk.la and building a libPlatformGtk.la that&apos;s free of platform violations. After libWebCoreGtk.la is removed and all the other ports are on board (with the general migration plan) it would be pretty straightforward to migrate the code.

A similar approach could be taken for libPlatform.la (which would contain port-independent platform layer code) - incrementally building source files into it, but keeping it independent of WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857162</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-18 09:00:14 -0700</bug_when>
    <thetext>It was not explicitly pointed out, but the proposal in comment #11 introduces a possible workflow that (at least for GTK-specific source code, but applicable to other platform layer code as well) would not migrate files until they are free of platform violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859477</commentid>
    <comment_count>13</comment_count>
      <attachid>194074</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-20 09:15:54 -0700</bug_when>
    <thetext>Created attachment 194074
Provisional patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863752</commentid>
    <comment_count>14</comment_count>
      <attachid>195104</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-26 10:02:22 -0700</bug_when>
    <thetext>Created attachment 195104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>863757</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-26 10:05:02 -0700</bug_when>
    <thetext>Attachment 195104 did not pass style-queue:

Source/WebCore/platform/gtk/GtkVersioning.c:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/platform/gtk/GtkVersioning.c:33:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:125:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:152:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:153:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:184:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:185:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:226:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:239:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:240:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:252:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:253:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:254:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:255:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:259:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;GNUmakefile.am&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platform/GNUmakefile.am&apos;, u&apos;Source/Platform/GNUmakefile.list.am&apos;, u&apos;Source/Platform/gtk/GtkVersioning.c&apos;, u&apos;Source/Platform/gtk/GtkVersioning.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.am&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/platform/gtk/GtkVersioning.c&apos;, u&apos;Source/WebCore/platform/gtk/GtkVersioning.h&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/GNUmakefile.am&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.am&apos;, u&apos;Source/WebKit2/Scripts/generate-forwarding-headers.pl&apos;, u&apos;Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp&apos;, u&apos;Source/WebKit2/Shared/gtk/WebEventFactory.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/GNUmakefile.am&apos;]&quot; exit_code: 1
Source/WebCore/platform/gtk/GtkVersioning.c:260:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:263:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:324:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.c:356:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.h:37:  The parameter name &quot;surface&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.h:39:  The parameter name &quot;drawable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:52:  The parameter name &quot;window&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:52:  The parameter name &quot;content&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:87:  The parameter name &quot;window&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:108:  The parameter name &quot;adjustment&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/gtk/GtkVersioning.h:114:  The parameter name &quot;window&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/gtk/GtkVersioning.h:118:  The parameter name &quot;invocationHint&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 45 in 20 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>863773</commentid>
    <comment_count>16</comment_count>
      <attachid>195104</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-03-26 10:13:29 -0700</bug_when>
    <thetext>Comment on attachment 195104
Patch

Attachment 195104 did not pass gtk-ews (gtk):
Output: http://webkit-commit-queue.appspot.com/results/17341005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865590</commentid>
    <comment_count>17</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-28 10:00:01 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 195104 [details])
&gt; Attachment 195104 [details] did not pass gtk-ews (gtk):
&gt; Output: http://webkit-commit-queue.appspot.com/results/17341005

Pretty sure a clean build will be required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865594</commentid>
    <comment_count>18</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-28 10:11:53 -0700</bug_when>
    <thetext>Thanks!

I&apos;ll recheck that a clean build works and then land this, with care.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865674</commentid>
    <comment_count>19</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-28 11:56:13 -0700</bug_when>
    <thetext>Committed r147137: &lt;http://trac.webkit.org/changeset/147137&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193514</attachid>
            <date>2013-03-18 03:21:35 -0700</date>
            <delta_ts>2013-03-20 09:15:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112546-20130318111725.patch</filename>
            <type>text/plain</type>
            <size>590397</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA5ZjVmYzAwZDUyMzA3
ZGZlYTYzOTc5ZTY3MWE3YzY4YTRhZThmOGFiLi43Mjc2MzA1NDUxNjQ3OWVkZTViN2YxNzAyMWRk
YzcyMDhlZjNmNGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAxMy0wMy0xOCAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTWln
cmF0ZSBHVEstc3BlY2lmaWMsIG5vbi1sYXllci12aW9sYXRpbmcgc291cmNlIGNvZGUgdG8gU291
cmNlL1BsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTI1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgdGhlIEFOR0xFIGFuZCBTb3VyY2UvUGxhdGZvcm0v
Z3RrIGRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzIHRvIHRoZSBwbGF0Zm9ybWd0a19j
cHBmbGFncworICAgICAgICBsaXN0LiBwbGF0Zm9ybV93ZWJjb3JlX2NwcGZsYWdzIGNvbnRhaW5z
IHRoZSBtaW5pbWFsIHNldCBvZiB0aGUgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0gZGlyZWN0b3J5
IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMKKyAgICAgICAgaW5jbHVzaW9ucyB0aGF0IGFyZSByZXF1
aXJlZCB0byBidWlsZCB0aGUgbWlncmF0aW5nIHNvdXJjZSBmaWxlcy4gVGhpcywgYWxvbmcgd2l0
aCB0aGUgaGVhZGVyIGluY2x1c2lvbiBkb25lIHRocm91Z2hvdXQKKyAgICAgICAgV2ViQ29yZSAo
YW5kIGluIHRoZSBtaWdyYXRlZCBzb3VyY2UgZmlsZXMgYXMgd2VsbCkgYnkgc3BlY2lmeWluZyB0
aGUgaGVhZGVyIGJhc2VuYW1lIGFsbG93cyB1cyB0byBjYXRjaCBhbnkgcGxhdGZvcm0KKyAgICAg
ICAgdmlvbGF0aW9ucyB0aGF0IG1pZ2h0IG9jY3VyIGZyb20gbm93IG9uIG9yIHJlcXVpcmUgZml4
aW5nIGJlZm9yZSBtaWdyYXRpbmcgdGhlIHZpb2xhdGluZyBzb3VyY2UgY29kZS4gVGhpcyB2YXJp
YWJsZSBpcworICAgICAgICByZWZlcmVuY2VkIGFtb25nc3QgQ1BQRkxBR1Mgd2hlbiBidWlsZGlu
ZyBib3RoIGxpYlBsYXRmb3JtR3RrLmxhIGFuZCBsaWJQbGF0Zm9ybUd0azIubGEuIENQUEZMQUdT
IGZvciBib3RoIGxpYnJhcmllcyBub3cKKyAgICAgICAgYWxzbyBpbmNsdWRlIHRoZSBsaWJzZWNy
ZXQgYW5kIGxpYnNvdXAgZGVwZW5kZW5jaWVzJyBDRkxBR1MuCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogTGlzdCBhbGwgdGhlIG5ldyBidWlsZCB0YXJnZXRzLgorICAgICAgICAqIGd0
ay9Db21wb3NpdGlvblJlc3VsdHMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaC4KKyAgICAgICAgKiBndGsvQ29udGV4dE1lbnVH
dGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51R3RrLmNwcC4KKyAgICAgICAgKiBndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3Bw
LgorICAgICAgICAqIGd0ay9DdXJzb3JHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAuCisgICAgICAgICogZ3RrL0N1cnNvckd0ay5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oLgor
ICAgICAgICAqIGd0ay9EcmFnSWNvbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwLgorICAgICAgICAqIGd0ay9EcmFnSWNvbi5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmguCisgICAgICAg
ICogZ3RrL0V2ZW50TG9vcEd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcC4KKyAgICAgICAgKiBndGsvRmlsZVN5c3RlbUd0ay5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHAuCisgICAgICAgICogZ3RrL0dPd25QdHJHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwLgorICAgICAgICAqIGd0ay9HT3du
UHRyR3RrLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0
ckd0ay5oLgorICAgICAgICAqIGd0ay9HUmVmUHRyR3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcC4KKyAgICAgICAgKiBndGsvR1Jl
ZlB0ckd0ay5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQ
dHJHdGsuaC4KKyAgICAgICAgKiBndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcC4KKyAgICAgICAgKiBndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zy5oLgorICAgICAgICAqIGd0ay9HdGtDbGlja0NvdW50ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAuCisgICAgICAgICog
Z3RrL0d0a0NsaWNrQ291bnRlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oLgorICAgICAgICAqIGd0ay9HdGtJbnB1dE1ldGhvZEZp
bHRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5w
dXRNZXRob2RGaWx0ZXIuY3BwLgorICAgICAgICAqIGd0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmguCisgICAgICAgICogZ3RrL0d0a1BvcHVwTWVudS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcC4KKyAgICAgICAgKiBn
dGsvR3RrUG9wdXBNZW51Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrUG9wdXBNZW51LmguCisgICAgICAgICogZ3RrL0d0a1V0aWxpdGllcy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcC4KKyAg
ICAgICAgKiBndGsvR3RrVXRpbGl0aWVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmguCisgICAgICAgICogZ3RrL0d0a1dpZGdldEJhY2tp
bmdTdG9yZVgxMS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcC4KKyAgICAgICAgKiBndGsvS1VSTEd0ay5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAuCisg
ICAgICAgICogZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAuCisgICAgICAg
ICogZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaC4KKyAgICAgICAgKiBndGsvTGFu
Z3VhZ2VHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xh
bmd1YWdlR3RrLmNwcC4KKyAgICAgICAgKiBndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0
ay5jcHAuCisgICAgICAgICogZ3RrL0xvZ2dpbmdHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwLgorICAgICAgICAqIGd0ay9NSU1F
VHlwZVJlZ2lzdHJ5R3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcC4KKyAgICAgICAgKiBndGsvTWFpbkZyYW1lU2Ny
b2xsYmFyR3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9N
YWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwLgorICAgICAgICAqIGd0ay9NYWluRnJhbWVTY3JvbGxi
YXJHdGsuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJh
bWVTY3JvbGxiYXJHdGsuaC4KKyAgICAgICAgKiBndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3Rr
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnRHdGsuY3BwLgorICAgICAgICAqIGd0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91
c2VFdmVudEd0ay5jcHAuCisgICAgICAgICogZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5j
cHAuCisgICAgICAgICogZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcC4K
KyAgICAgICAgKiBndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
LmNwcC4KKyAgICAgICAgKiBndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdy5oLgorICAgICAgICAqIGd0ay9SdW5Mb29wR3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcC4KKyAgICAgICAgKiBndGsvU2hh
cmVkQnVmZmVyR3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TaGFyZWRCdWZmZXJHdGsuY3BwLgorICAgICAgICAqIGd0ay9TaGFyZWRUaW1lckd0ay5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsu
Y3BwLgorICAgICAgICAqIGd0ay9Tb3VuZEd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwLgorICAgICAgICAqIGd0ay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAuCisgICAgICAgICogZ3RrL1VzZXJBZ2VudEd0ay5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcC4K
KyAgICAgICAgKiBndGsvVXNlckFnZW50R3RrLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguCisgICAgICAgICogZ3RrL2F1ZGlvL0F1ZGlv
QnVzR3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0
ay9BdWRpb0J1c0d0ay5jcHAuCisgICAgICAgICogZ3RrL2dyYXBoaWNzL0NvbG9yR3RrLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0
ay5jcHAuCisgICAgICAgICogZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0
aWxpdGllcy5jcHAuCisgICAgICAgICogZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fp
cm9VdGlsaXRpZXMuaC4KKyAgICAgICAgKiBndGsvZ3JhcGhpY3MvSW1hZ2VHdGsuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNw
cC4KKyAgICAgICAgKiBndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcC4KKyAg
ICAgICAgKiBndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAuCisgICAgICAgICog
Z3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNw
cC4KKyAgICAgICAgKiBndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmguCisgICAgICAgICogZ3RrL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5h
bElDVUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcC4KKwogMjAxMy0wMy0xNCAgRGFu
YSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1h
a2Ugem9vbSBmaWx0ZXIgaW5kZXBlbmRlbnQgb2YgdGhlIGxheWVyIHNpemUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMmQyMGRiODBlNDA4MTMwNTI4NDAwYWZlNTAzMTNiOGI2ZDlhYzFiMy4uOWY1MWI4MzgyMGRh
ZjRlNjlkY2E0Y2FjYTM4NWU5YjA0NTU2ODAwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDEzLTAzLTE4ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVjaWZpYywgbm9uLWxheWVyLXZpb2xhdGluZyBzb3Vy
Y2UgY29kZSB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMjU0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IERBVEFfRElSIGlzIG5vdCByZXF1aXJl
ZCBhbnltb3JlLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFJlbW92aW5nIGJ1aWxk
IHRhcmdldHMgZnJvbSB0aGUgbGlzdCwgdGhlcmUgYXJlIG5vdyBidWlsdCBpbnRvIGxpYlBsYXRm
b3JtR3RrLmxhLgorCiAyMDEzLTAzLTE3ICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1z
dW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBQcm92aWRlIGRlZmF1bHQgY3Vyc29yIGdyb3VwcyBh
cyBjdXJzb3IuZWRjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZwppbmRl
eCAyMDJkNGI4OTViOWRkNGFiNzdlN2U1MWVkODJkMjQ2Y2NmMDdkNjgzLi41MjdlYzIwYjk4YzMz
YWIwNWIyYmY5YThhMGE1ODcwMjI3MzliNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9wby9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMy0xOCAgWmFuIERvYmVyc2Vr
ICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTWlncmF0ZSBHVEstc3Bl
Y2lmaWMsIG5vbi1sYXllci12aW9sYXRpbmcgc291cmNlIGNvZGUgdG8gU291cmNlL1BsYXRmb3Jt
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI1NDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMgLSBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFBPVEZJTEVTLmluOiBB
ZGp1c3QgcGF0aHMgdG8gR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGFuZCBMb2NhbGl6ZWRT
dHJpbmdzR3RrLmNwcCBhcyB0aGUgZmlsZXMgaGF2ZSBub3cgbW92ZWQuCisKIDIwMTMtMDMtMTUg
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgYnVpbGQgZml4LiBBbHNvIGdhdGhlciB0cmFuc2xhdGFibGUgc3RyaW5ncyBmcm9tIFdl
YktpdDIgZmlsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGUyYWZlNmUxZWFlNWZlMDIyNTZlZWM4MGJhODFk
NmQ4OTIwYTZlZC4uMzFhMTRjZGFjMWRjMzAxZWQ0MmVlOGZlNjE4NTJiMDRjZWViYTkzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEzLTAzLTE4ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVjaWZpYywg
bm9uLWxheWVyLXZpb2xhdGluZyBzb3VyY2UgY29kZSB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjU0NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IEFkZCB0aGUgcGxhdGZvcm1fd2ViY29yZV9jcHBmbGFncywgbGlic291cCBhbmQgbGlic2Vj
cmV0IGRlcGVuZGVuY2llcycgQ0ZMQUdTIHJlZmVyZW5jZXMgdG8gdGhlIGxpc3QKKyAgICAgICAg
b2YgQ1BQRkxBR1MgZm9yIGxpYlBsYXRmb3JtR3RrMi5sYS4KKyAgICAgICAgKiBTaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oOiBBZGp1c3QgdGhlIGhlYWRlciBpbmNsdXNpb25zIGZvciBm
aWxlcyB0aGF0IGFyZSBtaWdyYXRpbmcsIHRoZSBpbmNsdXNpb24gbXVzdCBub3cKKyAgICAgICAg
YmUgZG9uZSB0aHJvdWdoIHRoZSBmb3J3YXJkaW5nIGhlYWRlciBwb2ludGluZyB0byB0aGUgUGxh
dGZvcm0gZnJhbWV3b3JrLgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6
IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDog
RGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmg6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aW50T3BlcmF0aW9uLmNwcDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0U2V0dGluZ3MuY3BwOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVSUNsaWVudC5jcHA6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHA6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHA6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmg6IERpdHRvLgorCiAyMDEzLTAzLTE2ICBQcmF0
aWsgU29sYW5raSAgPHBzb2xhbmtpQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxlIEhpZ2gg
RFBJIENhbnZhcyBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmlsZS5hbQppbmRleCA1Zjk2MGNiNDVmYTVh
NDkzZmEzYTAxNGVkMWM2NWYyYmYxMjZmYzljLi5lMTk2MGIyN2QxNDU3NDczYjRmZWRhODgwOWFm
MzJmOTMzYmUwZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFtCkBAIC0xMCw3ICsxMCwzNCBAQCBp
bmNsdWRlICQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlzdC5hbQogCiBw
bGF0Zm9ybWd0a19jcHBmbGFncyArPSBcCiAJLURXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5H
PVwiQFdFQktJVEdUS19BUElfVkVSU0lPTkBcIiBcCi0JLUkkKHNyY2RpcikvU291cmNlL1BsYXRm
b3JtL2d0aworCS1JJChzcmNkaXIpL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYyBcCisJLUkk
KHNyY2RpcikvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZSBcCisJLUkkKHNyY2Rpcikv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HIFwKKwktSSQoc3JjZGlyKS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0tIUiBcCisJLUkkKHNyY2RpcikvU291cmNl
L1BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpbyBc
CisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcyBcCisJLUkkKHNyY2Rp
cikvU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL3RleHQgXAorCS1EREFUQV9ESVI9XCIke2RhdGFkaXJ9XCIKKworIyBUaGlzIGlz
IHRoZSBtaW5pbWFsIHNldCBvZiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybSBzdWJkaXJlY3Rvcmll
cyB0aGF0IGNvbnRhaW4gaGVhZGVycyByZXF1aXJlZCBieSB0aGUgR1RLLXNwZWNpZmljCisjIHBs
YXRmb3JtIHNvdXJjZSBmaWxlcy4gVGhlc2UgaW5jbHVzaW9ucyBhcmUgcmVxdWlyZWQgZHVlIHRv
IHBsYXRmb3JtIGxheWVyIHNvdXJjZSBmaWxlcyBub3QgeWV0IGNvbXBsZXRlbHkgbWlncmF0ZWQK
KyMgaW50byBTb3VyY2UvUGxhdGZvcm0uIE9ubHkgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0gc3Vi
ZGlyZWN0b3JpZXMgbXVzdCBiZSBsaXN0ZWQgaGVyZSBhcyB0aGlzLCBjb3VwbGVkIHdpdGggdGhl
CisjIGhlYWRlciBpbmNsdXNpb24gaW4gc291cmNlIGZpbGVzIHRoYXQncyBkb25lIHZpYSBzcGVj
aWZ5aW5nIHRoZSBoZWFkZXIgYmFzZW5hbWUsIHByZXZlbnRzIGFueSBwbGF0Zm9ybSB2aW9sYXRp
b25zCisjIG9jY3VycmluZy4KK3BsYXRmb3JtX3dlYmNvcmVfY3BwZmxhZ3MgKz0gXAorCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hbmltYXRpb24gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWly
byBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MgXAorCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIFwKKwktSSQo
c3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIgXAorCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMgXAor
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsgXAorCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cCBcCisJLUkkKHNyY2Rpcikv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dAogCiBub2luc3RfTFRMSUJSQVJJRVMgKz0gXAog
CWxpYlBsYXRmb3JtR3RrLmxhCkBAIC0zMCw2ICs1Nyw5IEBAIGxpYlBsYXRmb3JtR3RrX2xhX0NQ
UEZMQUdTID0gXAogCS1EQlVJTERJTkdfV0VCS0lUIFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAog
CSQocGxhdGZvcm1ndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtX3dlYmNvcmVfY3BwZmxhZ3Mp
IFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJLWZuby1zdHJpY3QtYWxpYXNpbmcg
XAotCSQoR1RLX0NGTEFHUykKKwkkKEdUS19DRkxBR1MpIFwKKwkkKExJQlNFQ1JFVF9DRkxBR1Mp
IFwKKwkkKExJQlNPVVBfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCA3OTZiZWNmYjcyZTM3YmVmZWI2N2FkNTUxOGY2Mjk4NzllYTQ2NjMxLi44YTI5NjQ4YTUzYWIy
Zjc4MmUzYWRmNWQ2OGJmNWMxMjM0OTY0NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0v
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMSwzICsxLDY2IEBACiBwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0NvbnRleHRNZW51R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0
ZW1HdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0lj
b24uY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lz
dGVtR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR1Jl
ZlB0ckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a0NsaWNrQ291bnRlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tD
b3VudGVyLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmggXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9H
dGtQb3B1cE1lbnUuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKIAlTb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a1ZlcnNpb25pbmcuYyBcCi0JU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5n
LmgKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9LVVJMR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJh
bnNsYXRvci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3Iu
aCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
TG9nZ2luZ0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0
ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
V2hlZWxFdmVudEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU291
bmRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9Vc2VyQWdlbnRHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby9BdWRp
b0J1c0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5oIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
Z3JhcGhpY3MvSW50UmVjdEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9D
cmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3Jr
L0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1Rl
eHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCisKK2lmIFRBUkdFVF9YMTEKK3BsYXRm
b3JtZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2lu
Z1N0b3JlWDExLmNwcAoraWYgVVNFX09QRU5HTAorcGxhdGZvcm1ndGtfc291cmNlcyArPSBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorZW5kaWYgIyBF
TkQgVVNFX09QRU5HTAorZW5kaWYgIyBFTkQgVEFSR0VUX1gxMQpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
Q29tcG9zaXRpb25SZXN1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ1ZjIzYmI1OTZlOGMyZWFlYjMyOTcx
MGRmNDhlNDc0YzdlYzQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
Q29tcG9zaXRpb25SZXN1bHRzLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvbXBvc2l0aW9uUmVzdWx0c19o
CisjZGVmaW5lIENvbXBvc2l0aW9uUmVzdWx0c19oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ29tcG9zaXRpb25SZXN1
bHRzIHsKKyAgICBDb21wb3NpdGlvblJlc3VsdHMoKQorICAgICAgICA6IGFzc29jaWF0ZWRXaXRo
UGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBDb21w
b3NpdGlvblJlc3VsdHMoU3RyaW5nIHNpbXBsZVN0cmluZykKKyAgICAgICAgOiBzaW1wbGVTdHJp
bmcoc2ltcGxlU3RyaW5nKQorICAgICAgICAsIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0
aW9uVXBkYXRlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIFJlc3VsdHNJbmRpY2F0
b3IgeyBXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24gfTsKKyAgICBDb21wb3NpdGlvblJl
c3VsdHMoUmVzdWx0c0luZGljYXRvcikKKyAgICAgICAgOiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdD
b21wb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbXBvc2l0
aW9uVXBkYXRlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXNzb2NpYXRlZFdpdGhQ
ZW5kaW5nQ29tcG9zaXRpb25VcGRhdGU7CisgICAgfQorCisgICAgLy8gU29tZSBzaW1wbGUgaW5w
dXQgbWV0aG9kcyByZXR1cm4gYSBzdHJpbmcgZm9yIGFsbCBrZXlib2FyZCBldmVudHMuIFRoaXMK
KyAgICAvLyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0
aW9uIG9mIHRoZSBrZXljb2RlLgorICAgIFN0cmluZyBzaW1wbGVTdHJpbmc7CisKKyAgICBib29s
IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOworfTsKKworfQorCisjZW5k
aWYgLy8gQ29tcG9zaXRpb25SZXN1bHRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvQ29udGV4dE1lbnVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGMwMDJjNGQ5ZmQ3ODJmOTI3MDRjNDk3NmM0MzdlYTFmOWU1ZGRi
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsu
Y3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KCkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVShndGtf
bWVudV9uZXcoKSk7Cit9CisKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9y
bU1lbnVEZXNjcmlwdGlvbiBtZW51KQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUp
Cit7Cit9CisKK0NvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQoreworICAgIGlmIChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1f
cGxhdGZvcm1EZXNjcmlwdGlvbikpOworfQorCit2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVt
KENvbnRleHRNZW51SXRlbSYgaXRlbSkKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9ybURlc2NyaXB0
aW9uKTsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBwbGF0Zm9ybUl0ZW0gPSBHVEtfV0lER0VU
KGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CisgICAgQVNTRVJUKHBsYXRmb3Jt
SXRlbSk7CisKKyAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJl
bnQocGxhdGZvcm1JdGVtLmdldCgpKSkKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RL
X0NPTlRBSU5FUihwYXJlbnQpLCBwbGF0Zm9ybUl0ZW0uZ2V0KCkpOworCisgICAgZ3RrX21lbnVf
c2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIHBsYXRm
b3JtSXRlbS5nZXQoKSk7CisgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbS5nZXQoKSk7
Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24gbWVudSkKK3sKKyAgICBBU1NFUlQobWVudSk7CisgICAgaWYgKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbiA9PSBtZW51KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQo
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKSk7CisKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBt
ZW51OworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZvcm1E
ZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsK
K30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnJlbGVhc2VQbGF0Zm9y
bURlc2NyaXB0aW9uKCkKK3sKKyAgICBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBkZXNjcmlwdGlv
biA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSAw
OworCisgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworfQorCit1bnNpZ25lZCBDb250ZXh0TWVudTo6
aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsK
KworICAgIEdPd25QdHI8R0xpc3Q+IGNoaWxkcmVuKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVu
KEdUS19DT05UQUlORVIobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkpOworICAgIHJldHVybiBnX2xp
c3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKK30KKworVmVjdG9yPENvbnRleHRNZW51SXRlbT4g
Y29udGV4dE1lbnVJdGVtVmVjdG9yKGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUp
Cit7CisgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbT4gbWVudUl0ZW1WZWN0b3I7CisKKyAgICBH
T3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09O
VEFJTkVSKG1lbnUpKSk7CisgICAgaW50IGl0ZW1Db3VudCA9IGdfbGlzdF9sZW5ndGgoY2hpbGRy
ZW4uZ2V0KCkpOworICAgIG1lbnVJdGVtVmVjdG9yLnJlc2VydmVDYXBhY2l0eShpdGVtQ291bnQp
OworCisgICAgZm9yIChHTGlzdCogaXRlbSA9IGNoaWxkcmVuLmdldCgpOyBpdGVtOyBpdGVtID0g
Z19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNf
Y2FzdDxHdGtXaWRnZXQqPihpdGVtLT5kYXRhKTsKKyAgICAgICAgaWYgKCFHVEtfSVNfTUVOVV9J
VEVNKHdpZGdldCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWVudUl0ZW1WZWN0
b3IuYXBwZW5kKEdUS19NRU5VX0lURU0od2lkZ2V0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1l
bnVJdGVtVmVjdG9yOworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBwbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbihWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQoreworICAg
IEd0a01lbnUqIG1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdWJNZW51SXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgR3RrV2lk
Z2V0KiBwbGF0Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKHN1Yk1lbnVJdGVtc1tpXS5yZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpKTsKKyAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19N
RU5VX1NIRUxMKG1lbnUpLCBwbGF0Zm9ybUl0ZW0pOworICAgICAgICBndGtfd2lkZ2V0X3Nob3co
cGxhdGZvcm1JdGVtKTsKKyAgICB9CisgICAgcmV0dXJuIG1lbnU7Cit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVu
dUl0ZW1HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3MGI1YmU2YmRmMGJkOWNmYzc3OGNhMjA1ZGIyMzg3
NTVjMzFlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51SXRlbUd0ay5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQor
CisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5o
IgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2RlZmluZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTiAid2Via2l0LWNv
bnRleHQtbWVudSIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciog
Z3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihjb25zdCBDb250ZXh0TWVudUFjdGlvbiYg
YWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29w
eUltYWdlVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFM
aW5rVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5OgorICAgICAg
ICByZXR1cm4gR1RLX1NUT0NLX0NPUFk7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGlua0luTmV3V2luZG93OgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5O
ZXdXaW5kb3c6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRv
dzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZExpbmtUb0Rpc2s6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZElt
YWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NBVkU7CisgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fQkFDSzsK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19HT19GT1JXQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcDoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19TVE9QOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
UmVsb2FkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1JFRlJFU0g7CisgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfQ1VUOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfUEFT
VEU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGU6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfREVMRVRFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgor
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9BTEw7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX05P
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19PSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ090aGVyOgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX01JU1NJTkdfSU1BR0U7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19GSU5E
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViOgorICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX0ZJTkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuV2l0aERlZmF1
bHRBcHBsaWNhdGlvbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01f
SU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tT3V0OgorICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX1pPT01fT1VUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQXV0b1NpemU6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9GSVQ7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZOZXh0UGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19GT1JXQVJEOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgorICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgLy8gTmV3IHRhZ3MsIG5vdCBwYXJ0IG9mIEFQSQorICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6CisgICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfT1BFTjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmc6CisgICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfU1BFTExfQ0hFQ0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdGb250TWVudToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfRk9OVDsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19TRUxFQ1RfRk9OVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6CisgICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfQk9MRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0l0
YWxpYzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19JVEFMSUM7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfVU5ERVJMSU5F
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKKyAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19TRUxFQ1RfQ09MT1I7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dn
bGVNZWRpYUNvbnRyb2xzOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFM
b29wOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQ6
CisgICAgICAgIC8vIE5vIGljb24gZm9yIHRoaXMuCisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfRlVMTFNDUkVFTjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK3N0YXRpYyBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gY3JlYXRlUGxh
dGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4
dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJv
b2wgY2hlY2tlZCkKK3sKKyAgICBpZiAodHlwZSA9PSBTZXBhcmF0b3JUeXBlKQorICAgICAgICBy
ZXR1cm4gR1RLX01FTlVfSVRFTShndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9uZXcoKSk7CisKKyAg
ICBHT3duUHRyPGNoYXI+IGFjdGlvbk5hbWUoZ19zdHJkdXBfcHJpbnRmKCJjb250ZXh0LW1lbnUt
YWN0aW9uLSVkIiwgYWN0aW9uKSk7CisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHBsYXRmb3JtQWN0
aW9uOworCisgICAgaWYgKHR5cGUgPT0gQ2hlY2thYmxlQWN0aW9uVHlwZSkgeworICAgICAgICBw
bGF0Zm9ybUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25l
dyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZS51dGY4KCkuZGF0YSgpLCAwLCBndGtTdG9ja0lERnJv
bUNvbnRleHRNZW51QWN0aW9uKGFjdGlvbikpKSk7CisgICAgICAgIGd0a190b2dnbGVfYWN0aW9u
X3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04ocGxhdGZvcm1BY3Rpb24uZ2V0KCkpLCBjaGVj
a2VkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGxhdGZvcm1BY3Rpb24gPSBhZG9wdEdSZWYoZ3Rr
X2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3Rr
U3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihhY3Rpb24pKSk7CisgICAgZ3RrX2FjdGlvbl9z
ZXRfc2Vuc2l0aXZlKHBsYXRmb3JtQWN0aW9uLmdldCgpLCBlbmFibGVkKTsKKworICAgIEd0a01l
bnVJdGVtKiBpdGVtID0gR1RLX01FTlVfSVRFTShndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0o
cGxhdGZvcm1BY3Rpb24uZ2V0KCkpKTsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChp
dGVtKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9JTlRFUihhY3Rpb24p
KTsKKworICAgIHJldHVybiBpdGVtOworfQorCisvLyBFeHRyYWN0IHRoZSBBY3Rpb25UeXBlIGZy
b20gdGhlIG1lbnUgaXRlbQorQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oUGxhdGZv
cm1NZW51SXRlbURlc2NyaXB0aW9uIGl0ZW0pCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24o
aXRlbSkKK3sKKyAgICAvLyBEb24ndCBzaG93IGFjY2VsIGxhYmVscyBpbiBjb250ZXh0IG1lbnUg
aXRlbXMuCisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoIWFj
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtfYWN0aW9uX2dldF9hY2NlbF9w
YXRoKGFjdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIEd0a1dpZGdldCogY2hpbGQgPSBn
dGtfYmluX2dldF9jaGlsZChHVEtfQklOKGl0ZW0pKTsKKyAgICBpZiAoR1RLX0lTX0FDQ0VMX0xB
QkVMKGNoaWxkKSkKKyAgICAgICAgZ3RrX2FjY2VsX2xhYmVsX3NldF9hY2NlbF9jbG9zdXJlKEdU
S19BQ0NFTF9MQUJFTChjaGlsZCksIDApOworfQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRN
ZW51SXRlbShDb250ZXh0TWVudSogc3ViTWVudSkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBHVEtfTUVOVV9JVEVNKGd0a19tZW51X2l0ZW1fbmV3KCkpOworICAgIGlmIChzdWJNZW51
KQorICAgICAgICBzZXRTdWJNZW51KHN1Yk1lbnUpOworfQorCitDb250ZXh0TWVudUl0ZW06OkNv
bnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9u
IGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29udGV4dE1lbnUqIHN1Yk1lbnUpCit7Cisg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uKHR5cGUsIGFjdGlvbiwgdGl0bGUsIHRydWUsIGZhbHNlKTsKKyAgICBpZiAoc3ViTWVudSkK
KyAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250
ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2VkKQor
eworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNj
cmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCBlbmFibGVkLCBjaGVja2VkKTsKK30KKworQ29u
dGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tlZCwgVmVjdG9yPENv
bnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24oU3VibWVudVR5cGUsIGFjdGlv
biwgdGl0bGUsIGVuYWJsZWQsIGNoZWNrZWQpOworICAgIHNldFN1Yk1lbnUoc3ViTWVudUl0ZW1z
KTsKK30KKworQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkKK3sKK30KKworUGxh
dGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cmVsZWFzZVBsYXRmb3Jt
RGVzY3JpcHRpb24oKQoreworICAgIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBwbGF0Zm9y
bURlc2NyaXB0aW9uID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IDA7CisgICAgcmV0dXJuIHBsYXRmb3JtRGVzY3JpcHRpb247Cit9CisKK0NvbnRl
eHRNZW51SXRlbVR5cGUgQ29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICBpZiAo
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0obV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIFNlcGFyYXRvclR5cGU7CisgICAgaWYgKEdUS19JU19DSEVDS19NRU5VX0lURU0o
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIENoZWNrYWJsZUFjdGlvblR5
cGU7CisgICAgaWYgKGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUobV9wbGF0Zm9ybURlc2NyaXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIFN1Ym1lbnVUeXBlOworICAgIHJldHVybiBBY3Rpb25UeXBl
OworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShDb250ZXh0TWVudUl0ZW1UeXBl
IHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKKyAgICAgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9u
ZXcoKSk7Cit9CisKK0NvbnRleHRNZW51QWN0aW9uIENvbnRleHRNZW51SXRlbTo6YWN0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVBY3Rpb24+KEdQT0lO
VEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChtX3BsYXRmb3JtRGVzY3JpcHRp
b24pLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTikpKTsKK30KKwordm9pZCBDb250ZXh0TWVu
dUl0ZW06OnNldEFjdGlvbihDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9JTlRFUihhY3Rpb24pKTsKK30KKworU3RyaW5nIENv
bnRleHRNZW51SXRlbTo6dGl0bGUoKSBjb25zdAoreworICAgIEd0a0FjdGlvbiogYWN0aW9uID0g
Z3RrQWN0aW9uKCk7CisgICAgcmV0dXJuIGFjdGlvbiA/IFN0cmluZzo6ZnJvbVVURjgoZ3RrX2Fj
dGlvbl9nZXRfbGFiZWwoYWN0aW9uKSkgOiBTdHJpbmcoKTsKK30KKwordm9pZCBDb250ZXh0TWVu
dUl0ZW06OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgR3RrQWN0aW9uKiBh
Y3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uKQorICAgICAgICBndGtfYWN0aW9u
X3NldF9sYWJlbChhY3Rpb24sIHRpdGxlLnV0ZjgoKS5kYXRhKCkpOworfQorCitQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSgpIGNvbnN0Cit7
CisgICAgR3RrV2lkZ2V0KiBzdWJNZW51ID0gZ3RrX21lbnVfaXRlbV9nZXRfc3VibWVudShtX3Bs
YXRmb3JtRGVzY3JpcHRpb24pOworICAgIHJldHVybiBzdWJNZW51ID8gR1RLX01FTlUoc3ViTWVu
dSkgOiAwOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0TWVu
dSogbWVudSkKK3sKKyAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiwgR1RLX1dJREdFVChtZW51LT5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKSk7
Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KFZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0+JiBzdWJNZW51SXRlbXMpCit7CisgICAgQ29udGV4dE1lbnUgbWVudShwbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbihzdWJNZW51SXRlbXMpKTsKKyAgICBzZXRTdWJNZW51KCZtZW51KTsKK30K
Kwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9vbCBzaG91bGRDaGVjaykKK3sK
KyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOworICAgIGlmIChhY3Rpb24gJiYg
R1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKKyAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25f
c2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pLCBzaG91bGRDaGVjayk7Cit9CisK
K2Jvb2wgQ29udGV4dE1lbnVJdGVtOjpjaGVja2VkKCkgY29uc3QKK3sKKyAgICBHdGtBY3Rpb24q
IGFjdGlvbiA9IGd0a0FjdGlvbigpOworICAgIGlmIChhY3Rpb24gJiYgR1RLX0lTX1RPR0dMRV9B
Q1RJT04oYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3Rp
dmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIENvbnRleHRNZW51SXRlbTo6ZW5hYmxlZCgpIGNvbnN0Cit7CisgICAgR3RrQWN0aW9uKiBh
Y3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICByZXR1cm4gYWN0aW9uID8gZ3RrX2FjdGlvbl9nZXRf
c2Vuc2l0aXZlKGFjdGlvbikgOiBmYWxzZTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNl
dEVuYWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCit7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBn
dGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uKQorICAgICAgICBndGtfYWN0aW9uX3NldF9zZW5z
aXRpdmUoYWN0aW9uLCBzaG91bGRFbmFibGUpOworfQorCitHdGtBY3Rpb24qIENvbnRleHRNZW51
SXRlbTo6Z3RrQWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX2FjdGl2YXRhYmxlX2dl
dF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSk7
Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9D
dXJzb3JHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYjkwNWE5NjRkZTc2MjM0MjA5YzJmNWM5MWM2Y2Rm
NzkwNTQyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0
ay5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IENocmlz
dGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJzb3JHdGsuaCIKKyNpbmNsdWRlICJHdGtWZXJz
aW9uaW5nLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisj
aW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBjcmVhdGVOYW1lZEN1cnNvcihDdXN0
b21DdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgQ3VzdG9tQ3Vyc29yIGN1cnNvciA9IEN1
c3RvbUN1cnNvcnNbY3Vyc29yVHlwZV07CisgICAgR1JlZlB0cjxHZGtDdXJzb3I+IGMgPSBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9uYW1lKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCks
IGN1cnNvci5uYW1lKSk7CisgICAgaWYgKGMpCisgICAgICAgIHJldHVybiBjOworCisgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gc291cmNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY3Vyc29yLmJpdHMp
LCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwgNCkpOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IG1hc2sgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShj
b25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjdXJzb3IubWFza19iaXRzKSwgQ0FJUk9fRk9STUFU
X0ExLCAzMiwgMzIsIDQpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0ExLCAzMiwg
MzIpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3Vy
ZmFjZS5nZXQoKSkpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBz
b3VyY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX21hc2tfc3VyZmFjZShjci5nZXQoKSwgbWFz
ay5nZXQoKSwgMCwgMCk7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRH
UmVmKGdka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShzdXJmYWNlLmdldCgpLCAwLCAwLCAzMiwg
MzIpKTsKKyAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwgY3Vyc29yLmhvdF94LCBjdXJz
b3IuaG90X3kpKTsKK30KKworc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBjcmVhdGVDdXN0b21D
dXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkKK3sKKyAgICBJbnRQ
b2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3BvdCk7
CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2Rr
UGl4YnVmKCkpOworICAgIHJldHVybiBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhi
dWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgcGl4YnVmLmdldCgpLCBlZmZlY3RpdmVIb3RT
cG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCkpKTsKK30KKwordm9pZCBDdXJzb3I6OmVuc3Vy
ZVBsYXRmb3JtQ3Vyc29yKCkgY29uc3QKK3sKKyAgICBpZiAobV9wbGF0Zm9ybUN1cnNvciB8fCBt
X3R5cGUgPT0gQ3Vyc29yOjpQb2ludGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2gg
KG1fdHlwZSkgeworICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgorICAgICAgICAvLyBBIG51bGwg
R2RrQ3Vyc29yIGlzIHRoZSBkZWZhdWx0IGN1cnNvciBmb3IgdGhlIHdpbmRvdy4KKyAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpD
cm9zczoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfQ1JPU1MpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkhhbmQ6Cisg
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0hB
TkQyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpJQmVhbToKKyAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfWFRFUk0pKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OldhaXQ6CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1dBVENIKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19RVUVTVElPTl9BUlJPVykpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICBjYXNlIEN1cnNvcjo6TWlkZGxl
UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29y
X25ldyhHREtfRkxFVVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkVhc3RS
ZXNpemU6CisgICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19SSUdIVF9TSURFKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFJlc2l6ZToKKyAgICBjYXNlIEN1cnNv
cjo6Tm9ydGhQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdk
a19jdXJzb3JfbmV3KEdES19UT1BfU0lERSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1
cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RQYW5uaW5n
OgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdE
S19UT1BfUklHSFRfQ09STkVSKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aFdlc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmc6CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9M
RUZUX0NPUk5FUikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6U291dGhSZXNp
emU6CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoUGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1NJREUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZToKKyAgICBjYXNlIEN1
cnNvcjo6U291dGhFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0
R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1JJR0hUX0NPUk5FUikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29y
OjpTb3V0aFdlc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVm
KGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fTEVGVF9DT1JORVIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lERSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1RFRSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNpemU6CisgICAgY2FzZSBDdXJz
b3I6Oldlc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdk
a19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
dXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZToKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhX
ZXN0U291dGhFYXN0UmVzaXplOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVm
KGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
dXJzb3I6OkNvbHVtblJlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfU0JfSF9ET1VCTEVfQVJST1cpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfVl9ET1VCTEVfQVJST1cpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4dDoKKyAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclZlcnRpY2FsVGV4dCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgorICAgICAgICBtX3BsYXRm
b3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19QTFVTKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckNvbnRleHRNZW51KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yQWxpYXMpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JQcm9ncmVzcyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ3Vyc29yOjpOb0Ryb3A6CisgICAgY2FzZSBDdXJzb3I6Ok5vdEFsbG93
ZWQ6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21D
dXJzb3JOb0Ryb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q29weToKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckNv
cHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9uZToKKyAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvck5vbmUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Wm9vbUluOgorICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yWm9vbUluKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Olpvb21PdXQ6CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3Jab29tT3V0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDdXJzb3I6OkdyYWI6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBj
cmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JHcmFiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDdXJzb3I6OkdyYWJiaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRl
TmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYmJpbmcpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlQ3Vz
dG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1fdHlw
ZShvdGhlci5tX3R5cGUpCisgICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2UpCisgICAgLCBtX2hv
dFNwb3Qob3RoZXIubV9ob3RTcG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcihvdGhlci5tX3Bs
YXRmb3JtQ3Vyc29yKQoreworfQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1
cnNvciYgb3RoZXIpCit7CisgICAgbV90eXBlID0gb3RoZXIubV90eXBlOworICAgIG1faW1hZ2Ug
PSBvdGhlci5tX2ltYWdlOworICAgIG1faG90U3BvdCA9IG90aGVyLm1faG90U3BvdDsKKyAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0
ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU2ODkxOWJhMzM1YTJhZTU0ZjI4YTQ2MTkwNTgzYjNhNGJhMjQ2NjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oCkBAIC0w
LDAgKzEsMzgzIEBACisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJz
aW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24K
KyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgor
ICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUK
KyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29k
ZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMK
KyAqIFRpbSBDb3BwZXJmaWVsZC4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwg
RGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEKKyAqIHRoZSBJbml0aWFsIERldmVsb3Bl
ci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqICAgVGlt
IENvcHBlcmZpZWxkIDx0aW1lY29wQG5ldHdvcmsuZW1haWwubmUuanA+CisgKiAgIENocmlzdGlh
biBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgor
ICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0
ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2Ug
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0
ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0
aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGlj
YXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICog
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhl
IEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LworCisjaWZuZGVmIEN1cnNvckd0a19oCisjZGVmaW5lIEN1cnNvckd0a19oCisKKyNpbmNsdWRl
ICJDdXJzb3IuaCIKKworLyoKKyBUaGVzZSBjdXJzb3JzIGFyZSBjb3BpZWQgZnJvbSBNb3ppbGxh
IGNvZGU6CisgIGh0dHA6Ly9seHIubW96aWxsYS5vcmcvbW96aWxsYTEuOC9zb3VyY2Uvd2lkZ2V0
L3NyYy9ndGsyL25zR3RrQ3Vyc29ycy5oCisqLworCisvKiBNT1pfQ1VSU09SX1ZFUlRJQ0FMX1RF
WFQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel92ZXJ0aWNhbF90ZXh0X2JpdHNb
XSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwg
MHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwKKyAgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwgMHhmYywg
MHgzZiwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwKKyAgMHgwMiwgMHg0MCwg
MHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4
dF9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwg
MHgwMCwgMHgwMCwgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwKKyAgMHhmZiwgMHhmZiwgMHgwMCwg
MHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKKyAg
MHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhl
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0NPTlRFWFRfTUVOVSAqLwor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X21lbnVfYml0c1tdID0geworICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAw
LCAweDAwLAorICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAw
LCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZj
LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGZkLCAweDAwLCAweDAwLAorICAweGZjLCAweGZm
LCAweDAwLCAweDAwLCAweDdjLCAweDg0LCAweDAwLCAweDAwLCAweDZjLCAweGZjLCAweDAwLCAw
eDAwLAorICAweGM0LCAweDg0LCAweDAwLCAweDAwLCAweGMwLCAweGZjLCAweDAwLCAweDAwLCAw
eDgwLCAweDg1LCAweDAwLCAweDAwLAorICAweDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X21hc2tfYml0c1tdID0geworICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAw
eDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAorICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAw
eGZlLCAweGZkLCAweDAwLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLAorICAweGZlLCAw
eGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZlLCAweDAx
LCAweDAwLAorICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAxLCAweDAw
LCAweGMwLCAweGZmLCAweDAxLCAweDAwLAorICAweGMwLCAweGZmLCAweDAxLCAweDAwLCAweDgw
LCAweGZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisK
Ky8qIE1PWl9DVVJTT1JfQ09QWSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2Nv
cHlfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAweDBjLCAweDAwLCAweDAwLCAweDAw
LCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAweDdj
LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAw
eDAwLCAweDAwLAorICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAweDMwLCAweDAwLCAw
eDAwLCAweDZjLCAweDMwLCAweDAwLCAweDAwLAorICAweGM0LCAweGZjLCAweDAwLCAweDAwLCAw
eGMwLCAweGZjLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLAorICAweDgwLCAw
eDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5
X21hc2tfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAw
eDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAorICAweDFlLCAweDAwLCAweDAwLCAw
eDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAorICAw
eGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAweDAz
LCAweDAwLCAweDAwLAorICAweGZlLCAweDM3LCAweDAwLCAweDAwLCAweGZlLCAweDdiLCAweDAw
LCAweDAwLCAweGZlLCAweGZjLCAweDAwLCAweDAwLAorICAweGVlLCAweGZmLCAweDAxLCAweDAw
LCAweGU0LCAweGZmLCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLAorICAweGMw
LCAweDdiLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfQUxJQVMgKi8KK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9hbGlhc19iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2Ms
IDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCisgIDB4ZmMsIDB4MDMsIDB4MDAs
IDB4MDAsIDB4N2MsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZTAsIDB4MDAsIDB4MDAsCisg
IDB4YzQsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4
MTksIDB4MDAsIDB4MDAsCisgIDB4ODAsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgbW96X2FsaWFzX21hc2tfYml0c1tdID0geworICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAw
eDdlLCAweDAwLCAweDAwLCAweDAwLAorICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAw
eDAxLCAweDAwLCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAweDAwLAorICAweGZlLCAweGY3LCAw
eDAwLCAweDAwLCAweGZlLCAweGZiLCAweDAxLCAweDAwLCAweGZlLCAweGYwLCAweDAxLCAweDAw
LAorICAweGVlLCAweGY5LCAweDAxLCAweDAwLCAweGU0LCAweGY5LCAweDAxLCAweDAwLCAweGMw
LCAweGJmLCAweDAwLCAweDAwLAorICAweGMwLCAweDNmLCAweDAwLCAweDAwLCAweDgwLCAweDE5
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1P
Wl9DVVJTT1JfWk9PTV9JTiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21f
aW5fYml0c1tdID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAw
LCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAorICAweDYyLCAweDA0LCAweDAwLCAweDAw
LCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAweDAwLCAweDAwLAorICAweGY5
LCAweDA5LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweDYyLCAweDA0LCAw
eDAwLCAweDAwLAorICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAwLCAw
eDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAw
eDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29t
X2luX21hc2tfYml0c1tdID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAz
LCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAorICAweGZlLCAweDA3LCAweDAw
LCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLAor
ICAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAw
eDA3LCAweDAwLCAweDAwLAorICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAw
eDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAweDAwLCAw
eDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfWk9PTV9PVVQgKi8KK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9iaXRzW10gPSB7CisgIDB4ZjAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4
MDAsIDB4MDAsCisgIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDAsIDB4
MDAsIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsCisgIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsIDB4
MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsCisgIDB4MDIsIDB4
MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0X21hc2tfYml0c1tdID0gewor
ICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweGZlLCAw
eDA3LCAweDAwLCAweDAwLAorICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAw
eDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLAorICAweGZmLCAweDBmLCAweDAwLCAw
eDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAorICAw
eGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFj
LCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAw
LCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAorICAweDAwLCAweDQwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
IH07CisKKy8qIE1PWl9DVVJTT1JfTk9UX0FMTE9XRUQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCisgIDB4
ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAs
IDB4MDMsIDB4MDAsCisgIDB4ZWMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDcs
IDB4MDAsIDB4ODYsIDB4MDMsIDB4MDYsIDB4MDAsCisgIDB4MDYsIDB4MDcsIDB4MDYsIDB4MDAs
IDB4MDYsIDB4MGUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MWMsIDB4MDYsIDB4MDAsCisgIDB4MGUs
IDB4MzgsIDB4MDcsIDB4MDAsIDB4MGMsIDB4NzAsIDB4MDMsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4
MDMsIDB4MDAsCisgIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4MDAsIDB4
MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCisgIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgbW96X25vdF9hbGxvd2VkX21hc2tfYml0c1tdID0geworICAweDgwLCAweDFm
LCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAw
eDAwLAorICAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGZjLCAweGYwLCAweDAzLCAweDAwLCAw
eGZlLCAweGMwLCAweDA3LCAweDAwLAorICAweGZlLCAweDgxLCAweDA3LCAweDAwLCAweGZmLCAw
eDgzLCAweDBmLCAweDAwLCAweGNmLCAweDA3LCAweDBmLCAweDAwLAorICAweDhmLCAweDBmLCAw
eDBmLCAweDAwLCAweDBmLCAweDFmLCAweDBmLCAweDAwLCAweDBmLCAweDNlLCAweDBmLCAweDAw
LAorICAweDFmLCAweGZjLCAweDBmLCAweDAwLCAweDFlLCAweGY4LCAweDA3LCAweDAwLCAweDNl
LCAweGYwLCAweDA3LCAweDAwLAorICAweGZjLCAweGYwLCAweDAzLCAweDAwLCAweGY4LCAweGZm
LCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDAwLAorICAweGUwLCAweDdmLCAweDAw
LCAweDAwLCAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1P
Wl9DVVJTT1JfU1BJTk5JTkcgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlu
bmluZ19iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MGMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEs
IDB4MDAsIDB4MDAsCisgIDB4ZmMsIDB4M2IsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MzgsIDB4MDAs
IDB4MDAsIDB4NmMsIDB4NTQsIDB4MDAsIDB4MDAsCisgIDB4YzQsIDB4ZGMsIDB4MDAsIDB4MDAs
IDB4YzAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzksIDB4MDAsIDB4MDAsCisgIDB4ODAs
IDB4MzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3Nw
aW5uaW5nX21hc2tfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAw
eDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAorICAweDFlLCAweDAwLCAw
eDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAw
LAorICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZl
LCAweDNiLCAweDAwLCAweDAwLAorICAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweGZlLCAweDdm
LCAweDAwLCAweDAwLCAweGZlLCAweGZlLCAweDAwLCAweDAwLAorICAweGVlLCAweGZmLCAweDAx
LCAweDAwLCAweGU0LCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweDdmLCAweDAwLCAweDAwLAor
ICAweGMwLCAweDdmLCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfTk9ORSAqLworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X25vbmVfYml0c1tdID0geworICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX21hc2tfYml0c1tdID0geworICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8q
IE1PWl9DVVJTT1JfSEFORF9HUkFCICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pf
aGFuZF9ncmFiX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKyAgMHg2MCwgMHgzOSwgMHgw
MCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMSwgMHgwMCwK
KyAgMHgyMCwgMHhjOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0OSwgMHgwMiwgMHgwMCwgMHg1OCwg
MHg0MCwgMHgwMiwgMHgwMCwKKyAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHgwMCwg
MHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKKyAgMHgxMCwgMHgwMCwgMHgwMSwg
MHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKKyAg
MHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBt
b3pfaGFuZF9ncmFiX21hc2tfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDA2LCAweDAwLCAweDAwLCAweDYwLCAweDNmLCAweDAwLCAweDAwLAorICAweGYwLCAw
eDdmLCAweDAwLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGY4LCAweGZmLCAweDAz
LCAweDAwLAorICAweGYwLCAweGZmLCAweDA3LCAweDAwLCAweGY4LCAweGZmLCAweDA3LCAweDAw
LCAweGZjLCAweGZmLCAweDA3LCAweDAwLAorICAweGZlLCAweGZmLCAweDA3LCAweDAwLCAweGZl
LCAweGZmLCAweDAzLCAweDAwLCAweGZjLCAweGZmLCAweDAzLCAweDAwLAorICAweGY4LCAweGZm
LCAweDAzLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAxLCAw
eDAwLAorICAweGUwLCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLCAw
eGMwLCAweGZmLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfSEFORF9H
UkFCQklORyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdf
Yml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweGMwLCAw
eDM2LCAweDAwLCAweDAwLCAweDIwLCAweGM5LCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAx
LCAweDAwLAorICAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAxLCAweDAw
LCAweDEwLCAweDAwLCAweDAxLCAweDAwLAorICAweDEwLCAweDAwLCAweDAxLCAweDAwLCAweDEw
LCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAwLAorICAweDQwLCAweDQw
LCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCAgdW5zaWduZWQgY2hhciBtb3pfaGFuZF9n
cmFiYmluZ19tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgzNiwgMHgwMCwgMHgw
MCwKKyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhm
MCwgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmMCwgMHhm
ZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhmOCwgMHhmZiwgMHgw
MywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwK
KyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwg
MHg3ZiwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitlbnVtIEN1c3RvbUN1cnNvclR5cGUgewor
ICAgIEN1c3RvbUN1cnNvckNvcHkgPSAwLAorICAgIEN1c3RvbUN1cnNvckFsaWFzLAorICAgIEN1
c3RvbUN1cnNvckNvbnRleHRNZW51LAorICAgIEN1c3RvbUN1cnNvclpvb21JbiwKKyAgICBDdXN0
b21DdXJzb3Jab29tT3V0LAorICAgIEN1c3RvbUN1cnNvclZlcnRpY2FsVGV4dCwKKyAgICBDdXN0
b21DdXJzb3JOb0Ryb3AsCisgICAgQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3MsCisgICAgQ3VzdG9tQ3Vy
c29yTm9uZSwKKyAgICBDdXN0b21DdXJzb3JHcmFiLAorICAgIEN1c3RvbUN1cnNvckdyYWJiaW5n
LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgY29u
c3QgdW5zaWduZWQgY2hhciogYml0czsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtYXNrX2Jp
dHM7CisgICAgaW50IGhvdF94OworICAgIGludCBob3RfeTsKK30gQ3VzdG9tQ3Vyc29yOworCisv
LyBjcmVhdGUgY3VzdG9tIHBpeG1hcCBjdXJzb3IgZnJvbSBjdXJzb3JzIGluIG5zR1RLQ3Vyc29y
RGF0YS5oCitzdGF0aWMgY29uc3QgQ3VzdG9tQ3Vyc29yIEN1c3RvbUN1cnNvcnNbXSA9IHsKKyAg
ICB7ICJjb3B5IiwgbW96X2NvcHlfYml0cywgbW96X2NvcHlfbWFza19iaXRzLCAyLCAyIH0sCisg
ICAgeyAiYWxpYXMiLCBtb3pfYWxpYXNfYml0cywgbW96X2FsaWFzX21hc2tfYml0cywgMiwgMiB9
LAorICAgIHsgImNvbnRleHQtbWVudSIsIG1vel9tZW51X2JpdHMsIG1vel9tZW51X21hc2tfYml0
cywgMiwgMiB9LAorICAgIHsgInpvb20taW4iLCBtb3pfem9vbV9pbl9iaXRzLCBtb3pfem9vbV9p
bl9tYXNrX2JpdHMsIDYsIDYgfSwKKyAgICB7ICJ6b29tLW91dCIsIG1vel96b29tX291dF9iaXRz
LCBtb3pfem9vbV9vdXRfbWFza19iaXRzLCA2LCA2IH0sCisgICAgeyAidmVydGljYWwtdGV4dCIs
IG1vel92ZXJ0aWNhbF90ZXh0X2JpdHMsIG1vel92ZXJ0aWNhbF90ZXh0X21hc2tfYml0cywgOCwg
NCB9LAorICAgIHsgImRuZC1uby1kcm9wIiwgbW96X25vdF9hbGxvd2VkX2JpdHMsIG1vel9ub3Rf
YWxsb3dlZF9tYXNrX2JpdHMsIDksICA5IH0sCisgICAgeyAibGVmdF9wdHJfd2F0Y2giLCBtb3pf
c3Bpbm5pbmdfYml0cywgbW96X3NwaW5uaW5nX21hc2tfYml0cywgMiwgIDJ9LAorICAgIHsgIm5v
bmUiLCBtb3pfbm9uZV9iaXRzLCBtb3pfbm9uZV9tYXNrX2JpdHMsIDAsIDAgfSwKKyAgICB7ICJn
cmFiIiwgbW96X2hhbmRfZ3JhYl9iaXRzLCBtb3pfaGFuZF9ncmFiX21hc2tfYml0cywgMTAsIDEw
IH0sCisgICAgeyAiZ3JhYmJpbmciLCBtb3pfaGFuZF9ncmFiYmluZ19iaXRzLCBtb3pfaGFuZF9n
cmFiYmluZ19tYXNrX2JpdHMsIDEwLCAxMCB9Cit9OworCisjZW5kaWYgLy8gQ3Vyc29yR3RrX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgxODc3MWM4Mjk5ZDAxMTU0OTVl
ZmNjYzUwMTEyYWNkODRlZDc2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvRHJhZ0ljb24uY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEcmFnSWNvbi5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCitzdGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhH
dGtXaWRnZXQqLCBHZGtFdmVudEV4cG9zZSogZXZlbnQsIERyYWdJY29uKiBpY29uKQoreworICAg
IFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShldmVu
dC0+d2luZG93KSk7CisgICAgaWNvbi0+ZHJhdyhjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
VFJVRTsKK30KKyNlbHNlCitzdGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRD
YWxsYmFjayhHdGtXaWRnZXQqLCBjYWlyb190KiBjb250ZXh0LCBEcmFnSWNvbiogaWNvbikKK3sK
KyAgICBpZiAoIWdka19jYWlyb19nZXRfY2xpcF9yZWN0YW5nbGUoY29udGV4dCwgMCkpCisgICAg
ICAgIHJldHVybiBGQUxTRTsKKyAgICBpY29uLT5kcmF3KGNvbnRleHQpOworICAgIHJldHVybiBU
UlVFOworfQorI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKK0RyYWdJY29uOjpEcmFnSWNv
bigpCisgICAgOiBpc0NvbXBvc2l0ZWQoZ2RrX3NjcmVlbl9pc19jb21wb3NpdGVkKGdka19zY3Jl
ZW5fZ2V0X2RlZmF1bHQoKSkpCisgICAgLCBtX3dpbmRvdygwKQoreworICAgIGlmICghaXNDb21w
b3NpdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dpbmRvdywgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0soZHJhZ0ljb25X
aW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOworI2Vsc2UKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2luZG93LCAiZHJhdyIsIEdfQ0FMTEJBQ0soZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRD
YWxsYmFjayksIHRoaXMpOworI2VuZGlmCisKKyAgICAvLyBUaGlzIHN0cmF0ZWd5IG9yaWdpbmFs
bHkgY29tZXMgZnJvbSBDaHJvbWl1bTogc3JjL2Nocm9tZS9icm93c2VyL2d0ay90YWJfY29udGVu
dHNfZHJhZ19zb3VyY2UuY2MKKyAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0
X3NjcmVlbihtX3dpbmRvdyk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtDb2xv
cm1hcCogcmdiYSA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAoc2NyZWVuKTsKKyAgICBp
ZiAocmdiYSkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfY29sb3JtYXAobV93aW5kb3csIHJnYmEp
OworI2Vsc2UKKyAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfdmlz
dWFsKHNjcmVlbik7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHZpc3VhbCA9IGdka19zY3Jl
ZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKTsKKyAgICBndGtfd2lkZ2V0X3NldF92aXN1YWwo
bV93aW5kb3csIHZpc3VhbCk7CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKK30KKworRHJh
Z0ljb246On5EcmFnSWNvbigpCit7CisgICAgaWYgKG1fd2luZG93KQorICAgICAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kobV93aW5kb3cpOworfQorCit2b2lkIERyYWdJY29uOjpkcmF3KGNhaXJvX3Qq
IGNvbnRleHQpCit7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQsIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1hZ2UuZ2V0KCkp
LAorICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9p
bWFnZS5nZXQoKSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LCBDQUlST19PUEVS
QVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LCBtX2lt
YWdlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19maWxsKGNvbnRleHQpOworfQorCit2b2lkIERy
YWdJY29uOjpzZXRJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdlKQoreworICAgIEFTU0VSVChp
bWFnZSk7CisgICAgbV9pbWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VTaXplID0gSW50U2l6ZShj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChpbWFnZSkpOworICAgIGlmIChpc0NvbXBvc2l0ZWQpIHsKKyAgICAgICAgZ3Rr
X3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dpbmRvdyksIG1faW1hZ2VTaXplLndpZHRoKCks
IG1faW1hZ2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCisgICAgbV9waXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1
cmZhY2VUb0dka1BpeGJ1ZihpbWFnZSkpOworI2VuZGlmCit9CisKK3ZvaWQgRHJhZ0ljb246OnVz
ZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSW50UG9pbnQgaG90c3Bv
dChtX2ltYWdlU2l6ZSk7CisgICAgaG90c3BvdC5zY2FsZSgwLjUsIDAuNSk7CisgICAgdXNlRm9y
RHJhZyhjb250ZXh0LCBob3RzcG90KTsKK30KKwordm9pZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhH
ZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpCit7CisgICAg
aWYgKGlzQ29tcG9zaXRlZCkgeworICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl93aWRnZXQoY29u
dGV4dCwgbV93aW5kb3csIGhvdHNwb3QueCgpLCBob3RzcG90LnkoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfZHJhZ19zZXRfaWNv
bl9waXhidWYoY29udGV4dCwgbV9waXhidWYuZ2V0KCksIGhvdHNwb3QueCgpLCBob3RzcG90Lnko
KSk7CisjZWxzZQorICAgIGd0a19kcmFnX3NldF9pY29uX3N1cmZhY2UoY29udGV4dCwgbV9pbWFn
ZS5nZXQoKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9E
cmFnSWNvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZTQzNWRjYmRhMjBlMmVkZDdiZmMyNmY3YjBmZjA5YTI4
Yjg4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmgK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERyYWdJY29uX2gKKyNkZWZpbmUgRHJhZ0ljb25faAorCisjaW5j
bHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxSZWZQdHJDYWlyby5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEcmFn
SWNvbiB7CitwdWJsaWM6CisgICAgRHJhZ0ljb24oKTsKKyAgICB2aXJ0dWFsIH5EcmFnSWNvbigp
OworCisgICAgdm9pZCBkcmF3KGNhaXJvX3QqKTsKKyAgICB2b2lkIHNldEltYWdlKGNhaXJvX3N1
cmZhY2VfdCopOworICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCopOworICAgIHZv
aWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBvaW50JiBob3RzcG90KTsK
KworcHJpdmF0ZToKKyAgICBib29sIGlzQ29tcG9zaXRlZDsKKyAgICBHdGtXaWRnZXQqIG1fd2lu
ZG93OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2U7CisgICAgSW50U2l6ZSBt
X2ltYWdlU2l6ZTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdSZWZQdHI8R2RrUGl4
YnVmPiBtX3BpeGJ1ZjsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYgLy8gRHJhZ0ljb25faApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlZjdiNWNiNzdiOTQ0
ZmJlMDU4MTg0Zjg2MTQ0MDUyYWU2YTUyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RXZlbnRMb29wLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBnX21haW5fY29udGV4dF9pdGVyYXRp
b24oTlVMTCwgRkFMU0UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9GaWxlU3lzdGVtR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTIwNzI5NmM2YTZjYjQ2NjI4Zjc3
MDk2MzRlMjRlNzJmODg3YzlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9GaWxlU3lzdGVtR3RrLmNwcApAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5o
IgorI2luY2x1ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HbGliVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8qIE9uIGxpbnV4IGZpbGUgbmFtZXMgYXJlIGp1c3QgcmF3IGJ5dGVzLCBzbyBhbHNvIHN0cmlu
Z3MgdGhhdCBjYW5ub3QgYmUgZW5jb2RlZCBpbiBhbnkgd2F5CisgKiBhcmUgdmFsaWQgZmlsZSBu
YW1lcy4gVGhpcyBtZWFuIHRoYXQgd2UgY2Fubm90IGp1c3Qgc3RvcmUgYSBmaWxlIG5hbWUgYXMt
aXMgaW4gYSBTdHJpbmcKKyAqIGJ1dCB3ZSBoYXZlIHRvIGVzY2FwZSBpdC4KKyAqIE9uIFdpbmRv
d3MgdGhlIEdMaWIgZmlsZSBuYW1lIGVuY29kaW5nIGlzIGFsd2F5cyBVVEYtOCBzbyB3ZSBjYW4g
b3B0aW1pemUgdGhpcyBjYXNlLiAqLworU3RyaW5nIGZpbGVuYW1lVG9TdHJpbmcoY29uc3QgY2hh
ciogZmlsZW5hbWUpCit7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChmaWxl
bmFtZSk7CisjZWxzZQorICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWRTdHJpbmcoZ191cmlfZXNj
YXBlX3N0cmluZyhmaWxlbmFtZSwgIi86IiwgZmFsc2UpKTsKKyAgICByZXR1cm4gZXNjYXBlZFN0
cmluZy5nZXQoKTsKKyNlbmRpZgorfQorCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmIHBhdGgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gcGF0
aC51dGY4KCk7CisjZWxzZQorICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1lKGdfdXJpX3VuZXNj
YXBlX3N0cmluZyhwYXRoLnV0ZjgoKS5kYXRhKCksIDApKTsKKyAgICByZXR1cm4gZmlsZW5hbWUu
Z2V0KCk7CisjZW5kaWYKK30KKworLy8gQ29udmVydHMgYSBzdHJpbmcgdG8gc29tZXRoaW5nIHN1
aXRhYmxlIHRvIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlci4KK1N0cmluZyBmaWxlbmFtZUZvckRp
c3BsYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1
cm4gc3RyaW5nOworI2Vsc2UKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHN0cmluZyk7CisgICAgR093blB0cjxnY2hhcj4gZGlzcGxheShnX2ZpbGVuYW1l
X3RvX3V0ZjgoZmlsZW5hbWUuZGF0YSgpLCAwLCAwLCAwLCAwKSk7CisgICAgaWYgKCFkaXNwbGF5
KQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
ZGlzcGxheS5nZXQoKSk7CisjZW5kaWYKK30KKworYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1l
LmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCks
IEdfRklMRV9URVNUX0VYSVNUUyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRl
bGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
KworICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9IGdfcmVtb3Zl
KGZpbGVuYW1lLmRhdGEoKSkgPT0gMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wg
ZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihwYXRoKTsKKworICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3Vs
dCA9IGdfcm1kaXIoZmlsZW5hbWUuZGF0YSgpKSA9PSAwOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVz
dWx0U2l6ZSkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3Rh
dChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdFNpemUgPSBzdGF0UmVzdWx0LnN0X3Np
emU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUo
Y29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIG1vZGlmaWVkVGltZSkKK3sKKyAgICBDU3RyaW5n
IGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxl
bmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1N0YXRCdWYgc3Rh
dFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCksICZzdGF0
UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1vZGlmaWVkVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CisgICAgcmV0dXJuIHRydWU7
CisKK30KKworYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0
YWRhdGEmIG1ldGFkYXRhKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVz
dWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1
bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRp
bWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOworICAgIG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRSZXN1
bHQuc3Rfc2l6ZTsKKyAgICBtZXRhZGF0YS50eXBlID0gU19JU0RJUihzdGF0UmVzdWx0LnN0X21v
ZGUpID8gRmlsZU1ldGFkYXRhOjpUeXBlRGlyZWN0b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBlRmls
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKKworfQorCitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAg
aWYgKHBhdGguZW5kc1dpdGgoR19ESVJfU0VQQVJBVE9SX1MpKQorICAgICAgICByZXR1cm4gcGF0
aCArIGNvbXBvbmVudDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBwYXRoICsgR19ESVJfU0VQ
QVJBVE9SX1MgKyBjb21wb25lbnQ7Cit9CisKK2Jvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZ2ludCByZXN1bHQgPSBnX21rZGlyX3dpdGhfcGFyZW50cyhmaWxl
bmFtZS5kYXRhKCksIFNfSVJXWFUpOworCisgICAgcmV0dXJuIHJlc3VsdCA9PSAwOworfQorCitT
dHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5n
KGdfZ2V0X2hvbWVfZGlyKCkpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0
cmluZyYgcGF0aE5hbWUpCit7CisgICAgaWYgKHBhdGhOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHBhdGhOYW1lOworCisgICAgQ1N0cmluZyB0bXBGaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoTmFtZSk7CisgICAgR093blB0cjxnY2hhcj4gYmFzZU5hbWUoZ19w
YXRoX2dldF9iYXNlbmFtZSh0bXBGaWxlbmFtZS5kYXRhKCkpKTsKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChiYXNlTmFtZS5nZXQoKSk7Cit9CisKK0NTdHJpbmcgYXBwbGljYXRpb25EaXJl
Y3RvcnlQYXRoKCkKK3sKKyAgICBDU3RyaW5nIHBhdGggPSBnZXRDdXJyZW50RXhlY3V0YWJsZVBh
dGgoKTsKKyAgICBpZiAoIXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwYXRoOworCisg
ICAgLy8gSWYgdGhlIGFib3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUuCisg
ICAgR093blB0cjxjaGFyPiBjdXJyZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKGdf
Z2V0X3ByZ25hbWUoKSkpOworICAgIGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAgICAg
IHJldHVybiBDU3RyaW5nKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dl
dF9kaXJuYW1lKGN1cnJlbnRFeGVQYXRoLmdldCgpKSk7CisgICAgcmV0dXJuIGRpcm5hbWUuZ2V0
KCk7Cit9CisKK0NTdHJpbmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpCit7CisgICAgc3RhdGljIENT
dHJpbmcgY2FjaGVkUGF0aDsKKyAgICBpZiAoIWNhY2hlZFBhdGguaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBjYWNoZWRQYXRoOworCisjaWYgT1MoV0lORE9XUykKKyAgICBITU9EVUxFIGhtb2R1
bGUgPSAwOworICAgIEdldE1vZHVsZUhhbmRsZUV4QShHRVRfTU9EVUxFX0hBTkRMRV9FWF9GTEFH
X0ZST01fQUREUkVTUywgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2hhcmVkUmVzb3VyY2VzUGF0
aCksICZobW9kdWxlKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IHJ1bnRpbWVEaXIoZ193aW4zMl9n
ZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fZGlyZWN0b3J5X29mX21vZHVsZShobW9kdWxlKSk7Cisg
ICAgR093blB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShydW50aW1lRGlyLmdl
dCgpLCAic2hhcmUiLCAid2Via2l0Z3RrLSJXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBO
VUxMKSk7CisjZWxzZQorICAgIEdPd25QdHI8Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRfZmlsZW5h
bWUoREFUQV9ESVIsICJ3ZWJraXRndGstIldFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkcsIE5V
TEwpKTsKKyNlbmRpZgorCisgICAgY2FjaGVkUGF0aCA9IGRhdGFQYXRoLmdldCgpOworICAgIHJl
dHVybiBjYWNoZWRQYXRoOworfQorCit1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgo
Y29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVm
KGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aCkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxl
SW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCks
IEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9GUkVFLCAwLCAwKSk7CisgICAgaWYgKCFmaWxl
SW5mbykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ19maWxlX2luZm9fZ2V0X2F0
dHJpYnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RF
TV9GUkVFKTsKK30KKworU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIC8qIE5vIG51bGwgY2hlY2tpbmcgbmVlZGVkICovCisgICAgR093blB0cjxjaGFyPiBk
aXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCku
ZGF0YSgpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlybmFtZS5nZXQoKSk7Cit9
CisKK1ZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTdHJpbmcmIGZpbHRlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworCisgICAg
Q1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBH
RGlyKiBkaXIgPSBnX2Rpcl9vcGVuKGZpbGVuYW1lLmRhdGEoKSwgMCwgMCk7CisgICAgaWYgKCFk
aXIpCisgICAgICAgIHJldHVybiBlbnRyaWVzOworCisgICAgR1BhdHRlcm5TcGVjICpwc3BlYyA9
IGdfcGF0dGVybl9zcGVjX25ldygoZmlsdGVyLnV0ZjgoKSkuZGF0YSgpKTsKKyAgICB3aGlsZSAo
Y29uc3QgY2hhciogbmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSB7CisgICAgICAgIGlmICgh
Z19wYXR0ZXJuX21hdGNoX3N0cmluZyhwc3BlYywgbmFtZSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBHT3duUHRyPGdjaGFyPiBlbnRyeShnX2J1aWxkX2ZpbGVuYW1lKGZpbGVu
YW1lLmRhdGEoKSwgbmFtZSwgTlVMTCkpOworICAgICAgICBlbnRyaWVzLmFwcGVuZChmaWxlbmFt
ZVRvU3RyaW5nKGVudHJ5LmdldCgpKSk7CisgICAgfQorICAgIGdfcGF0dGVybl9zcGVjX2ZyZWUo
cHNwZWMpOworICAgIGdfZGlyX2Nsb3NlKGRpcik7CisKKyAgICByZXR1cm4gZW50cmllczsKK30K
KworU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9y
bUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX3N0
cmR1cF9wcmludGYoIiVzJXMiLCBwcmVmaXgudXRmOCgpLmRhdGEoKSwgY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3duUHRyPGdjaGFyPiB0ZW1wUGF0
aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgZmlsZW5hbWUuZ2V0KCksIE5VTEwp
KTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgodGVtcFBhdGguZ2V0KCkpKTsKKworICAgIGhhbmRsZSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdy
aXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCh0ZW1wUGF0aC5nZXQoKSk7Cit9CisKK1BsYXRmb3JtRmlsZUhhbmRs
ZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQoreworICAg
IENTdHJpbmcgZnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYg
KGZzUmVwLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZTsKKworICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3Jf
cGF0aChmc1JlcC5kYXRhKCkpKTsKKyAgICBHRmlsZUlPU3RyZWFtKiBpb1N0cmVhbSA9IDA7Cisg
ICAgaWYgKG1vZGUgPT0gT3BlbkZvclJlYWQpCisgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29w
ZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgIGVsc2UgaWYgKG1vZGUgPT0gT3Bl
bkZvcldyaXRlKSB7CisgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmc1JlcC5kYXRhKCksIHN0YXRp
Y19jYXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVH
VUxBUikpKQorICAgICAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmls
ZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlvU3RyZWFtID0gZ19m
aWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAw
KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW9TdHJlYW07Cit9CisKK3ZvaWQgY2xvc2VGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5k
bGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVB
TShoYW5kbGUpLCAwLCAwKTsKKyAgICBnX29iamVjdF91bnJlZihoYW5kbGUpOworICAgIGhhbmRs
ZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7Cit9CisKK2xvbmcgbG9uZyBzZWVrRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdp
biBvcmlnaW4pCit7CisgICAgR1NlZWtUeXBlIHNlZWtUeXBlID0gR19TRUVLX1NFVDsKKyAgICBz
d2l0Y2ggKG9yaWdpbikgeworICAgIGNhc2UgU2Vla0Zyb21CZWdpbm5pbmc6CisgICAgICAgIHNl
ZWtUeXBlID0gR19TRUVLX1NFVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZWVrRnJvbUN1
cnJlbnQ6CisgICAgICAgIHNlZWtUeXBlID0gR19TRUVLX0NVUjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTZWVrRnJvbUVuZDoKKyAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfRU5EOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBpZiAoIWdfc2Vla2FibGVfc2VlayhHX1NFRUtBQkxFKGdfaW9fc3RyZWFt
X2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCwgc2Vla1R5cGUsIDAsIDApKQorICAgICAgICByZXR1cm4gLTE7Cisg
ICAgcmV0dXJuIGdfc2Vla2FibGVfdGVsbChHX1NFRUtBQkxFKGdfaW9fc3RyZWFtX2dldF9pbnB1
dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSkpKTsKK30KKworaW50IHdyaXRlVG9GaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7
CisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGwo
Z19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBsZW5ndGgsICZieXRlc1dyaXR0ZW4sIDAs
IDApOworICAgIHJldHVybiBieXRlc1dyaXR0ZW47Cit9CisKK2ludCByZWFkRnJvbUZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZG8geworICAgICAgICBnc3NpemUgYnl0ZXNSZWFk
ID0gZ19pbnB1dF9zdHJlYW1fcmVhZChnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9f
U1RSRUFNKGhhbmRsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLCBsZW5ndGgsIDAsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChi
eXRlc1JlYWQgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBieXRlc1JlYWQ7CisgICAgfSB3aGls
ZSAoZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR19GSUxFX0VSUk9SX0lOVFIpOworICAgIHJldHVy
biAtMTsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQorewor
I2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIDo6RnJlZUxpYnJhcnkobW9kdWxlKTsKKyNlbHNl
CisgICAgcmV0dXJuIGdfbW9kdWxlX2Nsb3NlKG1vZHVsZSk7CisjZW5kaWYKK30KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0dPd25QdHJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliNjkzZjQxNWU5NzgyNDdmZDNjOTM4
NGQ0ZWQyNTFlZTA0OWI4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0dPd25QdHJHdGsuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRy
PEdka0V2ZW50PihHZGtFdmVudCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdka19l
dmVudF9mcmVlKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHdGtJ
Y29uSW5mbz4oR3RrSWNvbkluZm8qIGluZm8pCit7CisgICAgaWYgKGluZm8pCisgICAgICAgIGd0
a19pY29uX2luZm9fZnJlZShpbmZvKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9HT3duUHRyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iZDVlODM3MWVkMzY4ZjQxNWQ4OTc0MzI0ZWU2MmQ3MWZlYjdhMmQ3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmgKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBHT3duUHRyR3RrX2gKKyNkZWZpbmUgR093blB0ckd0a19oCisKKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8
PiB2b2lkIGZyZWVPd25lZEdQdHI8R2RrRXZlbnQ+KEdka0V2ZW50Kik7Cit0ZW1wbGF0ZSA8PiB2
b2lkIGZyZWVPd25lZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25JbmZvKik7CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTUwNmRmOTAwN2Qy
NGNjMDc2Nzc2OGRlZmQxMDU2NjJmYzM5YjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0
aW4gUm9iaW5zb24KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisKKyNkZWZpbmUgU0VDUkVUX1dJVEhf
VU5TVEFCTEUgMQorI2RlZmluZSBTRUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic2VjcmV0
L3NlY3JldC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlz
dCogcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z3RrX3RhcmdldF9saXN0X3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gU2Vj
cmV0VmFsdWUqIHJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAg
ICAgICBzZWNyZXRfdmFsdWVfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBzZWNyZXRfdmFsdWVfdW5yZWYocHRyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCit0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7
CisgICAgaWYgKHB0cikKKyAgICAgICAgZ2RrX2N1cnNvcl9yZWYocHRyKTsKKyAgICByZXR1cm4g
cHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9CisjZW5kaWYK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTkyODY0YTkyMjlkYWI4
ODNiZWZhNTYyYjIzNWFkOGFjMzk2ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJv
Ymluc29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR1JlZlB0ckd0a19oCisjZGVmaW5lIEdSZWZQdHJH
dGtfaAorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVj
dCBfU2VjcmV0VmFsdWUgU2VjcmV0VmFsdWU7CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Cit0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOworCit0ZW1wbGF0ZSA8PiBT
ZWNyZXRWYWx1ZSogcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
K3RlbXBsYXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Cit0ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7CisjZW5kaWYKKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzRhMmVhYjEyOTYzMzRkNGEwMDYwNWE0MjFiMDJmZWFlNDgyZDc3OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZy5oIgorCisjaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgorI2lu
Y2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBnTGF5b3V0Q29sdW1uU3BhY2lu
ZyA9IDEyOworc3RhdGljIGNvbnN0IGludCBnTGF5b3V0Um93U3BhY2luZyA9IDY7CitzdGF0aWMg
Y29uc3QgaW50IGdCdXR0b25TcGFjaW5nID0gNTsKKworR3RrQXV0aGVudGljYXRpb25EaWFsb2c6
Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQorICAgIDogbV9kaWFsb2coMCkK
KyAgICAsIG1fbG9naW5FbnRyeSgwKQorICAgICwgbV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBt
X3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKKyAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAg
ICAsIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1vZGUpCit7Cit9CisKK0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRv
dywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0
b3JhZ2VNb2RlIG1vZGUpCisgICAgOiBtX2RpYWxvZyhndGtfZGlhbG9nX25ldygpKQorICAgICwg
bV9sb2dpbkVudHJ5KDApCisgICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKKyAgICAsIG1fcmVtZW1i
ZXJDaGVja0J1dHRvbigwKQorICAgICwgbV9jaGFsbGVuZ2UoY2hhbGxlbmdlKQorICAgICwgbV9j
cmVkZW50aWFsU3RvcmFnZU1vZGUobW9kZSkKK3sKKyAgICBHdGtXaWRnZXQqIGNvbnRlbnRBcmVh
ID0gZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKEdUS19ESUFMT0cobV9kaWFsb2cpKTsKKyAg
ICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihHVEtfRElBTE9H
KG1fZGlhbG9nKSksIDUpOworICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChjb250ZW50
QXJlYSksIDIpOyAvKiAyICogNSArIDIgPSAxMiAqLworCisgICAgR3RrV2luZG93KiB3aW5kb3cg
PSBHVEtfV0lORE9XKG1fZGlhbG9nKTsKKyAgICBndGtfd2luZG93X3NldF9yZXNpemFibGUod2lu
ZG93LCBGQUxTRSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUod2luZG93LCAiIik7CisgICAg
Z3RrX3dpbmRvd19zZXRfaWNvbl9uYW1lKHdpbmRvdywgR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5U
SUNBVElPTik7CisKKyAgICBpZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2luZG93X3Nl
dF90cmFuc2llbnRfZm9yKHdpbmRvdywgcGFyZW50V2luZG93KTsKKworICAgIGNyZWF0ZUNvbnRl
bnRzSW5Db250YWluZXIoY29udGVudEFyZWEpOworfQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKK3N0YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJveCwg
Li4uKQoreworICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0OworICAgIHZhX3N0YXJ0KGFyZ3VtZW50
TGlzdCwgYm94KTsKKworICAgIEd0a1dpZGdldCogdGFibGUgPSBndGtfdGFibGVfbmV3KDEsIDIs
IEZBTFNFKTsKKyAgICBndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUp
LCBnTGF5b3V0Q29sdW1uU3BhY2luZyk7CisgICAgZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3Mo
R1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dFJvd1NwYWNpbmcpOworCisgICAgR3RrV2lkZ2V0KiBm
aXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAg
IGludCByb3dOdW1iZXIgPSAwOworICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgeworICAg
ICAgICBpZiAocm93TnVtYmVyKQorICAgICAgICAgICAgZ3RrX3RhYmxlX3Jlc2l6ZShHVEtfVEFC
TEUodGFibGUpLCByb3dOdW1iZXIgKyAxLCAyKTsKKworICAgICAgICBHdGtXaWRnZXQqIHNlY29u
ZENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAg
ICBHdGtBdHRhY2hPcHRpb25zIGF0dGFjaE9wdGlvbnMgPSBzdGF0aWNfY2FzdDxHdGtBdHRhY2hP
cHRpb25zPihHVEtfRVhQQU5EIHwgR1RLX0ZJTEwpOworICAgICAgICBndGtfdGFibGVfYXR0YWNo
KEdUS19UQUJMRSh0YWJsZSksIGZpcnN0Q29sdW1uV2lkZ2V0LAorICAgICAgICAgICAgMCwgc2Vj
b25kQ29sdW1uV2lkZ2V0ID8gMSA6IDIsCisgICAgICAgICAgICByb3dOdW1iZXIsIHJvd051bWJl
ciArIDEsCisgICAgICAgICAgICBhdHRhY2hPcHRpb25zLCBhdHRhY2hPcHRpb25zLAorICAgICAg
ICAgICAgMCwgMCk7CisKKyAgICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdldCkKKyAgICAgICAg
ICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRhYmxlKSwgc2Vjb25kQ29s
dW1uV2lkZ2V0LCAxLCAyLCByb3dOdW1iZXIsIHJvd051bWJlciArIDEpOworCisgICAgICAgIGZp
cnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAg
ICAgIHJvd051bWJlcisrOworICAgIH0KKworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisg
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgdGFibGUsIEZBTFNFLCBGQUxTRSwg
MCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgcGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dp
ZGdldCogYm94LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7CisgICAgdmFfc3Rh
cnQoYXJndW1lbnRMaXN0LCBib3gpOworCisgICAgR3RrV2lkZ2V0KiBncmlkID0gZ3RrX2dyaWRf
bmV3KCk7CisgICAgZ3RrX2dyaWRfc2V0X2NvbHVtbl9zcGFjaW5nKEdUS19HUklEKGdyaWQpLCBn
TGF5b3V0Um93U3BhY2luZyk7CisgICAgZ3RrX2dyaWRfc2V0X3Jvd19zcGFjaW5nKEdUS19HUklE
KGdyaWQpLCBnTGF5b3V0Um93U3BhY2luZyk7CisgICAgZ3RrX2dyaWRfc2V0X2NvbHVtbl9ob21v
Z2VuZW91cyhHVEtfR1JJRChncmlkKSwgVFJVRSk7CisKKyAgICBHdGtXaWRnZXQqIGZpcnN0Q29s
dW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgaW50IHJv
d051bWJlciA9IDA7CisgICAgd2hpbGUgKGZpcnN0Q29sdW1uV2lkZ2V0KSB7CisgICAgICAgIEd0
a1dpZGdldCogc2Vjb25kQ29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lk
Z2V0Kik7CisgICAgICAgIGludCBmaXJzdFdpZGdldFdpZHRoID0gc2Vjb25kQ29sdW1uV2lkZ2V0
ID8gMSA6IDI7CisKKyAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBmaXJz
dENvbHVtbldpZGdldCwgMCwgcm93TnVtYmVyLCBmaXJzdFdpZGdldFdpZHRoLCAxKTsKKyAgICAg
ICAgZ3RrX3dpZGdldF9zZXRfaGV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7CisgICAg
ICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOworCisg
ICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgICAgIGd0a19ncmlkX2F0
dGFjaChHVEtfR1JJRChncmlkKSwgc2Vjb25kQ29sdW1uV2lkZ2V0LCAxLCByb3dOdW1iZXIsIDEs
IDEpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9zZXRfaGV4cGFuZChzZWNvbmRDb2x1bW5XaWRn
ZXQsIFRSVUUpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChzZWNvbmRDb2x1
bW5XaWRnZXQsIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgZmlyc3RDb2x1bW5XaWRnZXQg
PSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgcm93TnVtYmVyKys7
CisgICAgfQorCisgICAgdmFfZW5kKGFyZ3VtZW50TGlzdCk7CisKKyAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChib3gpLCBncmlkLCBGQUxTRSwgRkFMU0UsIDApOworfQorI2VuZGlmCisK
K3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxvZ0xhYmVsKGNvbnN0IGNoYXIqIGxhYmVsU3Ry
aW5nLCBpbnQgaG9yaXpvbnRhbFBhZGRpbmcgPSAwKQoreworICAgIEd0a1dpZGdldCogbGFiZWwg
PSBndGtfbGFiZWxfbmV3KGxhYmVsU3RyaW5nKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50
KEdUS19NSVNDKGxhYmVsKSwgMCwgMC41KTsKKyAgICBpZiAoaG9yaXpvbnRhbFBhZGRpbmcpCisg
ICAgICAgIGd0a19taXNjX3NldF9wYWRkaW5nKEdUS19NSVNDKGxhYmVsKSwgMCwgaG9yaXpvbnRh
bFBhZGRpbmcpOworICAgIHJldHVybiBsYWJlbDsKK30KKworc3RhdGljIEd0a1dpZGdldCogY3Jl
YXRlRGlhbG9nRW50cnkoR3RrV2lkZ2V0KiogbWVtYmVyKQoreworICAgICptZW1iZXIgPSBndGtf
ZW50cnlfbmV3KCk7CisgICAgZ3RrX2VudHJ5X3NldF9hY3RpdmF0ZXNfZGVmYXVsdChHVEtfRU5U
UlkoKm1lbWJlciksIFRSVUUpOworICAgIHJldHVybiAqbWVtYmVyOworfQorCit2b2lkIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjpjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKEd0a1dpZGdldCog
Y29udGFpbmVyKQoreworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0KiBo
Qm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCBnTGF5b3V0Q29sdW1uU3BhY2luZyk7CisjZWxzZQor
ICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9O
VEFMLCBnTGF5b3V0Q29sdW1uU3BhY2luZyk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX3Nl
dF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihoQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFpbmVyKSwgaEJveCk7CisKKyAg
ICBHdGtXaWRnZXQqIGljb24gPSBndGtfaW1hZ2VfbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0RJ
QUxPR19BVVRIRU5USUNBVElPTiwgR1RLX0lDT05fU0laRV9ESUFMT0cpOworICAgIGd0a19taXNj
X3NldF9hbGlnbm1lbnQoR1RLX01JU0MoaWNvbiksIDAuNSwgMCk7CisgICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goaEJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBHT3du
UHRyPGNoYXI+IHByb21wdChnX3N0cmR1cF9wcmludGYoCisgICAgICAgIF8oIlRoZSBzaXRlICVz
OiVpIHJlcXVlc3RzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIiksCisgICAgICAgIG1fY2hhbGxl
bmdlLnByb3RlY3Rpb25TcGFjZSgpLmhvc3QoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICBtX2No
YWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5wb3J0KCkpKTsKKworICAgIG1fcmVtZW1iZXJDaGVj
a0J1dHRvbiA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMoXygiX1JlbWVtYmVy
IHBhc3N3b3JkIikpOworICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtf
YmluX2dldF9jaGlsZChHVEtfQklOKG1fcmVtZW1iZXJDaGVja0J1dHRvbikpKSwgVFJVRSk7Cisg
ICAgZ3RrX3dpZGdldF9zZXRfbm9fc2hvd19hbGwobV9yZW1lbWJlckNoZWNrQnV0dG9uLCBtX2Ny
ZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlKTsKKworCisg
ICAgLy8gV2UgYXJlIGFkZGluZyB0aGUgYnV0dG9uIGJveCBoZXJlIG1hbnVhbGx5IGluc3RlYWQg
b2YgdXNpbmcgdGhlIHJlYWR5LW1hZGUgR3RrRGlhbG9nIGJ1dHRvbnMuCisgICAgLy8gVGhpcyBp
cyBzbyB0aGF0IHdlIGNhbiBzaGFyZSB0aGUgY29kZSB3aXRoIGltcGxlbWVudGF0aW9ucyB0aGF0
IGRvIG5vdCB1c2UgR3RrRGlhbG9nLgorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3Rr
V2lkZ2V0KiBidXR0b25Cb3ggPSBndGtfaGJ1dHRvbl9ib3hfbmV3KCk7CisjZWxzZQorICAgIEd0
a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2J1dHRvbl9ib3hfbmV3KEdUS19PUklFTlRBVElPTl9I
T1JJWk9OVEFMKTsKKyNlbmRpZgorICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChidXR0
b25Cb3gpLCBnQnV0dG9uU3BhY2luZyk7CisgICAgZ3RrX2J1dHRvbl9ib3hfc2V0X2xheW91dChH
VEtfQlVUVE9OX0JPWChidXR0b25Cb3gpLCBHVEtfQlVUVE9OQk9YX0VORCk7CisKKyAgICBtX29r
YXlCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19PSyk7CisgICAg
bV9jYW5jZWxCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19DQU5D
RUwpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fY2FuY2Vs
QnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
YnV0dG9uQm94KSwgbV9va2F5QnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX29rYXlCdXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhidXR0b25DbGlja2Vk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2FuY2VsQnV0dG9uLCAi
Y2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7CisKKyAg
ICBTdHJpbmcgcmVhbG0gPSBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5yZWFsbSgpOwor
ICAgIGlmICghcmVhbG0uaXNFbXB0eSgpKSB7CisgICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJ
bkJveChoQm94LAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBn
TGF5b3V0Um93U3BhY2luZyksIE5VTEwsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChf
KCJTZXJ2ZXIgbWVzc2FnZToiKSksIGNyZWF0ZURpYWxvZ0xhYmVsKHJlYWxtLnV0ZjgoKS5kYXRh
KCkpLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiVXNlcm5hbWU6IikpLCBjcmVh
dGVEaWFsb2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xh
YmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fcGFzc3dvcmRFbnRyeSks
CisgICAgICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIE5VTEwsCisgICAgICAgICAgICBi
dXR0b25Cb3gsIE5VTEwsIE5VTEwpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgcGFja1R3b0Nv
bHVtbkxheW91dEluQm94KGhCb3gsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9t
cHQuZ2V0KCksIGdMYXlvdXRSb3dTcGFjaW5nKSwgTlVMTCwKKyAgICAgICAgICAgIGNyZWF0ZURp
YWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5FbnRy
eSksCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNyZWF0
ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAgbV9yZW1lbWJlckNo
ZWNrQnV0dG9uLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxM
KTsKKyAgICB9CisKKyAgICBndGtfZW50cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKG1fcGFz
c3dvcmRFbnRyeSksIEZBTFNFKTsKKyAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJv
bVBlcnNpc3RlbnRTdG9yYWdlID0gbV9jaGFsbGVuZ2UucHJvcG9zZWRDcmVkZW50aWFsKCk7Cisg
ICAgaWYgKCFjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLmlzRW1wdHkoKSkgeworICAg
ICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSksIGNyZWRlbnRp
YWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UudXNlcigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBn
dGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fcGFzc3dvcmRFbnRyeSksIGNyZWRlbnRpYWxG
cm9tUGVyc2lzdGVudFN0b3JhZ2UucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
Z3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVy
Q2hlY2tCdXR0b24pLCBUUlVFKTsKKyAgICB9Cit9CisKK3ZvaWQgR3RrQXV0aGVudGljYXRpb25E
aWFsb2c6OnNob3coKQoreworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9kZWZhdWx0KG1fb2theUJ1
dHRvbiwgVFJVRSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2RlZmF1bHQobV9va2F5QnV0dG9uKTsK
KyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMobV9sb2dpbkVudHJ5KTsKKworICAgIGd0a193aWRn
ZXRfc2hvd19hbGwobV9kaWFsb2cpOworfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpkZXN0cm95KCkKK3sKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9kaWFsb2cpOworICAgIGRl
bGV0ZSB0aGlzOworfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNh
dGUoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3sKKyAgICBpZiAoY3JlZGVudGlhbC5p
c0VtcHR5KCkpCisgICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJl
Y2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChtX2NoYWxsZW5nZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNl
aXZlZENyZWRlbnRpYWwobV9jaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOworfQorCit2b2lkIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjpidXR0b25DbGlja2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiBidXR0
b24sIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCit7CisgICAgQ3JlZGVudGlhbCBj
cmVkZW50aWFsOworICAgIGlmIChidXR0b24gPT0gZGlhbG9nLT5tX29rYXlCdXR0b24pIHsKKyAg
ICAgICAgY29uc3QgY2hhciAqdXNlcm5hbWUgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZ
KGRpYWxvZy0+bV9sb2dpbkVudHJ5KSk7CisgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkID0g
Z3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fcGFzc3dvcmRFbnRyeSkpOwor
ICAgICAgICBib29sIHJlbWVtYmVyUGFzc3dvcmQgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0
aXZlKEdUS19UT0dHTEVfQlVUVE9OKGRpYWxvZy0+bV9yZW1lbWJlckNoZWNrQnV0dG9uKSk7Cisg
ICAgICAgIENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBwZXJzaXN0ZW5jZTsKKworICAgICAgICBpZiAo
cmVtZW1iZXJQYXNzd29yZCAmJiBkaWFsb2ctPm1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlID09IEFs
bG93UGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRp
YWxQZXJzaXN0ZW5jZVBlcm1hbmVudDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGVyc2lz
dGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uOworCisgICAgICAgIGNyZWRl
bnRpYWwgPSBDcmVkZW50aWFsKFN0cmluZzo6ZnJvbVVURjgodXNlcm5hbWUpLCBTdHJpbmc6OmZy
b21VVEY4KHBhc3N3b3JkKSwgcGVyc2lzdGVuY2UpOworICAgIH0KKworICAgIGRpYWxvZy0+YXV0
aGVudGljYXRlKGNyZWRlbnRpYWwpOworICAgIGRpYWxvZy0+ZGVzdHJveSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc3YzgxYWRmZWZiZDE5MjY5NzU5YTk4NzE2NjFlZjQ4
MTViYTM2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAor
I2RlZmluZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCisKKyNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZW51bSBDcmVkZW50aWFsU3RvcmFnZU1v
ZGUgeworICAgICAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNlciBpcyBhc2tl
ZCB3aGV0aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCisgICAgICAgIERpc2Fs
bG93UGVyc2lzdGVudFN0b3JhZ2UgLy8gQ3JlZGVudGlhbCBpbmZvcm1hdGlvbiBpcyBvbmx5IGtl
cHQgaW4gdGhlIHNlc3Npb24uCisgICAgfTsKKworICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsK
KyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgdmlydHVhbCB+R3Rr
QXV0aGVudGljYXRpb25EaWFsb2coKSB7IH0KKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGRl
c3Ryb3koKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5l
cihHdGtXaWRnZXQqIGNvbnRhaW5lcik7CisgICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0ZShj
b25zdCBDcmVkZW50aWFsJik7CisgICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKKyAgICBHdGtXaWRn
ZXQqIG1fbG9naW5FbnRyeTsKKyAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKKyAgICBH
dGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKKyAgICBHdGtXaWRnZXQqIG1fb2theUJ1
dHRvbjsKKyAgICBHdGtXaWRnZXQqIG1fY2FuY2VsQnV0dG9uOworCitwcml2YXRlOgorICAgIHN0
YXRpYyB2b2lkIGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZyopOworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hhbGxlbmdlOwor
ICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
Y2M4YTMyYzAyNjVlZDExNWQ4ZDc2MWVkN2E0ZmZkMjEzZWFkZDNmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuY3BwCkBAIC0wLDAgKzEsMTA1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R3RrQ2xpY2tDb3VudGVyLmgiCisKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0d0a0NsaWNrQ291bnRlcjo6R3Rr
Q2xpY2tDb3VudGVyKCkKKyAgICA6IG1fY3VycmVudENsaWNrQ291bnQoMCkKKyAgICAsIG1fcHJl
dmlvdXNDbGlja0J1dHRvbigwKQorICAgICwgbV9wcmV2aW91c0NsaWNrVGltZSgwKQoreworfQor
Cit2b2lkIEd0a0NsaWNrQ291bnRlcjo6cmVzZXQoKQoreworICAgIG1fY3VycmVudENsaWNrQ291
bnQgPSAwOworICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoKTsKKyAgICBtX3By
ZXZpb3VzQ2xpY2tUaW1lID0gMDsKKyAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSAwOworfQor
Citib29sIEd0a0NsaWNrQ291bnRlcjo6c2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KEdka0V2ZW50
QnV0dG9uKiBidXR0b25FdmVudCkKK3sKKyAgICAvLyBGb3IgZG91YmxlIGFuZCB0cmlwbGUgY2xp
Y2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVudAorICAgIC8vIGFu
ZCBhIHNwZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3ZSBkZXRlY3Qg
YSBzcGVjaWFsIHByZXNzCisgICAgLy8gY29taW5nIHVwLCBpZ25vcmUgdGhpcyBldmVudCBhcyBp
dCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3IgdHJpcGxlCisgICAgLy8gY2xpY2su
IFRoZSBjb25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdvIERPTSBidXR0
b24gcHJlc3MgZXZlbnRzCisgICAgLy8gYXJlIGdlbmVyYXRlZC4KKyAgICBHT3duUHRyPEdka0V2
ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7CisgICAgaWYgKCFuZXh0RXZlbnQpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18y
QlVUVE9OX1BSRVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGd1
aW50MzIgZ2V0RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBndWludDMyIHRpbWUg
PSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOworICAgIGlmICh0aW1lKQorICAgICAgICByZXR1
cm4gdGltZTsKKworICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXplcm8gdGlt
ZSwgYnV0IGV2ZW50cyBzeW50aGVzaXplZAorICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90IGFuZCB3
ZSBtdXN0IGNhbGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQorICAgIC8vIGlzIG5v
dCBjYWxjdWxhdGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3JrIHdlbGwg
d2l0aAorICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBvbiBzeW50
aGVzaXplZCBldmVudHMuCisgICAgR1RpbWVWYWwgdGltZVZhbHVlOworICAgIGdfZ2V0X2N1cnJl
bnRfdGltZSgmdGltZVZhbHVlKTsKKyAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMgKiAxMDAw
KSArICh0aW1lVmFsdWUudHZfdXNlYyAvIDEwMDApOworfQorCitpbnQgR3RrQ2xpY2tDb3VudGVy
OjpjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
QnV0dG9uKiBidXR0b25FdmVudCkKK3sKKyAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAy
NTA7CisgICAgZ2ludCBkb3VibGVDbGlja1RpbWUgPSA1OworICAgIEd0a1NldHRpbmdzKiBzZXR0
aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4o
d2lkZ2V0KSk7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAi
Z3RrLWRvdWJsZS1jbGljay1kaXN0YW5jZSIsICZkb3VibGVDbGlja0Rpc3RhbmNlLAorICAgICAg
ICAgICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwgJmRvdWJsZUNsaWNrVGltZSwgTlVM
TCk7CisKKyAgICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRvIHRyaXBsZSBjbGlja3MsIGJ1dCBX
ZWJDb3JlIHdhbnRzIHRvIGtub3cgYWJvdXQKKyAgICAvLyBxdWFkcnVwbGUgY2xpY2tzLCBxdWlu
dHVwbGUgY2xpY2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0aGUKKyAgICAv
LyBHREsgbG9naWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KKyAgICBHZGtFdmVudCogZXZlbnQocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSk7CisgICAgZ3VpbnQzMiBldmVu
dFRpbWUgPSBnZXRFdmVudFRpbWUoZXZlbnQpOworCisgICAgaWYgKChldmVudC0+dHlwZSA9PSBH
REtfMkJVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAg
ICAgICAgfHwgKChhYnMoYnV0dG9uRXZlbnQtPnggLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC54KCkp
IDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKKyAgICAgICAgICAgICYmIChhYnMoYnV0dG9uRXZlbnQt
PnkgLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC55KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKKyAg
ICAgICAgICAgICYmIChldmVudFRpbWUgLSBtX3ByZXZpb3VzQ2xpY2tUaW1lIDwgc3RhdGljX2Nh
c3Q8Z3VpbnQ+KGRvdWJsZUNsaWNrVGltZSkpCisgICAgICAgICAgICAmJiAoYnV0dG9uRXZlbnQt
PmJ1dHRvbiA9PSBtX3ByZXZpb3VzQ2xpY2tCdXR0b24pKSkKKyAgICAgICAgbV9jdXJyZW50Q2xp
Y2tDb3VudCsrOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCA9IDE7CisK
KyAgICBnZG91YmxlIHgsIHk7CisgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAm
eSk7CisgICAgbV9wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKKyAgICBtX3By
ZXZpb3VzQ2xpY2tCdXR0b24gPSBidXR0b25FdmVudC0+YnV0dG9uOworICAgIG1fcHJldmlvdXND
bGlja1RpbWUgPSBldmVudFRpbWU7CisKKyAgICByZXR1cm4gbV9jdXJyZW50Q2xpY2tDb3VudDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2d0ay9HdGtDbGlja0NvdW50ZXIuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3Vu
dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjZjYTFkZWM5MTgwNzk0ZjJmNzUxOWI4YmM1MmI2Nzk0YjFmOTdj
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVy
LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHdGtDbGlj
a0NvdW50ZXJfaAorI2RlZmluZSBHdGtDbGlja0NvdW50ZXJfaAorCisjaW5jbHVkZSAiSW50UG9p
bnQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50QnV0dG9uIEdka0V2ZW50QnV0dG9uOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEd0a0NsaWNrQ291bnRlciB7CitwdWJsaWM6
CisgICAgR3RrQ2xpY2tDb3VudGVyKCk7CisgICAgdm9pZCByZXNldCgpOworICAgIGJvb2wgc2hv
dWxkUHJvY2Vzc0J1dHRvbkV2ZW50KEdka0V2ZW50QnV0dG9uKik7CisgICAgaW50IGNsaWNrQ291
bnRGb3JHZGtCdXR0b25FdmVudChHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRvbiopOworCitwcml2
YXRlOgorICAgIGludCBtX2N1cnJlbnRDbGlja0NvdW50OworICAgIEludFBvaW50IG1fcHJldmlv
dXNDbGlja1BvaW50OworICAgIHVuc2lnbmVkIGludCBtX3ByZXZpb3VzQ2xpY2tCdXR0b247Cisg
ICAgaW50IG1fcHJldmlvdXNDbGlja1RpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0
aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI5OTgwYjU0NmEyYTQ5YzY0NjA1NDUxMTVlMDQ2YTEzNjViYzQyM2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmls
dGVyLmNwcApAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHdGtJbnB1dE1ldGhvZEZpbHRlci5oIgorCisjaW5jbHVkZSAiR093
blB0ckd0ay5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlIDxnZGsvZ2Rr
a2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCisvLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBrZXkgZXZlbnQgY29kZSBpcyAyOTkg
b3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bworLy8gZW1pdCB0aGlzIGNvZGUgZm9yIHdlYiBj
b21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRzIHRyaWdnZXIKKy8vIGNvbXBvc2l0
aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1aXZhbGVudCwgc28gd2Ugc2VuZCBW
b2lkU3ltYm9sCisvLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3JtS2V5RXZlbnQga25vd3MgdG8g
Y29udmVydCB0aGlzIGNvZGUgaW50bworLy8gVktfUFJPQ0VTU0tFWS4KK2NvbnN0IGludCBnQ29t
cG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtfS0VZX1ZvaWRTeW1ib2w7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0Q2FsbGJhY2soR3RrSU1Db250ZXh0
KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcsIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBm
aWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcpOwor
fQorCitzdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayhHdGtJTUNvbnRleHQq
LCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJl
ZWRpdFN0YXJ0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJh
Y2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBm
aWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVBy
ZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmls
dGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgpOworfQorCitzdGF0aWMgdm9p
ZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtJbnB1dE1ldGhvZEZp
bHRlciogZmlsdGVyKQoreworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCk7CisgICAgQVNTRVJUKHdpbmRvdyk7CisgICAgZ3RrX2ltX2NvbnRleHRf
c2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5jb250ZXh0KCksIHdpbmRvdyk7Cit9CisKK3ZvaWQg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBBU1NFUlQoIW1fd2lkZ2V0KTsKKworICAgIG1fd2lkZ2V0ID0gd2lkZ2V0OworICAgIGlmIChn
dGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRnZXQpKQorICAgICAgICBoYW5kbGVXaWRnZXRSZWFs
aXplKG1fd2lkZ2V0LCB0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
YWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0soaGFuZGxlV2lkZ2V0UmVhbGl6ZSks
IHRoaXMpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0KGNv
bnN0IEludFJlY3QmIGN1cnNvclJlY3QpCit7CisgICAgLy8gRG9uJ3QgbW92ZSB0aGUgd2luZG93
IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1vcmUgdGhhbiAxMAorICAgIC8vIHBp
eGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0aGUgd2luZG93IGZsYXNoIGR1cmlu
ZyBtaW5vcgorICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4KKyAgICBzdGF0aWMgY29uc3QgaW50
IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsKKyAgICBpZiAoY3Vyc29yUmVjdC5s
b2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9sYXN0Q2FyZUxvY2F0aW9uKSA8IHdp
bmRvd01vdmVtZW50VGhyZXNob2xkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RDYXJl
TG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7CisgICAgSW50UmVjdCB0cmFuc2xhdGVk
UmVjdCA9IGN1cnNvclJlY3Q7CisKKyAgICBBU1NFUlQobV93aWRnZXQpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fd2lkZ2V0
LCAmYWxsb2NhdGlvbik7CisgICAgdHJhbnNsYXRlZFJlY3QubW92ZShhbGxvY2F0aW9uLngsIGFs
bG9jYXRpb24ueSk7CisKKyAgICBHZGtSZWN0YW5nbGUgZ2RrQ3Vyc29yUmVjdCA9IGN1cnNvclJl
Y3Q7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2N1cnNvcl9sb2NhdGlvbihtX2NvbnRleHQuZ2V0
KCksICZnZGtDdXJzb3JSZWN0KTsKK30KKworR3RrSW5wdXRNZXRob2RGaWx0ZXI6Okd0a0lucHV0
TWV0aG9kRmlsdGVyKCkKKyAgICA6IG1fY3Vyc29yT2Zmc2V0KDApCisgICAgLCBtX2NvbnRleHQo
YWRvcHRHUmVmKGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCkpKQorICAgICwgbV93aWRnZXQoMCkK
KyAgICAsIG1fZW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseShm
YWxzZSkKKyAgICAsIG1fZmlsdGVyaW5nS2V5RXZlbnQoZmFsc2UpCisgICAgLCBtX3ByZWVkaXRD
aGFuZ2VkKGZhbHNlKQorICAgICwgbV9wcmV2ZW50TmV4dENvbW1pdChmYWxzZSkKKyAgICAsIG1f
anVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCisgICAgLCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29k
ZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lkU3ltYm9sKQoreworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9jb250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19DQUxMQkFDSyhoYW5kbGVDb21taXRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJl
ZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlz
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1lbmQiLCBHX0NBTExC
QUNLKGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOworfQorCitHdGtJbnB1dE1ldGhv
ZEZpbHRlcjo6fkd0a0lucHV0TWV0aG9kRmlsdGVyKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3dpZGdldCwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOworfQorCit2b2lkIEd0a0lu
cHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2VuYWJs
ZWQgPSBlbmFibGVkOworICAgIGlmIChlbmFibGVkKQorICAgICAgICBndGtfaW1fY29udGV4dF9m
b2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgZ3RrX2ltX2NvbnRl
eHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Cit9CisKK2Jvb2wgR3RrSW5wdXRNZXRob2RG
aWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBpZiAoIWNh
bkVkaXQoKSB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50
KGV2ZW50KTsKKworICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKKyAgICBtX2ZpbHRlcmlu
Z0tleUV2ZW50ID0gdHJ1ZTsKKworICAgIHVuc2lnbmVkIGludCBsYXN0RmlsdGVyZWRLZXlQcmVz
c0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1
bHRzOworICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdES19L
RVlfVm9pZFN5bWJvbDsKKworICAgIGJvb2wgZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9maWx0
ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7CisgICAgbV9maWx0ZXJpbmdLZXlF
dmVudCA9IGZhbHNlOworCisgICAgYm9vbCBqdXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNlbnRG
YWtlS2V5VXA7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIGlmIChqdXN0
U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gU2ltcGxlIGlucHV0IG1ldGhvZHMgd29yayBzdWNoIHRo
YXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZQorICAgIC8vIGNvbW1pdCBzaWduYWwu
IFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25zIGFuZCB0cmVhdCB0aGVtIGFzIG5vcm1hbAorICAg
IC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0IHN0cmluZyBhcyB0aGUga2V5IGNo
YXJhY3Rlci4KKyAgICBpZiAoZmlsdGVyZWQgJiYgIW1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSAm
JiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmxlbmd0aCgpID09
IDEpIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQsIG1f
Y29uZmlybWVkQ29tcG9zaXRpb24pOworICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0g
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGZpbHRl
cmVkICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1MpIHsKKyAgICAgICAgaWYgKCFtX3By
ZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRydWU7CisgICAgICAgICAgICBtX2xh
c3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBldmVudC0+a2V5dmFsOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlc3VsdCA9
IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoZXZlbnQpOworICAgICAgICBpZiAo
IW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY29uZmlybWVkQ29tcG9z
aXRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZmlsdGVyZWQgYSBrZXkgcHJlc3MgZXZlbnQg
YW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3VwcHJlc3MKKyAgICAvLyB0aGUgY29ycmVzcG9u
ZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9pZCBjb25mdXNpbmcgdGhlIHdlYiBjb250ZW50
LgorICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgJiYgbGFzdEZpbHRlcmVk
S2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBldmVudC0+a2V5dmFsKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBrZXlzdHJva2Ugd2FzIGVpdGhlcjoK
KyAgICAvLyAxLiBVbmZpbHRlcmVkCisgICAgLy8gMi4gQSBmaWx0ZXJlZCBrZXl1cCBldmVudC4g
QXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRvZXNuJ3QKKyAgICAvLyAgICBldmVy
IGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBjb21wb3NpdGlvbiByZXN1bHRzIGJl
Zm9yZQorICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCisgICAgLy8gQm90aCBtaWdodCBoYXZlIGNv
bXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgorICAgIC8vCisgICAgLy8gSXQncyBpbXBvcnRhbnQg
dG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUgdGhlIGV2ZW50CisgICAgLy8g
YmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0IHdheS4gRm9yIGV4YW1wbGUgKHRh
a2VuIGZyb20KKyAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNlKSwgdGhlIGxhdGluLXBvc3QgaW5w
dXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKKyAgICAvLyB3aGVuIHlvdSBwcmVzcyAnYScg
YW5kIHRoZW4gYmFja3NwYWNlOgorICAgIC8vICAxLiBrZXlkb3duICdhJyAoZmlsdGVyZWQpCisg
ICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKKyAgICAvLyAgMy4ga2V5dXAgJ2EnICh1
bmZpbHRlcmVkKQorICAgIC8vICA0LiBrZXlkb3duIEJhY2tzcGFjZSAodW5maWx0ZXJlZCkKKyAg
ICAvLyAgNS4gY29tbWl0ICJhIgorICAgIC8vICA2LiBwcmVlZGl0IGVuZAorICAgIGlmICghbV9j
b25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGNvbmZpcm1Db21wb3NpdGlv
bigpOworICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQorICAgICAgICB1cGRhdGVQcmVlZGl0KCk7
CisgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7Cit9CisKK3ZvaWQgR3RrSW5w
dXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKQoreworICAgIC8vIENvbmZp
cm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEgc2VsZWN0aW9uIGNoYW5nZSwgd2hp
Y2gKKyAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53YW50ZWQgYWN0aW9ucyBvbiB0aGUg
Y29udGV4dCwgc28gd2UgcHJldmVudAorICAgIC8vIHRoYXQgYnkgc2V0dGluZyBtX2NvbXBvc2lu
Z1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCisgICAgaWYgKG1fY29tcG9zaW5nVGV4dEN1cnJlbnRs
eSkKKyAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOworICAgIG1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSA9IGZhbHNlOworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOwor
fQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNldENvbnRleHQoKQoreworCisgICAg
Ly8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJDb3JlIGNvbXBvc2l0aW9uIGhlcmUs
IGluIGNhc2UgdGhlCisgICAgLy8gY29tcG9zaXRpb24gd2FzIHNldCBvdXRzaWRlIHRoZSBHVEsr
IElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgorICAgIC8vIGluc3RhbmNlKSBhbmQgd2UgYXJl
bid0IHRyYWNraW5nIGl0LgorICAgIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpOworCisgICAg
aWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRp
b24oKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ29udGV4dENvbXBv
c2l0aW9uKCkKK3sKKyAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gIW1fcHJlZWRpdC5pc0VtcHR5
KCk7CisKKyAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2NvbnRleHQuZ2V0KCkpOworCisgICAg
bV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgbV9qdXN0U2VudEZha2VLZXlV
cCA9IGZhbHNlOworICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOworICAgIG1fY29uZmlybWVkQ29t
cG9zaXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90
aWZ5Rm9jdXNlZEluKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0cnVlOworICAgIGd0a19pbV9jb250
ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RG
aWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQoreworICAgIGlmICghbV9lbmFibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQorICAgICAgICBj
b25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9u
KCk7CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7CisgICAg
bV9lbmFibGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZp
cm1Db21wb3NpdGlvbigpCit7CisgICAgY29uZmlybUNvbXBvc2l0aW9uVGV4dChtX2NvbmZpcm1l
ZENvbXBvc2l0aW9uKTsKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Cit9
CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVkaXQoKQoreworICAgIHNl
dFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7CisgICAgbV9wcmVlZGl0Q2hhbmdl
ZCA9IGZhbHNlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRp
b25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5k
KQoreworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9Q
UkVTUykpOworICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZl
bnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNvZGU7CisgICAgc2VuZEtleUV2
ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwgcmVzdWx0c1RvU2VuZCwgRXZl
bnRGYWtlZCk7CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAg
aWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikKKyAgICAgICAgbV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5ID0gZmFsc2U7CisKKyAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsK
KyAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXksIFN0cmluZygpLCBFdmVudEZha2Vk
KTsKKyAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gdHJ1ZTsKK30KKwordm9pZCBHdGtJbnB1dE1l
dGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKQor
eworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAgIG1fcHJldmVudE5leHRD
b21taXQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9lbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmFwcGVu
ZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5nKSk7CisKKyAgICAvLyBJZiB0aGUg
Y29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtleSBldmVudCwganVzdCBzZW5kCisg
ICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBoYW5kbGluZyBhIGtleSBldmVudCwg
d2UnbGwgZGVjaWRlCisgICAgLy8gbGF0ZXIgaG93IHRvIGhhbmRsZSB0aGlzLgorICAgIGlmICgh
bV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdp
dGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZp
bHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKK3sKKyAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1p
dCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9
IHRydWU7CisgICAgbV9wcmVlZGl0ID0gIiI7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0
ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRpdDsKKyAgICBndGtfaW1f
Y29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0LmdldCgpLCAmbmV3UHJlZWRpdC5v
dXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKKworICAgIGlmIChtX3ByZXZlbnROZXh0Q29t
bWl0KSB7CisgICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRpdC5nZXQoKSkgPiAwKQorICAgICAg
ICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0ID0gU3RyaW5nOjpmcm9tVVRGOChu
ZXdQcmVlZGl0LmdldCgpKTsKKyAgICBtX2N1cnNvck9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4
KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50PihtX3ByZWVkaXQubGVuZ3RoKCkp
KTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9ICFtX3ByZWVkaXQuaXNFbXB0eSgp
OworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tl
eUV2ZW50KQorICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVu
dHMoUHJlZWRpdCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVk
aXRFbmQoKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOworICAgIG1fY3Vyc29y
T2Zmc2V0ID0gMDsKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmICghbV9m
aWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgdXBkYXRlUHJlZWRpdCgpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU0ODI1
MzQ4OGQxMDRlODU0M2JhMGYxMjhhYTYzMzQxZWNhN2I2NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaApAQCAtMCwwICsxLDk5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrSW5wdXRN
ZXRob2RGaWx0ZXJfaAorI2RlZmluZSBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCisKKyNpbmNsdWRl
ICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPGdkay9nZGsu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0d0
a0lNQ29udGV4dCBHdGtJTUNvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dp
ZGdldDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtJbnB1dE1ldGhvZEZpbHRl
ciB7CitwdWJsaWM6CisgICAgR3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKKyAgICB+R3RrSW5wdXRN
ZXRob2RGaWx0ZXIoKTsKKworICAgIGJvb2wgZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqKTsK
KyAgICB2b2lkIG5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsKKyAgICB2b2lkIG5vdGlmeUZvY3Vz
ZWRJbigpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOworICAgIHZvaWQgcmVzZXRDb250
ZXh0KCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisgICAgdm9pZCBoYW5kbGVDb21t
aXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpOworICAgIHZvaWQgaGFuZGxlUHJlZWRp
dENoYW5nZWQoKTsKKyAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFydCgpOworICAgIHZvaWQgaGFu
ZGxlUHJlZWRpdEVuZCgpOworCisgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICB2
b2lkIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworICAgIHZvaWQgdXBkYXRlUHJlZWRpdCgp
OworICAgIHZvaWQgc2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBsb2NhdGlvbik7CisKKyAg
ICBHdGtJTUNvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKwor
ICAgIGVudW0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIHsKKyAgICAgICAgRXZlbnRGYWtlZCwK
KyAgICAgICAgRXZlbnROb3RGYWtlZAorICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBlbnVtIFJl
c3VsdHNUb1NlbmQgeworICAgICAgICBQcmVlZGl0ID0gMSA8PCAxLAorICAgICAgICBDb21wb3Np
dGlvbiA9IDEgPDwgMiwKKyAgICAgICAgUHJlZWRpdEFuZENvbXBvc2l0aW9uID0gUHJlZWRpdCAr
IENvbXBvc2l0aW9uCisgICAgfTsKKworICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCopOwor
ICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZW5kU2lt
cGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0cmluZyBldmVudFN0cmluZyA9IFN0cmlu
ZygpLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CisgICAg
dmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRL
ZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0aW9uLCBFdmVudEZha2VkRm9y
Q29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbmZp
cm1Db21wb3NpdGlvblRleHQoU3RyaW5nIGNvbXBvc2l0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNh
bmNlbEN1cnJlbnRDb21wb3NpdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZWRp
dChTdHJpbmcsIGludCBjdXJzb3JPZmZzZXQpID0gMDsKKworICAgIFdURjo6U3RyaW5nIG1fY29u
ZmlybWVkQ29tcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9wcmVlZGl0OworICAgIGludCBt
X2N1cnNvck9mZnNldDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlbmRDb21wb3NpdGlvbkFuZFBy
ZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsKKworICAgIEdSZWZQdHI8R3Rr
SU1Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICBib29s
IG1fZW5hYmxlZDsKKyAgICBib29sIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseTsKKyAgICBib29s
IG1fZmlsdGVyaW5nS2V5RXZlbnQ7CisgICAgYm9vbCBtX3ByZWVkaXRDaGFuZ2VkOworICAgIGJv
b2wgbV9wcmV2ZW50TmV4dENvbW1pdDsKKyAgICBib29sIG1fanVzdFNlbnRGYWtlS2V5VXA7Cisg
ICAgdW5zaWduZWQgaW50IG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0czsK
KyAgICBJbnRQb2ludCBtX2xhc3RDYXJlTG9jYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1BvcHVwTWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY1N2ExN2RjMzIzYmNmN2IzNTdiMjc3ZjA4
MGFkZWYwOTEzNTJmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
UG9wdXBNZW51LmNwcApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBp
biBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ1NlYXJjaFRp
bWVvdXRNcyA9IDEwMDA7CisKK0d0a1BvcHVwTWVudTo6R3RrUG9wdXBNZW51KCkKKyAgICA6IG1f
cG9wdXAoZ3RrX21lbnVfbmV3KCkpCisgICAgLCBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIo
MCkKKyAgICAsIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSgwKQoreworICAgIG1fa2V5UHJl
c3NIYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAuZ2V0KCksICJrZXktcHJlc3Mt
ZXZlbnQiLCBHX0NBTExCQUNLKEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENhbGxiYWNrKSwg
dGhpcyk7Cit9CisKK0d0a1BvcHVwTWVudTo6fkd0a1BvcHVwTWVudSgpCit7CisgICAgZ19zaWdu
YWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fcG9wdXAuZ2V0KCksIG1fa2V5UHJlc3NIYW5kbGVySUQp
OworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6Y2xlYXIoKQoreworICAgIGd0a19jb250YWluZXJf
Zm9yZWFjaChHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PEd0
a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRlbSksIHRoaXMpOworfQorCit2b2lkIEd0a1BvcHVwTWVu
dTo6YXBwZW5kU2VwYXJhdG9yKCkKK3sKKyAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX3Nl
cGFyYXRvcl9tZW51X2l0ZW1fbmV3KCk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19N
RU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBtZW51SXRlbSk7CisgICAgZ3RrX3dpZGdldF9zaG93
KG1lbnVJdGVtKTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6OmFwcGVuZEl0ZW0oR3RrQWN0aW9u
KiBhY3Rpb24pCit7CisgICAgR3RrV2lkZ2V0KiBtZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRl
X21lbnVfaXRlbShhY3Rpb24pOworICAgIGd0a193aWRnZXRfc2V0X3Rvb2x0aXBfdGV4dChtZW51
SXRlbSwgZ3RrX2FjdGlvbl9nZXRfdG9vbHRpcChhY3Rpb24pKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KG1lbnVJdGVtLCAic2VsZWN0IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OnNlbGVjdEl0
ZW1DYWxsYmFjayksIHRoaXMpOworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9T
SEVMTChtX3BvcHVwLmdldCgpKSwgbWVudUl0ZW0pOworCisgICAgaWYgKGd0a19hY3Rpb25faXNf
dmlzaWJsZShhY3Rpb24pKQorICAgICAgICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOworfQor
Cit2b2lkIEd0a1BvcHVwTWVudTo6cG9wVXAoY29uc3QgSW50U2l6ZSYgbWVudVNpemUsIGNvbnN0
IEludFBvaW50JiBtZW51UG9zaXRpb24sIGludCBpdGVtQ291bnQsIGludCBzZWxlY3RlZEl0ZW0s
IGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgp
OworICAgIG1fbWVudVBvc2l0aW9uID0gbWVudVBvc2l0aW9uOworICAgIGd0a19tZW51X3NldF9h
Y3RpdmUoR1RLX01FTlUobV9wb3B1cC5nZXQoKSksIHNlbGVjdGVkSXRlbSk7CisKKyAgICAvLyBU
aGlzIGFwcHJvYWNoIGZvbGxvd3MgdGhlIG9uZSBpbiBndGtjb21ib2JveC5jLgorICAgIEd0a1Jl
cXVpc2l0aW9uIHJlcXVpc2l0aW9uOworICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdCht
X3BvcHVwLmdldCgpLCAtMSwgLTEpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3Rr
X3dpZGdldF9zaXplX3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uKTsKKyNlbHNl
CisgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUobV9wb3B1cC5nZXQoKSwgJnJlcXVp
c2l0aW9uLCAwKTsKKyNlbmRpZgorCisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1f
cG9wdXAuZ2V0KCksIHN0ZDo6bWF4KG1lbnVTaXplLndpZHRoKCksIHJlcXVpc2l0aW9uLndpZHRo
KSwgLTEpOworCisgICAgR0xpc3QqIGNoaWxkcmVuID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRy
ZW4oR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSk7CisgICAgR0xpc3QqIHAgPSBjaGlsZHJl
bjsKKyAgICBpZiAoaXRlbUNvdW50KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRl
bUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID4gc2VsZWN0ZWRJdGVtKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBHdGtXaWRnZXQqIGl0ZW0gPSByZWludGVy
cHJldF9jYXN0PEd0a1dpZGdldCo+KHAtPmRhdGEpOworICAgICAgICAgICAgR3RrUmVxdWlzaXRp
b24gaXRlbVJlcXVpc2l0aW9uOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgICAgICAg
ICBndGtfd2lkZ2V0X2dldF9jaGlsZF9yZXF1aXNpdGlvbihpdGVtLCAmaXRlbVJlcXVpc2l0aW9u
KTsKKyNlbHNlCisgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShpdGVt
LCAmaXRlbVJlcXVpc2l0aW9uLCAwKTsKKyNlbmRpZgorICAgICAgICAgICAgbV9tZW51UG9zaXRp
b24uc2V0WShtX21lbnVQb3NpdGlvbi55KCkgLSBpdGVtUmVxdWlzaXRpb24uaGVpZ2h0KTsKKwor
ICAgICAgICAgICAgcCA9IGdfbGlzdF9uZXh0KHApOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkgdGhlIGVtcHR5IHBvcHVwIGluIHRoZSBjb21i
byBib3ggYXJlYS4KKyAgICAgICAgbV9tZW51UG9zaXRpb24uc2V0WShtX21lbnVQb3NpdGlvbi55
KCkgLSBtZW51U2l6ZS5oZWlnaHQoKSAvIDIpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZShjaGls
ZHJlbik7CisKKyAgICBndWludCBidXR0b247CisgICAgZ3VpbnQzMiBhY3RpdmF0ZVRpbWU7Cisg
ICAgaWYgKGV2ZW50KSB7CisgICAgICAgIGJ1dHRvbiA9IGV2ZW50LT50eXBlID09IEdES19CVVRU
T05fUFJFU1MgPyBldmVudC0+YnV0dG9uLmJ1dHRvbiA6IDE7CisgICAgICAgIGFjdGl2YXRlVGlt
ZSA9IGdka19ldmVudF9nZXRfdGltZShldmVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnV0
dG9uID0gMTsKKyAgICAgICAgYWN0aXZhdGVUaW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICB9
CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGd0a19tZW51X3BvcHVwKEdUS19NRU5V
KG1fcG9wdXAuZ2V0KCkpLCAwLCAwLCByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1
bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOwor
I2Vsc2UKKyAgICBndGtfbWVudV9wb3B1cF9mb3JfZGV2aWNlKEdUS19NRU5VKG1fcG9wdXAuZ2V0
KCkpLCBldmVudCA/IGdka19ldmVudF9nZXRfZGV2aWNlKGV2ZW50KSA6IDAsIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlv
bkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgMCwgYnV0dG9uLCBhY3RpdmF0ZVRp
bWUpOworI2VuZGlmCit9CisKK3ZvaWQgR3RrUG9wdXBNZW51Ojpwb3BEb3duKCkKK3sKKyAgICBn
dGtfbWVudV9wb3Bkb3duKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICByZXNldFR5cGVB
aGVhZEZpbmRTdGF0ZSgpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6bWVudVJlbW92ZUl0ZW0o
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgIEFTU0VS
VChwb3B1cE1lbnUtPm1fcG9wdXApOworICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIocG9wdXBNZW51LT5tX3BvcHVwLmdldCgpKSwgd2lkZ2V0KTsKK30KKwordm9pZCBHdGtQ
b3B1cE1lbnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5
LCBnYm9vbGVhbiogcHVzaEluLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICAqeCA9
IHBvcHVwTWVudS0+bV9tZW51UG9zaXRpb24ueCgpOworICAgICp5ID0gcG9wdXBNZW51LT5tX21l
bnVQb3NpdGlvbi55KCk7CisgICAgKnB1c2hJbiA9IHRydWU7Cit9CisKK3ZvaWQgR3RrUG9wdXBN
ZW51OjpyZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpCit7CisgICAgbV9jdXJyZW50bHlTZWxlY3Rl
ZE1lbnVJdGVtID0gMDsKKyAgICBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIgPSAwOworICAg
IG1fY3VycmVudFNlYXJjaFN0cmluZyA9ICIiOworfQorCitib29sIEd0a1BvcHVwTWVudTo6dHlw
ZUFoZWFkRmluZChHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgLy8gSWYgd2Ugd2VyZSBnaXZl
biBhIG5vbi1wcmludGFibGUgY2hhcmFjdGVyIGp1c3Qgc2tpcCBpdC4KKyAgICBndW5pY2hhciB1
bmljb2RlQ2hhcmFjdGVyID0gZ2RrX2tleXZhbF90b191bmljb2RlKGV2ZW50LT5rZXl2YWwpOwor
ICAgIGlmICghZ191bmljaGFyX2lzcHJpbnQodW5pY29kZUNoYXJhY3RlcikpIHsKKyAgICAgICAg
cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGdsb25nIGNoYXJhY3RlcnNXcml0dGVuOworICAgIEdPd25QdHI8Z3VuaWNoYXIyPiB1
dGYxNlN0cmluZyhnX3VjczRfdG9fdXRmMTYoJnVuaWNvZGVDaGFyYWN0ZXIsIDEsIDAsICZjaGFy
YWN0ZXJzV3JpdHRlbiwgMCkpOworICAgIGlmICghdXRmMTZTdHJpbmcpIHsKKyAgICAgICAgcmVz
ZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVy
LCB0aGUgdXNlciBpcyBwcm9iYWJseSB0cnlpbmcgdG8KKyAgICAvLyBjeWNsZSB0aHJvdWdoIHRo
ZSBtZW51bGlzdCBlbnRyaWVzLiBUaGlzIG1hdGNoZXMgdGhlIFdlYkNvcmUgYmVoYXZpb3IgZm9y
IGNvbGxhcHNlZAorICAgIC8vIG1lbnVsaXN0cy4KKyAgICBib29sIHJlcGVhdGluZ0NoYXJhY3Rl
ciA9IHVuaWNvZGVDaGFyYWN0ZXIgIT0gbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOworICAg
IGlmIChldmVudC0+dGltZSAtIG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcCA+IGdTZWFyY2hU
aW1lb3V0TXMpCisgICAgICAgIG1fY3VycmVudFNlYXJjaFN0cmluZyA9IFN0cmluZyhyZWludGVy
cHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJpbmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbik7
CisgICAgZWxzZSBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKQorICAgICAgICBtX2N1cnJlbnRTZWFy
Y2hTdHJpbmcuYXBwZW5kKFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJp
bmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbikpOworCisgICAgbV9wcmV2aW91c0tleUV2ZW50
VGltZXN0YW1wID0gZXZlbnQtPnRpbWU7CisgICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVy
ID0gdW5pY29kZUNoYXJhY3RlcjsKKworICAgIC8vIExpa2UgdGhlIENocm9taXVtIHBvcnQsIHdl
IGNhc2UgZm9sZCBiZWZvcmUgc2VhcmNoaW5nLCBiZWNhdXNlIAorICAgIC8vIHN0cm5jbXAgZG9l
cyBub3QgaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgIEdPd25QdHI8Z2NoYXI+IHNl
YXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkKGdfdXRmOF9jYXNlZm9sZChtX2N1cnJlbnRTZWFyY2hT
dHJpbmcudXRmOCgpLmRhdGEoKSwgLTEpKTsKKyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3Ry
bGVuKHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpKTsKKworICAgIEdMaXN0KiBjaGls
ZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5n
ZXQoKSkpOworICAgIGlmICghY2hpbGRyZW4pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSWYgYSBtZW51IGl0ZW0gaGFzIGFscmVhZHkgYmVlbiBzZWxlY3RlZCwgc3RhcnQgc2VhcmNo
aW5nIGZyb20gdGhlIGN1cnJlbnQKKyAgICAvLyBpdGVtIGRvd24gdGhlIGxpc3QuIFRoaXMgd2ls
bCBtYWtlIG11bHRpcGxlIGtleSBwcmVzc2VzIG9mIHRoZSBzYW1lIGNoYXJhY3RlcgorICAgIC8v
IGFkdmFuY2UgdGhlIHNlbGVjdGlvbi4KKyAgICBHTGlzdCogY3VycmVudENoaWxkID0gY2hpbGRy
ZW47CisgICAgaWYgKG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSkgeworICAgICAgICBjdXJy
ZW50Q2hpbGQgPSBnX2xpc3RfZmluZChjaGlsZHJlbiwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJ
dGVtKTsKKyAgICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpIHsKKyAgICAgICAgICAgIG1fY3VycmVu
dGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7CisgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGls
ZHJlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcGVhdGluZyBjaGFyYWN0ZXJzIHNob3Vs
ZCBpdGVyYXRlLgorICAgICAgICBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAg
ICBpZiAoR0xpc3QqIG5leHRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCkpCisgICAg
ICAgICAgICAgICAgY3VycmVudENoaWxkID0gbmV4dENoaWxkOworICAgICAgICB9CisgICAgfQor
CisgICAgR0xpc3QqIGZpcnN0Q2hpbGQgPSBjdXJyZW50Q2hpbGQ7CisgICAgZG8geworICAgICAg
ICBjdXJyZW50Q2hpbGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpOworICAgICAgICBpZiAo
IWN1cnJlbnRDaGlsZCkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworCisg
ICAgICAgIEdPd25QdHI8Z2NoYXI+IGl0ZW1UZXh0KGdfdXRmOF9jYXNlZm9sZChndGtfbWVudV9p
dGVtX2dldF9sYWJlbChHVEtfTUVOVV9JVEVNKGN1cnJlbnRDaGlsZC0+ZGF0YSkpLCAtMSkpOwor
ICAgICAgICBpZiAoIXN0cm5jbXAoc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCksIGl0
ZW1UZXh0LmdldCgpLCBwcmVmaXhMZW5ndGgpKSB7CisgICAgICAgICAgICBndGtfbWVudV9zaGVs
bF9zZWxlY3RfaXRlbShHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgR1RLX1dJREdFVChj
dXJyZW50Q2hpbGQtPmRhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fSB3aGlsZSAoY3VycmVudENoaWxkICE9IGZpcnN0Q2hpbGQpOworCisgICAgZ19saXN0X2ZyZWUo
Y2hpbGRyZW4pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6c2Vs
ZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiBpdGVtLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVu
dSkKK3sKKyAgICBwb3B1cE1lbnUtPm1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IEdUS19X
SURHRVQoaXRlbSk7Cit9CisKK2dib29sZWFuIEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENh
bGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIEd0a1BvcHVwTWVu
dSogcG9wdXBNZW51KQoreworICAgIHJldHVybiBwb3B1cE1lbnUtPnR5cGVBaGVhZEZpbmQoZXZl
bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1l
bnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43YzZhZDQ0ZjdkZDE2NjQwYzQyZjU5ZjJiYWIwNDBiMzZlZjgzNzMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIEd0a1BvcHVwTWVudV9oCisjZGVmaW5lIEd0a1BvcHVwTWVudV9o
CisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkg
R2RrRXZlbnRLZXk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrUG9wdXBNZW51
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtQb3B1cE1lbnUpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3RrUG9w
dXBNZW51PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHdGtQ
b3B1cE1lbnUoKSk7CisgICAgfQorCisgICAgfkd0a1BvcHVwTWVudSgpOworCisgICAgR3RrV2lk
Z2V0KiBwbGF0Zm9ybU1lbnUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwLmdldCgpOyB9CisgICAg
dm9pZCBjbGVhcigpOworICAgIHZvaWQgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgdm9pZCBhcHBl
bmRJdGVtKEd0a0FjdGlvbiopOworICAgIHZvaWQgcG9wVXAoY29uc3QgSW50U2l6ZSYsIGNvbnN0
IEludFBvaW50JiwgaW50IGl0ZW1zQ291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2
ZW50Kik7CisgICAgdm9pZCBwb3BEb3duKCk7CisKK3ByaXZhdGU6CisgICAgR3RrUG9wdXBNZW51
KCk7CisKKyAgICB2b2lkIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgYm9vbCB0eXBl
QWhlYWRGaW5kKEdka0V2ZW50S2V5Kik7CisKKyAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2
YXRlZChHdGtNZW51SXRlbSosIEd0a1BvcHVwTWVudSopOworICAgIHN0YXRpYyB2b2lkIG1lbnVQ
b3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiwgZ2ludCosIGdib29sZWFuKiwgR3RrUG9w
dXBNZW51Kik7CisgICAgc3RhdGljIHZvaWQgbWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiwgR3Rr
UG9wdXBNZW51Kik7CisgICAgc3RhdGljIHZvaWQgc2VsZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJ
dGVtKiwgR3RrUG9wdXBNZW51Kik7CisgICAgc3RhdGljIGdib29sZWFuIGtleVByZXNzRXZlbnRD
YWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEtleSosIEd0a1BvcHVwTWVudSopOworCisgICAg
R1JlZlB0cjxHdGtXaWRnZXQ+IG1fcG9wdXA7CisgICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247
CisgICAgU3RyaW5nIG1fY3VycmVudFNlYXJjaFN0cmluZzsKKyAgICB1aW50MzJfdCBtX3ByZXZp
b3VzS2V5RXZlbnRUaW1lc3RhbXA7CisgICAgdW5zaWduZWQgaW50IG1fcHJldmlvdXNLZXlFdmVu
dENoYXJhY3RlcjsKKyAgICBHdGtXaWRnZXQqIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbTsK
KyAgICB1bnNpZ25lZCBpbnQgbV9rZXlQcmVzc0hhbmRsZXJJRDsKK307CisKK30KKworI2VuZGlm
IC8vIEd0a1BvcHVwTWVudV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzk4YjViYTM2Mjg0ZDhjMTc5YWRmNDFjZDQ2MjBlMzlkZWRhOTgwYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0
a1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50
VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQor
eworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFjdHVhbGx5IGEgdmVyeSB0cmlja3kgb3BlcmF0aW9u
IGFuZCB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZAorICAgIC8vIG9ubHkgYmUg
dGhvdWdodCBvZiBhcyBhIGd1ZXNzLiBGb3IgaW5zdGFuY2UsIHNvbWV0aW1lcyBpdCBtYXkgbm90
IGNvcnJlY3RseSB0YWtlIGludG8KKyAgICAvLyBhY2NvdW50IHdpbmRvdyBkZWNvcmF0aW9ucy4K
KworICAgIEd0a1dpZGdldCogdG9wbGV2ZWxXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZl
bCh3aWRnZXQpOworICAgIGlmICghdG9wbGV2ZWxXaWRnZXQgfHwgIWd0a193aWRnZXRfaXNfdG9w
bGV2ZWwodG9wbGV2ZWxXaWRnZXQpIHx8ICFHVEtfSVNfV0lORE9XKHRvcGxldmVsV2lkZ2V0KSkK
KyAgICAgICAgcmV0dXJuIHBvaW50OworCisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3codG9wbGV2ZWxXaWRnZXQpOworICAgIGlmICghZ2RrV2luZG93KQor
ICAgICAgICByZXR1cm4gcG9pbnQ7CisKKyAgICBpbnQgeEluV2luZG93LCB5SW5XaW5kb3c7Cisg
ICAgZ3RrX3dpZGdldF90cmFuc2xhdGVfY29vcmRpbmF0ZXMod2lkZ2V0LCB0b3BsZXZlbFdpZGdl
dCwgcG9pbnQueCgpLCBwb2ludC55KCksICZ4SW5XaW5kb3csICZ5SW5XaW5kb3cpOworCisgICAg
aW50IHdpbmRvd09yaWdpblgsIHdpbmRvd09yaWdpblk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3Jp
Z2luKGdka1dpbmRvdywgJndpbmRvd09yaWdpblgsICZ3aW5kb3dPcmlnaW5ZKTsKKworICAgIHJl
dHVybiBJbnRQb2ludCh3aW5kb3dPcmlnaW5YICsgeEluV2luZG93LCB3aW5kb3dPcmlnaW5ZICsg
eUluV2luZG93KTsKK30KKworYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3Rr
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lk
Z2V0KSAmJiBHVEtfSVNfV0lORE9XKHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9X
KHdpZGdldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0
aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5YmRkZTY1OThmMDJkMzM1N2EwMGE3MTMzODk2YmFjNTRj
MmRhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGll
cy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3RrVXRp
bGl0aWVzX2ggCisjZGVmaW5lIEd0a1V0aWxpdGllc19oIAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEludFBvaW50OworCitJbnRQb2ludCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVl
blBvaW50KEd0a1dpZGdldCosIGNvbnN0IEludFBvaW50Jik7Citib29sIHdpZGdldElzT25zY3Jl
ZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gR3RrVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
V2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDM3NmJjNzcxNGIzOTU0OTAw
MTJiOTc3OTZhMTk5N2ZjYTNjMGNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldEJhY2tpbmdT
dG9yZS5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlJlZlB0ckNh
aXJvLmgiCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+Cisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIFBp
eG1hcCBtX3BpeG1hcDsKKyAgICBHQyBtX2djOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG1fc3VyZmFjZTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZVBy
aXZhdGU+IGNyZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0
ZSh3aWRnZXQsIHNpemUpKTsKKyAgICB9CisKKyAgICB+V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0
ZSgpCisgICAgeworICAgICAgICBYRnJlZVBpeG1hcChtX2Rpc3BsYXksIG1fcGl4bWFwKTsKKyAg
ICAgICAgWEZyZWVHQyhtX2Rpc3BsYXksIG1fZ2MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAv
LyBXZSBrZWVwIHR3byBjb3BpZXMgb2YgdGhlIHN1cmZhY2UgaGVyZSwgd2hpY2ggd2lsbCBkb3Vi
bGUgdGhlIG1lbW9yeSB1c2FnZSwgYnV0IGluY3JlYXNlCisgICAgLy8gc2Nyb2xsaW5nIHBlcmZv
cm1hbmNlIHNpbmNlIHdlIGRvIG5vdCBoYXZlIHRvIGtlZXAgcmVhbGxvY2F0aW5nIGEgbWVtb3J5
IHJlZ2lvbiBkdXJpbmcKKyAgICAvLyBxdWljayBzY3JvbGxpbmcgcmVxdWVzdHMuCisgICAgV2lk
Z2V0QmFja2luZ1N0b3JlUHJpdmF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKKyAgICB7CisgICAgICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ3RrX3dpZGdldF9nZXRf
dmlzdWFsKHdpZGdldCk7CisgICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3Zpc3VhbF9n
ZXRfc2NyZWVuKHZpc3VhbCk7CisgICAgICAgIG1fZGlzcGxheSA9IEdES19TQ1JFRU5fWERJU1BM
QVkoc2NyZWVuKTsKKyAgICAgICAgbV9waXhtYXAgPSBYQ3JlYXRlUGl4bWFwKG1fZGlzcGxheSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19XSU5ET1dfWElEKGdka19zY3Jl
ZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKSk7CisgICAgICAgIG1fZ2Mg
PSBYQ3JlYXRlR0MobV9kaXNwbGF5LCBtX3BpeG1hcCwgMCwgMCk7CisKKyAgICAgICAgbV9zdXJm
YWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShtX2Rpc3BsYXksIG1fcGl4
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSkpOworICAgIH0KK307CisKK1Bhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0b3JlPiBXaWRnZXRC
YWNraW5nU3RvcmU6OmNyZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdpZGdldEJhY2tpbmdTdG9yZSh3aWRnZXQs
IHNpemUpKTsKK30KKworV2lkZ2V0QmFja2luZ1N0b3JlOjpXaWRnZXRCYWNraW5nU3RvcmUoR3Rr
V2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX3ByaXZhdGUoV2lk
Z2V0QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRlKHdpZGdldCwgc2l6ZSkpCisgICAgLCBtX3Np
emUoc2l6ZSkKK3sKK30KKworV2lkZ2V0QmFja2luZ1N0b3JlOjp+V2lkZ2V0QmFja2luZ1N0b3Jl
KCkKK3sKK30KKworY2Fpcm9fc3VyZmFjZV90KiBXaWRnZXRCYWNraW5nU3RvcmU6OmNhaXJvU3Vy
ZmFjZSgpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpOworfQorCit2
b2lkIFdpZGdldEJhY2tpbmdTdG9yZTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3Qs
IGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBJbnRSZWN0IHRhcmdldFJlY3Qo
c2Nyb2xsUmVjdCk7CisgICAgdGFyZ2V0UmVjdC5tb3ZlKHNjcm9sbE9mZnNldCk7CisgICAgdGFy
Z2V0UmVjdC5pbnRlcnNlY3Qoc2Nyb2xsUmVjdCk7CisgICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fcHJpdmF0
ZS0+bV9zdXJmYWNlLmdldCgpKTsKKyAgICBYQ29weUFyZWEobV9wcml2YXRlLT5tX2Rpc3BsYXks
IG1fcHJpdmF0ZS0+bV9waXhtYXAsIG1fcHJpdmF0ZS0+bV9waXhtYXAsIG1fcHJpdmF0ZS0+bV9n
YywgCisgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpIC0gc2Nyb2xsT2Zmc2V0LndpZHRoKCks
IHRhcmdldFJlY3QueSgpIC0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpLAorICAgICAgICAgICAgICB0
YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgIHRh
cmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2Rp
cnR5X3JlY3RhbmdsZShtX3ByaXZhdGUtPm1fc3VyZmFjZS5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0tVUkxHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkMWZlYWNhOTZhNGEwOWY0YmJkMDcwODA5
YjY4ZTE4NTQ0MTY4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tV
UkxHdGsuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisj
aW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmlu
ZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwg
IWlzTG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdSZWZQdHI8
R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoKCkudXRmOCgp
LmRhdGEoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gZmlsZW5hbWUoZ19maWxlX2dldF9wYXRoKGZp
bGUuZ2V0KCkpKTsKKyAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhmaWxlbmFtZS5nZXQoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlC
aW5kaW5nVHJhbnNsYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTM1YmJkNjI2M2ZmNTk1ODBjYWIwN2I1
NmZjZDM5NDRmZTAwOWEwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
S2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5QmluZGluZ1RyYW5zbGF0
b3IuaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlIDxnZGsvZ2Rra2V5
c3ltcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+IEludENvbnN0Q2hhckhhc2hNYXA7
CisKK3N0YXRpYyB2b2lkIGJhY2tzcGFjZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlC
aW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNz
aW9uX2J5X25hbWUod2lkZ2V0LCAiYmFja3NwYWNlIik7CisgICAgdHJhbnNsYXRvci0+YWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoIkRlbGV0ZUJhY2t3YXJkIik7Cit9CisKK3N0YXRpYyB2b2lkIHNl
bGVjdEFsbENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBzZWxlY3QsIEtleUJp
bmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Np
b25fYnlfbmFtZSh3aWRnZXQsICJzZWxlY3QtYWxsIik7CisgICAgdHJhbnNsYXRvci0+YWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoc2VsZWN0ID8gIlNlbGVjdEFsbCIgOiAiVW5zZWxlY3QiKTsKK30K
Kworc3RhdGljIHZvaWQgY3V0Q2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtl
eUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1p
c3Npb25fYnlfbmFtZSh3aWRnZXQsICJjdXQtY2xpcGJvYXJkIik7CisgICAgdHJhbnNsYXRvci0+
YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkN1dCIpOworfQorCitzdGF0aWMgdm9pZCBjb3B5Q2xp
cGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0
cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQs
ICJjb3B5LWNsaXBib2FyZCIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21t
YW5kKCJDb3B5Iik7Cit9CisKK3N0YXRpYyB2b2lkIHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2soR3Rr
V2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQoreworICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwYXN0ZS1jbGlwYm9hcmQi
KTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiUGFzdGUiKTsKK30K
Kworc3RhdGljIHZvaWQgdG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQs
IEtleUJpbmRpbmdUcmFuc2xhdG9yKikKK3sKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRvZ2ds
aW5nIHRoZSBvdmVyd3JpdGUgbW9kZSwgYnV0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVjdHMK
KyAgICAvLyB0aGUgR3RrVGV4dFZpZXcgdG8gaGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxlIHRo
aXMgc2lnbmFsIGp1c3QgdG8gc3RvcCBpdC4KKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5
X25hbWUod2lkZ2V0LCAidG9nZ2xlLW92ZXJ3cml0ZSIpOworfQorCisvLyBHVEsrIHdpbGwgc3Rp
bGwgc2VuZCB0aGVzZSBzaWduYWxzIHRvIHRoZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVseSBz
dG9wIHNpZ25hbAorLy8gZW1pc3Npb24gd2l0aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5Lgor
c3RhdGljIHZvaWQgcG9wdXBNZW51Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRp
bmdUcmFuc2xhdG9yKikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lk
Z2V0LCAicG9wdXAtbWVudSIpOworfQorCitzdGF0aWMgdm9pZCBzaG93SGVscENhbGxiYWNrKEd0
a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciopCit7CisgICAgZ19zaWduYWxf
c3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNob3ctaGVscCIpOworfQorCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZ3RrRGVsZXRlQ29tbWFuZHNbXVsyXSA9IHsKKyAgICB7ICJEZWxl
dGVCYWNrd2FyZCIsICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAg
ICAgICAgICAgfSwgLy8gQ2hhcmFjdGVycworICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAg
ICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3Jk
IGVuZHMKKyAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0ZVdvcmRG
b3J3YXJkIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gV29yZHMKKyAgICB7ICJEZWxldGVUb0Jl
Z2lubmluZ09mTGluZSIsICAgICAgIkRlbGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAg
ICAgfSwgLy8gTGluZXMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgIkRl
bGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gTGluZSBlbmRzCisgICAg
eyAiRGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBo
IiAgICAgICAgICAgICAgIH0sIC8vIFBhcmFncmFwaCBlbmRzCisgICAgeyAiRGVsZXRlVG9CZWdp
bm5pbmdPZlBhcmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAg
IH0sIC8vIFBhcmFncmFwaHMKKyAgICB7IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBXaGl0ZXNwYWNlIChN
LVwgaW4gRW1hY3MpCit9OworCitzdGF0aWMgdm9pZCBkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2so
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0RlbGV0ZVR5cGUgZGVsZXRlVHlwZSwgZ2ludCBjb3VudCwg
S2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9l
bWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImRlbGV0ZS1mcm9tLWN1cnNvciIpOworICAgIGludCBk
aXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKKworICAgIC8vIEVuc3VyaW5nIHRoYXQgZGVs
ZXRlVHlwZSA8PSBHX05fRUxFTUVOVFMgaGVyZSByZXN1bHRzIGluIGEgY29tcGlsZXIgd2Fybmlu
ZworICAgIC8vIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZS4KKworICAgIGlmIChk
ZWxldGVUeXBlID09IEdUS19ERUxFVEVfV09SRFMpIHsKKyAgICAgICAgaWYgKCFkaXJlY3Rpb24p
IHsKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3Zl
V29yZEZvcndhcmQiKTsKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JD
b21tYW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIp
OworICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVX
b3JkRm9yd2FyZCIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdU
S19ERUxFVEVfRElTUExBWV9MSU5FUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAg
ICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5p
bmdPZkxpbmUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0VuZE9mTGluZSIpOworICAgIH0gZWxzZSBpZiAoZGVs
ZXRlVHlwZSA9PSBHVEtfREVMRVRFX1BBUkFHUkFQSFMpIHsKKyAgICAgICAgaWYgKCFkaXJlY3Rp
b24pCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92
ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJh
bnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0VuZE9mUGFyYWdyYXBoIik7
CisgICAgfQorCisgICAgY29uc3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a0RlbGV0ZUNvbW1hbmRz
W2RlbGV0ZVR5cGVdW2RpcmVjdGlvbl07CisgICAgaWYgKCFyYXdDb21tYW5kKQorICAgICAgcmV0
dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCisgICAgICAg
IHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOworfQorCitz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgZ3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7CisgICAgeyAi
TW92ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRm9y
d2FyZCIsCisgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAg
ICAgICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8g
Rm9yd2FyZC9iYWNrd2FyZCBncmFwaGVtZQorICAgIHsgIk1vdmVMZWZ0IiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiwKKyAgICAgICJNb3ZlQmFja3dh
cmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBMZWZ0L3JpZ2h0IGdyYXBoZW1lCisgICAg
eyAiTW92ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
V29yZEZvcndhcmQiLAorICAgICAgIk1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24i
LCAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAg
IH0sIC8vIEZvcndhcmQvYmFja3dhcmQgd29yZAorICAgIHsgIk1vdmVVcCIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iLAorICAgICAgIk1vdmVVcEFu
ZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZQorICAgIHsgIk1v
dmVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5k
T2ZMaW5lIiwKKyAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24i
LCAgICAgICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAv
LyBVcC9kb3duIGxpbmUgZW5kcworICAgIHsgIk1vdmVQYXJhZ3JhcGhCYWNrd2FyZCIsICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZVBhcmFncmFwaEZvcndhcmQiLAorICAgICAgIk1vdmVQ
YXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVBhcmFncmFw
aEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBocwor
ICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgICAgICAgICAgICAgICAgICAgICAi
TW92ZVRvRW5kT2ZQYXJhZ3JhcGgiLAorICAgICAgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
QW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBoIGVuZHMuCisgICAgeyAiTW92ZVBhZ2VV
cCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iLAor
ICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAi
TW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24g
cGFnZQorICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiLCAgICAgICAgICAgICAgICAg
ICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIsCisgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1
bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgfSwgLy8gQmVnaW4vZW5kIG9mIGJ1ZmZlcgorICAgIHsgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSG9yaXpvbnRhbCBwYWdlIG1vdmVt
ZW50Cit9OworCitzdGF0aWMgdm9pZCBtb3ZlQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a01vdmVtZW50U3RlcCBzdGVwLCBnaW50IGNvdW50LCBnYm9vbGVhbiBleHRlbmRTZWxl
Y3Rpb24sIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFs
X3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJtb3ZlLWN1cnNvciIpOworICAgIGludCBk
aXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKKyAgICBpZiAoZXh0ZW5kU2VsZWN0aW9uKQor
ICAgICAgICBkaXJlY3Rpb24gKz0gMjsKKworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RlcCkgPj0gR19OX0VMRU1FTlRTKGd0a01vdmVDb21tYW5kcykpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtNb3ZlQ29tbWFuZHNbc3RlcF1bZGly
ZWN0aW9uXTsKKyAgICBpZiAoIXJhd0NvbW1hbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQorICAgICAgICB0cmFuc2xhdG9yLT5h
ZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKK30KKworS2V5QmluZGluZ1RyYW5z
bGF0b3I6OktleUJpbmRpbmdUcmFuc2xhdG9yKCkKKyAgICA6IG1fbmF0aXZlV2lkZ2V0KGd0a190
ZXh0X3ZpZXdfbmV3KCkpCit7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5n
ZXQoKSwgImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0soYmFja3NwYWNlQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY3V0LWNsaXBib2Fy
ZCIsIEdfQ0FMTEJBQ0soY3V0Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY29weS1jbGlwYm9hcmQiLCBHX0NBTExC
QUNLKGNvcHlDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwYXN0ZS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKHBhc3Rl
Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZl
V2lkZ2V0LmdldCgpLCAic2VsZWN0LWFsbCIsIEdfQ0FMTEJBQ0soc2VsZWN0QWxsQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAibW92
ZS1jdXJzb3IiLCBHX0NBTExCQUNLKG1vdmVDdXJzb3JDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJkZWxldGUtZnJvbS1jdXJzb3Ii
LCBHX0NBTExCQUNLKGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJ0b2dnbGUtb3ZlcndyaXRlIiwgR19D
QUxMQkFDSyh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwb3B1cC1tZW51IiwgR19DQUxMQkFDSyhwb3B1
cE1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRn
ZXQuZ2V0KCksICJzaG93LWhlbHAiLCBHX0NBTExCQUNLKHNob3dIZWxwQ2FsbGJhY2spLCB0aGlz
KTsKK30KKworc3RydWN0IEtleUNvbWJpbmF0aW9uRW50cnkgeworICAgIHVuc2lnbmVkIGdka0tl
eUNvZGU7CisgICAgdW5zaWduZWQgc3RhdGU7CisgICAgY29uc3QgY2hhciogbmFtZTsKK307CisK
K3N0YXRpYyBjb25zdCBLZXlDb21iaW5hdGlvbkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7Cisg
ICAgeyBHREtfYiwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJUb2dn
bGVCb2xkIiAgICB9LAorICAgIHsgR0RLX2ksICAgICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAg
ICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgfSwKKyAgICB7IEdES19Fc2NhcGUsICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCisgICAgeyBHREtf
Z3JlYXRlciwgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAg
ICB9LAorfTsKKworLy8gVGhlc2UgY29tbWFuZHMgYXJlIHRleHQgaW5zZXJ0aW9uIGNvbW1hbmRz
LCBzbyBzaG91bGQgdGFrZSBwbGFjZQorLy8gd2hpbGUgaGFuZGxpbmcgdGhlIEtleVByZXNzIGV2
ZW50Lgorc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0aW9uRW50cnkga2V5UHJlc3NFbnRyaWVzW10g
PSB7CisgICAgeyBHREtfVGFiLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJJbnNlcnRUYWIiICAgICB9LAorICAgIHsgR0RLX1RhYiwgICAgICAgR0RLX1NISUZUX01BU0ss
ICAgICAgICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgfSwKK307CisKK3ZvaWQgS2V5QmluZGlu
Z1RyYW5zbGF0b3I6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2
ZW50LCBFdmVudFR5cGUgdHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCit7
CisgICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuY2xlYXIoKTsKKworI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdUS19PQkpFQ1QobV9u
YXRpdmVXaWRnZXQuZ2V0KCkpLCBldmVudCk7CisjZWxzZQorICAgIGd0a19iaW5kaW5nc19hY3Rp
dmF0ZV9ldmVudChHX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGV2ZW50KTsKKyNlbmRp
ZgorCisgICAgaWYgKCFtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgY29tbWFuZExpc3QuYXBwZW5kKG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFz
aE1hcCwga2V5RG93bkNvbW1hbmRzTWFwLCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJ
bnRDb25zdENoYXJIYXNoTWFwLCBrZXlQcmVzc0NvbW1hbmRzTWFwLCAoKSk7CisKKyAgICBpZiAo
a2V5RG93bkNvbW1hbmRzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleURvd25FbnRyaWVzKTsgaSsrKQorICAgICAgICAgICAg
a2V5RG93bkNvbW1hbmRzTWFwLnNldChrZXlEb3duRW50cmllc1tpXS5zdGF0ZSA8PCAxNiB8IGtl
eURvd25FbnRyaWVzW2ldLmdka0tleUNvZGUsIGtleURvd25FbnRyaWVzW2ldLm5hbWUpOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5UHJlc3NFbnRy
aWVzKTsgaSsrKQorICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC5zZXQoa2V5UHJlc3NF
bnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmdka0tleUNvZGUsIGtl
eVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9CisKKyAgICAvLyBTcGVjaWFsLWNhc2UgZW50
ZXIga2V5cyBmb3Igd2Ugd2FudCB0aGVtIHRvIHdvcmsgcmVnYXJkbGVzcyBvZiBtb2RpZmllci4K
KyAgICBpZiAoKGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JldHVybiB8fCBldmVudC0+a2V5dmFsID09
IEdES19LUF9FbnRlciB8fCBldmVudC0+a2V5dmFsID09IEdES19JU09fRW50ZXIpICYmIHR5cGUg
PT0gS2V5UHJlc3MpIHsKKyAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKCJJbnNlcnROZXdMaW5l
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRz
LCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0LgorICAgIGludCBt
YXBLZXkgPSBldmVudC0+c3RhdGUgPDwgMTYgfCBldmVudC0+a2V5dmFsOworICAgIGlmIChtYXBL
ZXkpIHsKKyAgICAgICAgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiogY29tbWFuZE1hcCA9IHR5
cGUgPT0gS2V5RG93biA/ICAma2V5RG93bkNvbW1hbmRzTWFwIDogJmtleVByZXNzQ29tbWFuZHNN
YXA7CisgICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kU3RyaW5nID0gY29tbWFuZE1hcC0+
Z2V0KG1hcEtleSkpIHsKKyAgICAgICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZChjb21tYW5kU3Ry
aW5nKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5k
aW5nVHJhbnNsYXRvci5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRv
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM2NDM2ZGU2Y2I4NjNkOWEzNjFiNzc0MjhjMTQ5NzQ3ZjMzNGJjODUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xh
dG9yLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBLZXlC
aW5kaW5nVHJhbnNsYXRvcl9oCisjZGVmaW5lIEtleUJpbmRpbmdUcmFuc2xhdG9yX2gKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtF
dmVudEtleTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXlCaW5kaW5nVHJhbnNs
YXRvciB7CitwdWJsaWM6CisgICAgS2V5QmluZGluZ1RyYW5zbGF0b3IoKTsKKworICAgIGVudW0g
RXZlbnRUeXBlIHsgS2V5RG93biwgS2V5UHJlc3MgfTsKKyAgICB2b2lkIGdldEVkaXRvckNvbW1h
bmRzRm9yS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBFdmVudFR5cGUsIFZlY3RvcjxXVEY6OlN0cmlu
Zz4mKTsKKyAgICB2b2lkIGFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1h
bmQpIHsgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOyB9CisKK3ByaXZh
dGU6CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fbmF0aXZlV2lkZ2V0OworICAgIFZlY3RvcjxX
VEY6OlN0cmluZz4gbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
TGFuZ3VhZ2VHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzdhNzFlNTYxYzUzNDRjMDVlZjAzYmYxMjgzMzU2ZmM1MmE0MmZkZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBVc2luZyBwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdCgpIGhlcmUg
aXMgbm90IGFuIG9wdGlvbiwgYmVjYXVzZQorLy8gaXQgZG9lc24ndCBzdXBwb3J0IGNoYW5naW5n
IHRoZSBsb2NhbGUgaW4gcnVudGltZSwgc28gaXQgcmV0dXJucworLy8gYWx3YXlzIHRoZSBzYW1l
IHZhbHVlLgorc3RhdGljIFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkKK3sKKyAgICBjaGFyKiBs
b2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKKworICAgIGlmICghbG9j
YWxlRGVmYXVsdCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiYyIpOworCisgICAgR093blB0cjxn
Y2hhcj4gbm9ybWFsaXplZERlZmF1bHQoZ19hc2NpaV9zdHJkb3duKGxvY2FsZURlZmF1bHQsIC0x
KSk7CisgICAgY2hhciogcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpLCAnXycp
OworCisgICAgaWYgKHB0cikKKyAgICAgICAgKnB0ciA9ICctJzsKKworICAgIHB0ciA9IHN0cmNo
cihub3JtYWxpemVkRGVmYXVsdC5nZXQoKSwgJy4nKTsKKworICAgIGlmIChwdHIpCisgICAgICAg
ICpwdHIgPSAnXDAnOworCisgICAgcmV0dXJuIFN0cmluZyhub3JtYWxpemVkRGVmYXVsdC5nZXQo
KSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcygp
Cit7CisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKKyAgICB1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChwbGF0Zm9ybUxhbmd1YWdlKCkpOworICAgIHJldHVy
biB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAyY2FhMmY5ZGYyNTJmNjky
NWJhMjAzNGU0Y2E0NTkxYmMxNWI2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKQEAgLTAsMCArMSw3ODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGd0a1N0b2NrTGFiZWwoY29uc3QgY2hhciogc3RvY2tJRCkKK3sKKyAgICBHdGtTdG9j
a0l0ZW0gaXRlbTsKKyAgICBpZiAoIWd0a19zdG9ja19sb29rdXAoc3RvY2tJRCwgJml0ZW0pKQor
ICAgICAgICByZXR1cm4gc3RvY2tJRDsKKyAgICByZXR1cm4gaXRlbS5sYWJlbDsKK30KKworU3Ry
aW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiU3VibWl0IikpOworfQorCitTdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3VibWl0IikpOworfQorCitTdHJpbmcg
cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlJlc2V0IikpOworfQorCitTdHJpbmcgZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiRGV0YWlscyIpKTsKK30KKworU3RyaW5n
IHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3Jk
czogIikpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3NlIEZpbGUiKSk7Cit9CisKK1N0cmluZyBm
aWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJDaG9vc2UgRmlsZXMiKSk7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uTm9G
aWxlU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiKE5v
bmUpIikpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSkiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJPcGVuIExpbmsgaW4gTmV3IF9XaW5kb3ciKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIl9Eb3dubG9hZCBMaW5rZWQgRmlsZSIpKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkNvcHkgTGluayBMb2NfYXRpb24iKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfSW1hZ2UgaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIlNhX3ZlIEltYWdlIEFzIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIkNvcF95IEltYWdlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNvcHkgSW1hZ2UgX0FkZHJlc3MiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiT3BlbiBfVmlkZW8gaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJPcGVuIF9BdWRpbyBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBWaWRlbyBMaW5rIExvY2F0aW9uIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBBdWRpbyBMaW5rIExvY2F0aW9u
IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scygp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1RvZ2dsZSBNZWRpYSBDb250cm9s
cyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVG9nZ2xlIE1lZGlhIF9Mb29wIFBsYXli
YWNrIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3Jl
ZW4oKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlN3aXRjaCBWaWRlbyB0byBf
RnVsbHNjcmVlbiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1BsYXkiKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJfUGF1c2UiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRp
YU11dGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9NdXRlIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0ZyYW1lIGluIE5ldyBXaW5kb3ciKSk7
Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkKK3sKKyAgICBzdGF0aWMgU3Ry
aW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NL
X0NPUFkpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0RlbGV0ZSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5n
Ojpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19ERUxFVEUpKTsKKyAgICByZXR1cm4g
c3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpCit7
CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9j
a0xhYmVsKEdUS19TVE9DS19TRUxFQ1RfQUxMKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlKCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHMoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIklucHV0IF9NZXRob2RzIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwg
PSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0dPX0JBQ0spKTsKKyAg
ICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9y
d2FyZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRG
OChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19HT19GT1JXQVJEKSk7CisgICAgcmV0dXJuIHN0b2Nr
TGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkKK3sKKyAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RL
X1NUT0NLX1NUT1ApKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X1JlbG9hZCIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCit7CisgICAg
c3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVs
KEdUS19TVE9DS19DVVQpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwg
PSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1BBU1RFKSk7CisgICAg
cmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNz
ZXNGb3VuZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTm8gR3Vlc3NlcyBG
b3VuZCIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfSWdub3JlIFNwZWxsaW5nIikpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0xlYXJuIFNwZWxsaW5nIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJfU2VhcmNoIHRoZSBXZWIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdMb29rVXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfTG9vayBVcCBpbiBEaWN0aW9uYXJ5IikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIl9PcGVuIExpbmsiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVH
cmFtbWFyKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJZ25vcmUgX0dyYW1t
YXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlNwZWxsaW5nIGFuZCBfR3JhbW1hciIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hv
dykKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzaG93ID8gXygiX1Nob3cgU3BlbGxp
bmcgYW5kIEdyYW1tYXIiKSA6IF8oIl9IaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiX0NoZWNrIERvY3VtZW50IE5vdyIpKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgX1R5cGluZyIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgX0dyYW1tYXIgV2l0aCBT
cGVsbGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfRm9udCIpKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0JvbGQoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9
IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQk9MRCkpOworICAgIHJl
dHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkK
K3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0
b2NrTGFiZWwoR1RLX1NUT0NLX0lUQUxJQykpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkKK3sKKyAgICBzdGF0aWMgU3Ry
aW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NL
X1VOREVSTElORSkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnT3V0bGluZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X091dGxpbmUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVu
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiSW5zcGVjdCBfRWxlbWVudCIp
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk1NYXJrKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk0gX0xlZnQtdG8tcmlnaHQgbWFy
ayIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE1NYXJr
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTE0gX1JpZ2h0LXRvLWxlZnQg
bWFyayIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUkVN
YXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUkUgTGVmdC10by1yaWdo
dCBfZW1iZWRkaW5nIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFJMRU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMRSBSaWdo
dC10by1sZWZ0IGVfbWJlZGRpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0TFJPTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
TFJPIExlZnQtdG8tcmlnaHQgX292ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFJMT01hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIlJMTyBSaWdodC10by1sZWZ0IG9fdmVycmlkZSIpKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRQREZNYXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJQREYgX1BvcCBkaXJlY3Rpb25hbCBmb3JtYXR0aW5nIikpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmsoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlpXUyBfWmVybyB3aWR0aCBzcGFjZSIpKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV0ogWmVybyB3aWR0aCBfam9pbmVyIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV05KIFplcm8gd2lkdGggX25vbi1qb2luZXIi
KSk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk5vIHJlY2VudCBzZWFyY2hlcyIpKTsKK30KKwor
U3RyaW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlJlY2VudCBzZWFyY2hlcyIpKTsKK30KKworU3RyaW5nIHNlYXJjaE1l
bnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiX0NsZWFyIHJlY2VudCBzZWFyY2hlcyIpKTsKK30KKworU3RyaW5nIEFYRGVmaW5pdGlv
blRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlZmluaXRpb24iKSk7
Cit9CisKK1N0cmluZyBBWERlc2NyaXB0aW9uTGlzdFRlcm1UZXh0KCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJ0ZXJtIikpOworfQorCitTdHJpbmcgQVhEZXNjcmlwdGlvbkxp
c3REZXRhaWxUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJkZXNjcmlw
dGlvbiIpKTsKK30KKworU3RyaW5nIEFYRm9vdGVyUm9sZURlc2NyaXB0aW9uVGV4dCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZm9vdGVyIikpOworfQorCitTdHJpbmcgQVhC
dXR0b25BY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwcmVz
cyIpKTsKK30KKworU3RyaW5nIEFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWxlY3QiKSk7Cit9CisKK1N0cmluZyBBWFRleHRGaWVs
ZEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImFjdGl2YXRl
IikpOworfQorCitTdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bmNoZWNrIikpOworfQorCitTdHJpbmcgQVhVbmNo
ZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oImNoZWNrIikpOworfQorCitTdHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygianVtcCIpKTsKK30KKworU3RyaW5nIEFYTWVudUxpc3RQ
b3B1cEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEFY
TWVudUxpc3RBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisgICAgCitT
dHJpbmcgbWlzc2luZ1BsdWdpblRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIk1pc3NpbmcgUGx1Zy1pbiIpKTsKK30KKworU3RyaW5nIGNyYXNoZWRQbHVnaW5UZXh0KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IlBsdWctaW4gRmFpbHVyZSIpKTsKK30KKworU3RyaW5nIGJsb2NrZWRQbHVnaW5CeUNvbnRlbnRT
ZWN1cml0eVBvbGljeVRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitTdHJpbmcgaW5zZWN1cmVQbHVnaW5WZXJzaW9uVGV4dCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBp
bmFjdGl2ZVBsdWdpblRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitTdHJpbmcgbXVsdGlwbGVGaWxlVXBsb2FkVGV4dCh1bnNpZ25lZCBu
dW1iZXJPZkZpbGVzKQoreworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGZpbGUgZ2V0cyBsb2NhbGl6
ZWQsIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsb2NhbGl6ZWQgYXMgb25lIHN0cmluZyB3aXRoIGEg
d2lsZGNhcmQgZm9yIHRoZSBudW1iZXIuCisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG51bWJl
ck9mRmlsZXMpICsgU3RyaW5nOjpmcm9tVVRGOChfKCIgZmlsZXMiKSk7Cit9CisKK1N0cmluZyB1
bmtub3duRmlsZVNpemVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJV
bmtub3duIikpOworfQorCitTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0
cmR1cF9wcmludGYoQ18oIlRpdGxlIHN0cmluZyBmb3IgaW1hZ2VzIiwgIiVzICAoJWR4JWQgcGl4
ZWxzKSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5h
bWUudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKK30KKworCisjaWYgRU5BQkxFKFZJREVPKQorCitTdHJp
bmcgbWVkaWFFbGVtZW50TG9hZGluZ1N0YXRlVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiTG9hZGluZy4uLiIpKTsKK30KKworU3RyaW5nIG1lZGlhRWxlbWVudExpdmVC
cm9hZGNhc3RTdGF0ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxp
dmUgQnJvYWRjYXN0IikpOworfQorCitTdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVu
dFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxl
bWVudCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQg
Y29udHJvbGxlciIpKTsKKyAgICBpZiAobmFtZSA9PSAiVmlkZW9FbGVtZW50IikKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidmlkZW8gZWxlbWVudCBjb250cm9sbGVyIikpOwor
ICAgIGlmIChuYW1lID09ICJNdXRlQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygibXV0ZSIpKTsKKyAgICBpZiAobmFtZSA9PSAiVW5NdXRlQnV0dG9uIikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidW5tdXRlIikpOworICAgIGlmIChuYW1lID09
ICJQbGF5QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGxheSIp
KTsKKyAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJwYXVzZSIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2xpZGVyIikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGltZSIpKTsKKyAgICBpZiAobmFt
ZSA9PSAiU2xpZGVyVGh1bWIiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0
aW1lbGluZSBzbGlkZXIgdGh1bWIiKSk7CisgICAgaWYgKG5hbWUgPT0gIlJld2luZEJ1dHRvbiIp
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImJhY2sgMzAgc2Vjb25kcyIpKTsK
KyAgICBpZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCisgICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInJldHVybiB0byByZWFsdGltZSIpKTsKKyAgICBpZiAobmFt
ZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiZWxhcHNlZCB0aW1lIikpOworICAgIGlmIChuYW1lID09ICJUaW1lUmVtYWluaW5nRGlz
cGxheSIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJlbWFpbmluZyB0aW1l
IikpOworICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5IikKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygic3RhdHVzIikpOworICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxz
Y3JlZW5CdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbnRlciBm
dWxsc2NyZWVuIikpOworICAgIGlmIChuYW1lID09ICJFeGl0RnVsbHNjcmVlbkJ1dHRvbiIpCisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImV4aXQgZnVsbHNjcmVlbiIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJmYXN0IGZvcndhcmQiKSk7CisgICAgaWYgKG5hbWUgPT0gIlNlZWtCYWNr
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZmFzdCByZXZlcnNl
IikpOworICAgIGlmIChuYW1lID09ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzaG93IGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiaGlkZSBjbG9zZWQgY2FwdGlvbnMiKSk7CisgICAgaWYgKG5h
bWUgPT0gIkNvbnRyb2xzUGFuZWwiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJtZWRpYSBjb250cm9scyIpKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRI
ZWxwVGV4dChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxl
bWVudCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQg
cGxheWJhY2sgY29udHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOworICAgIGlmIChuYW1lID09
ICJWaWRlb0VsZW1lbnQiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2aWRl
byBlbGVtZW50IHBsYXliYWNrIGNvbnRyb2xzIGFuZCBzdGF0dXMgZGlzcGxheSIpKTsKKyAgICBp
ZiAobmFtZSA9PSAiTXV0ZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIm11dGUgYXVkaW8gdHJhY2tzIikpOworICAgIGlmIChuYW1lID09ICJVbk11dGVCdXR0b24i
KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bm11dGUgYXVkaW8gdHJhY2tz
IikpOworICAgIGlmIChuYW1lID09ICJQbGF5QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiYmVnaW4gcGxheWJhY2siKSk7CisgICAgaWYgKG5hbWUgPT0gIlBhdXNl
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF1c2UgcGxheWJh
Y2siKSk7CisgICAgaWYgKG5hbWUgPT0gIlNsaWRlciIpCisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIm1vdmllIHRpbWUgc2NydWJiZXIiKSk7CisgICAgaWYgKG5hbWUgPT0gIlNs
aWRlclRodW1iIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGlt
ZSBzY3J1YmJlciB0aHVtYiIpKTsKKyAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBtb3ZpZSBiYWNrIDMwIHNlY29u
ZHMiKSk7CisgICAgaWYgKG5hbWUgPT0gIlJldHVyblRvUmVhbHRpbWVCdXR0b24iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyZXR1cm4gc3RyZWFtaW5nIG1vdmllIHRvIHJl
YWwgdGltZSIpKTsKKyAgICBpZiAobmFtZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3ZpZSB0aW1lIGluIHNlY29u
ZHMiKSk7CisgICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibnVtYmVyIG9mIHNlY29uZHMgb2YgbW92aWUgcmVt
YWluaW5nIikpOworICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5IikKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3ZpZSBzdGF0dXMiKSk7CisgICAgaWYg
KG5hbWUgPT0gIlNlZWtCYWNrQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygic2VlayBxdWlja2x5IGJhY2siKSk7CisgICAgaWYgKG5hbWUgPT0gIlNlZWtGb3J3YXJk
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBxdWlja2x5
IGZvcndhcmQiKSk7CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBsYXkgbW92aWUgaW4gZnVsbHNjcmVl
biBtb2RlIikpOworICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJFeGl0IGZ1bGxzY3JlZW4gbW9kZSIpKTsK
KyAgICBpZiAobmFtZSA9PSAiU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RhcnQgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlvbnMi
KSk7CisgICAgaWYgKG5hbWUgPT0gIkhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCisgICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0b3AgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlv
bnMiKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBsb2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihmbG9hdCB0aW1lKQor
eworICAgIGlmICghc3RkOjppc2Zpbml0ZSh0aW1lKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiaW5kZWZpbml0ZSB0aW1lIikpOworCisgICAgaW50IHNlY29uZHMgPSBzdGF0
aWNfY2FzdDxpbnQ+KGFicyh0aW1lKSk7CisgICAgaW50IGRheXMgPSBzZWNvbmRzIC8gKDYwICog
NjAgKiAyNCk7CisgICAgaW50IGhvdXJzID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKKyAgICBpbnQg
bWludXRlcyA9IChzZWNvbmRzIC8gNjApICUgNjA7CisgICAgc2Vjb25kcyAlPSA2MDsKKworICAg
IGlmIChkYXlzKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmlu
dGYoIiVkIGRheXMgJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgZGF5cywgaG91cnMs
IG1pbnV0ZXMsIHNlY29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3Ry
aW5nLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAoaG91cnMpIHsKKyAgICAgICAgR093blB0cjxn
Y2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNv
bmRzIiwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAobWludXRlcykgeworICAg
ICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBtaW51dGVzICVk
IHNlY29uZHMiLCBtaW51dGVzLCBzZWNvbmRzKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KHN0cmluZy5nZXQoKSk7CisgICAgfQorCisgICAgR093blB0cjxnY2hhcj4gc3RyaW5n
KGdfc3RyZHVwX3ByaW50ZigiJWQgc2Vjb25kcyIsIHNlY29uZHMpKTsKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworfQorI2VuZGlmICAvLyBFTkFCTEUoVklERU8p
CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZhbHVlIG1pc3NpbmciKSk7Cit9CisKK1N0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckNoZWNrYm94VGV4dCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdU
ZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVU
ZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFs
dWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclJhZGlvVGV4dCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3Np
bmdUZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNl
bGVjdFRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRp
b25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3Nh
Z2VUeXBlTWlzbWF0Y2hUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInR5cGUgbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7
Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1h
aWxUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9u
TWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VHlwZU1pc21hdGNoRm9yVVJMVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Cit9CisKK1N0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVBhdHRlcm5NaXNtYXRjaFRleHQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInBhdHRlcm4gbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0
aW9uTWVzc2FnZVRvb0xvbmdUZXh0KGludCwgaW50KQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oInRvbyBsb25nIikpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5n
ZVVuZGVyZmxvd1RleHQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJyYW5nZSB1bmRlcmZsb3ciKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVJhbmdlT3ZlcmZsb3dUZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygicmFuZ2Ugb3ZlcmZsb3ciKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVN0ZXBNaXNtYXRjaFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGVwIG1pc21hdGNoIikpOworfQorCitTdHJp
bmcgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlVuYWNjZXB0YWJsZSBUTFMgY2VydGlmaWNhdGUiKSk7Cit9CisKK1N0cmluZyBs
b2NhbGl6ZWRTdHJpbmcoY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KGtleSwgc3RybGVuKGtleSkpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VC
YWRJbnB1dEZvck51bWJlclRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOworfQorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorU3RyaW5nIHRleHRUcmFja0Nsb3NlZENhcHRpb25zVGV4dCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsb3NlZCBDYXB0aW9ucyIsICJNZW51IHNl
Y3Rpb24gaGVhZGluZyBmb3IgY2xvc2VkIGNhcHRpb25zIikpOworfQorCitTdHJpbmcgdGV4dFRy
YWNrU3VidGl0bGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIlN1
YnRpdGxlcyIsICJNZW51IHNlY3Rpb24gaGVhZGluZyBmb3Igc3VidGl0bGVzIikpOworfQorCitT
dHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Q18oIk9mZiIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIHRoZSB0cmFjayB0aGF0IHJlcHJlc2VudHMg
ZGlzYWJsaW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKK30KKworU3RyaW5nIHRleHRUcmFja05vTGFi
ZWxUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiTm8gbGFiZWwiLCAi
TWVudSBpdGVtIGxhYmVsIGZvciBhIGNsb3NlZCBjYXB0aW9ucyB0cmFjayB0aGF0IGhhcyBubyBv
dGhlciBuYW1lIikpOworfQorI2VuZGlmCisKK1N0cmluZyBzbmFwc2hvdHRlZFBsdWdJbkxhYmVs
VGl0bGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJTbmFwc2hvdHRlZCBQ
bHVnLUluIiwgIlRpdGxlIG9mIHRoZSBsYWJlbCB0byBzaG93IG9uIGEgc25hcHNob3R0ZWQgcGx1
Zy1pbiIpKTsKK30KKworU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxTdWJ0aXRsZSgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsaWNrIHRvIHJlc3RhcnQiLCAiU3Vi
dGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODk4YWY3ZDhi
ZWJjYmUwNWM5YWJlN2ZmNGE0MWUxN2M5MDhjZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisKKyNpZiAhTE9HX0RJU0FCTEVECisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gSW5zcGlyZWQgYnkgdGhlIGNvZGUgdXNlZCBieSB0aGUgUXQgcG9y
dAorCit2b2lkIGluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCit7CisgICAg
c3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscyA9IGZhbHNlOworICAgIGlm
IChkaWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBk
aWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzID0gdHJ1ZTsKKworICAgIGNoYXIqIGxvZ0VudiA9
IGdldGVudigiV0VCS0lUX0RFQlVHIik7CisgICAgaWYgKCFsb2dFbnYpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIHdlIHNldCB1cCB0aGUgbG9ncyBhbnl3YXkgYmVjYXVzZSBzb21lIG9mIG91
ciBsb2dnaW5nLCBzdWNoIGFzCisgICAgLy8gc291cCdzIGlzIGF2YWlsYWJsZSBpbiByZWxlYXNl
IGJ1aWxkcworI2lmIGRlZmluZWQoTkRFQlVHKQorICAgIGdfd2FybmluZygiV0VCS0lUX0RFQlVH
IGlzIG5vdCBlbXB0eSwgYnV0IHRoaXMgaXMgYSByZWxlYXNlIGJ1aWxkLiBOb3RpY2UgdGhhdCBt
YW55IGxvZyBtZXNzYWdlcyB3aWxsIG9ubHkgYXBwZWFyIGluIGEgZGVidWcgYnVpbGQuIik7Cisj
ZW5kaWYKKworICAgIGNoYXIqKiBsb2d2ID0gZ19zdHJzcGxpdChsb2dFbnYsICIgIiwgLTEpOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGxvZ3ZbaV07IGkrKykgeworICAgICAgICBpZiAoV1RGTG9n
Q2hhbm5lbCogY2hhbm5lbCA9IGdldENoYW5uZWxGcm9tTmFtZShsb2d2W2ldKSkKKyAgICAgICAg
ICAgIGNoYW5uZWwtPnN0YXRlID0gV1RGTG9nQ2hhbm5lbE9uOworICAgIH0KKworICAgIGdfc3Ry
ZnJlZXYobG9ndik7CisKKyAgICAvLyB0byBkaXNhYmxlIGxvZ2dpbmcgbm90SW1wbGVtZW50ZWQg
c2V0IHRoZSBESVNBQkxFX05JX1dBUk5JTkcKKyAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0
byAxCisgICAgTG9nTm90WWV0SW1wbGVtZW50ZWQuc3RhdGUgPSBXVEZMb2dDaGFubmVsT247Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlm
N2YxNGNkOGRmN2E1NjJiMDJlYzMyYjhkZmEyZjRjZjk2ZmIyYjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IEV4dGVuc2lvbk1hcCB7CisgICAgY29uc3QgY2hhciogZXh0ZW5zaW9uOworICAgIGNvbnN0
IGNoYXIqIG1pbWVUeXBlOworfTsKKworc3RhdGljIGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNp
b25NYXAgW10gPSB7CisgICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwKKyAgICB7ICJjc3MiLCAi
dGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwKKyAgICB7ICJodG0iLCAi
dGV4dC9odG1sIiB9LAorICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9LAorICAgIHsgImljbyIs
ICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBlZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsg
ImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpzIiwgImFwcGxpY2F0aW9uL3gtamF2YXNj
cmlwdCIgfSwKKyAgICB7ICJwZGYiLCAiYXBwbGljYXRpb24vcGRmIiB9LAorICAgIHsgInBuZyIs
ICJpbWFnZS9wbmciIH0sCisgICAgeyAicnNzIiwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiIH0sCisg
ICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwiIH0sCisgICAgeyAidGV4dCIsICJ0ZXh0L3BsYWlu
IiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInhibSIsICJpbWFnZS94
LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1sIiB9LAorICAgIHsgInhzbCIsICJ0
ZXh0L3hzbCIgfSwKKyAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCisg
ICAgeyAid21sIiwgInRleHQvdm5kLndhcC53bWwiIH0sCisgICAgeyAid21sYyIsICJhcHBsaWNh
dGlvbi92bmQud2FwLndtbGMiIH0sCisgICAgeyAwLCAwIH0KK307CisKK1N0cmluZyBNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4dCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3RyaW5nIHMgPSBleHQubG93ZXIo
KTsKKyAgICBjb25zdCBFeHRlbnNpb25NYXAgKmUgPSBleHRlbnNpb25NYXA7CisgICAgd2hpbGUg
KGUtPmV4dGVuc2lvbikgeworICAgICAgICBpZiAocyA9PSBlLT5leHRlbnNpb24pCisgICAgICAg
ICAgICByZXR1cm4gZS0+bWltZVR5cGU7CisgICAgICAgICsrZTsKKyAgICB9CisKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBs
dWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjFjMWNjODNhMDIzNDk4YzFhYjJiODRkYzEwOWU5YTljNWY4NTBjNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcApA
QCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZworICogIENvcHlyaWdodCAoQykg
MjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEln
YWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgiCisKKyNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGFi
bGVBcmVhLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworUGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+IE1haW5GcmFtZVNjcm9sbGJh
ckd0azo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNYWluRnJh
bWVTY3JvbGxiYXJHdGsoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uKSk7Cit9CisKKy8vIEEg
TWFpbkZyYW1lU2Nyb2xsYmFyIGlzIGp1c3QgYSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyLiBPdGhl
cndpc2UgaXQgaXMgZnVsbHkKKy8vIGZ1bmN0aW9uYWwuIEEgbm9uLXBhaW50aW5nIHNjcm9sbGJh
ciBhbGxvd3MgYSBtYWluLWZyYW1lIFNjcm9sbFZpZXcgdG8gdXNlCisvLyBhIGNvbnRhaW5pbmcg
R3RrU2Nyb2xsZWRXaW5kb3cgYXMgaXRzIHVzZXIgaW50ZXJmYWNlLiBUaGUgQ2hyb21lQ2xpZW50
IGluIHRoZQorLy8gV2ViS2l0IGxheWVyIGp1c3QgbGlzdGVucyBmb3Igc2Nyb2xsaW5nIGFuZCBz
aXppbmcgY2hhbmdlcyBhbmQgdXBkYXRlcyBpdHMKKy8vIGNvbnRhaW5lciAodGhlIEd0a1Njcm9s
bGVkV2luZG93KSBhY2NvcmRpbmdseS4gVGhlIFNjcm9sbFZpZXcgaXMgcmVzcG9uc2libGUKKy8v
IGZvciBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBNYWluRnJhbWVTY3JvbGxi
YXIgb3IgbmF0aXZlIHNjcm9sbGJhci4KK01haW5GcmFtZVNjcm9sbGJhckd0azo6TWFpbkZyYW1l
U2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgOiBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9y
aWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
dGFrZSB1cCBhbnkgc3BhY2UuCisgICAgcmVzaXplKDAsIDApOworfQorCit2b2lkIE1haW5GcmFt
ZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIC8vIE1haW4gZnJhbWUgc2Nyb2xsYmFycyBhcmUgbm90IHBhaW50
ZWQgYnkgV2ViQ29yZS4KKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9NYWlu
RnJhbWVTY3JvbGxiYXJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjhjYjYzOGZkYWNjOWIwYzI1YzYwNDgx
ODVkNzUwYTcwZjU0MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9N
YWluRnJhbWVTY3JvbGxiYXJHdGsuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
CisjaWZuZGVmIE1haW5GcmFtZVNjcm9sbGJhckd0a19oCisjZGVmaW5lIE1haW5GcmFtZVNjcm9s
bGJhckd0a19oCisKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1haW5GcmFtZVNjcm9sbGJh
ckd0ayA6IHB1YmxpYyBTY3JvbGxiYXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1haW5GcmFtZVNjcm9sbGJhckd0az4gY3JlYXRlKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFy
T3JpZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrKFNj
cm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOworfTsKKworfQorCisjZW5kaWYg
Ly8gU2Nyb2xsYmFyR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZv
cm1LZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXli
b2FyZEV2ZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDZkNmUyNWM5OTAwNWEyNDIwMGNhOWQ0ZjA1
MDI1NWZlMjJmNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCkBAIC0wLDAgKzEsNjMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNp
bmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgor
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4g
IFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKKy8vIG1vcmUgbGlrZSB3aGF0IEZpcmVm
b3ggZG9lcywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCisvLyBhdCBidWls
ZCB0aW1lLgorU3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdk
a0tleUNvZGUodW5zaWduZWQga2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAg
ICAgICAgY2FzZSBHREtfTWVudToKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6CisgICAgICAgIGNh
c2UgR0RLX0FsdF9SOgorICAgICAgICAgICAgcmV0dXJuICJBbHQiOworICAgICAgICBjYXNlIEdE
S19DbGVhcjoKKyAgICAgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIEdES19E
b3duOgorICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKKyAgICAgICAgICAgIC8vICJFbmQiCisg
ICAgICAgIGNhc2UgR0RLX0VuZDoKKyAgICAgICAgICAgIHJldHVybiAiRW5kIjsKKyAgICAgICAg
ICAgIC8vICJFbnRlciIKKyAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgICAgICBjYXNl
IEdES19LUF9FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICAgICAgcmV0
dXJuICJFbnRlciI7CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgICAgICByZXR1
cm4gIkV4ZWN1dGUiOworICAgICAgICBjYXNlIEdES19GMToKKyAgICAgICAgICAgIHJldHVybiAi
RjEiOworICAgICAgICBjYXNlIEdES19GMjoKKyAgICAgICAgICAgIHJldHVybiAiRjIiOworICAg
ICAgICBjYXNlIEdES19GMzoKKyAgICAgICAgICAgIHJldHVybiAiRjMiOworICAgICAgICBjYXNl
IEdES19GNDoKKyAgICAgICAgICAgIHJldHVybiAiRjQiOworICAgICAgICBjYXNlIEdES19GNToK
KyAgICAgICAgICAgIHJldHVybiAiRjUiOworICAgICAgICBjYXNlIEdES19GNjoKKyAgICAgICAg
ICAgIHJldHVybiAiRjYiOworICAgICAgICBjYXNlIEdES19GNzoKKyAgICAgICAgICAgIHJldHVy
biAiRjciOworICAgICAgICBjYXNlIEdES19GODoKKyAgICAgICAgICAgIHJldHVybiAiRjgiOwor
ICAgICAgICBjYXNlIEdES19GOToKKyAgICAgICAgICAgIHJldHVybiAiRjkiOworICAgICAgICBj
YXNlIEdES19GMTA6CisgICAgICAgICAgICByZXR1cm4gIkYxMCI7CisgICAgICAgIGNhc2UgR0RL
X0YxMToKKyAgICAgICAgICAgIHJldHVybiAiRjExIjsKKyAgICAgICAgY2FzZSBHREtfRjEyOgor
ICAgICAgICAgICAgcmV0dXJuICJGMTIiOworICAgICAgICBjYXNlIEdES19GMTM6CisgICAgICAg
ICAgICByZXR1cm4gIkYxMyI7CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgICAgIHJl
dHVybiAiRjE0IjsKKyAgICAgICAgY2FzZSBHREtfRjE1OgorICAgICAgICAgICAgcmV0dXJuICJG
MTUiOworICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgICAgICByZXR1cm4gIkYxNiI7Cisg
ICAgICAgIGNhc2UgR0RLX0YxNzoKKyAgICAgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICAgICAg
Y2FzZSBHREtfRjE4OgorICAgICAgICAgICAgcmV0dXJuICJGMTgiOworICAgICAgICBjYXNlIEdE
S19GMTk6CisgICAgICAgICAgICByZXR1cm4gIkYxOSI7CisgICAgICAgIGNhc2UgR0RLX0YyMDoK
KyAgICAgICAgICAgIHJldHVybiAiRjIwIjsKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAg
ICAgICAgcmV0dXJuICJGMjEiOworICAgICAgICBjYXNlIEdES19GMjI6CisgICAgICAgICAgICBy
ZXR1cm4gIkYyMiI7CisgICAgICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgICAgIHJldHVybiAi
RjIzIjsKKyAgICAgICAgY2FzZSBHREtfRjI0OgorICAgICAgICAgICAgcmV0dXJuICJGMjQiOwor
ICAgICAgICBjYXNlIEdES19IZWxwOgorICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKKyAgICAg
ICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgICAgIGNh
c2UgR0RLX0luc2VydDoKKyAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICAgICAgY2Fz
ZSBHREtfTGVmdDoKKyAgICAgICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgICAgIGNhc2UgR0RL
X1BhZ2VfRG93bjoKKyAgICAgICAgICAgIHJldHVybiAiUGFnZURvd24iOworICAgICAgICBjYXNl
IEdES19QYWdlX1VwOgorICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAiOworICAgICAgICBjYXNl
IEdES19QYXVzZToKKyAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOworICAgICAgICBjYXNlIEdE
S18zMjcwX1ByaW50U2NyZWVuOgorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAgICAgICAg
IHJldHVybiAiUHJpbnRTY3JlZW4iOworICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAg
ICAgIHJldHVybiAiUmlnaHQiOworICAgICAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgICAg
ICByZXR1cm4gIlNlbGVjdCI7CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAgICAgICAgICAgcmV0
dXJuICJVcCI7CisgICAgICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMg
VSswMDdGLgorICAgICAgICBjYXNlIEdES19EZWxldGU6CisgICAgICAgICAgICByZXR1cm4gIlUr
MDA3RiI7CisgICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiAi
VSswMDA4IjsKKyAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgorICAgICAgICBjYXNlIEdE
S18zMjcwX0JhY2tUYWI6CisgICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgICAgIHJldHVy
biAiVSswMDA5IjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBw
ZXIoa2V5Q29kZSkpKTsKKyAgICB9Cit9CisKK2ludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Ondp
bmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBrZXljb2RlKQoreworICAgIHN3aXRj
aCAoa2V5Y29kZSkgeworICAgICAgICBjYXNlIEdES19LUF8wOgorICAgICAgICAgICAgcmV0dXJu
IFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgICAgICBjYXNlIEdE
S19LUF8xOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtl
eXBhZCAxIGtleQorICAgICAgICBjYXNlIEdES19LUF8yOgorICAgICAgICAgICAgcmV0dXJuICBW
S19OVU1QQUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5CisgICAgICAgIGNhc2UgR0RL
X0tQXzM6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtl
eXBhZCAzIGtleQorICAgICAgICBjYXNlIEdES19LUF80OgorICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICAgICAgY2FzZSBHREtf
S1BfNToKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlw
YWQgNSBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfNjoKKyAgICAgICAgICAgIHJldHVybiBWS19O
VU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgICAgIGNhc2UgR0RLX0tQ
Xzc6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBh
ZCA3IGtleQorICAgICAgICBjYXNlIEdES19LUF84OgorICAgICAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1Bf
OToKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFk
IDkga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgorICAgICAgICAgICAgcmV0dXJu
IFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQorICAgICAgICBjYXNlIEdES19LUF9B
ZGQ6CisgICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKKyAgICAgICAg
Y2FzZSBHREtfS1BfU3VidHJhY3Q6CisgICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8v
ICg2RCkgU3VidHJhY3Qga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6CisgICAgICAg
ICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQorICAgICAgICBjYXNl
IEdES19LUF9EaXZpZGU6CisgICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERp
dmlkZSBrZXkKKworICAgICAgICBjYXNlIEdES19LUF9QYWdlX1VwOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX1Bh
Z2VfRG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBr
ZXkKKyAgICAgICAgY2FzZSBHREtfS1BfRW5kOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsg
Ly8gKDIzKSBFTkQga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX0hvbWU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgICAgICBjYXNlIEdES19LUF9MZWZ0
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAg
ICAgICAgY2FzZSBHREtfS1BfVXA6CisgICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikg
VVAgQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX1JpZ2h0OgorICAgICAgICAgICAgcmV0
dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19L
UF9Eb3duOgorICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBr
ZXkKKworICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktf
QkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1Rh
YjoKKyAgICAgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgorICAgICAgICBjYXNlIEdES19UYWI6
CisgICAgICAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKKyAgICAgICAgY2Fz
ZSBHREtfQ2xlYXI6CisgICAgICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIg
a2V5CisgICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfS1BfRW50
ZXI6CisgICAgICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgICAgIHJldHVybiBWS19SRVRV
Uk47IC8vKDBEKSBSZXR1cm4ga2V5CisKKyAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJ
RlQga2V5CisgICAgICAgICAgICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKKworICAgICAg
ICBjYXNlIEdES19NZW51OgorICAgICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFw
cGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisKKyAgICAgICAgICAgIC8vIFZLX01F
TlUgKDEyKSBBTFQga2V5CisKKyAgICAgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgICAgICBy
ZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0NhcHNf
TG9jazoKKyAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBr
ZXkKKyAgICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgorICAgICAgICBjYXNlIEdES19LYW5hX1No
aWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVk
aXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisg
ICAgICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgICAgICAv
LyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCisgICAgICAgIGNhc2UgR0RLX0hhbmd1bF9I
YW5qYToKKyAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9k
ZQorICAgICAgICBjYXNlIEdES19LYW5qaToKKyAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsg
Ly8gKDE5KSBJTUUgS2FuamkgbW9kZQorICAgICAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAg
ICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgICAgIC8vIFZL
X0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAo
MUQpIElNRSBub25jb252ZXJ0CisgICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNj
ZXB0CisgICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJl
cXVlc3QKKyAgICAgICAgY2FzZSBHREtfc3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfU1BB
Q0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgICAgICBjYXNlIEdE
S19QYWdlX0Rvd246CisgICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERP
V04ga2V5CisgICAgICAgIGNhc2UgR0RLX0VuZDoKKyAgICAgICAgICAgIHJldHVybiBWS19FTkQ7
IC8vICgyMykgRU5EIGtleQorICAgICAgICBjYXNlIEdES19Ib21lOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgICAg
IGNhc2UgR0RLX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9X
IGtleQorICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19SSUdI
VDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfRG93bjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgICAgIGNh
c2UgR0RLX1NlbGVjdDoKKyAgICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VM
RUNUIGtleQorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVybiBWS19T
TkFQU0hPVDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1
dGU6CisgICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5Cisg
ICAgICAgIGNhc2UgR0RLX0luc2VydDoKKyAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAgICAgIGNhc2Ug
R0RLX0RlbGV0ZToKKyAgICAgICAgY2FzZSBHREtfS1BfRGVsZXRlOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5CisgICAgICAgIGNhc2UgR0RLX0hlbHA6Cisg
ICAgICAgICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgICAgICBjYXNl
IEdES18wOgorICAgICAgICBjYXNlIEdES19wYXJlbnJpZ2h0OgorICAgICAgICAgICAgcmV0dXJu
IFZLXzA7ICAgIC8vICAoMzApIDApIGtleQorICAgICAgICBjYXNlIEdES18xOgorICAgICAgICBj
YXNlIEdES19leGNsYW06CisgICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtl
eQorICAgICAgICBjYXNlIEdES18yOgorICAgICAgICBjYXNlIEdES19hdDoKKyAgICAgICAgICAg
IHJldHVybiBWS18yOyAvLyAgKDMyKSAyICYga2V5CisgICAgICAgIGNhc2UgR0RLXzM6CisgICAg
ICAgIGNhc2UgR0RLX251bWJlcnNpZ246CisgICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNl
ICczJzogY2FzZSAnIyc7CisgICAgICAgIGNhc2UgR0RLXzQ6CisgICAgICAgIGNhc2UgR0RLX2Rv
bGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOworICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAg
ICAgIGNhc2UgR0RLXzU6CisgICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkgICclJworICAgICAgICBjYXNlIEdES182OgorICAg
ICAgICBjYXNlIEdES19hc2NpaWNpcmN1bToKKyAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAg
KDM2KSA2IGtleSAgJ14nCisgICAgICAgIGNhc2UgR0RLXzc6CisgICAgICAgIGNhc2UgR0RLX2Ft
cGVyc2FuZDoKKyAgICAgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAn
JicKKyAgICAgICAgY2FzZSBHREtfODoKKyAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAg
ICAgICAgICByZXR1cm4gVktfODsgLy8gICgzOCkgOCBrZXkgICcqJworICAgICAgICBjYXNlIEdE
S185OgorICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktf
OTsgLy8gICgzOSkgOSBrZXkgJygnCisgICAgICAgIGNhc2UgR0RLX2E6CisgICAgICAgIGNhc2Ug
R0RLX0E6CisgICAgICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6
IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKKyAgICAgICAgY2FzZSBHREtfYjoKKyAgICAgICAgY2Fz
ZSBHREtfQjoKKyAgICAgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdi
JzogY2FzZSAnQic6IHJldHVybiAweDQyOworICAgICAgICBjYXNlIEdES19jOgorICAgICAgICBj
YXNlIEdES19DOgorICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2Ug
J2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7CisgICAgICAgIGNhc2UgR0RLX2Q6CisgICAgICAg
IGNhc2UgR0RLX0Q6CisgICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2Fz
ZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKKyAgICAgICAgY2FzZSBHREtfZToKKyAgICAg
ICAgY2FzZSBHREtfRToKKyAgICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBj
YXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OworICAgICAgICBjYXNlIEdES19mOgorICAg
ICAgICBjYXNlIEdES19GOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5
IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7CisgICAgICAgIGNhc2UgR0RLX2c6Cisg
ICAgICAgIGNhc2UgR0RLX0c6CisgICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBr
ZXkgY2FzZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKKyAgICAgICAgY2FzZSBHREtfaDoK
KyAgICAgICAgY2FzZSBHREtfSDoKKyAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBI
IGtleSBjYXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4OworICAgICAgICBjYXNlIEdES19p
OgorICAgICAgICBjYXNlIEdES19JOgorICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkp
IEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7CisgICAgICAgIGNhc2UgR0RL
X2o6CisgICAgICAgIGNhc2UgR0RLX0o6CisgICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0
QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKKyAgICAgICAgY2FzZSBH
REtfazoKKyAgICAgICAgY2FzZSBHREtfSzoKKyAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAg
KDRCKSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOworICAgICAgICBjYXNl
IEdES19sOgorICAgICAgICBjYXNlIEdES19MOgorICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8v
ICAoNEMpIEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAgICAgIGNh
c2UgR0RLX206CisgICAgICAgIGNhc2UgR0RLX006CisgICAgICAgICAgICByZXR1cm4gVktfTTsg
Ly8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKKyAgICAgICAg
Y2FzZSBHREtfbjoKKyAgICAgICAgY2FzZSBHREtfTjoKKyAgICAgICAgICAgIHJldHVybiBWS19O
OyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOworICAgICAg
ICBjYXNlIEdES19vOgorICAgICAgICBjYXNlIEdES19POgorICAgICAgICAgICAgcmV0dXJuIFZL
X087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7CisgICAg
ICAgIGNhc2UgR0RLX3A6CisgICAgICAgIGNhc2UgR0RLX1A6CisgICAgICAgICAgICByZXR1cm4g
VktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKKyAg
ICAgICAgY2FzZSBHREtfcToKKyAgICAgICAgY2FzZSBHREtfUToKKyAgICAgICAgICAgIHJldHVy
biBWS19ROyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOwor
ICAgICAgICBjYXNlIEdES19yOgorICAgICAgICBjYXNlIEdES19SOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7
CisgICAgICAgIGNhc2UgR0RLX3M6CisgICAgICAgIGNhc2UgR0RLX1M6CisgICAgICAgICAgICBy
ZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1
MzsKKyAgICAgICAgY2FzZSBHREtfdDoKKyAgICAgICAgY2FzZSBHREtfVDoKKyAgICAgICAgICAg
IHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAw
eDU0OworICAgICAgICBjYXNlIEdES191OgorICAgICAgICBjYXNlIEdES19VOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJu
IDB4NTU7CisgICAgICAgIGNhc2UgR0RLX3Y6CisgICAgICAgIGNhc2UgR0RLX1Y6CisgICAgICAg
ICAgICByZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1
cm4gMHg1NjsKKyAgICAgICAgY2FzZSBHREtfdzoKKyAgICAgICAgY2FzZSBHREtfVzoKKyAgICAg
ICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJl
dHVybiAweDU3OworICAgICAgICBjYXNlIEdES194OgorICAgICAgICBjYXNlIEdES19YOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzog
cmV0dXJuIDB4NTg7CisgICAgICAgIGNhc2UgR0RLX3k6CisgICAgICAgIGNhc2UgR0RLX1k6Cisg
ICAgICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1kn
OiByZXR1cm4gMHg1OTsKKyAgICAgICAgY2FzZSBHREtfejoKKyAgICAgICAgY2FzZSBHREtfWjoK
KyAgICAgICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAn
Wic6IHJldHVybiAweDVBOworICAgICAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgICAgICBy
ZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJh
bCBrZXlib2FyZCkKKyAgICAgICAgY2FzZSBHREtfTWV0YV9SOgorICAgICAgICAgICAgcmV0dXJu
IFZLX1JXSU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisg
ICAgICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAg
ICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAgICAgLy8gVktf
U1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZF
KSBEZWNpbWFsIGtleQorICAgICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQor
ICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQorCisgICAgICAgIGNhc2Ug
R0RLX051bV9Mb2NrOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVN
IExPQ0sga2V5CisKKyAgICAgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgICAgICBy
ZXR1cm4gVktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAgIGNhc2Ug
R0RLX1NoaWZ0X0w6CisgICAgICAgICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQg
U0hJRlQga2V5CisgICAgICAgIGNhc2UgR0RLX1NoaWZ0X1I6CisgICAgICAgICAgICByZXR1cm4g
VktfUlNISUZUOyAvLyAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAgICAgICBjYXNlIEdES19Db250
cm9sX0w6CisgICAgICAgICAgICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05U
Uk9MIGtleQorICAgICAgICBjYXNlIEdES19Db250cm9sX1I6CisgICAgICAgICAgICByZXR1cm4g
VktfUkNPTlRST0w7IC8vIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAgY2FzZSBHREtf
QWx0X0w6CisgICAgICAgICAgICByZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtl
eQorICAgICAgICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsg
Ly8gKEE1KSBSaWdodCBNRU5VIGtleQorCisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sg
KEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZL
X0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtl
eQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQ
OiBCcm93c2VyIFJlZnJlc2gga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5
KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JS
T1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBC
cm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKKyAgICAgICAgICAg
IC8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkK
KyAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1
bWUgRG93biBrZXkKKyAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAw
MC9YUDogVm9sdW1lIFVwIGtleQorICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAo
QjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX01F
RElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQor
ICAgICAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBN
ZWRpYSBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dz
IDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hf
TUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgICAgIC8v
IFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRp
YSBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQ
OiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIg
KEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisKKyAgICAgICAg
ICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgor
ICAgICAgICBjYXNlIEdES19jb2xvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9j
YXNlICc7JzogY2FzZSAnOic6IHJldHVybiAweEJBOworICAgICAgICAgICAgLy8gVktfT0VNX1BM
VVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycg
a2V5CisgICAgICAgIGNhc2UgR0RLX3BsdXM6CisgICAgICAgIGNhc2UgR0RLX2VxdWFsOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJu
IDB4QkI7CisgICAgICAgICAgICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6
IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5CisgICAgICAgIGNhc2UgR0RLX2Nv
bW1hOgorICAgICAgICBjYXNlIEdES19sZXNzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9D
T01NQTsgLy9jYXNlICcsJzogY2FzZSAnPCc6IHJldHVybiAweEJDOworICAgICAgICAgICAgLy8g
VktfT0VNX01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9u
LCB0aGUgJy0nIGtleQorICAgICAgICBjYXNlIEdES19taW51czoKKyAgICAgICAgY2FzZSBHREtf
dW5kZXJzY29yZToKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6
IGNhc2UgJ18nOiByZXR1cm4gMHhCRDsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJF
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Cisg
ICAgICAgIGNhc2UgR0RLX3BlcmlvZDoKKyAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJu
IDB4QkU7CisgICAgICAgICAgICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcvPycga2V5CisgICAgICAgIGNhc2Ug
R0RLX3NsYXNoOgorICAgICAgICBjYXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fMjsgLy9jYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgICAgICAg
ICAgLy8gVktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnYH4nIGtleQorICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgor
ICAgICAgICBjYXNlIEdES19xdW90ZWxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7
IC8vY2FzZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsKKyAgICAgICAgICAgIC8vIFZLX09F
TV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJk
LCB0aGUgJ1t7JyBrZXkKKyAgICAgICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6CisgICAgICAgIGNh
c2UgR0RLX2JyYWNlbGVmdDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdb
JzogY2FzZSAneyc6IHJldHVybiAweERCOworICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwn
IGtleQorICAgICAgICBjYXNlIEdES19iYWNrc2xhc2g6CisgICAgICAgIGNhc2UgR0RLX2JhcjoK
KyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1
cm4gMHhEQzsKKyAgICAgICAgICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKKyAgICAgICAgY2Fz
ZSBHREtfYnJhY2tldHJpZ2h0OgorICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgorICAgICAg
ICAgICAgcmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweERE
OworICAgICAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNo
YXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0
aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScg
a2V5CisgICAgICAgIGNhc2UgR0RLX3F1b3RlcmlnaHQ6CisgICAgICAgIGNhc2UgR0RLX3F1b3Rl
ZGJsOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyIn
OiByZXR1cm4gMHhERTsKKyAgICAgICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KKyAgICAgICAg
ICAgIC8vIFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUg
YnJhY2tldCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9h
cmQKKyAgICAgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBX
aW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNv
ZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBr
ZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9y
IG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJl
bWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCisg
ICAgICAgICAgICAvLyBWS19BVFROIChGNikgQXR0biBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NS
U0VMIChGNykgQ3JTZWwga2V5CisgICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtl
eQorICAgICAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5CisgICAgICAgICAg
ICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKKyAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBa
b29tIGtleQorICAgICAgICAgICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UKKyAgICAgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAgICAgICAgICAgIC8v
IFZLX09FTV9DTEVBUiAoRkUpIENsZWFyIGtleQorICAgICAgICBjYXNlIEdES19GMToKKyAgICAg
ICAgY2FzZSBHREtfRjI6CisgICAgICAgIGNhc2UgR0RLX0YzOgorICAgICAgICBjYXNlIEdES19G
NDoKKyAgICAgICAgY2FzZSBHREtfRjU6CisgICAgICAgIGNhc2UgR0RLX0Y2OgorICAgICAgICBj
YXNlIEdES19GNzoKKyAgICAgICAgY2FzZSBHREtfRjg6CisgICAgICAgIGNhc2UgR0RLX0Y5Ogor
ICAgICAgICBjYXNlIEdES19GMTA6CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgY2Fz
ZSBHREtfRjEyOgorICAgICAgICBjYXNlIEdES19GMTM6CisgICAgICAgIGNhc2UgR0RLX0YxNDoK
KyAgICAgICAgY2FzZSBHREtfRjE1OgorICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgIGNh
c2UgR0RLX0YxNzoKKyAgICAgICAgY2FzZSBHREtfRjE4OgorICAgICAgICBjYXNlIEdES19GMTk6
CisgICAgICAgIGNhc2UgR0RLX0YyMDoKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICBj
YXNlIEdES19GMjI6CisgICAgICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgY2FzZSBHREtfRjI0
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOworICAgICAg
ICBjYXNlIEdES19LRVlfVm9pZFN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNT
S0VZOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9
CisKK1N0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1
bnNpZ25lZCB2YWwpCit7CisgICAgc3dpdGNoICh2YWwpIHsKKyAgICAgICAgY2FzZSBHREtfSVNP
X0VudGVyOgorICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfUmV0
dXJuOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHIiKTsKKyAgICAgICAgY2FzZSBHREtf
QmFja1NwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHg4Iik7CisgICAgICAgIGNh
c2UgR0RLX1RhYjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlx0Iik7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZh
bCk7CisgICAgICAgICAgICBnbG9uZyBud2M7CisgICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFy
MTYgPSBnX3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2MsIDApOworCisgICAgICAgICAgICBT
dHJpbmcgcmV0VmFsOworICAgICAgICAgICAgaWYgKHVjaGFyMTYpCisgICAgICAgICAgICAgICAg
cmV0VmFsID0gU3RyaW5nKChVQ2hhciopdWNoYXIxNiwgbndjKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXRWYWwgPSBTdHJpbmcoKTsKKworICAgICAgICAgICAgZ19mcmVl
KHVjaGFyMTYpOworCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KK30KKworc3Rh
dGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqIGV2ZW50KQoreworICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
PyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Cit9CisKK3N0
YXRpYyBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2Rr
RXZlbnRLZXkqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOworICAg
IGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdE
S18zMjcwX0JhY2tUYWIpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlm
dEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAg
bW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0
ZSAmIEdES19NT0QxX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpB
bHRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1v
ZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5OworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKKy8vIEtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycworUGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2
ZW50LCBjb25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKKyAgICA6
IFBsYXRmb3JtRXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNG
b3JHZGtLZXlFdmVudChldmVudCksIGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX3RleHQoY29tcG9z
aXRpb25SZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5z
aW1wbGVTdHJpbmcgOiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCisgICAg
LCBtX3VubW9kaWZpZWRUZXh0KG1fdGV4dCkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVu
dGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAg
ICAsIG1fbmF0aXZlVmlydHVhbEtleUNvZGUoZXZlbnQtPmtleXZhbCkKKyAgICAsIG1fbWFjQ2hh
ckNvZGUoMCkKKyAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKKyAgICAsIG1faXNLZXlwYWQoZXZl
bnQtPmtleXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkK
KyAgICAsIG1faXNTeXN0ZW1LZXkoZmFsc2UpCisgICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQor
ICAgICwgbV9jb21wb3NpdGlvblJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQoreworICAgIC8v
IFRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9y
IGtleXMgdGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KKyAgICBpZiAoY29tcG9z
aXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKQorICAgICAgICBtX3dpbmRvd3NWaXJ0
dWFsS2V5Q29kZSA9IFZLX1BST0NFU1NLRVk7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29t
cGF0aWJpbGl0eU1vZGUpCit7CisgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlE
b3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3Ro
ZXIgY29udmVyc2lvbnMuCisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBtX3R5
cGUgPSB0eXBlOworCisgICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsK
KyAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBT
dHJpbmcoKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBt
X2NvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkgeworICAgICAgICAvLyBI
YXZpbmcgZW1wdHkgdGV4dCwgcHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlw
cmVzcykgZXZlbnQKKyAgICAgICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQg
dHJpZ2dlciBjb21wb3NpdGlvbiBldmVudHMgc2hvdWxkIG5vdAorICAgICAgICAvLyBmaXJlIGtl
eXByZXNzLgorICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVk
VGV4dCA9IFN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9
IFN0cmluZygpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQor
fQorCitib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQor
eworICAgIHJldHVybiBnZGtfa2V5bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9n
ZXRfZGVmYXVsdCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJl
bnRNb2RpZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRL
ZXksIGJvb2wmIG1ldGFLZXkpCit7CisgICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOworICAgIGd0
a19nZXRfY3VycmVudF9ldmVudF9zdGF0ZSgmc3RhdGUpOworCisgICAgc2hpZnRLZXkgPSBzdGF0
ZSAmIEdES19TSElGVF9NQVNLOworICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01B
U0s7CisgICAgYWx0S2V5ID0gc3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1ldGFLZXkgPSBz
dGF0ZSAmIEdES19NRVRBX01BU0s7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxh
dGZvcm1Nb3VzZUV2ZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDEwMWMxZmEzZDcyODY2Y2JjOTUz
Zjg0YjU3Mjg1OTM3ZjMyMTNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgor
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8g
ZmlndXJlIG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcg
R0RLX01PRDFfTUFTSy4KKworLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxh
dGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91
c2VFdmVudChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgbV90aW1lc3RhbXAgPSBldmVu
dC0+dGltZTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eCwgKGludCll
dmVudC0+eSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnhf
cm9vdCwgKGludClldmVudC0+eV9yb290KTsKKworICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICBp
ZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9
IFNoaWZ0S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAg
ICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtf
TU9EMV9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50
LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7
CisKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNT
OgorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgbV90eXBlID0gUGxhdGZv
cm1FdmVudDo6TW91c2VQcmVzc2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JV
VFRPTl9SRUxFQVNFKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3Vz
ZVJlbGVhc2VkOworICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlj
a0NvdW50ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05f
UFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOworICAgICAgICBlbHNlIGlmIChl
dmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3Vu
dCA9IDM7CisKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1f
YnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAy
KQorICAgICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYg
KGV2ZW50LT5idXR0b24gPT0gMykKKyAgICAgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247
CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfTsKK30KKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZl
bnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKK3sKKyAgICBtX3RpbWVzdGFtcCA9IG1vdGlvbi0+
dGltZTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90
aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhf
cm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7CisKKyAgICBtX21vZGlmaWVycyA9IDA7CisgICAg
aWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMg
fD0gU2hpZnRLZXk7CisgICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQor
ICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlmIChtb3Rpb24tPnN0YXRlICYg
R0RLX01PRDFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5OworICAgIGlmICht
b3Rpb24tPnN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0
YUtleTsKKworICAgIHN3aXRjaCAobW90aW9uLT50eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9O
X05PVElGWToKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKKyAg
ICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfTsKKworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAg
ICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUg
JiBHREtfQlVUVE9OMl9NQVNLKQorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAg
ICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgbV9i
dXR0b24gPSBSaWdodEJ1dHRvbjsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNj
cmVlbkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBj
NWY5MTZjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1T
Y3JlZW5HdGsuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorCisjaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJX
aWRnZXQuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgR3RrV2lkZ2V0KiBnZXRUb3BsZXZlbChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsK
KyAgICByZXR1cm4gZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgPyB0b3BsZXZlbCA6
IDA7Cit9CisKK3N0YXRpYyBHZGtWaXN1YWwqIGdldFZpc3VhbChXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5y
b290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAo
IWNvbnRhaW5lcikgeworICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0
X2RlZmF1bHQoKTsKKyAgICAgICAgcmV0dXJuIHNjcmVlbiA/IGdka19zY3JlZW5fZ2V0X3N5c3Rl
bV92aXN1YWwoc2NyZWVuKSA6IDA7CisgICAgfQorCisgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9y
ZWFsaXplZChjb250YWluZXIpKQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250
YWluZXIpOworICAgIHJldHVybiBjb250YWluZXIgPyBnZGtfd2luZG93X2dldF92aXN1YWwoZ3Rr
X3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKK30KKworaW50IHNjcmVlbkRlcHRo
KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdp
ZGdldCk7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiAyNDsKKyAgICByZXR1cm4g
Z2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKTsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29t
cG9uZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0Vmlz
dWFsKHdpZGdldCk7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiA4OworCisgICAg
cmV0dXJuIGdka192aXN1YWxfZ2V0X2JpdHNfcGVyX3JnYih2aXN1YWwpOworfQorCitib29sIHNj
cmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4gc2NyZWVuRGVw
dGgod2lkZ2V0KSA8IDI7Cit9CisKKworc3RhdGljIEdka1NjcmVlbiogZ2V0U2NyZWVuKEd0a1dp
ZGdldCogd2lkZ2V0KQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0
KSA/IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBH
dGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoY29udGFp
bmVyKQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOworCisgICAg
R2RrU2NyZWVuKiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworCisgICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVl
bl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29u
dGFpbmVyKSkgOiAwOworCisgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OworICAgIGdka19zY3Jl
ZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0cnkpOworCisg
ICAgcmV0dXJuIEZsb2F0UmVjdChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0
aCwgZ2VvbWV0cnkuaGVpZ2h0KTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3Qo
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBH
VEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSA6IDA7CisgICAgaWYgKGNvbnRhaW5lciAmJiAhZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQo
Y29udGFpbmVyKSkKKyAgICAgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKKworICAgIEdk
a1NjcmVlbiogc2NyZWVuID0gY29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtf
c2NyZWVuX2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKworICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5f
Z2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRh
aW5lcikpIDogMDsKKworICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBnZGtfc2NyZWVu
X2dldF9tb25pdG9yX3dvcmthcmVhKHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVhKTsKKworICAg
IHJldHVybiBGbG9hdFJlY3Qod29ya0FyZWEueCwgd29ya0FyZWEueSwgd29ya0FyZWEud2lkdGgs
IHdvcmtBcmVhLmhlaWdodCk7CisKK30KKwordm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQ
cm9maWxlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVu
dEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTIwYmY5YTg5ZDc2ZDA1ZjUyOGVkMzQ5ZGUwNTM2NzI3MTJkZjhhNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3Rr
LmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBw
bGF0Zm9ybSBldmVudCBjb25zdHJ1Y3RvcnMKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1X
aGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQgZGVsdGEgPSAxOworCisgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAg
bV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworCisgICAgbV9tb2RpZmllcnMgPSAwOworICAg
IGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMg
fD0gU2hpZnRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisg
ICAgICAgIG1fbW9kaWZpZXJzIHw9IEN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdE
S19NT0QxX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAoZXZl
bnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtl
eTsKKworICAgIG1fZGVsdGFYID0gMDsKKyAgICBtX2RlbHRhWSA9IDA7CisKKyAgICAvLyBEb2Nz
IHNheSBhbiB1cHdhcmRzIHNjcm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMgYSBwb3NpdGl2
ZSBkZWx0YQorICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEdE
S19TQ1JPTExfVVA6CisgICAgICAgICAgICBtX2RlbHRhWSA9IGRlbHRhOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dOOgorICAgICAgICAgICAgbV9kZWx0
YVkgPSAtZGVsdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfU0NST0xM
X0xFRlQ6CisgICAgICAgICAgICBtX2RlbHRhWCA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKKyAgICAgICAgICAgIG1fZGVsdGFYID0g
LWRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywg
MTgpCisgICAgICAgIGNhc2UgR0RLX1NDUk9MTF9TTU9PVEg6IHsKKyAgICAgICAgICAgICAgICBn
ZG91YmxlIGRlbHRhWCwgZGVsdGFZOworICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfc2Ny
b2xsX2RlbHRhcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmZGVsdGFYLCAm
ZGVsdGFZKTsKKyAgICAgICAgICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YVg7CisgICAgICAgICAg
ICAgICAgbV9kZWx0YVkgPSAtZGVsdGFZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyAgICB9CisgICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOworICAgIG1f
d2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKKworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0
aWNfY2FzdDxpbnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkpOworICAg
IG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jv
b3QpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpKTsKKyAgICBtX2dyYW51bGFyaXR5
ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21E
ZXZpY2UgPSBmYWxzZTsKKworICAgIC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5n
IGZvciB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50Cisg
ICAgbV9kZWx0YVggKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSk7CisgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ1MjU4ZjM2YWNm
NzQzNzNkZjEwMDI2ZmQ4Yzk4OTQ2MGZmNmM5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMjcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorCisjaWYgVVNFKEdMWCkKKworI2luY2x1ZGUgPFgxMS9l
eHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZGFtYWdl
Lmg+CisjaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxXaW5kb3csIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Kj4gV2luZG93SGFzaE1hcDsKK3N0YXRpYyBXaW5kb3dI
YXNoTWFwJiBnZXRXaW5kb3dIYXNoTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdp
bmRvd0hhc2hNYXAsIHdpbmRvd0hhc2hNYXAsICgpKTsKKyAgICByZXR1cm4gd2luZG93SGFzaE1h
cDsKK30KKworc3RhdGljIGludCBnRGFtYWdlRXZlbnRCYXNlOworc3RhdGljIEdka0ZpbHRlclJl
dHVybiBmaWx0ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBnZGtYRXZlbnQsIEdka0V2ZW50KiBl
dmVudCwgdm9pZCopCit7CisgICAgWEV2ZW50KiB4RXZlbnQgPSBzdGF0aWNfY2FzdDxYRXZlbnQq
PihnZGtYRXZlbnQpOworICAgIGlmICh4RXZlbnQtPnR5cGUgIT0gZ0RhbWFnZUV2ZW50QmFzZSAr
IFhEYW1hZ2VOb3RpZnkpCisgICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisg
ICAgWERhbWFnZU5vdGlmeUV2ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERh
bWFnZU5vdGlmeUV2ZW50Kj4oeEV2ZW50KTsKKyAgICBXaW5kb3dIYXNoTWFwJiB3aW5kb3dIYXNo
TWFwID0gZ2V0V2luZG93SGFzaE1hcCgpOworICAgIFdpbmRvd0hhc2hNYXA6Oml0ZXJhdG9yIGkg
PSB3aW5kb3dIYXNoTWFwLmZpbmQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKTsKKyAgICBpZiAoaSA9
PSB3aW5kb3dIYXNoTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5V
RTsKKworICAgIGktPnZhbHVlLT5jYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKKyAgICBYRGFt
YWdlU3VidHJhY3QoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQo
KSksIGRhbWFnZUV2ZW50LT5kYW1hZ2UsIE5vbmUsIE5vbmUpOworICAgIHJldHVybiBHREtfRklM
VEVSX1JFTU9WRTsKK30KKworc3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0
ZSgpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Ym9vbCBoYXNFeHRlbnNpb25zID0gZmFsc2U7CisKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAg
ICAgIHJldHVybiBoYXNFeHRlbnNpb25zOworCisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisg
ICAgaW50IGVycm9yQmFzZTsKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJ
U1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgaWYgKCFYRGFtYWdlUXVlcnlF
eHRlbnNpb24oZGlzcGxheSwgJmdEYW1hZ2VFdmVudEJhc2UsICZlcnJvckJhc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgZXZlbnRCYXNlOworICAgIGlmICghWENvbXBvc2l0
ZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZldmVudEJhc2UsICZlcnJvckJhc2UpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBuZWVkIHRvIHN1cHBvcnQgWENvbXBvc2l0ZSB2
ZXJzaW9uIDAuMi4KKyAgICBpbnQgbWFqb3IsIG1pbm9yOworICAgIFhDb21wb3NpdGVRdWVyeVZl
cnNpb24oZGlzcGxheSwgJm1ham9yLCAmbWlub3IpOworICAgIGlmIChtYWpvciA8IDAgfHwgKCFt
YWpvciAmJiBtaW5vciA8IDIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBoYXNFeHRl
bnNpb25zID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc093blB0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShj
b25zdCBJbnRTaXplJiBzaXplLCBHTENvbnRleHROZWVkZWQgbmVlZHNDb250ZXh0KQoreworICAg
IHJldHVybiBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKCkgPyBhZG9wdFB0cihuZXcgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSwgbmVlZHNDb250ZXh0KSkgOiBudWxscHRyOwor
fQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3coY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKKyAg
ICA6IG1fc2l6ZShzaXplKQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1fcGFyZW50V2luZG93
KDApCisgICAgLCBtX3BpeG1hcCgwKQorICAgICwgbV9uZWVkc0NvbnRleHQobmVlZHNDb250ZXh0
KQorICAgICwgbV9zdXJmYWNlKDApCisgICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUo
ZmFsc2UpCisgICAgLCBtX2RhbWFnZSgwKQorICAgICwgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjaygw
KQorICAgICwgbV9kYW1hZ2VOb3RpZnlEYXRhKDApCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9
IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIFNj
cmVlbiogc2NyZWVuID0gRGVmYXVsdFNjcmVlbk9mRGlzcGxheShkaXNwbGF5KTsKKworICAgIC8v
IFRoaXMgaXMgYmFzZWQgb24gY29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9jb21tb24v
Z3B1L2ltYWdlX3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4LmNjCisgICAgWFNldFdpbmRvd0F0dHJp
YnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3Jl
ZGlyZWN0ID0gVHJ1ZTsKKyAgICBtX3BhcmVudFdpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxh
eSwKKyAgICAgICAgUm9vdFdpbmRvd09mU2NyZWVuKHNjcmVlbiksCisgICAgICAgIFdpZHRoT2ZT
Y3JlZW4oc2NyZWVuKSArIDEsIDAsIDEsIDEsCisgICAgICAgIDAsCisgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisg
ICAgICAgIENXT3ZlcnJpZGVSZWRpcmVjdCwKKyAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwor
ICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOworCisgICAgd2luZG93QXR0
cmlidXRlcy5ldmVudF9tYXNrID0gU3RydWN0dXJlTm90aWZ5TWFzazsKKyAgICB3aW5kb3dBdHRy
aWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gRmFsc2U7CisgICAgbV93aW5kb3cgPSBYQ3JlYXRl
V2luZG93KGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50V2lu
ZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weUZy
b21QYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXRXZlbnRNYXNrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdp
bmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisKKyAgICBpZiAoZ2V0V2luZG93SGFzaE1hcCgpLmlz
RW1wdHkoKSkKKyAgICAgICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVyWERhbWFnZUV2ZW50KSwgMCk7CisgICAgZ2V0V2luZG93
SGFzaE1hcCgpLmFkZChtX3dpbmRvdywgdGhpcyk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICBYRXZlbnQgZXZlbnQ7CisgICAgICAgIFhXaW5kb3dFdmVudChkaXNwbGF5LCBtX3dpbmRvdywg
U3RydWN0dXJlTm90aWZ5TWFzaywgJmV2ZW50KTsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT0g
TWFwTm90aWZ5ICYmIGV2ZW50LnhtYXAud2luZG93ID09IG1fd2luZG93KQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVu
dE1hc2spOworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywg
Q29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOworICAgIG1fZGFtYWdlID0gWERhbWFnZUNyZWF0ZShk
aXNwbGF5LCBtX3dpbmRvdywgWERhbWFnZVJlcG9ydE5vbkVtcHR5KTsKK30KKworUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpCit7CisgICAg
QVNTRVJUKG1fZGFtYWdlKTsKKyAgICBBU1NFUlQobV93aW5kb3cpOworICAgIEFTU0VSVChtX3Bh
cmVudFdpbmRvdyk7CisKKyAgICBnZXRXaW5kb3dIYXNoTWFwKCkucmVtb3ZlKG1fd2luZG93KTsK
KyAgICBpZiAoZ2V0V2luZG93SGFzaE1hcCgpLmlzRW1wdHkoKSkKKyAgICAgICAgZ2RrX3dpbmRv
d19yZW1vdmVfZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVy
WERhbWFnZUV2ZW50KSwgMCk7CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlf
WERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgWERhbWFnZURlc3Ryb3ko
ZGlzcGxheSwgbV9kYW1hZ2UpOworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93
KTsKKyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7CisgICAgY2xl
YW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKK30KKwordm9pZCBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6cmVzaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgRGlzcGxheSog
ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkp
OworICAgIFhSZXNpemVXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7CisKKyAgICBYRmx1c2goZGlzcGxheSk7CisKKyAgICBpZiAobV9uZWVkc0Nv
bnRleHQgPT0gQ3JlYXRlR0xDb250ZXh0KSB7CisgICAgICAgIGNvbnRleHQoKS0+d2FpdE5hdGl2
ZSgpOworICAgICAgICAvLyBUaGlzIHN3YXAgaXMgYmFzZWQgb24gY29kZSBpbiBDaHJvbWl1bS4g
SXQgdHJpZXMgdG8gd29yay1hcm91bmQgYSBidWcgaW4gdGhlIEludGVsIGRyaXZlcnMKKyAgICAg
ICAgLy8gd2hlcmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZyb250IGFuZCBi
YWNrIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCisgICAgICAgIGlmIChjb250ZXh0KCkg
PT0gR0xDb250ZXh0OjpnZXRDdXJyZW50KCkpCisgICAgICAgICAgICBjb250ZXh0KCktPnN3YXBC
dWZmZXJzKCk7CisgICAgfQorCisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX25lZWRzTmV3UGl4
bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOworfQorCitHTENvbnRleHQqIFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlQobV9uZWVkc0NvbnRleHQgPT0gQ3Jl
YXRlR0xDb250ZXh0KTsKKworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7CisKKyAgICBBU1NFUlQobV93aW5kb3cpOworICAgIG1fY29udGV4dCA9IEdM
Q29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhtX3dpbmRvdywgR0xDb250ZXh0OjpzaGFy
aW5nQ29udGV4dCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworfQorCit2b2lkIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgp
Cit7CisgICAgaWYgKCFtX3BpeG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgWEZyZWVQaXht
YXAoY2Fpcm9feGxpYl9zdXJmYWNlX2dldF9kaXNwbGF5KG1fc3VyZmFjZS5nZXQoKSksIG1fcGl4
bWFwKTsKKyAgICBtX3BpeG1hcCA9IDA7CisgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKK30KKwor
Y2Fpcm9fc3VyZmFjZV90KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJmYWNl
Rm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghbV9uZWVkc05ld1BpeG1h
cEFmdGVyUmVzaXplICYmIG1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQo
KTsKKworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSA9IGZhbHNlOworCisgICAgLy8g
SXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmV3IHBpeG1hcCBiZSBjcmVhdGVkIHdpdGggdGhlIHNh
bWUgRGlzcGxheSBwb2ludGVyIGFzIHRoZSB0YXJnZXQKKyAgICAvLyB3aWRnZXQgb3IgZWxzZSBk
cmF3aW5nIHNwZWVkIGNhbiBiZSAxMDB4IHNsb3dlci4KKyAgICBEaXNwbGF5KiBuZXdQaXhtYXBE
aXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRn
ZXQpKTsKKyAgICBQaXhtYXAgbmV3UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAo
bmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3cpOworICAgIGlmICghbmV3UGl4bWFwKSB7CisgICAg
ICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIFhXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgaWYg
KCFYR2V0V2luZG93QXR0cmlidXRlcyhuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdywgJndpbmRv
d0F0dHJpYnV0ZXMpKSB7CisgICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7
CisgICAgICAgIFhGcmVlUGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG5ld1BpeG1hcERpc3Bs
YXksIG5ld1BpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dBdHRyaWJ1dGVzLnZpc3Vh
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7
CisKKyAgICAvLyBOdmlkaWEgZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIgcmVkaXJlY3Rl
ZCB3aW5kb3cgcGl4bWFwIGFzeW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJhY3Rpb25zCisg
ICAgLy8gb2YgYSBzZWNvbmQgYWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5nIGNvbnRpbnVv
dXMgcmVzaXppbmcgKHdoaWNoIGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0ZXMKKyAgICAv
LyBwaXhtYXAgd2luZG93LWJhY2tpbmdzKSwgdGhlIHBpeG1hcCBtZW1vcnkgaXMgdW5pbml0aWFs
aXplZC4gVG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZSwgcGFpbnQgdGhlIG9sZAorICAgIC8vIHBp
eG1hcCB0byB0aGUgbmV3IG9uZSB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0LgorICAgIGlmICht
X3N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Io
Y3IuZ2V0KCksIDEsIDEsIDEpOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAw
LCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgIH0KKworICAgIGNsZWFu
dXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgbV9waXhtYXAgPSBuZXdQaXhtYXA7Cisg
ICAgbV9zdXJmYWNlID0gbmV3U3VyZmFjZTsKKworICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7
Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhbGxEYW1hZ2VOb3RpZnlD
YWxsYmFjaygpCit7CisgICAgaWYgKG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2spCisgICAgICAgIG1f
ZGFtYWdlTm90aWZ5Q2FsbGJhY2sobV9kYW1hZ2VOb3RpZnlEYXRhKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdMWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjJhNDhiMmVh
NWM0YWY2NjAxNDM3ZDlmNWM5MjE4YTYyNDQwZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gK
KyNkZWZpbmUgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKKworI2lmIFVTRShHTFgpCisK
KyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKK3R5cGVkZWYg
dW5zaWduZWQgbG9uZyBXaW5kb3c7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgRGFtYWdlOwordHlw
ZWRlZiB2b2lkICgqRGFtYWdlTm90aWZ5Q2FsbGJhY2spKHZvaWQqKTsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyB7CitwdWJsaWM6Cisg
ICAgZW51bSBHTENvbnRleHROZWVkZWQgeyBDcmVhdGVHTENvbnRleHQsIERvTm90Q3JlYXRlR0xD
b250ZXh0IH07CisgICAgc3RhdGljIFBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0TmVlZGVkID0gQ3JlYXRlR0xDb250
ZXh0KTsKKyAgICB2aXJ0dWFsIH5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworICAgIGNv
bnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgcmVzaXpl
KGNvbnN0IEludFNpemUmIG5ld1NpemUpOworICAgIEdMQ29udGV4dCogY29udGV4dCgpOworICAg
IGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCopOworICAg
IFdpbmRvdyB3aW5kb3dJZCgpIHsgcmV0dXJuIG1fd2luZG93OyB9CisgICAgdm9pZCBjYWxsRGFt
YWdlTm90aWZ5Q2FsbGJhY2soKTsKKworICAgIHZvaWQgc2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2so
RGFtYWdlTm90aWZ5Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGRhdGEpCisgICAgeworICAgICAg
ICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgIG1fZGFtYWdlTm90
aWZ5RGF0YSA9IGRhdGE7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93KGNvbnN0IEludFNpemUmLCBHTENvbnRleHROZWVkZWQpOworICAgIHZvaWQgY2xl
YW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKworICAgIEludFNpemUgbV9zaXplOworICAg
IFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5kb3cgbV9wYXJlbnRXaW5kb3c7CisgICAgUGl4bWFw
IG1fcGl4bWFwOworICAgIEdMQ29udGV4dE5lZWRlZCBtX25lZWRzQ29udGV4dDsKKyAgICBPd25Q
dHI8R0xDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9z
dXJmYWNlOworICAgIHVuc2lnbmVkIGludCBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZDsKKyAgICBi
b29sIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZTsKKworICAgIERhbWFnZSBtX2RhbWFnZTsK
KyAgICBEYW1hZ2VOb3RpZnlDYWxsYmFjayBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrOworICAgIHZv
aWQqIG1fZGFtYWdlTm90aWZ5RGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHTFgpCisKKyNlbmRpZiAvLyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
d19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTBmMzVjYTY2ZDIy
MGI0MGQ0ZjYzZjdkOWY2Yzk4NDI3NTc3NzFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSdW5M
b29wLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSdW5Mb29w
OjpSdW5Mb29wKCkKK3sKKyAgICAvLyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgZG9lc24ndCBh
ZGQgYW4gZXh0cmEgcmVmZXJlbmNlLgorICAgIG1fcnVuTG9vcENvbnRleHQgPSBpc01haW5UaHJl
YWQoKSA/IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29udGV4
dF9uZXcoKSk7CisgICAgQVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOworICAgIEdSZWZQdHI8R01h
aW5Mb29wPiBpbm5lcm1vc3RMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX3J1bkxv
b3BDb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsKKyAg
ICBtX3J1bkxvb3BNYWluTG9vcHMuYXBwZW5kKGlubmVybW9zdExvb3ApOworfQorCitSdW5Mb29w
Ojp+UnVuTG9vcCgpCit7CisgICAgZm9yIChpbnQgaSA9IG1fcnVuTG9vcE1haW5Mb29wcy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5p
bmcobV9ydW5Mb29wTWFpbkxvb3BzW2ldLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSk7Cisg
ICAgfQorfQorCit2b2lkIFJ1bkxvb3A6OnJ1bigpCit7CisgICAgUnVuTG9vcCogbWFpblJ1bkxv
b3AgPSBSdW5Mb29wOjpjdXJyZW50KCk7CisgICAgR01haW5Mb29wKiBpbm5lcm1vc3RMb29wID0g
bWFpblJ1bkxvb3AtPmlubmVybW9zdExvb3AoKTsKKyAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1
bm5pbmcoaW5uZXJtb3N0TG9vcCkpIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9z
dExvb3ApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuZCBydW4g
YSBuZXN0ZWQgbG9vcCBpZiB0aGUgaW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgor
ICAgIEdNYWluTG9vcCogbmVzdGVkTWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcoMCwgRkFMU0Up
OworICAgIG1haW5SdW5Mb29wLT5wdXNoTmVzdGVkTWFpbkxvb3AobmVzdGVkTWFpbkxvb3ApOwor
ICAgIGdfbWFpbl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7CisgICAgbWFpblJ1bkxvb3AtPnBv
cE5lc3RlZE1haW5Mb29wKCk7Cit9CisKK0dNYWluTG9vcCogUnVuTG9vcDo6aW5uZXJtb3N0TG9v
cCgpCit7CisgICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0
aGVyZS4KKyAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOworICAgIHJl
dHVybiBtX3J1bkxvb3BNYWluTG9vcHNbMF0uZ2V0KCk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6cHVz
aE5lc3RlZE1haW5Mb29wKEdNYWluTG9vcCogbmVzdGVkTG9vcCkKK3sKKyAgICAvLyBUaGUgaW5u
ZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VSVCghbV9y
dW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7CisgICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVu
ZChhZG9wdEdSZWYobmVzdGVkTG9vcCkpOworfQorCit2b2lkIFJ1bkxvb3A6OnBvcE5lc3RlZE1h
aW5Mb29wKCkKK3sKKyAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlz
IGJlIHRoZXJlLgorICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Cisg
ICAgbV9ydW5Mb29wTWFpbkxvb3BzLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBSdW5Mb29wOjpz
dG9wKCkKK3sKKyAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJl
IHRoZXJlLgorICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7CisgICAg
R1JlZlB0cjxHTWFpbkxvb3A+IGxhc3RNYWluTG9vcCA9IG1fcnVuTG9vcE1haW5Mb29wcy5sYXN0
KCk7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgpKSkK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOworfQorCitnYm9v
bGVhbiBSdW5Mb29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKK3sKKyAgICBydW5Mb29w
LT5wZXJmb3JtV29yaygpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBSdW5Mb29wOjp3
YWtlVXAoKQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdfaWRs
ZV9zb3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0KCks
IEdfUFJJT1JJVFlfREVGQVVMVCk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJjZS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29yayks
IHRoaXMsIDApOworICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9vcENv
bnRleHQuZ2V0KCkpOworCisgICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENvbnRl
eHQuZ2V0KCkpOworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wKiBy
dW5Mb29wKQorICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCisgICAgLCBtX3RpbWVyU291cmNlKDAp
Cit7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCit7CisgICAgc3RvcCgp
OworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6Y2xlYXJUaW1lclNvdXJjZSgpCit7Cisg
ICAgbV90aW1lclNvdXJjZSA9IDA7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6
dGltZXJGaXJlZENhbGxiYWNrKFJ1bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCit7CisgICAgR1Nv
dXJjZSogY3VycmVudFRpbWVyU291cmNlID0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCk7Cisg
ICAgYm9vbCBpc1JlcGVhdGluZyA9IHRpbWVyLT5pc1JlcGVhdGluZygpOworICAgIC8vIFRoaXMg
Y2FuIGNoYW5nZSB0aGUgdGltZXJTb3VyY2UgYnkgc3RhcnRpbmcgYSBuZXcgdGltZXIgd2l0aGlu
IHRoZSBjYWxsYmFjay4KKyAgICB0aW1lci0+ZmlyZWQoKTsKKyAgICBpZiAoIWlzUmVwZWF0aW5n
ICYmIGN1cnJlbnRUaW1lclNvdXJjZSA9PSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKSkKKyAg
ICAgICAgdGltZXItPmNsZWFyVGltZXJTb3VyY2UoKTsKKyAgICByZXR1cm4gaXNSZXBlYXRpbmc7
Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVydmFs
LCBib29sIHJlcGVhdCkKK3sKKyAgICBpZiAobV90aW1lclNvdXJjZSkKKyAgICAgICAgc3RvcCgp
OworCisgICAgbV90aW1lclNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhz
dGF0aWNfY2FzdDxndWludD4oZmlyZUludGVydmFsICogMTAwMCkpKTsKKyAgICBtX2lzUmVwZWF0
aW5nID0gcmVwZWF0OworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLmdl
dCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjp0
aW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1l
clNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKK30KKwor
dm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3AoKQoreworICAgIGlmICghbV90aW1lclNvdXJj
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNl
LmdldCgpKTsKKyAgICBjbGVhclRpbWVyU291cmNlKCk7Cit9CisKK2Jvb2wgUnVuTG9vcDo6VGlt
ZXJCYXNlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGltZXJTb3VyY2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVy
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNzA0MGYyOGU5ZGY3MWU0ZWVkMGUxYTAxMjZlNjY1MGQzNWM2
MzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJH
dGsuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0u
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkK
K3sKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOwor
ICAgIGdjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBzaXplOworICAgIEdFcnJvciogZXJyb3Ig
PSAwOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlbmFtZS5kYXRhKCksICZjb250
ZW50cywgJnNpemUsICZlcnJvcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZnVs
bHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMiLCBmaWxlbmFtZUZvckRpc3BsYXkoZmls
ZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9m
cmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudHMsIHNpemUpOwor
ICAgIGdfZnJlZShjb250ZW50cyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9TaGFyZWRUaW1lckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MzFhMzUyZjczM2YwZWIzYTc2OGY5ODIxYTQwMjU2NDMwMzA0ZjYy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5j
cHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgor
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBndWludCBzaGFyZWRUaW1lcjsKK3N0YXRpYyB2b2lkICgqc2hh
cmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOworCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5j
dGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlcikKK3sKKyAgICBpZiAoc2hh
cmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24o
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2
YWwoZG91YmxlIGludGVydmFsKQoreworICAgIEFTU0VSVChzaGFyZWRUaW1lckZpcmVkRnVuY3Rp
b24pOworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGludGVy
dmFsICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVkVGltZXIoKTsKKyAgICBzaGFyZWRUaW1lciA9
IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfUkVEUkFXLCBpbnRlcnZhbEluTVMsIHRp
bWVvdXRfY2IsIDAsIDApOworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigpCit7CisgICAgaWYg
KHNoYXJlZFRpbWVyID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGdib29sZWFuIHJlbW92
ZWRTb3VyY2UgPSBnX3NvdXJjZV9yZW1vdmUoc2hhcmVkVGltZXIpOworICAgIEFTU0VSVF9VTlVT
RUQocmVtb3ZlZFNvdXJjZSwgcmVtb3ZlZFNvdXJjZSk7CisgICAgc2hhcmVkVGltZXIgPSAwOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNzMxNmNhZmQyZWNl
ZjdiNjFlOGFkZjEyOTM2MjY4YTkyMjRjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1NvdW5kR3RrLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkKK3sKKyAgICBnZGtfYmVlcCgpOworfQor
Cit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk1YTAxODQ3NjFkMTIyYmQyYWUzZTQwNTlkMWIw
ZWY5NjM0OTJiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb21wbGV0ZWx5IGVtcHR5IHN0
dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK3ZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KK1N0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmco
dW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29u
c3QgS1VSTCAmdXJsKSB7IHJldHVybiBTdHJpbmcoKTsgfQorZmxvYXQgdXNlcklkbGVUaW1lKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gRkxUX01BWDsgfSAvLyByZXR1cm4gYW4gYXJiaXRy
YXJpbHkgaGlnaCB1c2VySWRsZVRpbWUgc28gdGhhdCByZWxlYXNpbmcgcGFnZXMgZnJvbSB0aGUg
cGFnZSBjYWNoZSBpc24ndCBwb3N0cG9uZWQKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1MmIyYzBlZjFlODAyYzJlZTE4M2ZlMjE3ODkwYzE5NjNiMzU5
ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5j
cHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVXNlckFnZW50R3RrLmgi
CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZiBPUyhVTklYKQorI2luY2x1ZGUgPHN5cy91dHNu
YW1lLmg+CisjZWxpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwbGF0Zm9ybUZv
clVBU3RyaW5nKCkKK3sKKyNpZiBQTEFURk9STShYMTEpCisgICAgcmV0dXJuICJYMTEiOworI2Vs
aWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gIiI7CisjZWxpZiBQTEFURk9STShNQUMpCisgICAg
cmV0dXJuICJNYWNpbnRvc2giOworI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX0RJUkVDVEZC
KQorICAgIHJldHVybiAiRGlyZWN0RkIiOworI2Vsc2UKKyAgICByZXR1cm4gIlVua25vd24iOwor
I2VuZGlmCit9CisKK3N0YXRpYyBTdHJpbmcgcGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygp
KSk7CisgICAgaWYgKCF1YU9TVmVyc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB1YU9T
VmVyc2lvbjsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgdWFPU1ZlcnNpb24gPSB3aW5kb3dzVmVy
c2lvbkZvclVBU3RyaW5nKCk7CisjZWxpZiBPUyhEQVJXSU4pCisjaWYgQ1BVKFg4NikgfHwgQ1BV
KFg4Nl82NCkKKyAgICB1YU9TVmVyc2lvbiA9ICJJbnRlbCBNYWMgT1MgWCI7CisjZWxzZQorICAg
IHVhT1NWZXJzaW9uID0gIlBQQyBNYWMgT1MgWCI7CisjZW5kaWYKKyNlbGlmIE9TKFVOSVgpCisg
ICAgc3RydWN0IHV0c25hbWUgbmFtZTsKKyAgICBpZiAodW5hbWUoJm5hbWUpICE9IC0xKQorICAg
ICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZzo6Zm9ybWF0KCIlcyAlcyIsIG5hbWUuc3lzbmFtZSwg
bmFtZS5tYWNoaW5lKTsKKyAgICBlbHNlCisgICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJV
bmtub3duIik7CisjZWxzZQorICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJVbmtub3duIik7Cisj
ZW5kaWYKKyAgICByZXR1cm4gdWFPU1ZlcnNpb247Cit9CisKK1N0cmluZyBzdGFuZGFyZFVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcHBsaWNh
dGlvblZlcnNpb24pCit7CisgICAgLy8gQ3JlYXRlIGEgZGVmYXVsdCB1c2VyIGFnZW50IHN0cmlu
ZyB3aXRoIGEgbGliZXJhbCBpbnRlcnByZXRhdGlvbiBvZiAKKyAgICAvLyBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1VzZXJfQWdlbnRfU3RyaW5nc19SZWZlcmVuY2UK
KyAgICAvLworICAgIC8vIEZvcm1pbmcgYSBmdW5jdGlvbmFsIHVzZXIgYWdlbnQgaXMgcmVhbGx5
IGRpZmZpY3VsdC4gV2UgbXVzdCBtZW50aW9uIFNhZmFyaSwgYmVjYXVzZSBzb21lCisgICAgLy8g
c2l0ZXMgY2hlY2sgZm9yIHRoYXQgd2hlbiBkZXRlY3RpbmcgV2ViS2l0IGJyb3dzZXJzLiBBZGRp
dGlvbmFsbHkgc29tZSBzaXRlcyBhc3N1bWUgdGhhdAorICAgIC8vIGJyb3dzZXJzIHRoYXQgYXJl
ICJTYWZhcmkiIGJ1dCBub3QgcnVubmluZyBvbiBPUyBYIGFyZSB0aGUgU2FmYXJpIGlPUyBicm93
c2VyLCBzbyB3ZQorICAgIC8vIGFsc28gY2xhaW0gdG8gYmUgIENocm9taXVtLiBHZXR0aW5nIHRo
aXMgd3JvbmcgY2FuIGNhdXNlIHNpdGVzIHRvIGxvYWQgdGhlIHdyb25nIEphdmFTY3JpcHQsCisg
ICAgLy8gQ1NTLCBvciBjdXN0b20gZm9udHMuIEluIHNvbWUgY2FzZXMgc2l0ZXMgd29uJ3QgbG9h
ZCByZXNvdXJjZXMgYXQgYWxsLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQ1N0cmlu
ZywgdWFWZXJzaW9uLCAoU3RyaW5nOjpmb3JtYXQoIiVpLiVpIiwgVVNFUl9BR0VOVF9HVEtfTUFK
T1JfVkVSU0lPTiwgVVNFUl9BR0VOVF9HVEtfTUlOT1JfVkVSU0lPTikudXRmOCgpKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0YXRpY1VBLCAoU3RyaW5nOjpmb3Jt
YXQoIk1vemlsbGEvNS4wICglczsgJXMpIEFwcGxlV2ViS2l0LyVzIChLSFRNTCwgbGlrZSBHZWNr
bykgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJDaHJvbWl1bS8yNS4wLjEzNDkuMiBDaHJvbWUvMjUuMC4xMzQ5LjIgU2Fm
YXJpLyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwbGF0Zm9ybUZvclVBU3RyaW5nKCksIHBsYXRmb3JtVmVyc2lvbkZv
clVBU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YVZlcnNpb24uZGF0YSgpLCB1YVZl
cnNpb24uZGF0YSgpKSkpOworICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gc3RhdGljVUE7CisKKyAgICBTdHJpbmcgZmluYWxBcHBsaWNhdGlvblZlcnNp
b24gPSBhcHBsaWNhdGlvblZlcnNpb247CisgICAgaWYgKGZpbmFsQXBwbGljYXRpb25WZXJzaW9u
LmlzRW1wdHkoKSkKKyAgICAgICAgZmluYWxBcHBsaWNhdGlvblZlcnNpb24gPSB1YVZlcnNpb24u
ZGF0YSgpOworCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyAlcy8lcyIsIHN0YXRpY1VB
LnV0ZjgoKS5kYXRhKCksIGFwcGxpY2F0aW9uTmFtZS51dGY4KCkuZGF0YSgpLCBmaW5hbEFwcGxp
Y2F0aW9uVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzE3NTMzZTA3MzA0
NTc0YzAyYzlhNjc5MmM1NmE5NTU3MjJhOWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVc2VyQWdlbnRHdGtfaAor
I2RlZmluZSBVc2VyQWdlbnRHdGtfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1N0cmluZyBzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSA9
ICIiLCBjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVyc2lvbiA9ICIiKTsKKworfQorCisjZW5k
aWYgLy8gVXNlckFnZW50R3RrX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9h
dWRpby9BdWRpb0J1c0d0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVz
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ZmM3ODdmNTA1YWNmZDMwYjJlZjZhNzYzN2MwYjA0YTk4YTAz
YzZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby9BdWRpb0J1
c0d0ay5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisK
KyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisK
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NPd25QdHI8QXVkaW9CdXM+IEF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBj
aGFyKiBuYW1lLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVu
YW1lKGdfc3RyZHVwX3ByaW50ZigiJXMud2F2IiwgbmFtZSkpOworICAgIGNvbnN0IGNoYXIqIGVu
dmlyb25tZW50UGF0aCA9IGdldGVudigiQVVESU9fUkVTT1VSQ0VTX1BBVEgiKTsKKyAgICBHT3du
UHRyPGdjaGFyPiBhYnNvbHV0ZUZpbGVuYW1lOworICAgIGlmIChlbnZpcm9ubWVudFBhdGgpCisg
ICAgICAgIGFic29sdXRlRmlsZW5hbWUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoZW52aXJvbm1lbnRQ
YXRoLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOworICAgIGVsc2UKKyAgICAgICAgYWJzb2x1dGVG
aWxlbmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQYXRoKCkuZGF0YSgp
LCAicmVzb3VyY2VzIiwgImF1ZGlvIiwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsKKyAgICByZXR1
cm4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShhYnNvbHV0ZUZpbGVuYW1lLmdldCgpLCBmYWxzZSwg
c2FtcGxlUmF0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNz
L0NvbG9yR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhmNTZiYTZmYjRlMGI2NWE5OWMyNzNkM2I0NzBiZmRiNmIzNWI5YWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0NvbG9yR3RrLmNw
cApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29sb3I6OkNvbG9yKGNvbnN0IEdka0NvbG9yJiBj
KQorICAgIDogbV9jb2xvcihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVl
ID4+IDgpKQorICAgICwgbV92YWxpZCh0cnVlKQoreworfQorCisjaWZuZGVmIEdUS19BUElfVkVS
U0lPTl8yCitDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKKyAgICA6IG1fY29sb3IobWFr
ZVJHQkEoc3RhdGljX2Nhc3Q8aW50PihjLnJlZCAqIDI1NSksCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oYy5ncmVlbiAqIDI1NSksCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oYy5ibHVlICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihjLmFscGhhICogMjU1KSkpCisgICAgLCBtX3ZhbGlkKHRydWUp
Cit7Cit9CisKK0NvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKK3sKKyAgICBkb3VibGUg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CisgICAgR2RrUkdCQSByZ2JhID0geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9Owor
ICAgIHJldHVybiByZ2JhOworfQorI2VuZGlmCisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRp
ZXMuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDgwMThhMzBmMGM0MWUwZTRjZTVkY2MzODRhOTUxOWY1NDcwNDVkOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9V
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2RrQ2Fp
cm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisKKyNpbmNsdWRlIDxj
YWlyby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3Vy
ZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICByZXR1cm4g
Z2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZhY2UsIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChz
dXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjViM2Vk
ZWZjMTExZGI5NDZlMzJhYzgxZDBmYzJhMDUwY2UwMjZmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5oCkBAIC0wLDAgKzEs
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEdka0NhaXJvVXRpbGl0aWVzX2gKKyNkZWZpbmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAorCitH
ZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlKTsKKworI2VuZGlmIC8vIEdka0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9ncmFwaGljcy9JbWFnZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ5ZmJlZmYwMjU4NDJjMmYx
Zjg1ZWQ0OTlmNjQxNTkyMGU0NTJmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvZ3JhcGhpY3MvSW1hZ2VHdGsuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
CisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY2hhciogZ2V0UGF0
aFRvSW1hZ2VSZXNvdXJjZShjaGFyKiByZXNvdXJjZSkKK3sKKyAgICBpZiAoZ19nZXRlbnYoIldF
QktJVF9UT1BfTEVWRUwiKSkKKyAgICAgICAgcmV0dXJuIGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRl
bnYoIldFQktJVF9UT1BfTEVWRUwiKSwgIlNvdXJjZSIsICJXZWJDb3JlIiwgIlJlc291cmNlcyIs
IHJlc291cmNlLCBOVUxMKTsKKworICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKHNoYXJlZFJl
c291cmNlc1BhdGgoKS5kYXRhKCksICJpbWFnZXMiLCByZXNvdXJjZSwgTlVMTCk7Cit9CisKK3N0
YXRpYyBDU3RyaW5nIGdldFRoZW1lSWNvbkZpbGVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIGludCBz
aXplKQoreworICAgIEd0a0ljb25JbmZvKiBpY29uSW5mbyA9IGd0a19pY29uX3RoZW1lX2xvb2t1
cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2l6ZSwgR1RLX0lDT05f
TE9PS1VQX05PX1NWRyk7CisgICAgLy8gVHJ5IHRvIGZhbGxiYWNrIG9uIE1JU1NJTkdfSU1BR0Uu
CisgICAgaWYgKCFpY29uSW5mbykKKyAgICAgICAgaWNvbkluZm8gPSBndGtfaWNvbl90aGVtZV9s
b29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFLCBz
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19J
Q09OX0xPT0tVUF9OT19TVkcpOworICAgIGlmIChpY29uSW5mbykgeworICAgICAgICBHT3duUHRy
PEd0a0ljb25JbmZvPiBpbmZvKGljb25JbmZvKTsKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoZ3Rr
X2ljb25faW5mb19nZXRfZmlsZW5hbWUoaW5mby5nZXQoKSkpOworICAgIH0KKworICAgIC8vIE5v
IGljb24gd2FzIGZvdW5kLCB0aGlzIGNhbiBoYXBwZW4gaWYgbm90IEdUSyB0aGVtZSBpcyBzZXQu
IEluCisgICAgLy8gdGhhdCBjYXNlIGFuIGVtcHR5IEltYWdlIHdpbGwgYmUgY3JlYXRlZC4KKyAg
ICByZXR1cm4gQ1N0cmluZygpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihDU3RyaW5nIG5hbWUpCit7CisgICAgR093blB0cjxn
Y2hhcj4gY29udGVudDsKKyAgICBnc2l6ZSBsZW5ndGg7CisgICAgaWYgKCFnX2ZpbGVfZ2V0X2Nv
bnRlbnRzKG5hbWUuZGF0YSgpLCAmY29udGVudC5vdXRQdHIoKSwgJmxlbmd0aCwgMCkpCisgICAg
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworCisgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGNvbnRlbnQuZ2V0KCksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQml0bWFwSW1h
Z2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQoreworfQorCitQYXNzUmVmUHRyPEltYWdlPiBs
b2FkSW1hZ2VGcm9tRmlsZShDU3RyaW5nIGZpbGVOYW1lKQoreworICAgIFJlZlB0cjxCaXRtYXBJ
bWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIGlmICghZmlsZU5hbWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gbG9hZFJlc291
cmNlU2hhcmVkQnVmZmVyKGZpbGVOYW1lKTsKKyAgICAgICAgaW1nLT5zZXREYXRhKGJ1ZmZlci5y
ZWxlYXNlKCksIHRydWUpOworICAgIH0KKyAgICByZXR1cm4gaW1nLnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpCit7CisgICAgQ1N0cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIXN0cmNtcCgibWlzc2lu
Z0ltYWdlIiwgbmFtZSkpCisgICAgICAgIGZpbGVOYW1lID0gZ2V0VGhlbWVJY29uRmlsZU5hbWUo
R1RLX1NUT0NLX01JU1NJTkdfSU1BR0UsIDE2KTsKKyAgICBpZiAoZmlsZU5hbWUuaXNOdWxsKCkp
IHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gaW1hZ2VOYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMu
cG5nIiwgbmFtZSkpOworICAgICAgICBHT3duUHRyPGdjaGFyPiBnbGliRmlsZU5hbWUoZ2V0UGF0
aFRvSW1hZ2VSZXNvdXJjZShpbWFnZU5hbWUuZ2V0KCkpKTsKKyAgICAgICAgZmlsZU5hbWUgPSBn
bGliRmlsZU5hbWUuZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIGxvYWRJbWFnZUZyb21GaWxl
KGZpbGVOYW1lKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVRo
ZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKK3sKKyAgICByZXR1cm4gbG9hZElt
YWdlRnJvbUZpbGUoZ2V0VGhlbWVJY29uRmlsZU5hbWUobmFtZSwgc2l6ZSkpOworfQorCitHZGtQ
aXhidWYqIEJpdG1hcEltYWdlOjpnZXRHZGtQaXhidWYoKQoreworICAgIE5hdGl2ZUltYWdlQ2Fp
cm8qIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICByZXR1cm4gaW1h
Z2UgPyBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGltYWdlLT5zdXJmYWNlKCkpIDogMDsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2lu
dEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFBvaW50R3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jNDAyMTU4MWU4ZWQ5NGE5ZWJlYzFkZWViYzk1YmQwMTMyNTY3MzZmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5j
cHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UG9pbnQu
aCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRQ
b2ludDo6SW50UG9pbnQoY29uc3QgR2RrUG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwg
bV95KHAueSkKK3sKK30KKworSW50UG9pbnQ6Om9wZXJhdG9yIEdka1BvaW50KCkgY29uc3QKK3sK
KyAgICBHZGtQb2ludCBwID0geyB4KCksIHkoKSB9OworICAgIHJldHVybiBwOworfQorCit9CisK
Ky8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dy
YXBoaWNzL0ludFJlY3RHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRS
ZWN0R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjMxMjgxOWFmY2ExMWFkNzc3ZDM0MmM3YTM5NDA2NDc5
ZjIzNThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9J
bnRSZWN0R3RrLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKKyNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEdk
a1JlY3RhbmdsZSYgcikKKyAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoci54LCByLnkpKQorICAg
ICwgbV9zaXplKHIud2lkdGgsIHIuaGVpZ2h0KQoreworfQorCitJbnRSZWN0OjpvcGVyYXRvciBH
ZGtSZWN0YW5nbGUoKSBjb25zdAoreworICAgIEdka1JlY3RhbmdsZSByID0geyB4KCksIHkoKSwg
d2lkdGgoKSwgaGVpZ2h0KCkgfTsKKyAgICByZXR1cm4gcjsKK30KKworfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9y
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzQyM2ZhNWRlZDIyNmRlYjk3Y2U3MzNiMTdlZGMxOWJiN2NkNjk0
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVkZW50
aWFsQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcmVkZW50
aWFsQmFja2luZ1N0b3JlLmgiCisKKyNkZWZpbmUgU0VDUkVUX1dJVEhfVU5TVEFCTEUgMQorI2Rl
ZmluZSBTRUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKKyNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4KKyNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NyZWRlbnRp
YWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSwgYmFja2luZ1N0b3JlLCAoKSk7Cisg
ICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKK30KKworc3RhdGljIEdSZWZQdHI8R0hhc2hUYWJsZT4g
Y3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsID0gQ3Jl
ZGVudGlhbCgpKQoreworICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGNo
YWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKKyAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0
ZXMgPSBhZG9wdEdSZWYoc2VjcmV0X2F0dHJpYnV0ZXNfYnVpbGQoCisgICAgICAgIFNFQ1JFVF9T
Q0hFTUFfQ09NUEFUX05FVFdPUkssCisgICAgICAgICJkb21haW4iLCBzb3VwX2F1dGhfZ2V0X3Jl
YWxtKGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKKyAgICAgICAgInNlcnZlciIsIHVyaS0+aG9zdCwK
KyAgICAgICAgInByb3RvY29sIiwgdXJpLT5zY2hlbWUsCisgICAgICAgICJhdXRodHlwZSIsIHNv
dXBfYXV0aF9nZXRfc2NoZW1lX25hbWUoY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAorICAgICAgICAi
cG9ydCIsIHVyaS0+cG9ydCwKKyAgICAgICAgTlVMTCkpOworICAgIGlmIChjcmVkZW50aWFsLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CisKKyAgICBnX2hhc2hfdGFibGVf
aW5zZXJ0KGF0dHJpYnV0ZXMuZ2V0KCksIGdfc3RyZHVwKCJ1c2VyIiksIGdfc3RyZHVwKGNyZWRl
bnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gYXR0cmlidXRlczsKK30K
Kworc3RydWN0IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhIHsK
KyAgICBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJh
Y2sgY2FsbGJhY2s7CisgICAgdm9pZCogZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRp
YWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2soU2VjcmV0U2VydmljZSogc2VydmljZSwg
R0FzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVh
ZHlDYWxsYmFja0RhdGEqIGNhbGxiYWNrRGF0YSkKK3sKKyAgICBDcmVkZW50aWFsQmFja2luZ1N0
b3JlOjpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2sgPSBjYWxsYmFja0Rh
dGEtPmNhbGxiYWNrOworICAgIHZvaWQqIGRhdGEgPSBjYWxsYmFja0RhdGEtPmRhdGE7CisgICAg
ZGVsZXRlIGNhbGxiYWNrRGF0YTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBH
T3duUHRyPEdMaXN0PiBlbGVtZW50cyhzZWNyZXRfc2VydmljZV9zZWFyY2hfZmluaXNoKHNlcnZp
Y2UsIGFzeW5jUmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IgfHwgIWVs
ZW1lbnRzIHx8ICFlbGVtZW50cy0+ZGF0YSkgeworICAgICAgICBjYWxsYmFjayhDcmVkZW50aWFs
KCksIGRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1JlZlB0cjxTZWNyZXRJ
dGVtPiBzZWNyZXRJdGVtID0gYWRvcHRHUmVmKHN0YXRpY19jYXN0PFNlY3JldEl0ZW0qPihlbGVt
ZW50cy0+ZGF0YSkpOworICAgIEdSZWZQdHI8R0hhc2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0
R1JlZihzZWNyZXRfaXRlbV9nZXRfYXR0cmlidXRlcyhzZWNyZXRJdGVtLmdldCgpKSk7CisgICAg
U3RyaW5nIHVzZXIgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihn
X2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ1c2VyIikpKTsKKyAgICBpZiAo
dXNlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBsZW5ndGg7CisgICAgR1JlZlB0
cjxTZWNyZXRWYWx1ZT4gc2VjcmV0VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0X3Nl
Y3JldChzZWNyZXRJdGVtLmdldCgpKSk7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmREYXRhID0g
c2VjcmV0X3ZhbHVlX2dldChzZWNyZXRWYWx1ZS5nZXQoKSwgJmxlbmd0aCk7CisgICAgU3RyaW5n
IHBhc3N3b3JkID0gU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZERhdGEsIGxlbmd0aCk7CisKKyAg
ICBjYWxsYmFjayhDcmVkZW50aWFsKHVzZXIsIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVu
Y2VQZXJtYW5lbnQpLCBkYXRhKTsKK30KKwordm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpj
cmVkZW50aWFsRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFs
bGVuZ2UsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0
YSkKK3sKKyAgICAvLyBUaGUgZGVmYXVsdCBmbGFnIG9ubHkgcmV0dXJucyB0aGUgbW9zdCByZWNl
bnQgaXRlbSwgbm90IGFsbCBvZiB0aGVtLgorICAgIFNlY3JldFNlYXJjaEZsYWdzIHNlYXJjaEZs
YWdzID0gc3RhdGljX2Nhc3Q8U2VjcmV0U2VhcmNoRmxhZ3M+KFNFQ1JFVF9TRUFSQ0hfVU5MT0NL
IHwgU0VDUkVUX1NFQVJDSF9MT0FEX1NFQ1JFVFMpOworICAgIENyZWRlbnRpYWxGb3JDaGFsbGVu
Z2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxsYmFja0RhdGEgPSBuZXcgQ3JlZGVudGlhbEZv
ckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGE7CisgICAgY2FsbGJhY2tEYXRhLT5jYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIGNhbGxiYWNrRGF0YS0+ZGF0YSA9IGRhdGE7CisKKyAgICBz
ZWNyZXRfc2VydmljZV9zZWFyY2goCisgICAgICAgIDAsIC8vIFRoZSBkZWZhdWx0IFNlY3JldFNl
cnZpY2UuCisgICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCisgICAgICAgIGNy
ZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKS5nZXQoKSwKKyAg
ICAgICAgc2VhcmNoRmxhZ3MsCisgICAgICAgIDAsIC8vIGNhbmNlbGxhYmxlCisgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY3JlZGVudGlhbEZvckNoYWxsZW5n
ZUFzeW5jUmVhZHlDYWxsYmFjayksCisgICAgICAgIGNhbGxiYWNrRGF0YSk7Cit9CisKK3ZvaWQg
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6c3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBj
cmVkZW50aWFsKQoreworICAgIENTdHJpbmcgdXRmOFBhc3N3b3JkID0gY3JlZGVudGlhbC5wYXNz
d29yZCgpLnV0ZjgoKTsKKyAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBuZXdTZWNyZXRWYWx1ZSA9
IGFkb3B0R1JlZihzZWNyZXRfdmFsdWVfbmV3KHV0ZjhQYXNzd29yZC5kYXRhKCksIHV0ZjhQYXNz
d29yZC5sZW5ndGgoKSwgInRleHQvcGxhaW4iKSk7CisKKyAgICBzZWNyZXRfc2VydmljZV9zdG9y
ZSgKKyAgICAgICAgMCwgLy8gVGhlIGRlZmF1bHQgU2VjcmV0U2VydmljZS4KKyAgICAgICAgU0VD
UkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKKyAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRh
YmxlRnJvbUNoYWxsZW5nZShjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpLmdldCgpLAorICAgICAgICBT
RUNSRVRfQ09MTEVDVElPTl9ERUZBVUxULAorICAgICAgICBfKCJXZWJLaXRHVEsrIHBhc3N3b3Jk
IiksCisgICAgICAgIG5ld1NlY3JldFZhbHVlLmdldCgpLAorICAgICAgICAwLCAvLyBjYW5jZWxs
YWJsZQorICAgICAgICAwLCAvLyBjYWxsYmFjaworICAgICAgICAwKTsgLy8gZGF0YQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25l
dHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3
b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGRhOWExNTdmYmMxOTZl
NjI4NzA0MjJhY2U5ZWZlODk3NDhlZTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcmVkZW50aWFs
QmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCisKKyNpbmNs
dWRlICJDcmVkZW50aWFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U7CisKK2NsYXNzIENyZWRlbnRpYWxCYWNraW5nU3RvcmUgeworV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSk7CitwdWJsaWM6CisgICAg
ZnJpZW5kIENyZWRlbnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsK
KyAgICB2aXJ0dWFsIH5DcmVkZW50aWFsQmFja2luZ1N0b3JlKCkgeyB9CisKKyAgICB0eXBlZGVm
IHZvaWQgKCpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2spKGNvbnN0IENyZWRlbnRpYWwm
LCB2b2lkKiBkYXRhKTsKKworICAgIHZvaWQgY3JlZGVudGlhbEZvckNoYWxsZW5nZShjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjaywg
dm9pZCogZGF0YSk7CisgICAgdm9pZCBzdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpOworcHJpdmF0ZToK
KyAgICBDcmVkZW50aWFsQmFja2luZ1N0b3JlKCkgeyB9Cit9OworCitDcmVkZW50aWFsQmFja2lu
Z1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3Bw
IGIvU291cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM1ZTVhMDVmYTQ5MTk1ZmIzMGJmNjlkZWQ1NjJkNTQzYjhiNjEw
MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIGN1cnJlbnRTZWFyY2hMb2NhbGVJRCgpCit7Cisg
ICAgLy8gRklYTUU6IFNob3VsZCB1c2Ugc3lzdGVtIGxvY2FsZS4KKyAgICByZXR1cm4gIiI7Cit9
CisKK2NvbnN0IGNoYXIqIGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpCit7CisgICAgLy8gRklY
TUU6IFNob3VsZCB1c2Ugc3lzdGVtIGxvY2FsZS4KKyAgICByZXR1cm4gImVuX3VzIjsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA0MjQwMjY1NGM0NTAwNDA5MDFkODZjOGVhNzU5NmFi
NmI2NzUwMDhhLi5jMWRiMWFlNzgxNGZiZTQ2MmY2YTQ3NWEzZTUxMGUyMjdlMTBhMWI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTA1LDggKzEwNSw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0g
XAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYkNvcmUvYmluZGluZ3MvanMgXAogCS1JJCh0b3BfYnVp
bGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZSBcCi0JLUREQVRBX0RJUj1cIiR7ZGF0YWRpcn1cIgorCS1JJCh0b3BfYnVpbGRkaXIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlCiAKIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAog
CS1EV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORz1cIkBXRUJLSVRHVEtfQVBJX1ZFUlNJT05A
XCIgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZTNhNDJlMjI2MzBmNDc4MGU4
Nzc4ZmQyYTQzNTc2NjJmNmQ0Zjc5Mi4uNmJmOTcwNTIxMDkzYWZjMWQxNDE1ZGQ4YWRjZjM2Yjgw
OWJmOWJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01Nzc3LDE0ICs1Nzc3
LDYgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vy
cm9yc0d0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2hhcmVkQnVmZmVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJB
Z2VudEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS2lsbFJpbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJp
bmdOb25lLmNwcCBcCkBAIC01OTQzLDggKzU5MzUsNiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3Ry
ZWFtSGFuZGxlQmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
U291cC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVK
YXJTb3VwLmNwcCBcCkBAIC02MDQ3LDcgKzYwMzcsNiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N5c3RlbVRpbWUuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggXApAQCAtNjE2
NCw3ICs2MTUzLDYgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Z3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZl
bnRIYW5kbGVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1
ZGlvQnVzR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFj
a2luZ1N0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRp
b25Qcm92aWRlckdlb2NsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9H
ZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHAgXApAQCAtNjE4Nyw4OCArNjE3NSw0NiBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxp
dGllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvQ2xpcGJvYXJkR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBi
b2FyZEd0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0
aWVzR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxp
dGllc0d0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1
bHRzLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0V2ZW50TG9vcEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxl
U3lzdGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291
bnRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HT3duUHRyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3Rr
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9L
ZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9L
ZXlCaW5kaW5nVHJhbnNsYXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9j
YWxpemVkU3RyaW5nc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWlu
RnJhbWVTY3JvbGxiYXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFp
bkZyYW1lU2Nyb2xsYmFyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRI
ZWxwZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50
R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVu
dEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0azMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVu
TG9vcEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3Rr
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU291bmRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0Nv
bnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5oCiAKIGlmIFRBUkdFVF9YMTEKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luUGFja2FnZUd0ay5jcHAgXApAQCAtNjI3Nyw5ICs2MjIzLDcgQEAgd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKIGlmIFVTRV9PUEVOR0wKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmggXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5o
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKIGVu
ZGlmICMgRU5EIFVTRV9PUEVOR0wKIGlmIFVTRV9FR0wKIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNH
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjNzg3ZjUwNWFjZmQzMGIyZWY2YTc2
MzdjMGIwNGE5OGEwM2M2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTAotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCi0KLSNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVBhc3NPd25QdHI8QXVkaW9CdXM+IEF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShj
b25zdCBjaGFyKiBuYW1lLCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIEdPd25QdHI8Z2NoYXI+
IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMud2F2IiwgbmFtZSkpOwotICAgIGNvbnN0IGNo
YXIqIGVudmlyb25tZW50UGF0aCA9IGdldGVudigiQVVESU9fUkVTT1VSQ0VTX1BBVEgiKTsKLSAg
ICBHT3duUHRyPGdjaGFyPiBhYnNvbHV0ZUZpbGVuYW1lOwotICAgIGlmIChlbnZpcm9ubWVudFBh
dGgpCi0gICAgICAgIGFic29sdXRlRmlsZW5hbWUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoZW52aXJv
bm1lbnRQYXRoLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJz
b2x1dGVGaWxlbmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQYXRoKCku
ZGF0YSgpLCAicmVzb3VyY2VzIiwgImF1ZGlvIiwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsKLSAg
ICByZXR1cm4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShhYnNvbHV0ZUZpbGVuYW1lLmdldCgpLCBm
YWxzZSwgc2FtcGxlUmF0ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0NvbG9yR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY1
NmJhNmZiNGUwYjY1YTk5YzI3M2QzYjQ3MGJmZGI2YjM1YjlhZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvQ29sb3JHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb2xvci5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUNvbG9yOjpDb2xvcihjb25zdCBHZGtDb2xvciYgYykKLSAgICA6IG1fY29sb3IobWFrZVJH
QihjLnJlZCA+PiA4LCBjLmdyZWVuID4+IDgsIGMuYmx1ZSA+PiA4KSkKLSAgICAsIG1fdmFsaWQo
dHJ1ZSkKLXsKLX0KLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotQ29sb3I6OkNvbG9yKGNv
bnN0IEdka1JHQkEmIGMpCi0gICAgOiBtX2NvbG9yKG1ha2VSR0JBKHN0YXRpY19jYXN0PGludD4o
Yy5yZWQgKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
Z3JlZW4gKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
Ymx1ZSAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5h
bHBoYSAqIDI1NSkpKQotICAgICwgbV92YWxpZCh0cnVlKQotewotfQotCi1Db2xvcjo6b3BlcmF0
b3IgR2RrUkdCQSgpIGNvbnN0Ci17Ci0gICAgZG91YmxlIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
OwotICAgIGdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIEdka1JHQkEgcmdi
YSA9IHsgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgfTsKLSAgICByZXR1cm4gcmdiYTsKLX0KLSNl
bmRpZgotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwMThhMzBmMGM0MWUwZTRjZTVkY2MzODRhOTUx
OWY1NDcwNDVkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJH
ZGtDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2luY2x1
ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1HZGtQaXhidWYqIGNhaXJvSW1h
Z2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIHJl
dHVybiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKLX0KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1YjNlZGVmYzExMWRiOTQ2ZTMyYWM4
MWQwZmMyYTA1MGNlMDI2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGls
aXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdka0NhaXJvVXRpbGl0aWVzX2gK
LSNkZWZpbmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAotCi1HZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJm
YWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKTsKLQotI2VuZGlmIC8vIEdk
a0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW1hZ2VHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDlmYmVm
ZjAyNTg0MmMyZjFmODVlZDQ5OWY2NDE1OTIwZTQ1MmY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbWFnZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNs
dWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNoYXIqIGdl
dFBhdGhUb0ltYWdlUmVzb3VyY2UoY2hhciogcmVzb3VyY2UpCi17Ci0gICAgaWYgKGdfZ2V0ZW52
KCJXRUJLSVRfVE9QX0xFVkVMIikpCi0gICAgICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0ZW52KCJXRUJLSVRfVE9QX0xFVkVMIiksICJTb3VyY2UiLCAiV2ViQ29yZSIsICJSZXNvdXJj
ZXMiLCByZXNvdXJjZSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShzaGFy
ZWRSZXNvdXJjZXNQYXRoKCkuZGF0YSgpLCAiaW1hZ2VzIiwgcmVzb3VyY2UsIE5VTEwpOwotfQot
Ci1zdGF0aWMgQ1N0cmluZyBnZXRUaGVtZUljb25GaWxlTmFtZShjb25zdCBjaGFyKiBuYW1lLCBp
bnQgc2l6ZSkKLXsKLSAgICBHdGtJY29uSW5mbyogaWNvbkluZm8gPSBndGtfaWNvbl90aGVtZV9s
b29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNpemUsIEdUS19J
Q09OX0xPT0tVUF9OT19TVkcpOwotICAgIC8vIFRyeSB0byBmYWxsYmFjayBvbiBNSVNTSU5HX0lN
QUdFLgotICAgIGlmICghaWNvbkluZm8pCi0gICAgICAgIGljb25JbmZvID0gZ3RrX2ljb25fdGhl
bWVfbG9va3VwX2ljb24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfTUlTU0lOR19JTUFH
RSwgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfSUNPTl9MT09LVVBfTk9fU1ZHKTsKLSAgICBpZiAoaWNvbkluZm8pIHsKLSAgICAgICAgR093
blB0cjxHdGtJY29uSW5mbz4gaW5mbyhpY29uSW5mbyk7Ci0gICAgICAgIHJldHVybiBDU3RyaW5n
KGd0a19pY29uX2luZm9fZ2V0X2ZpbGVuYW1lKGluZm8uZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICAv
LyBObyBpY29uIHdhcyBmb3VuZCwgdGhpcyBjYW4gaGFwcGVuIGlmIG5vdCBHVEsgdGhlbWUgaXMg
c2V0LiBJbgotICAgIC8vIHRoYXQgY2FzZSBhbiBlbXB0eSBJbWFnZSB3aWxsIGJlIGNyZWF0ZWQu
Ci0gICAgcmV0dXJuIENTdHJpbmcoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXIoQ1N0cmluZyBuYW1lKQotewotICAgIEdPd25Q
dHI8Z2NoYXI+IGNvbnRlbnQ7Ci0gICAgZ3NpemUgbGVuZ3RoOwotICAgIGlmICghZ19maWxlX2dl
dF9jb250ZW50cyhuYW1lLmRhdGEoKSwgJmNvbnRlbnQub3V0UHRyKCksICZsZW5ndGgsIDApKQot
ICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKLQotICAgIHJldHVybiBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmdldCgpLCBsZW5ndGgpOwotfQotCi12b2lkIEJpdG1h
cEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbWFn
ZT4gbG9hZEltYWdlRnJvbUZpbGUoQ1N0cmluZyBmaWxlTmFtZSkKLXsKLSAgICBSZWZQdHI8Qml0
bWFwSW1hZ2U+IGltZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKLSAgICBpZiAoIWZpbGVOYW1l
LmlzTnVsbCgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGxvYWRS
ZXNvdXJjZVNoYXJlZEJ1ZmZlcihmaWxlTmFtZSk7Ci0gICAgICAgIGltZy0+c2V0RGF0YShidWZm
ZXIucmVsZWFzZSgpLCB0cnVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGltZy5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBj
aGFyKiBuYW1lKQotewotICAgIENTdHJpbmcgZmlsZU5hbWU7Ci0gICAgaWYgKCFzdHJjbXAoIm1p
c3NpbmdJbWFnZSIsIG5hbWUpKQotICAgICAgICBmaWxlTmFtZSA9IGdldFRoZW1lSWNvbkZpbGVO
YW1lKEdUS19TVE9DS19NSVNTSU5HX0lNQUdFLCAxNik7Ci0gICAgaWYgKGZpbGVOYW1lLmlzTnVs
bCgpKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IGltYWdlTmFtZShnX3N0cmR1cF9wcmludGYo
IiVzLnBuZyIsIG5hbWUpKTsKLSAgICAgICAgR093blB0cjxnY2hhcj4gZ2xpYkZpbGVOYW1lKGdl
dFBhdGhUb0ltYWdlUmVzb3VyY2UoaW1hZ2VOYW1lLmdldCgpKSk7Ci0gICAgICAgIGZpbGVOYW1l
ID0gZ2xpYkZpbGVOYW1lLmdldCgpOwotICAgIH0KLQotICAgIHJldHVybiBsb2FkSW1hZ2VGcm9t
RmlsZShmaWxlTmFtZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZv
cm1UaGVtZUljb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNpemUpCi17Ci0gICAgcmV0dXJuIGxv
YWRJbWFnZUZyb21GaWxlKGdldFRoZW1lSWNvbkZpbGVOYW1lKG5hbWUsIHNpemUpKTsKLX0KLQot
R2RrUGl4YnVmKiBCaXRtYXBJbWFnZTo6Z2V0R2RrUGl4YnVmKCkKLXsKLSAgICBOYXRpdmVJbWFn
ZUNhaXJvKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgcmV0dXJu
IGltYWdlID8gY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihpbWFnZS0+c3VyZmFjZSgpKSA6
IDA7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbnRQb2ludEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW50UG9pbnRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDAyMTU4
MWU4ZWQ5NGE5ZWJlYzFkZWViYzk1YmQwMTMyNTY3MzZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbnRQb2ludEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFBvaW50OjpJbnRQb2ludChjb25zdCBHZGtQ
b2ludCYgcCkKLSAgICA6IG1feChwLngpCi0gICAgLCBtX3kocC55KQotewotfQotCi1JbnRQb2lu
dDo6b3BlcmF0b3IgR2RrUG9pbnQoKSBjb25zdAotewotICAgIEdka1BvaW50IHAgPSB7IHgoKSwg
eSgpIH07Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYzMTI4MTlhZmNhMTFhZDc3N2QzNDJj
N2EzOTQwNjQ3OWYyMzU4ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLSNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRSZWN0OjpJbnRSZWN0KGNvbnN0
IEdka1JlY3RhbmdsZSYgcikKLSAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoci54LCByLnkpKQot
ICAgICwgbV9zaXplKHIud2lkdGgsIHIuaGVpZ2h0KQotewotfQotCi1JbnRSZWN0OjpvcGVyYXRv
ciBHZGtSZWN0YW5nbGUoKSBjb25zdAotewotICAgIEdka1JlY3RhbmdsZSByID0geyB4KCksIHko
KSwgd2lkdGgoKSwgaGVpZ2h0KCkgfTsKLSAgICByZXR1cm4gcjsKLX0KLQotfQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NWYyM2JiNTk2ZThjMmVhZWIzMjk3MTBkZjQ4
ZTQ3NGM3ZWM0NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvbXBvc2l0aW9uUmVzdWx0c19oCi0jZGVmaW5lIENv
bXBvc2l0aW9uUmVzdWx0c19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQ29tcG9zaXRpb25SZXN1bHRzIHsKLSAgICBD
b21wb3NpdGlvblJlc3VsdHMoKQotICAgICAgICA6IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBv
c2l0aW9uVXBkYXRlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBDb21wb3NpdGlvblJlc3Vs
dHMoU3RyaW5nIHNpbXBsZVN0cmluZykKLSAgICAgICAgOiBzaW1wbGVTdHJpbmcoc2ltcGxlU3Ry
aW5nKQotICAgICAgICAsIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZh
bHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBlbnVtIFJlc3VsdHNJbmRpY2F0b3IgeyBXaWxsU2Vu
ZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24gfTsKLSAgICBDb21wb3NpdGlvblJlc3VsdHMoUmVzdWx0
c0luZGljYXRvcikKLSAgICAgICAgOiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVw
ZGF0ZSh0cnVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbXBvc2l0aW9uVXBkYXRlZCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9z
aXRpb25VcGRhdGU7Ci0gICAgfQotCi0gICAgLy8gU29tZSBzaW1wbGUgaW5wdXQgbWV0aG9kcyBy
ZXR1cm4gYSBzdHJpbmcgZm9yIGFsbCBrZXlib2FyZCBldmVudHMuIFRoaXMKLSAgICAvLyB2YWx1
ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBr
ZXljb2RlLgotICAgIFN0cmluZyBzaW1wbGVTdHJpbmc7Ci0KLSAgICBib29sIGFzc29jaWF0ZWRX
aXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gQ29tcG9z
aXRpb25SZXN1bHRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9D
b250ZXh0TWVudUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1l
bnVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzAwMmM0ZDlmZDc4MmY5
MjcwNGM0OTc2YzQzN2VhMWY5ZTVkZGI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKLQot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUNvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9u
ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwotfQotCi1Db250ZXh0TWVudTo6Q29udGV4dE1l
bnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbihtZW51KQotewotfQotCi1Db250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKLXsK
LSAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3koR1RLX1dJREdFVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBDb250ZXh0
TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCi17Ci0gICAgQVNTRVJUKG1f
cGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZvcm1J
dGVtID0gR1RLX1dJREdFVChpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwotICAg
IEFTU0VSVChwbGF0Zm9ybUl0ZW0pOwotCi0gICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3Rr
X3dpZGdldF9nZXRfcGFyZW50KHBsYXRmb3JtSXRlbS5nZXQoKSkpCi0gICAgICAgIGd0a19jb250
YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgpKTsK
LQotICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3JtRGVz
Y3JpcHRpb24pLCBwbGF0Zm9ybUl0ZW0uZ2V0KCkpOwotICAgIGd0a193aWRnZXRfc2hvdyhwbGF0
Zm9ybUl0ZW0uZ2V0KCkpOwotfQotCi12b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAgQVNTRVJUKG1lbnUp
OwotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0gICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShHVEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotCi0gICAgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uID0gbWVudTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4
dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRm
b3JtRGVzY3JpcHRpb247Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51
OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gZGVzY3JpcHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uID0gMDsKLQotICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLX0KLQotdW5zaWdu
ZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbik7Ci0KLSAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFp
bmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpKTsK
LSAgICByZXR1cm4gZ19saXN0X2xlbmd0aChjaGlsZHJlbi5nZXQoKSk7Ci19Ci0KLVZlY3RvcjxD
b250ZXh0TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBtZW51KQotewotICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJdGVt
VmVjdG9yOwotCi0gICAgR093blB0cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRf
Y2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGludCBpdGVtQ291bnQgPSBnX2xp
c3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKLSAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2Fw
YWNpdHkoaXRlbUNvdW50KTsKLQotICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5nZXQo
KTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAgICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIGlm
ICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIG1lbnVJdGVtVmVjdG9yLmFwcGVuZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOwotICAgIH0K
LQotICAgIHJldHVybiBtZW51SXRlbVZlY3RvcjsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gcGxhdGZvcm1NZW51RGVzY3JpcHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1l
bnVJdGVtcykKLXsKLSAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIEd0a1dpZGdldCogcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51SXRl
bXNbaV0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIGd0a19tZW51X3No
ZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKLSAgICAgICAg
Z3RrX3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbSk7Ci0gICAgfQotICAgIHJldHVybiBtZW51Owot
fQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ3MGI1YmU2YmRmMGJkOWNmYzc3OGNhMjA1ZGIyMzg3NTVjMzFl
MjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAotICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNsdWRlICJD
b250ZXh0TWVudUl0ZW0uaCIKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0j
ZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OICJ3ZWJraXQtY29udGV4dC1tZW51Igot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBndGtTdG9ja0lERnJv
bUNvbnRleHRNZW51QWN0aW9uKGNvbnN0IENvbnRleHRNZW51QWN0aW9uJiBhY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5r
VG9DbGlwYm9hcmQ6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBi
b2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0NsaXBib2Fy
ZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6Ci0gICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfQ09QWTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5k
b3c6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfT1BFTjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1Rv
RGlzazoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6Ci0g
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0FWRTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0dvQmFjazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19CQUNLOwotICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0ZP
UldBUkQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX1NUT1A7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6Ci0gICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfUkVGUkVTSDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0N1dDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19DVVQ7Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19QQVNURTsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19ERUxF
VEU7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6Ci0gICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfU0VMRUNUX0FMTDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxs
aW5nR3Vlc3M6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
SWdub3JlU3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfTk87Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X09LOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3RoZXI6Ci0gICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfTUlTU0lOR19JTUFHRTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJj
aEluU3BvdGxpZ2h0OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTkQ7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRklO
RDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFwcGxpY2F0aW9u
OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1QREZab29tSW46Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9JTjsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVBERlpvb21PdXQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9P
TV9PVVQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19aT09NX0ZJVDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERk5leHRQ
YWdlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0ZPUldBUkQ7Ci0gICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZQcmV2aW91c1BhZ2U6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09f
QkFDSzsKLSAgICAvLyBOZXcgdGFncywgbm90IHBhcnQgb2YgQVBJCi0gICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOwotICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZzoKLSAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19TUEVMTF9DSEVDSzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51
OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9GT05UOwotICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2hvd0ZvbnRzOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9G
T05UOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKLSAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19CT0xEOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOgotICAgICAg
ICByZXR1cm4gR1RLX1NUT0NLX0lUQUxJQzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Vu
ZGVybGluZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19VTkRFUkxJTkU7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NF
TEVDVF9DT0xPUjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJv
bHM6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKLSAgICAgICAgLy8g
Tm8gaWNvbiBmb3IgdGhpcy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19G
VUxMU0NSRUVOOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot
c3RhdGljIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2VkKQot
ewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgIHJldHVybiBHVEtfTUVO
VV9JVEVNKGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpKTsKLQotICAgIEdPd25QdHI8Y2hh
cj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoImNvbnRleHQtbWVudS1hY3Rpb24tJWQiLCBh
Y3Rpb24pKTsKLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4gcGxhdGZvcm1BY3Rpb247Ci0KLSAgICBp
ZiAodHlwZSA9PSBDaGVja2FibGVBY3Rpb25UeXBlKSB7Ci0gICAgICAgIHBsYXRmb3JtQWN0aW9u
ID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3KGFjdGlvbk5hbWUu
Z2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVB
Y3Rpb24oYWN0aW9uKSkpKTsKLSAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShH
VEtfVE9HR0xFX0FDVElPTihwbGF0Zm9ybUFjdGlvbi5nZXQoKSksIGNoZWNrZWQpOwotICAgIH0g
ZWxzZQotICAgICAgICBwbGF0Zm9ybUFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldyhh
Y3Rpb25OYW1lLmdldCgpLCB0aXRsZS51dGY4KCkuZGF0YSgpLCAwLCBndGtTdG9ja0lERnJvbUNv
bnRleHRNZW51QWN0aW9uKGFjdGlvbikpKTsKLSAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUo
cGxhdGZvcm1BY3Rpb24uZ2V0KCksIGVuYWJsZWQpOwotCi0gICAgR3RrTWVudUl0ZW0qIGl0ZW0g
PSBHVEtfTUVOVV9JVEVNKGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRlbShwbGF0Zm9ybUFjdGlv
bi5nZXQoKSkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGl0ZW0pLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTiwgR0lOVF9UT19QT0lOVEVSKGFjdGlvbikpOwotCi0gICAgcmV0
dXJuIGl0ZW07Ci19Ci0KLS8vIEV4dHJhY3QgdGhlIEFjdGlvblR5cGUgZnJvbSB0aGUgbWVudSBp
dGVtCi1Db250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShQbGF0Zm9ybU1lbnVJdGVtRGVz
Y3JpcHRpb24gaXRlbSkKLSAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihpdGVtKQotewotICAg
IC8vIERvbid0IHNob3cgYWNjZWwgbGFiZWxzIGluIGNvbnRleHQgbWVudSBpdGVtcy4KLSAgICBH
dGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIGlmICghYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIWd0a19hY3Rpb25fZ2V0X2FjY2VsX3BhdGgoYWN0aW9uKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBjaGlsZCA9IGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4oaXRlbSkpOwotICAgIGlmIChHVEtfSVNfQUNDRUxfTEFCRUwoY2hpbGQpKQot
ICAgICAgICBndGtfYWNjZWxfbGFiZWxfc2V0X2FjY2VsX2Nsb3N1cmUoR1RLX0FDQ0VMX0xBQkVM
KGNoaWxkKSwgMCk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRl
eHRNZW51KiBzdWJNZW51KQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5V
X0lURU0oZ3RrX21lbnVfaXRlbV9uZXcoKSk7Ci0gICAgaWYgKHN1Yk1lbnUpCi0gICAgICAgIHNl
dFN1Yk1lbnUoc3ViTWVudSk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVt
KENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25z
dCBTdHJpbmcmIHRpdGxlLCBDb250ZXh0TWVudSogc3ViTWVudSkKLXsKLSAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24odHlwZSwgYWN0
aW9uLCB0aXRsZSwgdHJ1ZSwgZmFsc2UpOwotICAgIGlmIChzdWJNZW51KQotICAgICAgICBzZXRT
dWJNZW51KHN1Yk1lbnUpOwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShD
b250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQpCi17Ci0gICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKHR5cGUs
IGFjdGlvbiwgdGl0bGUsIGVuYWJsZWQsIGNoZWNrZWQpOwotfQotCi1Db250ZXh0TWVudUl0ZW06
OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2VkLCBWZWN0b3I8Q29udGV4dE1lbnVJdGVt
PiYgc3ViTWVudUl0ZW1zKQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBs
YXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihTdWJtZW51VHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5h
YmxlZCwgY2hlY2tlZCk7Ci0gICAgc2V0U3ViTWVudShzdWJNZW51SXRlbXMpOwotfQotCi1Db250
ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0oKQotewotfQotCi1QbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigp
Ci17Ci0gICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24g
PSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gMDsK
LSAgICByZXR1cm4gcGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotQ29udGV4dE1lbnVJdGVtVHlw
ZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAotewotICAgIGlmIChHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4gU2Vw
YXJhdG9yVHlwZTsKLSAgICBpZiAoR1RLX0lTX0NIRUNLX01FTlVfSVRFTShtX3BsYXRmb3JtRGVz
Y3JpcHRpb24pKQotICAgICAgICByZXR1cm4gQ2hlY2thYmxlQWN0aW9uVHlwZTsKLSAgICBpZiAo
Z3RrX21lbnVfaXRlbV9nZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKQotICAgICAg
ICByZXR1cm4gU3VibWVudVR5cGU7Ci0gICAgcmV0dXJuIEFjdGlvblR5cGU7Ci19Ci0KLXZvaWQg
Q29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSkKLXsKLSAg
ICBpZiAodHlwZSA9PSBTZXBhcmF0b3JUeXBlKQotICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBHVEtfTUVOVV9JVEVNKGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpKTsKLX0KLQot
Q29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25zdAotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oR1BPSU5URVJfVE9fSU5UKGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OKSkpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0
aW9uKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBnX29iamVjdF9zZXRfZGF0YShH
X09CSkVDVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
TiwgR0lOVF9UT19QT0lOVEVSKGFjdGlvbikpOwotfQotCi1TdHJpbmcgQ29udGV4dE1lbnVJdGVt
Ojp0aXRsZSgpIGNvbnN0Ci17Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsK
LSAgICByZXR1cm4gYWN0aW9uID8gU3RyaW5nOjpmcm9tVVRGOChndGtfYWN0aW9uX2dldF9sYWJl
bChhY3Rpb24pKSA6IFN0cmluZygpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0
bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0Fj
dGlvbigpOwotICAgIGlmIChhY3Rpb24pCi0gICAgICAgIGd0a19hY3Rpb25fc2V0X2xhYmVsKGFj
dGlvbiwgdGl0bGUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkgY29uc3QKLXsKLSAgICBHdGtXaWRn
ZXQqIHN1Yk1lbnUgPSBndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNjcmlw
dGlvbik7Ci0gICAgcmV0dXJuIHN1Yk1lbnUgPyBHVEtfTUVOVShzdWJNZW51KSA6IDA7Ci19Ci0K
LXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KiBtZW51KQotewot
ICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUobV9wbGF0Zm9ybURlc2NyaXB0aW9uLCBHVEtf
V0lER0VUKG1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpKTsKLX0KLQotdm9pZCBD
b250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1l
bnVJdGVtcykKLXsKLSAgICBDb250ZXh0TWVudSBtZW51KHBsYXRmb3JtTWVudURlc2NyaXB0aW9u
KHN1Yk1lbnVJdGVtcykpOwotICAgIHNldFN1Yk1lbnUoJm1lbnUpOwotfQotCi12b2lkIENvbnRl
eHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sIHNob3VsZENoZWNrKQotewotICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAmJiBHVEtfSVNfVE9HR0xF
X0FDVElPTihhY3Rpb24pKQotICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdU
S19UT0dHTEVfQUNUSU9OKGFjdGlvbiksIHNob3VsZENoZWNrKTsKLX0KLQotYm9vbCBDb250ZXh0
TWVudUl0ZW06OmNoZWNrZWQoKSBjb25zdAotewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3Rr
QWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAmJiBHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24p
KQotICAgICAgICByZXR1cm4gZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xF
X0FDVElPTihhY3Rpb24pKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ29udGV4dE1l
bnVJdGVtOjplbmFibGVkKCkgY29uc3QKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0Fj
dGlvbigpOwotICAgIHJldHVybiBhY3Rpb24gPyBndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0
aW9uKSA6IGZhbHNlOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0RW5hYmxlZChib29s
IHNob3VsZEVuYWJsZSkKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwot
ICAgIGlmIChhY3Rpb24pCi0gICAgICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShhY3Rpb24s
IHNob3VsZEVuYWJsZSk7Ci19Ci0KLUd0a0FjdGlvbiogQ29udGV4dE1lbnVJdGVtOjpndGtBY3Rp
b24oKSBjb25zdAotewotICAgIHJldHVybiBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0
aW9uKEdUS19BQ1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKLX0KLQotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9DdXJzb3JHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI5MDVhOTY0
ZGU3NjIzNDIwOWMyZjVjOTFjNmNkZjc5MDU0MjA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0
IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDEyIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDdXJzb3JHdGsuaCIKLSNp
bmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUg
IkludFBvaW50LmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBjcmVhdGVO
YW1lZEN1cnNvcihDdXN0b21DdXJzb3JUeXBlIGN1cnNvclR5cGUpCi17Ci0gICAgQ3VzdG9tQ3Vy
c29yIGN1cnNvciA9IEN1c3RvbUN1cnNvcnNbY3Vyc29yVHlwZV07Ci0gICAgR1JlZlB0cjxHZGtD
dXJzb3I+IGMgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9uYW1lKGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCksIGN1cnNvci5uYW1lKSk7Ci0gICAgaWYgKGMpCi0gICAgICAgIHJldHVy
biBjOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc291cmNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oY3Vyc29yLmJpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwgNCkpOwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1hc2sgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YShjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjdXJzb3IubWFza19iaXRz
KSwgQ0FJUk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9f
Rk9STUFUX0ExLCAzMiwgMzIpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihj
YWlyb19jcmVhdGUoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKGNyLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX21hc2tfc3VyZmFj
ZShjci5nZXQoKSwgbWFzay5nZXQoKSwgMCwgMCk7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKGdka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShzdXJmYWNlLmdl
dCgpLCAwLCAwLCAzMiwgMzIpKTsKLSAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3
X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwgY3Vy
c29yLmhvdF94LCBjdXJzb3IuaG90X3kpKTsKLX0KLQotc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29y
PiBjcmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90U3Bv
dCkKLXsKLSAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0ZXJtaW5lSG90U3BvdChp
bWFnZSwgaG90U3BvdCk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgIHJldHVybiBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgcGl4YnVmLmdldCgp
LCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCkpKTsKLX0KLQotdm9p
ZCBDdXJzb3I6OmVuc3VyZVBsYXRmb3JtQ3Vyc29yKCkgY29uc3QKLXsKLSAgICBpZiAobV9wbGF0
Zm9ybUN1cnNvciB8fCBtX3R5cGUgPT0gQ3Vyc29yOjpQb2ludGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgotICAg
ICAgICAvLyBBIG51bGwgR2RrQ3Vyc29yIGlzIHRoZSBkZWZhdWx0IGN1cnNvciBmb3IgdGhlIHdp
bmRvdy4KLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ3Vyc29yOjpDcm9zczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfQ1JPU1MpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
dXJzb3I6OkhhbmQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXcoR0RLX0hBTkQyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpJ
QmVhbToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfWFRFUk0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OldhaXQ6Ci0g
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1dB
VENIKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgotICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19RVUVTVElPTl9B
UlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6TW92ZToKLSAgICBjYXNl
IEN1cnNvcjo6TWlkZGxlUGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0
R1JlZihnZGtfY3Vyc29yX25ldyhHREtfRkxFVVIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDdXJzb3I6OkVhc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19SSUdI
VF9TSURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFJlc2l6ZToK
LSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfU0lERSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aEVhc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdk
a19jdXJzb3JfbmV3KEdES19UT1BfUklHSFRfQ09STkVSKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2Vz
dFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXcoR0RLX1RPUF9MRUZUX0NPUk5FUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1
cnNvcjo6U291dGhSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoUGFubmluZzoKLSAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9N
X1NJREUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJlc2l6
ZToKLSAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1JJR0hUX0NPUk5F
UikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXplOgot
ICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fTEVGVF9DT1JORVIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6Ci0gICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lERSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9Q
X1RFRSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNpemU6
Ci0gICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZToKLSAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfSF9ET1VCTEVfQVJST1cpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKLSAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfVl9ET1VCTEVf
QVJST1cpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4dDoK
LSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNv
clZlcnRpY2FsVGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19Q
TFVTKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckNv
bnRleHRNZW51KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkFsaWFzOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yQWxp
YXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6Ci0gICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JQcm9ncmVz
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb0Ryb3A6Ci0gICAgY2FzZSBD
dXJzb3I6Ok5vdEFsbG93ZWQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1l
ZEN1cnNvcihDdXN0b21DdXJzb3JOb0Ryb3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1
cnNvcjo6Q29weToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29y
KEN1c3RvbUN1cnNvckNvcHkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9u
ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1
cnNvck5vbmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Wm9vbUluOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yWm9v
bUluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Olpvb21PdXQ6Ci0gICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3Jab29tT3V0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkdyYWI6Ci0gICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JHcmFiKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkdyYWJiaW5nOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYmJpbmcpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gY3JlYXRlQ3VzdG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhl
cikKLSAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgLCBtX2ltYWdlKG90aGVyLm1faW1h
Z2UpCi0gICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RTcG90KQotICAgICwgbV9wbGF0Zm9ybUN1
cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQotewotfQotCi1DdXJzb3ImIEN1cnNvcjo6b3Bl
cmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCi17Ci0gICAgbV90eXBlID0gb3RoZXIubV90eXBl
OwotICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwotICAgIG1faG90U3BvdCA9IG90aGVyLm1f
aG90U3BvdDsKLSAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTY4OTE5YmEzMzVhMmFlNTRmMjhhNDYxOTA1ODNiM2E0YmEyNDY2MC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAot
LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBMIDEuMS9H
UEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3Vi
amVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRoZSAi
TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
YmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNlLgot
ICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCi0gKgotICogVGhl
IEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBUaW0gQ29wcGVy
ZmllbGQuCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUg
Q29weXJpZ2h0IChDKSAyMDAxCi0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKiAgIFRpbSBDb3BwZXJmaWVsZCA8
dGltZWNvcEBuZXR3b3JrLmVtYWlsLm5lLmpwPgotICogICBDaHJpc3RpYW4gRHl3YW4gPGNocmlz
dGlhbkB0d290b2FzdHMuZGU+Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0gKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lmbmRlZiBD
dXJzb3JHdGtfaAotI2RlZmluZSBDdXJzb3JHdGtfaAotCi0jaW5jbHVkZSAiQ3Vyc29yLmgiCi0K
LS8qCi0gVGhlc2UgY3Vyc29ycyBhcmUgY29waWVkIGZyb20gTW96aWxsYSBjb2RlOgotICBodHRw
Oi8vbHhyLm1vemlsbGEub3JnL21vemlsbGExLjgvc291cmNlL3dpZGdldC9zcmMvZ3RrMi9uc0d0
a0N1cnNvcnMuaAotKi8KLQotLyogTU9aX0NVUlNPUl9WRVJUSUNBTF9URVhUICovCi1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4dF9iaXRzW10gPSB7Ci0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4
MDAsIDB4MDAsCi0gIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4
MDAsIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4
MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3ZlcnRpY2FsX3RleHRfbWFza19iaXRzW10g
PSB7Ci0gIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4
MGYsIDB4ZjAsIDB4MDAsIDB4MDAsCi0gIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4
N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0gIDB4MGYsIDB4ZjAsIDB4
MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAgfTsKLQotLyogTU9aX0NVUlNPUl9DT05URVhUX01FTlUgKi8KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBjaGFyIG1vel9tZW51X2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwg
MHgwMCwgMHhmYywgMHhmZCwgMHgwMCwgMHgwMCwKLSAgMHhmYywgMHhmZiwgMHgwMCwgMHgwMCwg
MHg3YywgMHg4NCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmYywgMHgwMCwgMHgwMCwKLSAgMHhjNCwg
MHg4NCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NSwgMHgw
MCwgMHgwMCwKLSAgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBtb3pfbWVudV9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZCwgMHgw
MCwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhmZSwgMHhmZiwgMHgwMSwgMHgw
MCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMSwgMHgwMCwKLSAgMHhl
ZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwg
MHgwMSwgMHgwMCwKLSAgMHhjMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmZCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09S
X0NPUFkgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5X2JpdHNbXSA9IHsK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHg3YywgMHgwMCwgMHgwMCwg
MHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwgMHgwMCwgMHgwMCwKLSAg
MHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHg3YywgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgz
MCwgMHgwMCwgMHgwMCwKLSAgMHhjNCwgMHhmYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgw
MCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwKLSAgMHg4MCwgMHgzMSwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfY29weV9tYXNrX2JpdHNbXSA9
IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgw
MCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgw
MCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwK
LSAgMHhmZSwgMHgzNywgMHgwMCwgMHgwMCwgMHhmZSwgMHg3YiwgMHgwMCwgMHgwMCwgMHhmZSwg
MHhmYywgMHgwMCwgMHgwMCwKLSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwg
MHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHg3YiwgMHgwMCwg
MHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0FMSUFTICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBtb3pfYWxpYXNfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAw
LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAw
eGZjLCAweDAxLCAweDAwLCAweDAwLAotICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAw
eGYwLCAweDAwLCAweDAwLCAweDZjLCAweGUwLCAweDAwLCAweDAwLAotICAweGM0LCAweGYwLCAw
eDAwLCAweDAwLCAweGMwLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDE5LCAweDAwLCAweDAw
LAotICAweDgwLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIG1vel9hbGlhc19tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgw
MCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHhmNywgMHgwMCwgMHgwMCwgMHhm
ZSwgMHhmYiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwMSwgMHgwMCwKLSAgMHhlZSwgMHhm
OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhiZiwgMHgwMCwg
MHgwMCwKLSAgMHhjMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOSwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1pPT01f
SU4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX2luX2JpdHNbXSA9IHsK
LSAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMiwg
MHgwNCwgMHgwMCwgMHgwMCwKLSAgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwg
MHgwMCwgMHgwMCwgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwKLSAgMHhmOSwgMHgwOSwgMHgwMCwg
MHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwKLSAg
MHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgx
YywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9pbl9tYXNrX2JpdHNb
XSA9IHsKLSAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwg
MHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwg
MHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHgwZiwg
MHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgw
MCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhm
MCwgMHgxYywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1pPT01fT1VUICovCi1zdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBtb3pfem9vbV9vdXRfYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAwLCAw
eDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAotICAw
eDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5
LCAweDAwLCAweDAwLAotICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAw
LCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAotICAweDAyLCAweDA0LCAweDAwLCAweDAw
LCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAweDAw
LCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9tYXNrX2JpdHNbXSA9IHsKLSAgMHhmMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgw
MCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhm
ZiwgMHgwZiwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgw
ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwNywgMHgw
MCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pf
Q1VSU09SX05PVF9BTExPV0VEICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm90
X2FsbG93ZWRfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDFm
LCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLAotICAweGYwLCAweGYwLCAweDAw
LCAweDAwLCAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAzLCAweDAwLAot
ICAweGVjLCAweDAwLCAweDAzLCAweDAwLCAweGNlLCAweDAxLCAweDA3LCAweDAwLCAweDg2LCAw
eDAzLCAweDA2LCAweDAwLAotICAweDA2LCAweDA3LCAweDA2LCAweDAwLCAweDA2LCAweDBlLCAw
eDA2LCAweDAwLCAweDA2LCAweDFjLCAweDA2LCAweDAwLAotICAweDBlLCAweDM4LCAweDA3LCAw
eDAwLCAweDBjLCAweDcwLCAweDAzLCAweDAwLCAweDFjLCAweGUwLCAweDAzLCAweDAwLAotICAw
eDM4LCAweGMwLCAweDAxLCAweDAwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweGUwLCAweDdm
LCAweDAwLCAweDAwLAotICAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1v
el9ub3RfYWxsb3dlZF9tYXNrX2JpdHNbXSA9IHsKLSAgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwg
MHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhmOCwg
MHhmZiwgMHgwMSwgMHgwMCwgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmZSwgMHhjMCwgMHgw
NywgMHgwMCwKLSAgMHhmZSwgMHg4MSwgMHgwNywgMHgwMCwgMHhmZiwgMHg4MywgMHgwZiwgMHgw
MCwgMHhjZiwgMHgwNywgMHgwZiwgMHgwMCwKLSAgMHg4ZiwgMHgwZiwgMHgwZiwgMHgwMCwgMHgw
ZiwgMHgxZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgzZSwgMHgwZiwgMHgwMCwKLSAgMHgxZiwgMHhm
YywgMHgwZiwgMHgwMCwgMHgxZSwgMHhmOCwgMHgwNywgMHgwMCwgMHgzZSwgMHhmMCwgMHgwNywg
MHgwMCwKLSAgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwg
MHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwg
MHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1NQSU5O
SU5HICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfc3Bpbm5pbmdfYml0c1tdID0g
ewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0
LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAw
LCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAwLCAweDAw
LCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAwLAot
ICAweGZjLCAweDNiLCAweDAwLCAweDAwLCAweDdjLCAweDM4LCAweDAwLCAweDAwLCAweDZjLCAw
eDU0LCAweDAwLCAweDAwLAotICAweGM0LCAweGRjLCAweDAwLCAweDAwLCAweGMwLCAweDQ0LCAw
eDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLAotICAweDgwLCAweDM5LCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19tYXNrX2Jp
dHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgz
ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgw
MCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYiwgMHgwMCwg
MHgwMCwKLSAgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwg
MHhmZSwgMHhmZSwgMHgwMCwgMHgwMCwKLSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwg
MHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHg3Ziwg
MHgwMCwgMHgwMCwgMHg4MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX05PTkUgKi8KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel9ub25lX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciBtb3pfbm9uZV9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0hB
TkRfR1JBQiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9iaXRz
W10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCi0gIDB4NjAsIDB4MzksIDB4MDAsIDB4MDAsIDB4OTAs
IDB4NDksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDksIDB4MDEsIDB4MDAsCi0gIDB4MjAsIDB4Yzks
IDB4MDIsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDIsIDB4MDAsIDB4NTgsIDB4NDAsIDB4MDIsIDB4
MDAsCi0gIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MDgsIDB4MDAsIDB4MDEsIDB4MDAsCi0gIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4
ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsCi0gIDB4NDAsIDB4NDAsIDB4
MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9t
YXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgw
MCwgMHgwMCwgMHg2MCwgMHgzZiwgMHgwMCwgMHgwMCwKLSAgMHhmMCwgMHg3ZiwgMHgwMCwgMHgw
MCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhm
MCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmYywgMHhmZiwg
MHgwNywgMHgwMCwKLSAgMHhmZSwgMHhmZiwgMHgwNywgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMywg
MHgwMCwgMHhmYywgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwg
MHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhlMCwg
MHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0hBTkRfR1JBQkJJTkcgKi8KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9oYW5kX2dyYWJiaW5nX2JpdHNbXSA9IHsKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHgzNiwgMHgwMCwgMHgw
MCwgMHgyMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMSwgMHgwMCwKLSAgMHg0
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwg
MHgwMSwgMHgwMCwKLSAgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwg
MHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKLSAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwg
MHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9
OwotCi1zdGF0aWMgY29uc3QgIHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdfbWFza19i
aXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MzYsIDB4MDAsIDB4MDAsCi0gIDB4ZTAsIDB4
ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMs
IDB4MDAsCi0gIDB4ZTAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4MDAs
IDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsCi0gIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4Zjgs
IDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsCi0gIDB4ZTAsIDB4ZmYs
IDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2YsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfTsKLQotZW51bSBDdXN0b21DdXJzb3JUeXBlIHsKLSAgICBDdXN0b21DdXJz
b3JDb3B5ID0gMCwKLSAgICBDdXN0b21DdXJzb3JBbGlhcywKLSAgICBDdXN0b21DdXJzb3JDb250
ZXh0TWVudSwKLSAgICBDdXN0b21DdXJzb3Jab29tSW4sCi0gICAgQ3VzdG9tQ3Vyc29yWm9vbU91
dCwKLSAgICBDdXN0b21DdXJzb3JWZXJ0aWNhbFRleHQsCi0gICAgQ3VzdG9tQ3Vyc29yTm9Ecm9w
LAotICAgIEN1c3RvbUN1cnNvclByb2dyZXNzLAotICAgIEN1c3RvbUN1cnNvck5vbmUsCi0gICAg
Q3VzdG9tQ3Vyc29yR3JhYiwKLSAgICBDdXN0b21DdXJzb3JHcmFiYmluZywKLX07Ci0KLXR5cGVk
ZWYgc3RydWN0IHsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGJpdHM7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogbWFza19iaXRzOwotICAgIGludCBo
b3RfeDsKLSAgICBpbnQgaG90X3k7Ci19IEN1c3RvbUN1cnNvcjsKLQotLy8gY3JlYXRlIGN1c3Rv
bSBwaXhtYXAgY3Vyc29yIGZyb20gY3Vyc29ycyBpbiBuc0dUS0N1cnNvckRhdGEuaAotc3RhdGlj
IGNvbnN0IEN1c3RvbUN1cnNvciBDdXN0b21DdXJzb3JzW10gPSB7Ci0gICAgeyAiY29weSIsIG1v
el9jb3B5X2JpdHMsIG1vel9jb3B5X21hc2tfYml0cywgMiwgMiB9LAotICAgIHsgImFsaWFzIiwg
bW96X2FsaWFzX2JpdHMsIG1vel9hbGlhc19tYXNrX2JpdHMsIDIsIDIgfSwKLSAgICB7ICJjb250
ZXh0LW1lbnUiLCBtb3pfbWVudV9iaXRzLCBtb3pfbWVudV9tYXNrX2JpdHMsIDIsIDIgfSwKLSAg
ICB7ICJ6b29tLWluIiwgbW96X3pvb21faW5fYml0cywgbW96X3pvb21faW5fbWFza19iaXRzLCA2
LCA2IH0sCi0gICAgeyAiem9vbS1vdXQiLCBtb3pfem9vbV9vdXRfYml0cywgbW96X3pvb21fb3V0
X21hc2tfYml0cywgNiwgNiB9LAotICAgIHsgInZlcnRpY2FsLXRleHQiLCBtb3pfdmVydGljYWxf
dGV4dF9iaXRzLCBtb3pfdmVydGljYWxfdGV4dF9tYXNrX2JpdHMsIDgsIDQgfSwKLSAgICB7ICJk
bmQtbm8tZHJvcCIsIG1vel9ub3RfYWxsb3dlZF9iaXRzLCBtb3pfbm90X2FsbG93ZWRfbWFza19i
aXRzLCA5LCAgOSB9LAotICAgIHsgImxlZnRfcHRyX3dhdGNoIiwgbW96X3NwaW5uaW5nX2JpdHMs
IG1vel9zcGlubmluZ19tYXNrX2JpdHMsIDIsICAyfSwKLSAgICB7ICJub25lIiwgbW96X25vbmVf
Yml0cywgbW96X25vbmVfbWFza19iaXRzLCAwLCAwIH0sCi0gICAgeyAiZ3JhYiIsIG1vel9oYW5k
X2dyYWJfYml0cywgbW96X2hhbmRfZ3JhYl9tYXNrX2JpdHMsIDEwLCAxMCB9LAotICAgIHsgImdy
YWJiaW5nIiwgbW96X2hhbmRfZ3JhYmJpbmdfYml0cywgbW96X2hhbmRfZ3JhYmJpbmdfbWFza19i
aXRzLCAxMCwgMTAgfQotfTsKLQotI2VuZGlmIC8vIEN1cnNvckd0a19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDgxODc3MWM4Mjk5ZDAxMTU0OTVlZmNjYzUwMTEyYWNkODRlZDc2MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRHJhZ0ljb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRyYWdJY29uLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMu
aCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdF
dmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24q
IGljb24pCi17Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fp
cm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpKTsKLSAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkp
OwotICAgIHJldHVybiBUUlVFOwotfQotI2Vsc2UKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldp
bmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJ
Y29uKiBpY29uKQotewotICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250
ZXh0LCAwKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGljb24tPmRyYXcoY29udGV4dCk7
Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQotRHJh
Z0ljb246OkRyYWdJY29uKCkKLSAgICA6IGlzQ29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBv
c2l0ZWQoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSkKLSAgICAsIG1fd2luZG93KDApCi17Ci0g
ICAgaWYgKCFpc0NvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2luZG93ID0g
Z3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxM
QkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZWxzZQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldp
bmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgc3Ry
YXRlZ3kgb3JpZ2luYWxseSBjb21lcyBmcm9tIENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIv
Z3RrL3RhYl9jb250ZW50c19kcmFnX3NvdXJjZS5jYwotICAgIEdka1NjcmVlbiogc2NyZWVuID0g
Z3RrX3dpZGdldF9nZXRfc2NyZWVuKG1fd2luZG93KTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIEdka0NvbG9ybWFwKiByZ2JhID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChz
Y3JlZW4pOwotICAgIGlmIChyZ2JhKQotICAgICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcCht
X3dpbmRvdywgcmdiYSk7Ci0jZWxzZQotICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVl
bl9nZXRfcmdiYV92aXN1YWwoc2NyZWVuKTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgdmlz
dWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pOwotICAgIGd0a193aWRn
ZXRfc2V0X3Zpc3VhbChtX3dpbmRvdywgdmlzdWFsKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJ
T05fMgotfQotCi1EcmFnSWNvbjo6fkRyYWdJY29uKCkKLXsKLSAgICBpZiAobV93aW5kb3cpCi0g
ICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgRHJhZ0ljb246
OmRyYXcoY2Fpcm9fdCogY29udGV4dCkKLXsKLSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwg
MCwgMCwKLSAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgo
bV9pbWFnZS5nZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChtX2ltYWdlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRl
eHQsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNvbnRleHQsIG1faW1hZ2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7
Ci19Ci0KLXZvaWQgRHJhZ0ljb246OnNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCi17
Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZVNp
emUgPSBJbnRTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKSk7Ci0gICAgaWYgKGlzQ29tcG9zaXRlZCkg
ewotICAgICAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFn
ZVNpemUud2lkdGgoKSwgbV9pbWFnZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBtX3BpeGJ1ZiA9IGFkb3B0R1Jl
ZihjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGltYWdlKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBJ
bnRQb2ludCBob3RzcG90KG1faW1hZ2VTaXplKTsKLSAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41
KTsKLSAgICB1c2VGb3JEcmFnKGNvbnRleHQsIGhvdHNwb3QpOwotfQotCi12b2lkIERyYWdJY29u
Ojp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90
c3BvdCkKLXsKLSAgICBpZiAoaXNDb21wb3NpdGVkKSB7Ci0gICAgICAgIGd0a19kcmFnX3NldF9p
Y29uX3dpZGdldChjb250ZXh0LCBtX3dpbmRvdywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0
a19kcmFnX3NldF9pY29uX3BpeGJ1Zihjb250ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54
KCksIGhvdHNwb3QueSgpKTsKLSNlbHNlCi0gICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShj
b250ZXh0LCBtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmYmU0MzVkY2JkYTIwZTJlZGQ3YmZjMjZmN2IwZmYwOWEyOGI4ODU0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIERyYWdJY29uX2gKLSNkZWZpbmUgRHJhZ0ljb25faAotCi0jaW5jbHVkZSAiSW50UG9pbnQu
aCIKLSNpbmNsdWRlIDxSZWZQdHJDYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEcmFnSWNvbiB7Ci1wdWJsaWM6
Ci0gICAgRHJhZ0ljb24oKTsKLSAgICB2aXJ0dWFsIH5EcmFnSWNvbigpOwotCi0gICAgdm9pZCBk
cmF3KGNhaXJvX3QqKTsKLSAgICB2b2lkIHNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCopOwotICAg
IHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgdXNlRm9yRHJhZyhH
ZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBvaW50JiBob3RzcG90KTsKLQotcHJpdmF0ZToKLSAg
ICBib29sIGlzQ29tcG9zaXRlZDsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93OwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2U7Ci0gICAgSW50U2l6ZSBtX2ltYWdlU2l6ZTsKLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBtX3BpeGJ1ZjsK
LSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYgLy8gRHJhZ0ljb25faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNGVmN2I1Y2I3N2I5NDRmYmUwNTgxODRmODYxNDQwNTJhZTZhNTIyYS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCi17Ci0gICAgZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTIwNzI5NmM2YTZjYjQ2NjI4Zjc3MDk2MzRlMjRl
NzJmODg3YzlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiVVVJ
RC5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8
Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dsaWJVdGls
aXRpZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLyogT24gbGludXggZmls
ZSBuYW1lcyBhcmUganVzdCByYXcgYnl0ZXMsIHNvIGFsc28gc3RyaW5ncyB0aGF0IGNhbm5vdCBi
ZSBlbmNvZGVkIGluIGFueSB3YXkKLSAqIGFyZSB2YWxpZCBmaWxlIG5hbWVzLiBUaGlzIG1lYW4g
dGhhdCB3ZSBjYW5ub3QganVzdCBzdG9yZSBhIGZpbGUgbmFtZSBhcy1pcyBpbiBhIFN0cmluZwot
ICogYnV0IHdlIGhhdmUgdG8gZXNjYXBlIGl0LgotICogT24gV2luZG93cyB0aGUgR0xpYiBmaWxl
IG5hbWUgZW5jb2RpbmcgaXMgYWx3YXlzIFVURi04IHNvIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGNh
c2UuICovCi1TdHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsK
LSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSNpZiBPUyhX
SU5ET1dTKQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKTsKLSNlbHNlCi0g
ICAgR093blB0cjxnY2hhcj4gZXNjYXBlZFN0cmluZyhnX3VyaV9lc2NhcGVfc3RyaW5nKGZpbGVu
YW1lLCAiLzoiLCBmYWxzZSkpOwotICAgIHJldHVybiBlc2NhcGVkU3RyaW5nLmdldCgpOwotI2Vu
ZGlmCi19Ci0KLUNTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYg
cGF0aCkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBwYXRoLnV0ZjgoKTsKLSNlbHNl
Ci0gICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ191cmlfdW5lc2NhcGVfc3RyaW5nKHBhdGgu
dXRmOCgpLmRhdGEoKSwgMCkpOwotICAgIHJldHVybiBmaWxlbmFtZS5nZXQoKTsKLSNlbmRpZgot
fQotCi0vLyBDb252ZXJ0cyBhIHN0cmluZyB0byBzb21ldGhpbmcgc3VpdGFibGUgdG8gYmUgZGlz
cGxheWVkIHRvIHRoZSB1c2VyLgotU3RyaW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25zdCBTdHJp
bmcmIHN0cmluZykKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBzdHJpbmc7Ci0jZWxz
ZQotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3RyaW5n
KTsKLSAgICBHT3duUHRyPGdjaGFyPiBkaXNwbGF5KGdfZmlsZW5hbWVfdG9fdXRmOChmaWxlbmFt
ZS5kYXRhKCksIDAsIDAsIDAsIDApKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVy
biBzdHJpbmc7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXNwbGF5LmdldCgpKTsK
LSNlbmRpZgotfQotCi1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAg
ICAgIHJlc3VsdCA9IGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RFU1RfRVhJ
U1RTKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBDU3RyaW5nIGZp
bGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0gICAgaWYgKCFmaWxl
bmFtZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgp
KSA9PSAwOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0g
ICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gZ19ybWRpcihmaWxl
bmFtZS5kYXRhKCkpID09IDA7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQotewotICAg
IENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAg
aWYgKGZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHU3Rh
dEJ1ZiBzdGF0UmVzdWx0OwotICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEo
KSwgJnN0YXRSZXN1bHQpOwotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBh
dGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1lKQotewotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAgIGdp
bnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOwotICAgIGlm
IChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbW9kaWZpZWRUaW1l
ID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKLSAgICByZXR1cm4gdHJ1ZTsKLQotfQotCi1ib29sIGdl
dEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEp
Ci17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN0cnVjdCBzdGF0IHN0YXRSZXN1bHQ7Ci0gICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmls
ZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA9IHN0YXRSZXN1bHQu
c3RfbXRpbWU7Ci0gICAgbWV0YWRhdGEubGVuZ3RoID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAg
IG1ldGFkYXRhLnR5cGUgPSBTX0lTRElSKHN0YXRSZXN1bHQuc3RfbW9kZSkgPyBGaWxlTWV0YWRh
dGE6OlR5cGVEaXJlY3RvcnkgOiBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlOwotICAgIHJldHVybiB0
cnVlOwotCi19Ci0KLVN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKLXsKLSAgICBpZiAocGF0aC5lbmRzV2l0
aChHX0RJUl9TRVBBUkFUT1JfUykpCi0gICAgICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50Owot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHBhdGggKyBHX0RJUl9TRVBBUkFUT1JfUyArIGNvbXBv
bmVudDsKLX0KLQotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBnaW50IHJlc3VsdCA9IGdfbWtkaXJfd2l0aF9wYXJlbnRzKGZpbGVuYW1lLmRhdGEoKSwgU19J
UldYVSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0ID09IDA7Ci19Ci0KLVN0cmluZyBob21lRGlyZWN0
b3J5UGF0aCgpCi17Ci0gICAgcmV0dXJuIGZpbGVuYW1lVG9TdHJpbmcoZ19nZXRfaG9tZV9kaXIo
KSk7Ci19Ci0KLVN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkK
LXsKLSAgICBpZiAocGF0aE5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aE5hbWU7
Ci0KLSAgICBDU3RyaW5nIHRtcEZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGhOYW1lKTsKLSAgICBHT3duUHRyPGdjaGFyPiBiYXNlTmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1l
KHRtcEZpbGVuYW1lLmRhdGEoKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGJhc2VO
YW1lLmdldCgpKTsKLX0KLQotQ1N0cmluZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKQotewot
ICAgIENTdHJpbmcgcGF0aCA9IGdldEN1cnJlbnRFeGVjdXRhYmxlUGF0aCgpOwotICAgIGlmICgh
cGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAvLyBJZiB0aGUgYWJv
dmUgZmFpbHMsIGNoZWNrIHRoZSBQQVRIIGVudiB2YXJpYWJsZS4KLSAgICBHT3duUHRyPGNoYXI+
IGN1cnJlbnRFeGVQYXRoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoZ19nZXRfcHJnbmFtZSgpKSk7
Ci0gICAgaWYgKCFjdXJyZW50RXhlUGF0aC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmco
KTsKLQotICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoY3VycmVu
dEV4ZVBhdGguZ2V0KCkpKTsKLSAgICByZXR1cm4gZGlybmFtZS5nZXQoKTsKLX0KLQotQ1N0cmlu
ZyBzaGFyZWRSZXNvdXJjZXNQYXRoKCkKLXsKLSAgICBzdGF0aWMgQ1N0cmluZyBjYWNoZWRQYXRo
OwotICAgIGlmICghY2FjaGVkUGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZFBh
dGg7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEhNT0RVTEUgaG1vZHVsZSA9IDA7Ci0gICAgR2V0
TW9kdWxlSGFuZGxlRXhBKEdFVF9NT0RVTEVfSEFORExFX0VYX0ZMQUdfRlJPTV9BRERSRVNTLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzaGFyZWRSZXNvdXJjZXNQYXRoKSwgJmhtb2R1bGUpOwot
Ci0gICAgR093blB0cjxnY2hhcj4gcnVudGltZURpcihnX3dpbjMyX2dldF9wYWNrYWdlX2luc3Rh
bGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9kdWxlKGhtb2R1bGUpKTsKLSAgICBHT3duUHRyPGdjaGFy
PiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKHJ1bnRpbWVEaXIuZ2V0KCksICJzaGFyZSIsICJ3
ZWJraXRndGstIldFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkcsIE5VTEwpKTsKLSNlbHNlCi0g
ICAgR093blB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShEQVRBX0RJUiwgIndl
YmtpdGd0ay0iV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOwotI2VuZGlmCi0K
LSAgICBjYWNoZWRQYXRoID0gZGF0YVBhdGguZ2V0KCk7Ci0gICAgcmV0dXJuIGNhY2hlZFBhdGg7
Ci19Ci0KLXVpbnQ2NF90IGdldFZvbHVtZUZyZWVTaXplRm9yUGF0aChjb25zdCBjaGFyKiBwYXRo
KQotewotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3Jf
cGF0aChwYXRoKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVm
KGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVU
RV9GSUxFU1lTVEVNX0ZSRUUsIDAsIDApKTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChm
aWxlSW5mby5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUpOwotfQotCi1T
dHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgLyogTm8gbnVs
bCBjaGVja2luZyBuZWVkZWQgKi8KLSAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dl
dF9kaXJuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpKTsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1lLmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmlu
Zz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVy
KQotewotICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7Ci0KLSAgICBDU3RyaW5nIGZpbGVuYW1l
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIEdEaXIqIGRpciA9IGdfZGly
X29wZW4oZmlsZW5hbWUuZGF0YSgpLCAwLCAwKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0
dXJuIGVudHJpZXM7Ci0KLSAgICBHUGF0dGVyblNwZWMgKnBzcGVjID0gZ19wYXR0ZXJuX3NwZWNf
bmV3KChmaWx0ZXIudXRmOCgpKS5kYXRhKCkpOwotICAgIHdoaWxlIChjb25zdCBjaGFyKiBuYW1l
ID0gZ19kaXJfcmVhZF9uYW1lKGRpcikpIHsKLSAgICAgICAgaWYgKCFnX3BhdHRlcm5fbWF0Y2hf
c3RyaW5nKHBzcGVjLCBuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdP
d25QdHI8Z2NoYXI+IGVudHJ5KGdfYnVpbGRfZmlsZW5hbWUoZmlsZW5hbWUuZGF0YSgpLCBuYW1l
LCBOVUxMKSk7Ci0gICAgICAgIGVudHJpZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoZW50cnku
Z2V0KCkpKTsKLSAgICB9Ci0gICAgZ19wYXR0ZXJuX3NwZWNfZnJlZShwc3BlYyk7Ci0gICAgZ19k
aXJfY2xvc2UoZGlyKTsKLQotICAgIHJldHVybiBlbnRyaWVzOwotfQotCi1TdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQotewotICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMl
cyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOwotICAgIEdPd25QdHI8Z2NoYXI+IHRlbXBQYXRoKGdfYnVpbGRfZmlsZW5h
bWUoZ19nZXRfdG1wX2RpcigpLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOwotICAgIEdSZWZQdHI8
R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aCh0ZW1wUGF0aC5nZXQo
KSkpOwotCi0gICAgaGFuZGxlID0gZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwg
R19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxl
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KHRlbXBQYXRoLmdldCgpKTsKLX0KLQotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZnNSZXAuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotCi0gICAgR1JlZlB0
cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZzUmVwLmRhdGEo
KSkpOwotICAgIEdGaWxlSU9TdHJlYW0qIGlvU3RyZWFtID0gMDsKLSAgICBpZiAobW9kZSA9PSBP
cGVuRm9yUmVhZCkKLSAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmls
ZS5nZXQoKSwgMCwgMCk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpIHsKLSAg
ICAgICAgaWYgKGdfZmlsZV90ZXN0KGZzUmVwLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVUZXN0
PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCi0gICAgICAg
ICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfY3JlYXRlX3JlYWR3
cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOwotICAgIH0KLQotICAg
IHJldHVybiBpb1N0cmVhbTsKLX0KLQotdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUpCi17Ci0gICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKGhhbmRsZSksIDAsIDAp
OwotICAgIGdfb2JqZWN0X3VucmVmKGhhbmRsZSk7Ci0gICAgaGFuZGxlID0gaW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZTsKLX0KLQotbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQsIEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKLXsKLSAg
ICBHU2Vla1R5cGUgc2Vla1R5cGUgPSBHX1NFRUtfU0VUOwotICAgIHN3aXRjaCAob3JpZ2luKSB7
Ci0gICAgY2FzZSBTZWVrRnJvbUJlZ2lubmluZzoKLSAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtf
U0VUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlZWtGcm9tQ3VycmVudDoKLSAgICAgICAg
c2Vla1R5cGUgPSBHX1NFRUtfQ1VSOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlZWtGcm9t
RW5kOgotICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19FTkQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGlm
ICghZ19zZWVrYWJsZV9zZWVrKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVh
bShHX0lPX1NUUkVBTShoYW5kbGUpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
LCBzZWVrVHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gZ19zZWVr
YWJsZV90ZWxsKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NU
UkVBTShoYW5kbGUpKSkpOwotfQotCi1pbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
IGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBnc2l6ZSBieXRl
c1dyaXR0ZW47Ci0gICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChnX2lvX3N0cmVhbV9nZXRf
b3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEsIGxlbmd0aCwgJmJ5dGVzV3JpdHRlbiwgMCwgMCk7Ci0gICAgcmV0dXJu
IGJ5dGVzV3JpdHRlbjsKLX0KLQotaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKLSAgICBkbyB7Ci0gICAgICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVh
bV9yZWFkKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGxl
bmd0aCwgMCwgJmVycm9yLm91dFB0cigpKTsKLSAgICAgICAgaWYgKGJ5dGVzUmVhZCA+PSAwKQot
ICAgICAgICAgICAgcmV0dXJuIGJ5dGVzUmVhZDsKLSAgICB9IHdoaWxlIChlcnJvciAmJiBlcnJv
ci0+Y29kZSA9PSBHX0ZJTEVfRVJST1JfSU5UUik7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1ib29s
IHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCi17Ci0jaWYgT1MoV0lORE9XUykK
LSAgICByZXR1cm4gOjpGcmVlTGlicmFyeShtb2R1bGUpOwotI2Vsc2UKLSAgICByZXR1cm4gZ19t
b2R1bGVfY2xvc2UobW9kdWxlKTsKLSNlbmRpZgotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dPd25QdHJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjY5
M2Y0MTVlOTc4MjQ3ZmQzYzkzODRkNGVkMjUxZWUwNDliOGYwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
T3duUHRyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotCi0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGUgPD4gdm9pZCBm
cmVlT3duZWRHUHRyPEdka0V2ZW50PihHZGtFdmVudCogcHRyKQotewotICAgIGlmIChwdHIpCi0g
ICAgICAgIGdka19ldmVudF9mcmVlKHB0cik7Ci19Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZnJlZU93
bmVkR1B0cjxHdGtJY29uSW5mbz4oR3RrSWNvbkluZm8qIGluZm8pCi17Ci0gICAgaWYgKGluZm8p
Ci0gICAgICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZvKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJkNWU4MzcxZWQzNjhmNDE1ZDg5NzQzMjRlZTYyZDcxZmViN2EyZDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dPd25QdHJHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR093blB0
ckd0a19oCi0jZGVmaW5lIEdPd25QdHJHdGtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRH
UHRyPEdka0V2ZW50PihHZGtFdmVudCopOwotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRy
PEd0a0ljb25JbmZvPihHdGtJY29uSW5mbyopOwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmYTUwNmRmOTAwN2QyNGNjMDc2Nzc2OGRlZmQxMDU2NjJmYzM5YjNkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA5IE1hcnRpbiBSb2JpbnNvbgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLQotI2RlZmluZSBT
RUNSRVRfV0lUSF9VTlNUQUJMRSAxCi0jZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVDVF9UT19DSEFO
R0UgMQotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDxsaWJzZWNyZXQvc2VjcmV0Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiBH
dGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKLXsKLSAgICBpZiAocHRy
KQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfcmVmKHB0cik7Ci0gICAgcmV0dXJuIHB0cjsKLX0K
LQotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQotewotICAg
IGlmIChwdHIpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihwdHIpOwotfQotCi10ZW1w
bGF0ZSA8PiBTZWNyZXRWYWx1ZSogcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKQotewotICAgIGlm
IChwdHIpCi0gICAgICAgIHNlY3JldF92YWx1ZV9yZWYocHRyKTsKLSAgICByZXR1cm4gcHRyOwot
fQotCi10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKQotewotICAg
IGlmIChwdHIpCi0gICAgICAgIHNlY3JldF92YWx1ZV91bnJlZihwdHIpOwotfQotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLXRlbXBsYXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJz
b3IqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBnZGtfY3Vyc29yX3JlZihwdHIpOwot
ICAgIHJldHVybiBwdHI7Ci19Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNv
ciogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIGdka19jdXJzb3JfdW5yZWYocHRyKTsK
LX0KLSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5Mjg2NGE5MjI5ZGFiODgzYmVmYTU2MmIy
MzVhZDhhYzM5NmRjOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgR1JlZlB0ckd0a19oCi0jZGVmaW5lIEdSZWZQdHJHdGtfaAotCi0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi10eXBlZGVmIHN0cnVjdCBfU2VjcmV0VmFsdWUgU2Vj
cmV0VmFsdWU7Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0
KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cihHdGtUYXJnZXRMaXN0KiBwdHIpOwotCi10ZW1wbGF0ZSA8PiBTZWNyZXRWYWx1ZSogcmVmR1B0
cihTZWNyZXRWYWx1ZSogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZh
bHVlKiBwdHIpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXRlbXBsYXRlIDw+IEdka0N1
cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cihHZGtDdXJzb3IqIHB0cik7Ci0jZW5kaWYKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGEyZWFiMTI5NjMzNGQ0YTAwNjA1YTQyMWIw
MmZlYWU0ODJkNzc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuaCIKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1s
aWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ0xheW91dENv
bHVtblNwYWNpbmcgPSAxMjsKLXN0YXRpYyBjb25zdCBpbnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2
Owotc3RhdGljIGNvbnN0IGludCBnQnV0dG9uU3BhY2luZyA9IDU7Ci0KLUd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKLSAgICA6IG1f
ZGlhbG9nKDApCi0gICAgLCBtX2xvZ2luRW50cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRyeSgw
KQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShjaGFs
bGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZShtb2RlKQotewotfQotCi1HdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBw
YXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENy
ZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQotICAgIDogbV9kaWFsb2coZ3RrX2RpYWxvZ19uZXco
KSkKLSAgICAsIG1fbG9naW5FbnRyeSgwKQotICAgICwgbV9wYXNzd29yZEVudHJ5KDApCi0gICAg
LCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKLSAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkK
LSAgICAsIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1vZGUpCi17Ci0gICAgR3RrV2lkZ2V0KiBj
b250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShHVEtfRElBTE9HKG1fZGlh
bG9nKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIo
R1RLX0RJQUxPRyhtX2RpYWxvZykpLCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19C
T1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KLQotICAgIEd0a1dpbmRv
dyogd2luZG93ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfcmVz
aXphYmxlKHdpbmRvdywgRkFMU0UpOwotICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywg
IiIpOwotICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFM
T0dfQVVUSEVOVElDQVRJT04pOwotCi0gICAgaWYgKHBhcmVudFdpbmRvdykKLSAgICAgICAgZ3Rr
X3dpbmRvd19zZXRfdHJhbnNpZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRvdyk7Ci0KLSAgICBj
cmVhdGVDb250ZW50c0luQ29udGFpbmVyKGNvbnRlbnRBcmVhKTsKLX0KLQotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi1zdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lk
Z2V0KiBib3gsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKLSAgICB2YV9zdGFy
dChhcmd1bWVudExpc3QsIGJveCk7Ci0KLSAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxl
X25ldygxLCAyLCBGQUxTRSk7Ci0gICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RB
QkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotICAgIGd0a190YWJsZV9zZXRfcm93
X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKLQotICAgIEd0
a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRn
ZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0gMDsKLSAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRn
ZXQpIHsKLSAgICAgICAgaWYgKHJvd051bWJlcikKLSAgICAgICAgICAgIGd0a190YWJsZV9yZXNp
emUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7Ci0KLSAgICAgICAgR3RrV2lk
Z2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQq
KTsKLSAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8
R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKLSAgICAgICAgZ3RrX3Rh
YmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKLSAgICAgICAg
ICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyLAotICAgICAgICAgICAgcm93TnVtYmVy
LCByb3dOdW1iZXIgKyAxLAotICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9u
cywKLSAgICAgICAgICAgIDAsIDApOwotCi0gICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQp
Ci0gICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSks
IHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsKLQot
ICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdl
dCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9Ci0KLSAgICB2YV9lbmQoYXJndW1lbnRM
aXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIHRhYmxlLCBGQUxT
RSwgRkFMU0UsIDApOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJ
bkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0Owot
ICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsKLQotICAgIEd0a1dpZGdldCogZ3JpZCA9
IGd0a19ncmlkX25ldygpOwotICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJ
RChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3NldF9yb3dfc3BhY2lu
ZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3NldF9j
b2x1bW5faG9tb2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCksIFRSVUUpOwotCi0gICAgR3RrV2lkZ2V0
KiBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwot
ICAgIGludCByb3dOdW1iZXIgPSAwOwotICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgewot
ICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExp
c3QsIEd0a1dpZGdldCopOwotICAgICAgICBpbnQgZmlyc3RXaWRnZXRXaWR0aCA9IHNlY29uZENv
bHVtbldpZGdldCA/IDEgOiAyOwotCi0gICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChn
cmlkKSwgZmlyc3RDb2x1bW5XaWRnZXQsIDAsIHJvd051bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwg
MSk7Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRS
VUUpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBU
UlVFKTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgICAgICBn
dGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlY29uZENvbHVtbldpZGdldCwgMSwgcm93
TnVtYmVyLCAxLCAxKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25k
Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQo
c2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpcnN0Q29s
dW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgICAgIHJv
d051bWJlcisrOwotICAgIH0KLQotICAgIHZhX2VuZChhcmd1bWVudExpc3QpOwotCi0gICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKLX0K
LSNlbmRpZgotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dMYWJlbChjb25zdCBjaGFy
KiBsYWJlbFN0cmluZywgaW50IGhvcml6b250YWxQYWRkaW5nID0gMCkKLXsKLSAgICBHdGtXaWRn
ZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0cmluZyk7Ci0gICAgZ3RrX21pc2Nfc2V0
X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAsIDAuNSk7Ci0gICAgaWYgKGhvcml6b250YWxQ
YWRkaW5nKQotICAgICAgICBndGtfbWlzY19zZXRfcGFkZGluZyhHVEtfTUlTQyhsYWJlbCksIDAs
IGhvcml6b250YWxQYWRkaW5nKTsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KLXN0YXRpYyBHdGtX
aWRnZXQqIGNyZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdldCoqIG1lbWJlcikKLXsKLSAgICAqbWVt
YmVyID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1
bHQoR1RLX0VOVFJZKCptZW1iZXIpLCBUUlVFKTsKLSAgICByZXR1cm4gKm1lbWJlcjsKLX0KLQot
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihH
dGtXaWRnZXQqIGNvbnRhaW5lcikKLXsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0
a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgZ0xheW91dENvbHVtblNwYWNpbmcp
OwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJ
T05fSE9SSVpPTlRBTCwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotI2VuZGlmCi0gICAgZ3RrX2Nv
bnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaEJveCksIGdCdXR0b25TcGFj
aW5nKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5lciksIGhC
b3gpOwotCi0gICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdU
S19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKLSAg
ICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDApOwotICAgIGd0
a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBpY29uLCBGQUxTRSwgRkFMU0UsIDApOwot
Ci0gICAgR093blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJkdXBfcHJpbnRmKAotICAgICAgICBfKCJU
aGUgc2l0ZSAlczolaSByZXF1ZXN0cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCIpLAotICAgICAg
ICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKLSAg
ICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKSk7Ci0KLSAgICBtX3Jl
bWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8o
Il9SZW1lbWJlciBwYXNzd29yZCIpKTsKLSAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtf
TEFCRUwoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSks
IFRSVUUpOwotICAgIGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1
dHRvbiwgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFn
ZSk7Ci0KLQotICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhlIGJ1dHRvbiBib3ggaGVyZSBtYW51YWxs
eSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWFkeS1tYWRlIEd0a0RpYWxvZyBidXR0b25zLgotICAg
IC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gc2hhcmUgdGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRh
dGlvbnMgdGhhdCBkbyBub3QgdXNlIEd0a0RpYWxvZy4KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2hidXR0b25fYm94X25ldygpOwotI2Vs
c2UKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0a19idXR0b25fYm94X25ldyhHVEtfT1JJ
RU5UQVRJT05fSE9SSVpPTlRBTCk7Ci0jZW5kaWYKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdU
S19CT1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcpOwotICAgIGd0a19idXR0b25fYm94X3Nl
dF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRPTkJPWF9FTkQpOwot
Ci0gICAgbV9va2F5QnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tf
T0spOwotICAgIG1fY2FuY2VsQnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtf
U1RPQ0tfQ0FOQ0VMKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gp
LCBtX2NhbmNlbEJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFy
dChHVEtfQk9YKGJ1dHRvbkJveCksIG1fb2theUJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9va2F5QnV0dG9uLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0
dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NhbmNl
bEJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRo
aXMpOwotCi0gICAgU3RyaW5nIHJlYWxtID0gbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCku
cmVhbG0oKTsKLSAgICBpZiAoIXJlYWxtLmlzRW1wdHkoKSkgewotICAgICAgICBwYWNrVHdvQ29s
dW1uTGF5b3V0SW5Cb3goaEJveCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21w
dC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAotICAgICAgICAgICAgY3JlYXRlRGlh
bG9nTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBjcmVhdGVEaWFsb2dMYWJlbChyZWFsbS51
dGY4KCkuZGF0YSgpKSwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1l
OiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5FbnRyeSksCi0gICAgICAgICAgICBjcmVh
dGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3
b3JkRW50cnkpLAotICAgICAgICAgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uLCBOVUxMLAotICAg
ICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxMKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChoQm94LAotICAgICAgICAgICAgY3JlYXRlRGlhbG9n
TGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3BhY2luZyksIE5VTEwsCi0gICAgICAgICAg
ICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZt
X2xvZ2luRW50cnkpLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6
IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKLSAgICAgICAgICAgIG1f
cmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgIGJ1dHRvbkJveCwg
TlVMTCwgTlVMTCk7Ci0gICAgfQotCi0gICAgZ3RrX2VudHJ5X3NldF92aXNpYmlsaXR5KEdUS19F
TlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7Ci0gICAgY29uc3QgQ3JlZGVudGlhbCYgY3Jl
ZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IG1fY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVu
dGlhbCgpOwotICAgIGlmICghY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkp
LCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnVzZXIoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBj
cmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04o
bV9yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7Ci0gICAgfQotfQotCi12b2lkIEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKLXsKLSAgICBndGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVs
dChtX29rYXlCdXR0b24sIFRSVUUpOwotICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KG1fb2th
eUJ1dHRvbik7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKG1fbG9naW5FbnRyeSk7Ci0KLSAg
ICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6ZGVzdHJveSgpCi17Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZGlhbG9n
KTsKLSAgICBkZWxldGUgdGhpczsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6
YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgaWYgKGNy
ZWRlbnRpYWwuaXNFbXB0eSgpKQotICAgICAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNs
aWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwobV9jaGFs
bGVuZ2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGll
bnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKLX0KLQot
dm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dp
ZGdldCogYnV0dG9uLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nKQotewotICAgIENy
ZWRlbnRpYWwgY3JlZGVudGlhbDsKLSAgICBpZiAoYnV0dG9uID09IGRpYWxvZy0+bV9va2F5QnV0
dG9uKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0
KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRyeSkpOwotICAgICAgICBjb25zdCBjaGFyICpw
YXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3Jk
RW50cnkpKTsKLSAgICAgICAgYm9vbCByZW1lbWJlclBhc3N3b3JkID0gZ3RrX3RvZ2dsZV9idXR0
b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihkaWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1
dHRvbikpOwotICAgICAgICBDcmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2U7Ci0KLSAg
ICAgICAgaWYgKHJlbWVtYmVyUGFzc3dvcmQgJiYgZGlhbG9nLT5tX2NyZWRlbnRpYWxTdG9yYWdl
TW9kZSA9PSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgcGVyc2lzdGVuY2Ug
PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjsKLQotICAg
ICAgICBjcmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJpbmc6OmZyb21VVEY4KHVzZXJuYW1lKSwg
U3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNpc3RlbmNlKTsKLSAgICB9Ci0KLSAgICBk
aWFsb2ctPmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsKLSAgICBkaWFsb2ctPmRlc3Ryb3koKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzc3YzgxYWRmZWZiZDE5MjY5NzU5YTk4NzE2NjFlZjQ4MTViYTM2Yi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAorKysgL2Rldi9udWxsCkBA
IC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCi0jZGVmaW5lIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nX2gKLQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0j
aW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1
ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0K
LXB1YmxpYzoKLSAgICBlbnVtIENyZWRlbnRpYWxTdG9yYWdlTW9kZSB7Ci0gICAgICAgIEFsbG93
UGVyc2lzdGVudFN0b3JhZ2UsIC8vIFRoZSB1c2VyIGlzIGFza2VkIHdoZXRoZXIgdG8gc3RvcmUg
Y3JlZGVudGlhbCBpbmZvcm1hdGlvbi4KLSAgICAgICAgRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFn
ZSAvLyBDcmVkZW50aWFsIGluZm9ybWF0aW9uIGlzIG9ubHkga2VwdCBpbiB0aGUgc2Vzc2lvbi4K
LSAgICB9OwotCi0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUpOwotICAgIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKEd0a1dpbmRvdyosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3Jl
ZGVudGlhbFN0b3JhZ2VNb2RlKTsKLSAgICB2aXJ0dWFsIH5HdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZygpIHsgfQotICAgIHZvaWQgc2hvdygpOwotICAgIHZvaWQgZGVzdHJveSgpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKEd0a1dpZGdldCogY29udGFp
bmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmKTsK
LSAgICBHdGtXaWRnZXQqIG1fZGlhbG9nOwotICAgIEd0a1dpZGdldCogbV9sb2dpbkVudHJ5Owot
ICAgIEd0a1dpZGdldCogbV9wYXNzd29yZEVudHJ5OwotICAgIEd0a1dpZGdldCogbV9yZW1lbWJl
ckNoZWNrQnV0dG9uOwotICAgIEd0a1dpZGdldCogbV9va2F5QnV0dG9uOwotICAgIEd0a1dpZGdl
dCogbV9jYW5jZWxCdXR0b247Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgYnV0dG9uQ2xp
Y2tlZENhbGxiYWNrKEd0a1dpZGdldCosIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7Ci0gICAg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UgbV9jaGFsbGVuZ2U7Ci0gICAgQ3JlZGVudGlhbFN0b3Jh
Z2VNb2RlIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWNjOGEzMmMwMjY1ZWQxMTVkOGQ3NjFlZDdhNGZmZDIxM2VhZGQzZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR3RrQ2xpY2tDb3VudGVyLmgiCi0KLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUd0a0NsaWNrQ291
bnRlcjo6R3RrQ2xpY2tDb3VudGVyKCkKLSAgICA6IG1fY3VycmVudENsaWNrQ291bnQoMCkKLSAg
ICAsIG1fcHJldmlvdXNDbGlja0J1dHRvbigwKQotICAgICwgbV9wcmV2aW91c0NsaWNrVGltZSgw
KQotewotfQotCi12b2lkIEd0a0NsaWNrQ291bnRlcjo6cmVzZXQoKQotewotICAgIG1fY3VycmVu
dENsaWNrQ291bnQgPSAwOwotICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoKTsK
LSAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gMDsKLSAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24g
PSAwOwotfQotCi1ib29sIEd0a0NsaWNrQ291bnRlcjo6c2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50
KEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKLXsKLSAgICAvLyBGb3IgZG91YmxlIGFuZCB0
cmlwbGUgY2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVudAot
ICAgIC8vIGFuZCBhIHNwZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3
ZSBkZXRlY3QgYSBzcGVjaWFsIHByZXNzCi0gICAgLy8gY29taW5nIHVwLCBpZ25vcmUgdGhpcyBl
dmVudCBhcyBpdCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3IgdHJpcGxlCi0gICAg
Ly8gY2xpY2suIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdv
IERPTSBidXR0b24gcHJlc3MgZXZlbnRzCi0gICAgLy8gYXJlIGdlbmVyYXRlZC4KLSAgICBHT3du
UHRyPEdka0V2ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7Ci0gICAgaWYgKCFuZXh0
RXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChuZXh0RXZlbnQtPmFueS50eXBl
ID09IEdES18yQlVUVE9OX1BSRVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRU
T05fUFJFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIGd1aW50MzIgZ2V0RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBndWlu
dDMyIHRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOwotICAgIGlmICh0aW1lKQotICAg
ICAgICByZXR1cm4gdGltZTsKLQotICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9u
LXplcm8gdGltZSwgYnV0IGV2ZW50cyBzeW50aGVzaXplZAotICAgIC8vIGJ5IHRoZSBEUlQgZG8g
bm90IGFuZCB3ZSBtdXN0IGNhbGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQotICAg
IC8vIGlzIG5vdCBjYWxjdWxhdGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3
b3JrIHdlbGwgd2l0aAotICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElN
RSBvbiBzeW50aGVzaXplZCBldmVudHMuCi0gICAgR1RpbWVWYWwgdGltZVZhbHVlOwotICAgIGdf
Z2V0X2N1cnJlbnRfdGltZSgmdGltZVZhbHVlKTsKLSAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9z
ZWMgKiAxMDAwKSArICh0aW1lVmFsdWUudHZfdXNlYyAvIDEwMDApOwotfQotCi1pbnQgR3RrQ2xp
Y2tDb3VudGVyOjpjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKLXsKLSAgICBnaW50IGRvdWJsZUNsaWNrRGlz
dGFuY2UgPSAyNTA7Ci0gICAgZ2ludCBkb3VibGVDbGlja1RpbWUgPSA1OwotICAgIEd0a1NldHRp
bmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZm9yX3NjcmVlbihndGtfd2lkZ2V0X2dl
dF9zY3JlZW4od2lkZ2V0KSk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLAotICAgICAgICAg
ICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay1kaXN0YW5jZSIsICZkb3VibGVDbGlja0Rpc3RhbmNl
LAotICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwgJmRvdWJsZUNsaWNr
VGltZSwgTlVMTCk7Ci0KLSAgICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRvIHRyaXBsZSBjbGlj
a3MsIGJ1dCBXZWJDb3JlIHdhbnRzIHRvIGtub3cgYWJvdXQKLSAgICAvLyBxdWFkcnVwbGUgY2xp
Y2tzLCBxdWludHVwbGUgY2xpY2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0
aGUKLSAgICAvLyBHREsgbG9naWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KLSAgICBHZGtFdmVudCog
ZXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSk7Ci0gICAgZ3Vp
bnQzMiBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUoZXZlbnQpOwotCi0gICAgaWYgKChldmVudC0+
dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9Q
UkVTUykKLSAgICAgICAgfHwgKChhYnMoYnV0dG9uRXZlbnQtPnggLSBtX3ByZXZpb3VzQ2xpY2tQ
b2ludC54KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAgICYmIChhYnMoYnV0
dG9uRXZlbnQtPnkgLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC55KCkpIDwgZG91YmxlQ2xpY2tEaXN0
YW5jZSkKLSAgICAgICAgICAgICYmIChldmVudFRpbWUgLSBtX3ByZXZpb3VzQ2xpY2tUaW1lIDwg
c3RhdGljX2Nhc3Q8Z3VpbnQ+KGRvdWJsZUNsaWNrVGltZSkpCi0gICAgICAgICAgICAmJiAoYnV0
dG9uRXZlbnQtPmJ1dHRvbiA9PSBtX3ByZXZpb3VzQ2xpY2tCdXR0b24pKSkKLSAgICAgICAgbV9j
dXJyZW50Q2xpY2tDb3VudCsrOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3Vu
dCA9IDE7Ci0KLSAgICBnZG91YmxlIHgsIHk7Ci0gICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZl
bnQsICZ4LCAmeSk7Ci0gICAgbV9wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsK
LSAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSBidXR0b25FdmVudC0+YnV0dG9uOwotICAgIG1f
cHJldmlvdXNDbGlja1RpbWUgPSBldmVudFRpbWU7Ci0KLSAgICByZXR1cm4gbV9jdXJyZW50Q2xp
Y2tDb3VudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2NmNhMWRlYzkxODA3OTRmMmY3NTE5YjhiYzUyYjY3OTRiMWY5N2NmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgR3RrQ2xpY2tDb3VudGVyX2gKLSNkZWZpbmUg
R3RrQ2xpY2tDb3VudGVyX2gKLQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0KLXR5cGVkZWYgc3Ry
dWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBHdGtDbGlja0NvdW50ZXIgewotcHVibGljOgotICAgIEd0a0NsaWNrQ291bnRl
cigpOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIHNob3VsZFByb2Nlc3NCdXR0b25FdmVu
dChHZGtFdmVudEJ1dHRvbiopOwotICAgIGludCBjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQo
R3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qKTsKLQotcHJpdmF0ZToKLSAgICBpbnQgbV9jdXJy
ZW50Q2xpY2tDb3VudDsKLSAgICBJbnRQb2ludCBtX3ByZXZpb3VzQ2xpY2tQb2ludDsKLSAgICB1
bnNpZ25lZCBpbnQgbV9wcmV2aW91c0NsaWNrQnV0dG9uOwotICAgIGludCBtX3ByZXZpb3VzQ2xp
Y2tUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OTgwYjU0NmEyYTQ5YzY0NjA1NDUxMTVl
MDQ2YTEzNjViYzQyM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0lucHV0TWV0aG9kRmlsdGVyLmgiCi0KLSNpbmNs
dWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUg
PGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0KLS8vIFRoZSBXaW5kb3dzIGNvbXBvc2l0aW9uIGtleSBldmVudCBjb2Rl
IGlzIDI5OSBvciBWS19QUk9DRVNTS0VZLiBXZSBuZWVkIHRvCi0vLyBlbWl0IHRoaXMgY29kZSBm
b3Igd2ViIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3aGVuIGtleSBldmVudHMgdHJpZ2dlcgotLy8g
Y29tcG9zaXRpb24gcmVzdWx0cy4gR0RLIGRvZXNuJ3QgaGF2ZSBhbiBlcXVpdmFsZW50LCBzbyB3
ZSBzZW5kIFZvaWRTeW1ib2wKLS8vIGhlcmUgdG8gV2ViQ29yZS4gUGxhdGZvcm1LZXlFdmVudCBr
bm93cyB0byBjb252ZXJ0IHRoaXMgY29kZSBpbnRvCi0vLyBWS19QUk9DRVNTS0VZLgotY29uc3Qg
aW50IGdDb21wb3NpdGlvbkV2ZW50S2V5Q29kZSA9IEdES19LRVlfVm9pZFN5bWJvbDsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBoYW5kbGVDb21taXRDYWxsYmFjayhHdGtJ
TUNvbnRleHQqLCBjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZywgR3RrSW5wdXRNZXRob2RG
aWx0ZXIqIGZpbHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZUNvbW1pdChjb21wb3NpdGlvblN0
cmluZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKEd0a0lN
Q29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5o
YW5kbGVQcmVlZGl0U3RhcnQoKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5n
ZWRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQot
ewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKLX0KLQotc3RhdGljIHZvaWQg
aGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmls
dGVyKiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0RW5kKCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGhhbmRsZVdpZGdldFJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0lucHV0
TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lk
Z2V0X2dldF93aW5kb3cod2lkZ2V0KTsKLSAgICBBU1NFUlQod2luZG93KTsKLSAgICBndGtfaW1f
Y29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhmaWx0ZXItPmNvbnRleHQoKSwgd2luZG93KTsKLX0K
LQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0
KQotewotICAgIEFTU0VSVCghbV93aWRnZXQpOwotCi0gICAgbV93aWRnZXQgPSB3aWRnZXQ7Ci0g
ICAgaWYgKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpZGdldCkpCi0gICAgICAgIGhhbmRsZVdp
ZGdldFJlYWxpemUobV93aWRnZXQsIHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdF9hZnRlcih3aWRnZXQsICJyZWFsaXplIiwgR19DQUxMQkFDSyhoYW5kbGVXaWRnZXRS
ZWFsaXplKSwgdGhpcyk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldEN1cnNv
clJlY3QoY29uc3QgSW50UmVjdCYgY3Vyc29yUmVjdCkKLXsKLSAgICAvLyBEb24ndCBtb3ZlIHRo
ZSB3aW5kb3cgdW5sZXNzIHRoZSBjdXJzb3IgYWN0dWFsbHkgbW92ZXMgbW9yZSB0aGFuIDEwCi0g
ICAgLy8gcGl4ZWxzLiBUaGlzIHByZXZlbnRzIHVzIGZyb20gbWFraW5nIHRoZSB3aW5kb3cgZmxh
c2ggZHVyaW5nIG1pbm9yCi0gICAgLy8gY3Vyc29yIGFkanVzdG1lbnRzLgotICAgIHN0YXRpYyBj
b25zdCBpbnQgd2luZG93TW92ZW1lbnRUaHJlc2hvbGQgPSAxMCAqIDEwOwotICAgIGlmIChjdXJz
b3JSZWN0LmxvY2F0aW9uKCkuZGlzdGFuY2VTcXVhcmVkVG9Qb2ludChtX2xhc3RDYXJlTG9jYXRp
b24pIDwgd2luZG93TW92ZW1lbnRUaHJlc2hvbGQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bGFzdENhcmVMb2NhdGlvbiA9IGN1cnNvclJlY3QubG9jYXRpb24oKTsKLSAgICBJbnRSZWN0IHRy
YW5zbGF0ZWRSZWN0ID0gY3Vyc29yUmVjdDsKLQotICAgIEFTU0VSVChtX3dpZGdldCk7Ci0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24o
bV93aWRnZXQsICZhbGxvY2F0aW9uKTsKLSAgICB0cmFuc2xhdGVkUmVjdC5tb3ZlKGFsbG9jYXRp
b24ueCwgYWxsb2NhdGlvbi55KTsKLQotICAgIEdka1JlY3RhbmdsZSBnZGtDdXJzb3JSZWN0ID0g
Y3Vyc29yUmVjdDsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY3Vyc29yX2xvY2F0aW9uKG1fY29u
dGV4dC5nZXQoKSwgJmdka0N1cnNvclJlY3QpOwotfQotCi1HdGtJbnB1dE1ldGhvZEZpbHRlcjo6
R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQotICAgIDogbV9jdXJzb3JPZmZzZXQoMCkKLSAgICAsIG1f
Y29udGV4dChhZG9wdEdSZWYoZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKSkpCi0gICAgLCBtX3dp
ZGdldCgwKQotICAgICwgbV9lbmFibGVkKGZhbHNlKQotICAgICwgbV9jb21wb3NpbmdUZXh0Q3Vy
cmVudGx5KGZhbHNlKQotICAgICwgbV9maWx0ZXJpbmdLZXlFdmVudChmYWxzZSkKLSAgICAsIG1f
cHJlZWRpdENoYW5nZWQoZmFsc2UpCi0gICAgLCBtX3ByZXZlbnROZXh0Q29tbWl0KGZhbHNlKQot
ICAgICwgbV9qdXN0U2VudEZha2VLZXlVcChmYWxzZSkKLSAgICAsIG1fbGFzdEZpbHRlcmVkS2V5
UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyhHREtfS0VZX1ZvaWRTeW1ib2wpCi17Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJjb21taXQiLCBHX0NBTExCQUNLKGhhbmRsZUNv
bW1pdENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0
KCksICJwcmVlZGl0LXN0YXJ0IiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFj
ayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRp
dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWVuZCIs
IEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLUd0a0lu
cHV0TWV0aG9kRmlsdGVyOjp+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQotewotICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGhhbmRsZUNvbW1pdENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fd2lkZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVXaWRnZXRSZWFsaXplKSwgdGhpcyk7Ci19Ci0KLXZv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAg
IG1fZW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIGd0a19pbV9j
b250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBndGtf
aW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKLX0KLQotYm9vbCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6ZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAg
IGlmICghY2FuRWRpdCgpIHx8ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybiBzZW5kU2ltcGxl
S2V5RXZlbnQoZXZlbnQpOwotCi0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOwotICAgIG1f
ZmlsdGVyaW5nS2V5RXZlbnQgPSB0cnVlOwotCi0gICAgdW5zaWduZWQgaW50IGxhc3RGaWx0ZXJl
ZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdp
dGhOb1Jlc3VsdHM7Ci0gICAgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRz
ID0gR0RLX0tFWV9Wb2lkU3ltYm9sOwotCi0gICAgYm9vbCBmaWx0ZXJlZCA9IGd0a19pbV9jb250
ZXh0X2ZpbHRlcl9rZXlwcmVzcyhtX2NvbnRleHQuZ2V0KCksIGV2ZW50KTsKLSAgICBtX2ZpbHRl
cmluZ0tleUV2ZW50ID0gZmFsc2U7Ci0KLSAgICBib29sIGp1c3RTZW50RmFrZUtleVVwID0gbV9q
dXN0U2VudEZha2VLZXlVcDsKLSAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gZmFsc2U7Ci0gICAg
aWYgKGp1c3RTZW50RmFrZUtleVVwICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTaW1wbGUgaW5wdXQgbWV0aG9kcyB3b3Jr
IHN1Y2ggdGhhdCBldmVuIG5vcm1hbCBrZXlzdHJva2VzIGZpcmUgdGhlCi0gICAgLy8gY29tbWl0
IHNpZ25hbC4gV2UgZGV0ZWN0IHRob3NlIHNpdHVhdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgbm9y
bWFsCi0gICAgLy8ga2V5IGV2ZW50cywgc3VwcGx5aW5nIHRoZSBjb21taXQgc3RyaW5nIGFzIHRo
ZSBrZXkgY2hhcmFjdGVyLgotICAgIGlmIChmaWx0ZXJlZCAmJiAhbV9jb21wb3NpbmdUZXh0Q3Vy
cmVudGx5ICYmICFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24ubGVu
Z3RoKCkgPT0gMSkgewotICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRTaW1wbGVLZXlFdmVudChl
dmVudCwgbV9jb25maXJtZWRDb21wb3NpdGlvbik7Ci0gICAgICAgIG1fY29uZmlybWVkQ29tcG9z
aXRpb24gPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBp
ZiAoZmlsdGVyZWQgJiYgZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9QUkVTUykgewotICAgICAgICBp
ZiAoIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkg
ewotICAgICAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IGV2ZW50LT5rZXl2
YWw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
cmVzdWx0ID0gc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhldmVudCk7Ci0gICAg
ICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgICAgICAgICAgbV9jb25maXJt
ZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgcHJldmlvdXNseSBmaWx0ZXJlZCBhIGtleSBwcmVz
cyBldmVudCBhbmQgaXQgeWllbGRlZCBubyByZXN1bHRzLiBTdXBwcmVzcwotICAgIC8vIHRoZSBj
b3JyZXNwb25kaW5nIGtleSByZWxlYXNlIGV2ZW50IHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgd2Vi
IGNvbnRlbnQuCi0gICAgaWYgKGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSAmJiBsYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID09IGV2ZW50LT5rZXl2YWwpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQXQgdGhpcyBwb2ludCBhIGtleXN0cm9rZSB3YXMg
ZWl0aGVyOgotICAgIC8vIDEuIFVuZmlsdGVyZWQKLSAgICAvLyAyLiBBIGZpbHRlcmVkIGtleXVw
IGV2ZW50LiBBcyB0aGUgSU1FIGNvZGUgaW4gRWRpdG9yQ2xpZW50LmggZG9lc24ndAotICAgIC8v
ICAgIGV2ZXIgbG9vayBhdCBrZXl1cCBldmVudHMsIHdlIHNlbmQgYW55IGNvbXBvc2l0aW9uIHJl
c3VsdHMgYmVmb3JlCi0gICAgLy8gICAgdGhlIGtleSBldmVudC4KLSAgICAvLyBCb3RoIG1pZ2h0
IGhhdmUgY29tcG9zaXRpb24gcmVzdWx0cyBvciBub3QuCi0gICAgLy8KLSAgICAvLyBJdCdzIGlt
cG9ydGFudCB0byBzZW5kIHRoZSBjb21wb3NpdGlvbiByZXN1bHRzIGJlZm9yZSB0aGUgZXZlbnQK
LSAgICAvLyBiZWNhdXNlIHNvbWUgSU0gbW9kdWxlcyBvcGVyYXRlIHRoYXQgd2F5LiBGb3IgZXhh
bXBsZSAodGFrZW4gZnJvbQotICAgIC8vIHRoZSBDaHJvbWl1bSBzb3VyY2UpLCB0aGUgbGF0aW4t
cG9zdCBpbnB1dCBtZXRob2QgZ2l2ZXMgdGhpcyBzZXF1ZW5jZQotICAgIC8vIHdoZW4geW91IHBy
ZXNzICdhJyBhbmQgdGhlbiBiYWNrc3BhY2U6Ci0gICAgLy8gIDEuIGtleWRvd24gJ2EnIChmaWx0
ZXJlZCkKLSAgICAvLyAgMi4gcHJlZWRpdCBjaGFuZ2VkIHRvICJhIgotICAgIC8vICAzLiBrZXl1
cCAnYScgKHVuZmlsdGVyZWQpCi0gICAgLy8gIDQuIGtleWRvd24gQmFja3NwYWNlICh1bmZpbHRl
cmVkKQotICAgIC8vICA1LiBjb21taXQgImEiCi0gICAgLy8gIDYuIHByZWVkaXQgZW5kCi0gICAg
aWYgKCFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgY29uZmlybUNv
bXBvc2l0aW9uKCk7Ci0gICAgaWYgKG1fcHJlZWRpdENoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVBy
ZWVkaXQoKTsKLSAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKLX0KLQotdm9p
ZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5TW91c2VCdXR0b25QcmVzcygpCi17Ci0gICAg
Ly8gQ29uZmlybWluZyB0aGUgY29tcG9zaXRpb24gbWF5IHRyaWdnZXIgYSBzZWxlY3Rpb24gY2hh
bmdlLCB3aGljaAotICAgIC8vIG1pZ2h0IHRyaWdnZXIgZnVydGhlciB1bndhbnRlZCBhY3Rpb25z
IG9uIHRoZSBjb250ZXh0LCBzbyB3ZSBwcmV2ZW50Ci0gICAgLy8gdGhhdCBieSBzZXR0aW5nIG1f
Y29tcG9zaW5nVGV4dEN1cnJlbnRseSB0byBmYWxzZS4KLSAgICBpZiAobV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5KQotICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7Ci0gICAgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0
aW9uKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnJlc2V0Q29udGV4dCgpCi17
Ci0KLSAgICAvLyBXZSBhbHdheXMgY2FuY2VsIHRoZSBjdXJyZW50IFdlYkNvcmUgY29tcG9zaXRp
b24gaGVyZSwgaW4gY2FzZSB0aGUKLSAgICAvLyBjb21wb3NpdGlvbiB3YXMgc2V0IG91dHNpZGUg
dGhlIEdUSysgSU1FIHBhdGggKHZpYSBhIHNjcmlwdCwgZm9yCi0gICAgLy8gaW5zdGFuY2UpIGFu
ZCB3ZSBhcmVuJ3QgdHJhY2tpbmcgaXQuCi0gICAgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCk7
Ci0KLSAgICBpZiAoIW1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgIGNhbmNlbENvbnRleHRD
b21wb3NpdGlvbigpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb250
ZXh0Q29tcG9zaXRpb24oKQotewotICAgIG1fcHJldmVudE5leHRDb21taXQgPSAhbV9wcmVlZGl0
LmlzRW1wdHkoKTsKLQotICAgIGd0a19pbV9jb250ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7
Ci0KLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICBtX2p1c3RTZW50
RmFrZUtleVVwID0gZmFsc2U7Ci0gICAgbV9wcmVlZGl0ID0gU3RyaW5nKCk7Ci0gICAgbV9jb25m
aXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmls
dGVyOjpub3RpZnlGb2N1c2VkSW4oKQotewotICAgIG1fZW5hYmxlZCA9IHRydWU7Ci0gICAgZ3Rr
X2ltX2NvbnRleHRfZm9jdXNfaW4obV9jb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZE91dCgpCi17Ci0gICAgaWYgKCFtX2VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCi0g
ICAgICAgIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsKLSAgICBjYW5jZWxDb250ZXh0Q29t
cG9zaXRpb24oKTsKLSAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgp
KTsKLSAgICBtX2VuYWJsZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRl
cjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKLXsKLSAgICBjb25maXJtQ29tcG9zaXRpb25UZXh0KG1f
Y29uZmlybWVkQ29tcG9zaXRpb24pOwotICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJp
bmcoKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6dXBkYXRlUHJlZWRpdCgpCi17
Ci0gICAgc2V0UHJlZWRpdChtX3ByZWVkaXQsIG1fY3Vyc29yT2Zmc2V0KTsKLSAgICBtX3ByZWVk
aXRDaGFuZ2VkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kIHJlc3Vs
dHNUb1NlbmQpCi17Ci0gICAgR093blB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhH
REtfS0VZX1BSRVNTKSk7Ci0gICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsK
LSAgICBldmVudC0+a2V5LmtleXZhbCA9IGdDb21wb3NpdGlvbkV2ZW50S2V5Q29kZTsKLSAgICBz
ZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKCZldmVudC0+a2V5LCByZXN1bHRzVG9T
ZW5kLCBFdmVudEZha2VkKTsKLQotICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmco
KTsKLSAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uKQotICAgICAgICBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLQotICAgIGV2ZW50LT50eXBlID0gR0RLX0tFWV9S
RUxFQVNFOwotICAgIHNlbmRTaW1wbGVLZXlFdmVudCgmZXZlbnQtPmtleSwgU3RyaW5nKCksIEV2
ZW50RmFrZWQpOwotICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSB0cnVlOwotfQotCi12b2lkIEd0
a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9zaXRpb25T
dHJpbmcpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRDb21taXQpIHsKLSAgICAgICAgbV9wcmV2
ZW50TmV4dENvbW1pdCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29uZmlybWVkQ29tcG9zaXRp
b24uYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoY29tcG9zaXRpb25TdHJpbmcpKTsKLQotICAgIC8v
IElmIHRoZSBjb21taXQgd2FzIHRyaWdnZXJlZCBvdXRzaWRlIG9mIGEga2V5IGV2ZW50LCBqdXN0
IHNlbmQKLSAgICAvLyB0aGUgSU1FIGV2ZW50IG5vdy4gSWYgd2UgYXJlIGhhbmRsaW5nIGEga2V5
IGV2ZW50LCB3ZSdsbCBkZWNpZGUKLSAgICAvLyBsYXRlciBob3cgdG8gaGFuZGxlIHRoaXMuCi0g
ICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQotICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQ
cmVlZGl0V2l0aEZha2VLZXlFdmVudHMoQ29tcG9zaXRpb24pOwotfQotCi12b2lkIEd0a0lucHV0
TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0U3RhcnQoKQotewotICAgIGlmIChtX3ByZXZlbnRO
ZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3ByZWVkaXRD
aGFuZ2VkID0gdHJ1ZTsKLSAgICBtX3ByZWVkaXQgPSAiIjsKLX0KLQotdm9pZCBHdGtJbnB1dE1l
dGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdENoYW5nZWQoKQotewotICAgIGlmICghbV9lbmFibGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBuZXdQcmVlZGl0OwotICAg
IGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhtX2NvbnRleHQuZ2V0KCksICZuZXdQ
cmVlZGl0Lm91dFB0cigpLCAwLCAmbV9jdXJzb3JPZmZzZXQpOwotCi0gICAgaWYgKG1fcHJldmVu
dE5leHRDb21taXQpIHsKLSAgICAgICAgaWYgKHN0cmxlbihuZXdQcmVlZGl0LmdldCgpKSA+IDAp
Ci0gICAgICAgICAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gZmFsc2U7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3ByZWVkaXQgPSBTdHJpbmc6OmZy
b21VVEY4KG5ld1ByZWVkaXQuZ2V0KCkpOwotICAgIG1fY3Vyc29yT2Zmc2V0ID0gc3RkOjptaW4o
c3RkOjptYXgobV9jdXJzb3JPZmZzZXQsIDApLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcHJlZWRpdC5s
ZW5ndGgoKSkpOwotCi0gICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gIW1fcHJlZWRpdC5p
c0VtcHR5KCk7Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fZmls
dGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFr
ZUtleUV2ZW50cyhQcmVlZGl0KTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFu
ZGxlUHJlZWRpdEVuZCgpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRDb21taXQgfHwgIW1fZW5h
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcmVlZGl0ID0gU3RyaW5nKCk7Ci0gICAg
bV9jdXJzb3JPZmZzZXQgPSAwOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOwotCi0gICAg
aWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQotICAgICAgICB1cGRhdGVQcmVlZGl0KCk7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhv
ZEZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmls
dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNDgyNTM0ODhkMTA0ZTg1NDNi
YTBmMTI4YWE2MzM0MWVjYTdiNjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmls
dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAotI2RlZmlu
ZSBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCi0KLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0lNQ29udGV4dCBHdGtJTUNvbnRl
eHQ7Ci10eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBHdGtJbnB1dE1ldGhvZEZpbHRlciB7Ci1wdWJsaWM6Ci0gICAgR3Rr
SW5wdXRNZXRob2RGaWx0ZXIoKTsKLSAgICB+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKLQotICAg
IGJvb2wgZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqKTsKLSAgICB2b2lkIG5vdGlmeU1vdXNl
QnV0dG9uUHJlc3MoKTsKLSAgICB2b2lkIG5vdGlmeUZvY3VzZWRJbigpOwotICAgIHZvaWQgbm90
aWZ5Rm9jdXNlZE91dCgpOwotICAgIHZvaWQgcmVzZXRDb250ZXh0KCk7Ci0gICAgdm9pZCBzZXRF
bmFibGVkKGJvb2wpOwotCi0gICAgdm9pZCBoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9z
aXRpb25TdHJpbmcpOwotICAgIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKLSAgICB2b2lk
IGhhbmRsZVByZWVkaXRTdGFydCgpOwotICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOwotCi0g
ICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICB2b2lkIGNhbmNlbENvbnRleHRDb21w
b3NpdGlvbigpOwotICAgIHZvaWQgdXBkYXRlUHJlZWRpdCgpOwotICAgIHZvaWQgc2V0Q3Vyc29y
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhdGlvbik7Ci0KLSAgICBHdGtJTUNvbnRleHQqIGNvbnRl
eHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLQotICAgIGVudW0gRXZlbnRGYWtlZEZv
ckNvbXBvc2l0aW9uIHsKLSAgICAgICAgRXZlbnRGYWtlZCwKLSAgICAgICAgRXZlbnROb3RGYWtl
ZAotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBlbnVtIFJlc3VsdHNUb1NlbmQgewotICAgICAg
ICBQcmVlZGl0ID0gMSA8PCAxLAotICAgICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKLSAgICAg
ICAgUHJlZWRpdEFuZENvbXBvc2l0aW9uID0gUHJlZWRpdCArIENvbXBvc2l0aW9uCi0gICAgfTsK
LQotICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCopOwotICAgIHZpcnR1YWwgYm9vbCBjYW5F
ZGl0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqLCBXVEY6OlN0cmluZyBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29t
cG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbmRLZXlF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0g
UHJlZWRpdEFuZENvbXBvc2l0aW9uLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5v
dEZha2VkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3Ry
aW5nIGNvbXBvc2l0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29t
cG9zaXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlv
bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JP
ZmZzZXQpID0gMDsKLQotICAgIFdURjo6U3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247Ci0g
ICAgV1RGOjpTdHJpbmcgbV9wcmVlZGl0OwotICAgIGludCBtX2N1cnNvck9mZnNldDsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50
cyhSZXN1bHRzVG9TZW5kKTsKLQotICAgIEdSZWZQdHI8R3RrSU1Db250ZXh0PiBtX2NvbnRleHQ7
Ci0gICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKLSAgICBib29sIG1fZW5hYmxlZDsKLSAgICBib29s
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseTsKLSAgICBib29sIG1fZmlsdGVyaW5nS2V5RXZlbnQ7
Ci0gICAgYm9vbCBtX3ByZWVkaXRDaGFuZ2VkOwotICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbW1p
dDsKLSAgICBib29sIG1fanVzdFNlbnRGYWtlS2V5VXA7Ci0gICAgdW5zaWduZWQgaW50IG1fbGFz
dEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0czsKLSAgICBJbnRQb2ludCBtX2xhc3RD
YXJlTG9jYXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBH
dGtJbnB1dE1ldGhvZEZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrUG9wdXBNZW51LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQ
b3B1cE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjU3YTE3ZGMzMjNi
Y2Y3YjM1N2IyNzdmMDgwYWRlZjA5MTM1MmY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1l
bnUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4gZWxl
bWVudHMgaW4gV2ViQ29yZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEln
YWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrUG9wdXBNZW51
LmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR3RrVmVy
c2lvbmluZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IGdT
ZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwotCi1HdGtQb3B1cE1lbnU6Okd0a1BvcHVwTWVudSgpCi0g
ICAgOiBtX3BvcHVwKGd0a19tZW51X25ldygpKQotICAgICwgbV9wcmV2aW91c0tleUV2ZW50Q2hh
cmFjdGVyKDApCi0gICAgLCBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0oMCkKLXsKLSAgICBt
X2tleVByZXNzSGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAia2V5
LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OmtleVByZXNzRXZlbnRDYWxs
YmFjayksIHRoaXMpOwotfQotCi1HdGtQb3B1cE1lbnU6On5HdGtQb3B1cE1lbnUoKQotewotICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3BvcHVwLmdldCgpLCBtX2tleVByZXNzSGFu
ZGxlcklEKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OmNsZWFyKCkKLXsKLSAgICBndGtfY29u
dGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRf
Y2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKLX0KLQotdm9pZCBHdGtQ
b3B1cE1lbnU6OmFwcGVuZFNlcGFyYXRvcigpCi17Ci0gICAgR3RrV2lkZ2V0KiBtZW51SXRlbSA9
IGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpOwotICAgIGd0a19tZW51X3NoZWxsX2FwcGVu
ZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgbWVudUl0ZW0pOwotICAgIGd0a193aWRn
ZXRfc2hvdyhtZW51SXRlbSk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjphcHBlbmRJdGVtKEd0
a0FjdGlvbiogYWN0aW9uKQotewotICAgIEd0a1dpZGdldCogbWVudUl0ZW0gPSBndGtfYWN0aW9u
X2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKTsKLSAgICBndGtfd2lkZ2V0X3NldF90b29sdGlwX3Rl
eHQobWVudUl0ZW0sIGd0a19hY3Rpb25fZ2V0X3Rvb2x0aXAoYWN0aW9uKSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtZW51SXRlbSwgInNlbGVjdCIsIEdfQ0FMTEJBQ0soR3RrUG9wdXBNZW51Ojpz
ZWxlY3RJdGVtQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RL
X01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKLQotICAgIGlmIChndGtfYWN0
aW9uX2lzX3Zpc2libGUoYWN0aW9uKSkKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJdGVt
KTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OnBvcFVwKGNvbnN0IEludFNpemUmIG1lbnVTaXpl
LCBjb25zdCBJbnRQb2ludCYgbWVudVBvc2l0aW9uLCBpbnQgaXRlbUNvdW50LCBpbnQgc2VsZWN0
ZWRJdGVtLCBjb25zdCBHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgcmVzZXRUeXBlQWhlYWRGaW5k
U3RhdGUoKTsKLSAgICBtX21lbnVQb3NpdGlvbiA9IG1lbnVQb3NpdGlvbjsKLSAgICBndGtfbWVu
dV9zZXRfYWN0aXZlKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBzZWxlY3RlZEl0ZW0pOwotCi0g
ICAgLy8gVGhpcyBhcHByb2FjaCBmb2xsb3dzIHRoZSBvbmUgaW4gZ3RrY29tYm9ib3guYy4KLSAg
ICBHdGtSZXF1aXNpdGlvbiByZXF1aXNpdGlvbjsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3Jl
cXVlc3QobV9wb3B1cC5nZXQoKSwgLTEsIC0xKTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgot
ICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCksICZyZXF1aXNpdGlvbik7
Ci0jZWxzZQotICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKG1fcG9wdXAuZ2V0KCks
ICZyZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYKLQotICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVx
dWVzdChtX3BvcHVwLmdldCgpLCBzdGQ6Om1heChtZW51U2l6ZS53aWR0aCgpLCByZXF1aXNpdGlv
bi53aWR0aCksIC0xKTsKLQotICAgIEdMaXN0KiBjaGlsZHJlbiA9IGd0a19jb250YWluZXJfZ2V0
X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSkpOwotICAgIEdMaXN0KiBwID0g
Y2hpbGRyZW47Ci0gICAgaWYgKGl0ZW1Db3VudCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGl0ZW1Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IHNlbGVjdGVkSXRlbSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgR3RrV2lkZ2V0KiBpdGVtID0g
cmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQqPihwLT5kYXRhKTsKLSAgICAgICAgICAgIEd0a1Jl
cXVpc2l0aW9uIGl0ZW1SZXF1aXNpdGlvbjsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAg
ICAgICAgICAgZ3RrX3dpZGdldF9nZXRfY2hpbGRfcmVxdWlzaXRpb24oaXRlbSwgJml0ZW1SZXF1
aXNpdGlvbik7Ci0jZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3Np
emUoaXRlbSwgJml0ZW1SZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fbWVu
dVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gaXRlbVJlcXVpc2l0aW9uLmhlaWdo
dCk7Ci0KLSAgICAgICAgICAgIHAgPSBnX2xpc3RfbmV4dChwKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIENlbnRlciB2ZXJ0aWNhbGx5IHRoZSBlbXB0eSBwb3B1cCBpbiB0
aGUgY29tYm8gYm94IGFyZWEuCi0gICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9z
aXRpb24ueSgpIC0gbWVudVNpemUuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0gICAgZ19saXN0X2Zy
ZWUoY2hpbGRyZW4pOwotCi0gICAgZ3VpbnQgYnV0dG9uOwotICAgIGd1aW50MzIgYWN0aXZhdGVU
aW1lOwotICAgIGlmIChldmVudCkgewotICAgICAgICBidXR0b24gPSBldmVudC0+dHlwZSA9PSBH
REtfQlVUVE9OX1BSRVNTID8gZXZlbnQtPmJ1dHRvbi5idXR0b24gOiAxOwotICAgICAgICBhY3Rp
dmF0ZVRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGJ1dHRvbiA9IDE7Ci0gICAgICAgIGFjdGl2YXRlVGltZSA9IEdES19DVVJSRU5UX1RJTUU7
Ci0gICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBndGtfbWVudV9wb3B1cChH
VEtfTUVOVShtX3BvcHVwLmdldCgpKSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9z
aXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIGJ1dHRvbiwgYWN0aXZhdGVU
aW1lKTsKLSNlbHNlCi0gICAgZ3RrX21lbnVfcG9wdXBfZm9yX2RldmljZShHVEtfTUVOVShtX3Bv
cHVwLmdldCgpKSwgZXZlbnQgPyBnZGtfZXZlbnRfZ2V0X2RldmljZShldmVudCkgOiAwLCAwLCAw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51
UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIDAsIGJ1dHRvbiwgYWN0
aXZhdGVUaW1lKTsKLSNlbmRpZgotfQotCi12b2lkIEd0a1BvcHVwTWVudTo6cG9wRG93bigpCi17
Ci0gICAgZ3RrX21lbnVfcG9wZG93bihHVEtfTUVOVShtX3BvcHVwLmdldCgpKSk7Ci0gICAgcmVz
ZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6Om1lbnVSZW1v
dmVJdGVtKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKLXsKLSAg
ICBBU1NFUlQocG9wdXBNZW51LT5tX3BvcHVwKTsKLSAgICBndGtfY29udGFpbmVyX3JlbW92ZShH
VEtfQ09OVEFJTkVSKHBvcHVwTWVudS0+bV9wb3B1cC5nZXQoKSksIHdpZGdldCk7Ci19Ci0KLXZv
aWQgR3RrUG9wdXBNZW51OjptZW51UG9zaXRpb25GdW5jdGlvbihHdGtNZW51KiwgZ2ludCogeCwg
Z2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0g
ICAgKnggPSBwb3B1cE1lbnUtPm1fbWVudVBvc2l0aW9uLngoKTsKLSAgICAqeSA9IHBvcHVwTWVu
dS0+bV9tZW51UG9zaXRpb24ueSgpOwotICAgICpwdXNoSW4gPSB0cnVlOwotfQotCi12b2lkIEd0
a1BvcHVwTWVudTo6cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKQotewotICAgIG1fY3VycmVudGx5
U2VsZWN0ZWRNZW51SXRlbSA9IDA7Ci0gICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyID0g
MDsKLSAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSAiIjsKLX0KLQotYm9vbCBHdGtQb3B1cE1l
bnU6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIC8vIElmIHdlIHdl
cmUgZ2l2ZW4gYSBub24tcHJpbnRhYmxlIGNoYXJhY3RlciBqdXN0IHNraXAgaXQuCi0gICAgZ3Vu
aWNoYXIgdW5pY29kZUNoYXJhY3RlciA9IGdka19rZXl2YWxfdG9fdW5pY29kZShldmVudC0+a2V5
dmFsKTsKLSAgICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50KHVuaWNvZGVDaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBnbG9uZyBjaGFyYWN0ZXJzV3JpdHRlbjsKLSAgICBHT3duUHRyPGd1bmlj
aGFyMj4gdXRmMTZTdHJpbmcoZ191Y3M0X3RvX3V0ZjE2KCZ1bmljb2RlQ2hhcmFjdGVyLCAxLCAw
LCAmY2hhcmFjdGVyc1dyaXR0ZW4sIDApKTsKLSAgICBpZiAoIXV0ZjE2U3RyaW5nKSB7Ci0gICAg
ICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IGNo
YXJhY3RlciwgdGhlIHVzZXIgaXMgcHJvYmFibHkgdHJ5aW5nIHRvCi0gICAgLy8gY3ljbGUgdGhy
b3VnaCB0aGUgbWVudWxpc3QgZW50cmllcy4gVGhpcyBtYXRjaGVzIHRoZSBXZWJDb3JlIGJlaGF2
aW9yIGZvciBjb2xsYXBzZWQKLSAgICAvLyBtZW51bGlzdHMuCi0gICAgYm9vbCByZXBlYXRpbmdD
aGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyICE9IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3Rl
cjsKLSAgICBpZiAoZXZlbnQtPnRpbWUgLSBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAgPiBn
U2VhcmNoVGltZW91dE1zKQotICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSBTdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVyc1dy
aXR0ZW4pOwotICAgIGVsc2UgaWYgKHJlcGVhdGluZ0NoYXJhY3RlcikKLSAgICAgICAgbV9jdXJy
ZW50U2VhcmNoU3RyaW5nLmFwcGVuZChTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0
ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVyc1dyaXR0ZW4pKTsKLQotICAgIG1fcHJldmlvdXNL
ZXlFdmVudFRpbWVzdGFtcCA9IGV2ZW50LT50aW1lOwotICAgIG1fcHJldmlvdXNLZXlFdmVudENo
YXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXI7Ci0KLSAgICAvLyBMaWtlIHRoZSBDaHJvbWl1bSBw
b3J0LCB3ZSBjYXNlIGZvbGQgYmVmb3JlIHNlYXJjaGluZywgYmVjYXVzZSAKLSAgICAvLyBzdHJu
Y21wIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgY2hhcmFjdGVycy4KLSAgICBHT3duUHRyPGdj
aGFyPiBzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZChnX3V0ZjhfY2FzZWZvbGQobV9jdXJyZW50
U2VhcmNoU3RyaW5nLnV0ZjgoKS5kYXRhKCksIC0xKSk7Ci0gICAgc2l6ZV90IHByZWZpeExlbmd0
aCA9IHN0cmxlbihzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZC5nZXQoKSk7Ci0KLSAgICBHTGlz
dCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1f
cG9wdXAuZ2V0KCkpKTsKLSAgICBpZiAoIWNoaWxkcmVuKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIC8vIElmIGEgbWVudSBpdGVtIGhhcyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQsIHN0YXJ0
IHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50Ci0gICAgLy8gaXRlbSBkb3duIHRoZSBsaXN0LiBU
aGlzIHdpbGwgbWFrZSBtdWx0aXBsZSBrZXkgcHJlc3NlcyBvZiB0aGUgc2FtZSBjaGFyYWN0ZXIK
LSAgICAvLyBhZHZhbmNlIHRoZSBzZWxlY3Rpb24uCi0gICAgR0xpc3QqIGN1cnJlbnRDaGlsZCA9
IGNoaWxkcmVuOwotICAgIGlmIChtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0pIHsKLSAgICAg
ICAgY3VycmVudENoaWxkID0gZ19saXN0X2ZpbmQoY2hpbGRyZW4sIG1fY3VycmVudGx5U2VsZWN0
ZWRNZW51SXRlbSk7Ci0gICAgICAgIGlmICghY3VycmVudENoaWxkKSB7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSAwOwotICAgICAgICAgICAgY3VycmVudENoaWxk
ID0gY2hpbGRyZW47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBlYXRpbmcgY2hhcmFjdGVy
cyBzaG91bGQgaXRlcmF0ZS4KLSAgICAgICAgaWYgKHJlcGVhdGluZ0NoYXJhY3RlcikgewotICAg
ICAgICAgICAgaWYgKEdMaXN0KiBuZXh0Q2hpbGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQp
KQotICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IG5leHRDaGlsZDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEdMaXN0KiBmaXJzdENoaWxkID0gY3VycmVudENoaWxkOwotICAgIGRvIHsK
LSAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X25leHQoY3VycmVudENoaWxkKTsKLSAgICAg
ICAgaWYgKCFjdXJyZW50Q2hpbGQpCi0gICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGlsZHJl
bjsKLQotICAgICAgICBHT3duUHRyPGdjaGFyPiBpdGVtVGV4dChnX3V0ZjhfY2FzZWZvbGQoZ3Rr
X21lbnVfaXRlbV9nZXRfbGFiZWwoR1RLX01FTlVfSVRFTShjdXJyZW50Q2hpbGQtPmRhdGEpKSwg
LTEpKTsKLSAgICAgICAgaWYgKCFzdHJuY21wKHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdl
dCgpLCBpdGVtVGV4dC5nZXQoKSwgcHJlZml4TGVuZ3RoKSkgewotICAgICAgICAgICAgZ3RrX21l
bnVfc2hlbGxfc2VsZWN0X2l0ZW0oR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIEdUS19X
SURHRVQoY3VycmVudENoaWxkLT5kYXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0gd2hpbGUgKGN1cnJlbnRDaGlsZCAhPSBmaXJzdENoaWxkKTsKLQotICAgIGdfbGlz
dF9mcmVlKGNoaWxkcmVuKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHdGtQb3B1cE1l
bnU6OnNlbGVjdEl0ZW1DYWxsYmFjayhHdGtNZW51SXRlbSogaXRlbSwgR3RrUG9wdXBNZW51KiBw
b3B1cE1lbnUpCi17Ci0gICAgcG9wdXBNZW51LT5tX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0g
PSBHVEtfV0lER0VUKGl0ZW0pOwotfQotCi1nYm9vbGVhbiBHdGtQb3B1cE1lbnU6OmtleVByZXNz
RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50LCBHdGtQ
b3B1cE1lbnUqIHBvcHVwTWVudSkKLXsKLSAgICByZXR1cm4gcG9wdXBNZW51LT50eXBlQWhlYWRG
aW5kKGV2ZW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3YzZhZDQ0ZjdkZDE2NjQwYzQyZjU5ZjJiYWIwNDBiMzZlZjgzNzMwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtQb3B1cE1lbnUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3Rr
UG9wdXBNZW51X2gKLSNkZWZpbmUgR3RrUG9wdXBNZW51X2gKLQotI2luY2x1ZGUgIkdSZWZQdHJH
dGsuaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtQb3B1cE1lbnUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEd0a1BvcHVwTWVudSk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHdGtQb3B1cE1lbnU+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEd0a1BvcHVwTWVudSgpKTsKLSAgICB9Ci0K
LSAgICB+R3RrUG9wdXBNZW51KCk7Ci0KLSAgICBHdGtXaWRnZXQqIHBsYXRmb3JtTWVudSgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7IH0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9p
ZCBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICB2b2lkIGFwcGVuZEl0ZW0oR3RrQWN0aW9uKik7Ci0g
ICAgdm9pZCBwb3BVcChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaXRlbXND
b3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29uc3QgR2RrRXZlbnQqKTsKLSAgICB2b2lkIHBvcERv
d24oKTsKLQotcHJpdmF0ZToKLSAgICBHdGtQb3B1cE1lbnUoKTsKLQotICAgIHZvaWQgcmVzZXRU
eXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAgICBib29sIHR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkq
KTsKLQotICAgIHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiwgR3Rr
UG9wdXBNZW51Kik7Ci0gICAgc3RhdGljIHZvaWQgbWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVu
dSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xlYW4qLCBHdGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0aWMg
dm9pZCBtZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqLCBHdGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0
aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qLCBHdGtQb3B1cE1lbnUqKTsK
LSAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdk
a0V2ZW50S2V5KiwgR3RrUG9wdXBNZW51Kik7Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gbV9w
b3B1cDsKLSAgICBJbnRQb2ludCBtX21lbnVQb3NpdGlvbjsKLSAgICBTdHJpbmcgbV9jdXJyZW50
U2VhcmNoU3RyaW5nOwotICAgIHVpbnQzMl90IG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcDsK
LSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOwotICAgIEd0a1dp
ZGdldCogbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtOwotICAgIHVuc2lnbmVkIGludCBtX2tl
eVByZXNzSGFuZGxlcklEOwotfTsKLQotfQotCi0jZW5kaWYgLy8gR3RrUG9wdXBNZW51X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGM5OGI1YmEzNjI4NGQ4YzE3OWFkZjQxY2Q0NjIwZTM5ZGVkYTk4
MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkd0a1V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlIDxn
dGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UG9pbnQgY29udmVydFdpZGdl
dFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBv
aW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFjdHVhbGx5IGEgdmVyeSB0cmlja3kgb3Bl
cmF0aW9uIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZAotICAgIC8vIG9u
bHkgYmUgdGhvdWdodCBvZiBhcyBhIGd1ZXNzLiBGb3IgaW5zdGFuY2UsIHNvbWV0aW1lcyBpdCBt
YXkgbm90IGNvcnJlY3RseSB0YWtlIGludG8KLSAgICAvLyBhY2NvdW50IHdpbmRvdyBkZWNvcmF0
aW9ucy4KLQotICAgIEd0a1dpZGdldCogdG9wbGV2ZWxXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF90
b3BsZXZlbCh3aWRnZXQpOwotICAgIGlmICghdG9wbGV2ZWxXaWRnZXQgfHwgIWd0a193aWRnZXRf
aXNfdG9wbGV2ZWwodG9wbGV2ZWxXaWRnZXQpIHx8ICFHVEtfSVNfV0lORE9XKHRvcGxldmVsV2lk
Z2V0KSkKLSAgICAgICAgcmV0dXJuIHBvaW50OwotCi0gICAgR2RrV2luZG93KiBnZGtXaW5kb3cg
PSBndGtfd2lkZ2V0X2dldF93aW5kb3codG9wbGV2ZWxXaWRnZXQpOwotICAgIGlmICghZ2RrV2lu
ZG93KQotICAgICAgICByZXR1cm4gcG9pbnQ7Ci0KLSAgICBpbnQgeEluV2luZG93LCB5SW5XaW5k
b3c7Ci0gICAgZ3RrX3dpZGdldF90cmFuc2xhdGVfY29vcmRpbmF0ZXMod2lkZ2V0LCB0b3BsZXZl
bFdpZGdldCwgcG9pbnQueCgpLCBwb2ludC55KCksICZ4SW5XaW5kb3csICZ5SW5XaW5kb3cpOwot
Ci0gICAgaW50IHdpbmRvd09yaWdpblgsIHdpbmRvd09yaWdpblk7Ci0gICAgZ2RrX3dpbmRvd19n
ZXRfb3JpZ2luKGdka1dpbmRvdywgJndpbmRvd09yaWdpblgsICZ3aW5kb3dPcmlnaW5ZKTsKLQot
ICAgIHJldHVybiBJbnRQb2ludCh3aW5kb3dPcmlnaW5YICsgeEluV2luZG93LCB3aW5kb3dPcmln
aW5ZICsgeUluV2luZG93KTsKLX0KLQotYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5k
b3coR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2
ZWwod2lkZ2V0KSAmJiBHVEtfSVNfV0lORE9XKHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5f
V0lORE9XKHdpZGdldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjliZGRlNjU5OGYwMmQzMzU3YTAwYTcxMzM4OTZiYWM1NGMyZGEyYi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEd0a1V0aWxpdGllc19oIAotI2RlZmluZSBHdGtV
dGlsaXRpZXNfaCAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRQb2ludDsKLQot
SW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqLCBjb25z
dCBJbnRQb2ludCYpOwotYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lk
Z2V0Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a1V0aWxpdGll
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFj
a2luZ1N0b3JlWDExLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRC
YWNraW5nU3RvcmVYMTEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDM3NmJj
NzcxNGIzOTU0OTAwMTJiOTc3OTZhMTk5N2ZjYTNjMGNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtX
aWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0QmFj
a2luZ1N0b3JlLmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxYMTEvWGxpYi5oPgotI2luY2x1ZGUgPGNhaXJvLXhsaWIu
aD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSk7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci0g
ICAgUGl4bWFwIG1fcGl4bWFwOwotICAgIEdDIG1fZ2M7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gbV9zdXJmYWNlOwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0
b3JlUHJpdmF0ZT4gY3JlYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXpl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmVQ
cml2YXRlKHdpZGdldCwgc2l6ZSkpOwotICAgIH0KLQotICAgIH5XaWRnZXRCYWNraW5nU3RvcmVQ
cml2YXRlKCkKLSAgICB7Ci0gICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV9waXhtYXAp
OwotICAgICAgICBYRnJlZUdDKG1fZGlzcGxheSwgbV9nYyk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIC8vIFdlIGtlZXAgdHdvIGNvcGllcyBvZiB0aGUgc3VyZmFjZSBoZXJlLCB3aGljaCB3aWxs
IGRvdWJsZSB0aGUgbWVtb3J5IHVzYWdlLCBidXQgaW5jcmVhc2UKLSAgICAvLyBzY3JvbGxpbmcg
cGVyZm9ybWFuY2Ugc2luY2Ugd2UgZG8gbm90IGhhdmUgdG8ga2VlcCByZWFsbG9jYXRpbmcgYSBt
ZW1vcnkgcmVnaW9uIGR1cmluZwotICAgIC8vIHF1aWNrIHNjcm9sbGluZyByZXF1ZXN0cy4KLSAg
ICBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRT
aXplJiBzaXplKQotICAgIHsKLSAgICAgICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBndGtfd2lkZ2V0
X2dldF92aXN1YWwod2lkZ2V0KTsKLSAgICAgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfdmlz
dWFsX2dldF9zY3JlZW4odmlzdWFsKTsKLSAgICAgICAgbV9kaXNwbGF5ID0gR0RLX1NDUkVFTl9Y
RElTUExBWShzY3JlZW4pOwotICAgICAgICBtX3BpeG1hcCA9IFhDcmVhdGVQaXhtYXAobV9kaXNw
bGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX1dJTkRPV19YSUQoZ2Rr
X3NjcmVlbl9nZXRfcm9vdF93aW5kb3coc2NyZWVuKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpKTsKLSAgICAgICAg
bV9nYyA9IFhDcmVhdGVHQyhtX2Rpc3BsYXksIG1fcGl4bWFwLCAwLCAwKTsKLQotICAgICAgICBt
X3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwg
bV9waXhtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3VhbCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7Ci0gICAgfQotfTsKLQotUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IFdp
ZGdldEJhY2tpbmdTdG9yZTo6Y3JlYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlKHdp
ZGdldCwgc2l6ZSkpOwotfQotCi1XaWRnZXRCYWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9y
ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fcHJpdmF0
ZShXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlOjpjcmVhdGUod2lkZ2V0LCBzaXplKSkKLSAgICAs
IG1fc2l6ZShzaXplKQotewotfQotCi1XaWRnZXRCYWNraW5nU3RvcmU6On5XaWRnZXRCYWNraW5n
U3RvcmUoKQotewotfQotCi1jYWlyb19zdXJmYWNlX3QqIFdpZGdldEJhY2tpbmdTdG9yZTo6Y2Fp
cm9TdXJmYWNlKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCk7Ci19
Ci0KLXZvaWQgV2lkZ2V0QmFja2luZ1N0b3JlOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xs
UmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIEludFJlY3QgdGFyZ2V0
UmVjdChzY3JvbGxSZWN0KTsKLSAgICB0YXJnZXRSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KTsKLSAg
ICB0YXJnZXRSZWN0LmludGVyc2VjdChzY3JvbGxSZWN0KTsKLSAgICBpZiAodGFyZ2V0UmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9w
cml2YXRlLT5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIFhDb3B5QXJlYShtX3ByaXZhdGUtPm1fZGlz
cGxheSwgbV9wcml2YXRlLT5tX3BpeG1hcCwgbV9wcml2YXRlLT5tX3BpeG1hcCwgbV9wcml2YXRl
LT5tX2djLCAKLSAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCkgLSBzY3JvbGxPZmZzZXQud2lk
dGgoKSwgdGFyZ2V0UmVjdC55KCkgLSBzY3JvbGxPZmZzZXQuaGVpZ2h0KCksCi0gICAgICAgICAg
ICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpKTsKLSAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC53
aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tVUkxHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tVUkxHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4ZDFmZWFjYTk2YTRhMDlmNGJiZDA3MDgwOWI2OGUxODU0NDE2OGYyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLVVJM
LmgiCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkgfHwgIWlzTG9jYWxGaWxlKCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYo
Z19maWxlX25ld19mb3JfcGF0aChwYXRoKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIEdPd25QdHI8
Y2hhcj4gZmlsZW5hbWUoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKLSAgICByZXR1cm4g
ZmlsZW5hbWVUb1N0cmluZyhmaWxlbmFtZS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5n
VHJhbnNsYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1Ry
YW5zbGF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzViYmQ2MjYzZmY1
OTU4MGNhYjA3YjU2ZmNkMzk0NGZlMDA5YTBlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5n
VHJhbnNsYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIktleUJpbmRpbmdUcmFu
c2xhdG9yLmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8Z2RrL2dk
a2tleXN5bXMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiBJbnRDb25zdENoYXJIYXNo
TWFwOwotCi1zdGF0aWMgdm9pZCBiYWNrc3BhY2VDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwg
S2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9l
bWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImJhY2tzcGFjZSIpOwotICAgIHRyYW5zbGF0b3ItPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJEZWxldGVCYWNrd2FyZCIpOwotfQotCi1zdGF0aWMgdm9p
ZCBzZWxlY3RBbGxDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gc2VsZWN0LCBL
ZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2Vt
aXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2VsZWN0LWFsbCIpOwotICAgIHRyYW5zbGF0b3ItPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKHNlbGVjdCA/ICJTZWxlY3RBbGwiIDogIlVuc2VsZWN0Iik7
Ci19Ci0KLXN0YXRpYyB2b2lkIGN1dENsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0
LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3NpZ25hbF9zdG9w
X2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY3V0LWNsaXBib2FyZCIpOwotICAgIHRyYW5zbGF0
b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJDdXQiKTsKLX0KLQotc3RhdGljIHZvaWQgY29w
eUNsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRv
ciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lk
Z2V0LCAiY29weS1jbGlwYm9hcmQiKTsKLSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCgiQ29weSIpOwotfQotCi1zdGF0aWMgdm9pZCBwYXN0ZUNsaXBib2FyZENhbGxiYWNr
KEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKLXsK
LSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAicGFzdGUtY2xpcGJv
YXJkIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIlBhc3RlIik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRvZ2dsZU92ZXJ3cml0ZUNhbGxiYWNrKEd0a1dpZGdldCogd2lk
Z2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciopCi17Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0
b2dnbGluZyB0aGUgb3ZlcndyaXRlIG1vZGUsIGJ1dCB0aGUgZGVmYXVsdCBjYWxsYmFjayBleHBl
Y3RzCi0gICAgLy8gdGhlIEd0a1RleHRWaWV3IHRvIGhhdmUgYSBsYXlvdXQsIHNvIHdlIGhhbmRs
ZSB0aGlzIHNpZ25hbCBqdXN0IHRvIHN0b3AgaXQuCi0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgInRvZ2dsZS1vdmVyd3JpdGUiKTsKLX0KLQotLy8gR1RLKyB3aWxs
IHN0aWxsIHNlbmQgdGhlc2Ugc2lnbmFscyB0byB0aGUgd2ViIHZpZXcuIFNvIHdlIGNhbiBzYWZl
bHkgc3RvcCBzaWduYWwKLS8vIGVtaXNzaW9uIHdpdGhvdXQgYnJlYWtpbmcgYWNjZXNzaWJpbGl0
eS4KLXN0YXRpYyB2b2lkIHBvcHVwTWVudUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlC
aW5kaW5nVHJhbnNsYXRvciopCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgInBvcHVwLW1lbnUiKTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd0hlbHBDYWxsYmFj
ayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAgIGdfc2ln
bmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJzaG93LWhlbHAiKTsKLX0KLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGd0a0RlbGV0ZUNvbW1hbmRzW11bMl0gPSB7Ci0gICAgeyAi
RGVsZXRlQmFja3dhcmQiLCAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAg
ICAgICAgICAgICAgIH0sIC8vIENoYXJhY3RlcnMKLSAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQi
LCAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgfSwgLy8g
V29yZCBlbmRzCi0gICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVX
b3JkRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmRzCi0gICAgeyAiRGVsZXRl
VG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICJEZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAg
ICAgICAgIH0sIC8vIExpbmVzCi0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAg
ICJEZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgIH0sIC8vIExpbmUgZW5kcwot
ICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFn
cmFwaCIgICAgICAgICAgICAgICB9LCAvLyBQYXJhZ3JhcGggZW5kcwotICAgIHsgIkRlbGV0ZVRv
QmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAg
ICAgICB9LCAvLyBQYXJhZ3JhcGhzCi0gICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gV2hpdGVzcGFj
ZSAoTS1cIGluIEVtYWNzKQotfTsKLQotc3RhdGljIHZvaWQgZGVsZXRlRnJvbUN1cnNvckNhbGxi
YWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtEZWxldGVUeXBlIGRlbGV0ZVR5cGUsIGdpbnQgY291
bnQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0
b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJkZWxldGUtZnJvbS1jdXJzb3IiKTsKLSAgICBp
bnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6IDA7Ci0KLSAgICAvLyBFbnN1cmluZyB0aGF0
IGRlbGV0ZVR5cGUgPD0gR19OX0VMRU1FTlRTIGhlcmUgcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdh
cm5pbmcKLSAgICAvLyB0aGF0IHRoZSBjb25kaXRpb24gaXMgYWx3YXlzIHRydWUuCi0KLSAgICBp
ZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1dPUkRTKSB7Ci0gICAgICAgIGlmICghZGlyZWN0
aW9uKSB7Ci0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgi
TW92ZVdvcmRGb3J3YXJkIik7Ci0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRp
dG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dh
cmQiKTsKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJN
b3ZlV29yZEZvcndhcmQiKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlwZSA9
PSBHVEtfREVMRVRFX0RJU1BMQVlfTElORVMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pCi0g
ICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVn
aW5uaW5nT2ZMaW5lIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZkxpbmUiKTsKLSAgICB9IGVsc2UgaWYg
KGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9QQVJBR1JBUEhTKSB7Ci0gICAgICAgIGlmICghZGly
ZWN0aW9uKQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQo
Ik1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZlBhcmFncmFw
aCIpOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtEZWxldGVDb21t
YW5kc1tkZWxldGVUeXBlXVtkaXJlY3Rpb25dOwotICAgIGlmICghcmF3Q29tbWFuZCkKLSAgICAg
IHJldHVybjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQotICAg
ICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKLX0K
LQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGd0a01vdmVDb21tYW5kc1tdWzRdID0gewotICAg
IHsgIk1vdmVCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92
ZUZvcndhcmQiLAotICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAg
ICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0s
IC8vIEZvcndhcmQvYmFja3dhcmQgZ3JhcGhlbWUKLSAgICB7ICJNb3ZlTGVmdCIsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIsCi0gICAgICAiTW92ZUJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8gTGVmdC9yaWdodCBncmFwaGVtZQot
ICAgIHsgIk1vdmVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
TW92ZVdvcmRGb3J3YXJkIiwKLSAgICAgICJNb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uIiwgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAg
ICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIHdvcmQKLSAgICB7ICJNb3ZlVXAiLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duIiwKLSAgICAgICJNb3Zl
VXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duQW5k
TW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LCAvLyBVcC9kb3duIGxpbmUKLSAgICB7
ICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVU
b0VuZE9mTGluZSIsCi0gICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0
aW9uIiwgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
fSwgLy8gVXAvZG93biBsaW5lIGVuZHMKLSAgICB7ICJNb3ZlUGFyYWdyYXBoQmFja3dhcmQiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkIiwKLSAgICAgICJN
b3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgIk1vdmVQYXJh
Z3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICB9LCAvLyBVcC9kb3duIHBhcmFncmFw
aHMKLSAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICAgICAgICAgICAgICAgICAg
ICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoIiwKLSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFn
cmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaCBlbmRzLgotICAgIHsgIk1vdmVQ
YWdlVXAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3du
IiwKLSAgICAgICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAg
ICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICB9LCAvLyBVcC9k
b3duIHBhZ2UKLSAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiwgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09m
RG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1v
ZGlmeVNlbGVjdGlvbiIgICAgIH0sIC8vIEJlZ2luL2VuZCBvZiBidWZmZXIKLSAgICB7IDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIEhvcml6b250YWwgcGFnZSBt
b3ZlbWVudAotfTsKLQotc3RhdGljIHZvaWQgbW92ZUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtNb3ZlbWVudFN0ZXAgc3RlcCwgZ2ludCBjb3VudCwgZ2Jvb2xlYW4gZXh0ZW5k
U2VsZWN0aW9uLCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3Np
Z25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAibW92ZS1jdXJzb3IiKTsKLSAgICBp
bnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6IDA7Ci0gICAgaWYgKGV4dGVuZFNlbGVjdGlv
bikKLSAgICAgICAgZGlyZWN0aW9uICs9IDI7Ci0KLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZXApID49IEdfTl9FTEVNRU5UUyhndGtNb3ZlQ29tbWFuZHMpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb25zdCBjaGFyKiByYXdDb21tYW5kID0gZ3RrTW92ZUNvbW1hbmRzW3N0ZXBd
W2RpcmVjdGlvbl07Ci0gICAgaWYgKCFyYXdDb21tYW5kKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhjb3VudCk7IGkrKykKLSAgICAgICAgdHJhbnNsYXRv
ci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQocmF3Q29tbWFuZCk7Ci19Ci0KLUtleUJpbmRpbmdU
cmFuc2xhdG9yOjpLZXlCaW5kaW5nVHJhbnNsYXRvcigpCi0gICAgOiBtX25hdGl2ZVdpZGdldChn
dGtfdGV4dF92aWV3X25ldygpKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRn
ZXQuZ2V0KCksICJiYWNrc3BhY2UiLCBHX0NBTExCQUNLKGJhY2tzcGFjZUNhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImN1dC1jbGlw
Ym9hcmQiLCBHX0NBTExCQUNLKGN1dENsaXBib2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImNvcHktY2xpcGJvYXJkIiwgR19D
QUxMQkFDSyhjb3B5Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAicGFzdGUtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhw
YXN0ZUNsaXBib2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25h
dGl2ZVdpZGdldC5nZXQoKSwgInNlbGVjdC1hbGwiLCBHX0NBTExCQUNLKHNlbGVjdEFsbENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
Im1vdmUtY3Vyc29yIiwgR19DQUxMQkFDSyhtb3ZlQ3Vyc29yQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiZGVsZXRlLWZyb20tY3Vy
c29yIiwgR19DQUxMQkFDSyhkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAidG9nZ2xlLW92ZXJ3cml0ZSIs
IEdfQ0FMTEJBQ0sodG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAicG9wdXAtbWVudSIsIEdfQ0FMTEJBQ0so
cG9wdXBNZW51Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZl
V2lkZ2V0LmdldCgpLCAic2hvdy1oZWxwIiwgR19DQUxMQkFDSyhzaG93SGVscENhbGxiYWNrKSwg
dGhpcyk7Ci19Ci0KLXN0cnVjdCBLZXlDb21iaW5hdGlvbkVudHJ5IHsKLSAgICB1bnNpZ25lZCBn
ZGtLZXlDb2RlOwotICAgIHVuc2lnbmVkIHN0YXRlOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19
OwotCi1zdGF0aWMgY29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSBrZXlEb3duRW50cmllc1tdID0g
ewotICAgIHsgR0RLX2IsICAgICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAi
VG9nZ2xlQm9sZCIgICAgfSwKLSAgICB7IEdES19pLCAgICAgICAgIEdES19DT05UUk9MX01BU0ss
ICAgICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIgIH0sCi0gICAgeyBHREtfRXNjYXBlLCAgICAw
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICB9LAotICAgIHsg
R0RLX2dyZWF0ZXIsICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAiQ2FuY2VsIiAg
ICAgICAgfSwKLX07Ci0KLS8vIFRoZXNlIGNvbW1hbmRzIGFyZSB0ZXh0IGluc2VydGlvbiBjb21t
YW5kcywgc28gc2hvdWxkIHRha2UgcGxhY2UKLS8vIHdoaWxlIGhhbmRsaW5nIHRoZSBLZXlQcmVz
cyBldmVudC4KLXN0YXRpYyBjb25zdCBLZXlDb21iaW5hdGlvbkVudHJ5IGtleVByZXNzRW50cmll
c1tdID0gewotICAgIHsgR0RLX1RhYiwgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiSW5zZXJ0VGFiIiAgICAgfSwKLSAgICB7IEdES19UYWIsICAgICAgIEdES19TSElGVF9N
QVNLLCAgICAgICAgICAgICAgICAgIkluc2VydEJhY2t0YWIiIH0sCi19OwotCi12b2lkIEtleUJp
bmRpbmdUcmFuc2xhdG9yOjpnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KEdka0V2ZW50S2V5
KiBldmVudCwgRXZlbnRUeXBlIHR5cGUsIFZlY3RvcjxXVEY6OlN0cmluZz4mIGNvbW1hbmRMaXN0
KQotewotICAgIG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmNsZWFyKCk7Ci0KLSNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVudChHVEtfT0JKRUNU
KG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgZXZlbnQpOwotI2Vsc2UKLSAgICBndGtfYmluZGluZ3Nf
YWN0aXZhdGVfZXZlbnQoR19PQkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0KCkpLCBldmVudCk7Ci0j
ZW5kaWYKLQotICAgIGlmICghbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZChtX3BlbmRpbmdFZGl0b3JDb21tYW5kcyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hh
ckhhc2hNYXAsIGtleURvd25Db21tYW5kc01hcCwgKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5UHJlc3NDb21tYW5kc01hcCwgKCkpOwotCi0gICAg
aWYgKGtleURvd25Db21tYW5kc01hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlEb3duRW50cmllcyk7IGkrKykKLSAgICAgICAg
ICAgIGtleURvd25Db21tYW5kc01hcC5zZXQoa2V5RG93bkVudHJpZXNbaV0uc3RhdGUgPDwgMTYg
fCBrZXlEb3duRW50cmllc1tpXS5nZGtLZXlDb2RlLCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsK
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleVByZXNz
RW50cmllcyk7IGkrKykKLSAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAuc2V0KGtleVBy
ZXNzRW50cmllc1tpXS5zdGF0ZSA8PCAxNiB8IGtleVByZXNzRW50cmllc1tpXS5nZGtLZXlDb2Rl
LCBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7Ci0gICAgfQotCi0gICAgLy8gU3BlY2lhbC1jYXNl
IGVudGVyIGtleXMgZm9yIHdlIHdhbnQgdGhlbSB0byB3b3JrIHJlZ2FyZGxlc3Mgb2YgbW9kaWZp
ZXIuCi0gICAgaWYgKChldmVudC0+a2V5dmFsID09IEdES19SZXR1cm4gfHwgZXZlbnQtPmtleXZh
bCA9PSBHREtfS1BfRW50ZXIgfHwgZXZlbnQtPmtleXZhbCA9PSBHREtfSVNPX0VudGVyKSAmJiB0
eXBlID09IEtleVByZXNzKSB7Ci0gICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZCgiSW5zZXJ0TmV3
TGluZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRm9yIGtleXByZXNzIGV2
ZW50cywgd2Ugd2FudCBjaGFyQ29kZSgpLCBidXQga2V5Q29kZSgpIGRvZXMgdGhhdC4KLSAgICBp
bnQgbWFwS2V5ID0gZXZlbnQtPnN0YXRlIDw8IDE2IHwgZXZlbnQtPmtleXZhbDsKLSAgICBpZiAo
bWFwS2V5KSB7Ci0gICAgICAgIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGNvbW1hbmRNYXAg
PSB0eXBlID09IEtleURvd24gPyAgJmtleURvd25Db21tYW5kc01hcCA6ICZrZXlQcmVzc0NvbW1h
bmRzTWFwOwotICAgICAgICBpZiAoY29uc3QgY2hhciogY29tbWFuZFN0cmluZyA9IGNvbW1hbmRN
YXAtPmdldChtYXBLZXkpKSB7Ci0gICAgICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQoY29tbWFu
ZFN0cmluZyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2
NDM2ZGU2Y2I4NjNkOWEzNjFiNzc0MjhjMTQ5NzQ3ZjMzNGJjODUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEtleUJpbmRpbmdUcmFuc2xhdG9yX2gKLSNkZWZp
bmUgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAotCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
dHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEtleUJpbmRpbmdUcmFuc2xhdG9yIHsKLXB1YmxpYzoKLSAgICBLZXlC
aW5kaW5nVHJhbnNsYXRvcigpOwotCi0gICAgZW51bSBFdmVudFR5cGUgeyBLZXlEb3duLCBLZXlQ
cmVzcyB9OwotICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVudEtl
eSosIEV2ZW50VHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYpOwotICAgIHZvaWQgYWRkUGVuZGlu
Z0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkgeyBtX3BlbmRpbmdFZGl0b3JDb21t
YW5kcy5hcHBlbmQoY29tbWFuZCk7IH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPEd0a1dpZGdl
dD4gbV9uYXRpdmVXaWRnZXQ7Ci0gICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX3BlbmRpbmdFZGl0
b3JDb21tYW5kczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM3YTcxZTU2MWM1MzQ0YzA1ZWYwM2JmMTI4MzM1NmZjNTJhNDJm
ZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxhbmd1YWdlLmgiCi0KLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxsb2NhbGUuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBVc2luZyBwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdCgpIGhl
cmUgaXMgbm90IGFuIG9wdGlvbiwgYmVjYXVzZQotLy8gaXQgZG9lc24ndCBzdXBwb3J0IGNoYW5n
aW5nIHRoZSBsb2NhbGUgaW4gcnVudGltZSwgc28gaXQgcmV0dXJucwotLy8gYWx3YXlzIHRoZSBz
YW1lIHZhbHVlLgotc3RhdGljIFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkKLXsKLSAgICBjaGFy
KiBsb2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKLQotICAgIGlmICgh
bG9jYWxlRGVmYXVsdCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygiYyIpOwotCi0gICAgR093blB0
cjxnY2hhcj4gbm9ybWFsaXplZERlZmF1bHQoZ19hc2NpaV9zdHJkb3duKGxvY2FsZURlZmF1bHQs
IC0xKSk7Ci0gICAgY2hhciogcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpLCAn
XycpOwotCi0gICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9ICctJzsKLQotICAgIHB0ciA9IHN0
cmNocihub3JtYWxpemVkRGVmYXVsdC5nZXQoKSwgJy4nKTsKLQotICAgIGlmIChwdHIpCi0gICAg
ICAgICpwdHIgPSAnXDAnOwotCi0gICAgcmV0dXJuIFN0cmluZyhub3JtYWxpemVkRGVmYXVsdC5n
ZXQoKSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdl
cygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKLSAgICB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChwbGF0Zm9ybUxhbmd1YWdlKCkpOwotICAgIHJl
dHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiMDJjYWEyZjlkZjI1MmY2OTI1YmEyMDM0ZTRjYTQ1OTFiYzE1
YjZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDc4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFu
IER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVh
bnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
I2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBndGtTdG9ja0xhYmVsKGNvbnN0
IGNoYXIqIHN0b2NrSUQpCi17Ci0gICAgR3RrU3RvY2tJdGVtIGl0ZW07Ci0gICAgaWYgKCFndGtf
c3RvY2tfbG9va3VwKHN0b2NrSUQsICZpdGVtKSkKLSAgICAgICAgcmV0dXJuIHN0b2NrSUQ7Ci0g
ICAgcmV0dXJuIGl0ZW0ubGFiZWw7Ci19Ci0KLVN0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFi
ZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlN1Ym1pdCIpKTsKLX0KLQot
U3RyaW5nIGlucHV0RWxlbWVudEFsdFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIlN1Ym1pdCIpKTsKLX0KLQotU3RyaW5nIHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSZXNldCIpKTsKLX0KLQotU3RyaW5n
IGRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIkRldGFpbHMiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rp
b24oKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlRoaXMgaXMgYSBzZWFyY2hh
YmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICIpKTsKLX0KLQotU3RyaW5nIGZpbGVC
dXR0b25DaG9vc2VGaWxlTGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IkNob29zZSBGaWxlIikpOwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbkNob29zZU11bHRpcGxlRmls
ZXNMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3NlIEZpbGVz
IikpOwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIihOb25lKSIpKTsKLX0KLQotU3RyaW5nIGZpbGVC
dXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiKE5vbmUpIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJ
bk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBMaW5r
IGluIE5ldyBfV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRMaW5rVG9EaXNrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfRG93bmxv
YWQgTGlua2VkIEZpbGUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlu
a1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3B5IExp
bmsgTG9jX2F0aW9uIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdl
SW5OZXdXaW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0lt
YWdlIGluIE5ldyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3du
bG9hZEltYWdlVG9EaXNrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJTYV92
ZSBJbWFnZSBBcyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRv
Q2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBJbWFn
ZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJv
YXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3B5IEltYWdlIF9BZGRy
ZXNzIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVvSW5OZXdXaW5k
b3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX1ZpZGVvIGluIE5l
dyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuQXVkaW9Jbk5l
d1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfQXVkaW8g
aW4gTmV3IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlWaWRl
b0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29w
X3kgVmlkZW8gTGluayBMb2NhdGlvbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0NvcHlBdWRpb0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiQ29wX3kgQXVkaW8gTGluayBMb2NhdGlvbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIl9Ub2dnbGUgTWVkaWEgQ29udHJvbHMiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIlRvZ2dsZSBNZWRpYSBfTG9vcCBQbGF5YmFjayIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJTd2l0Y2ggVmlkZW8gdG8gX0Z1bGxzY3JlZW4iKSk7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIl9QbGF5IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQ
YXVzZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1BhdXNlIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJfTXV0ZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z09wZW5GcmFtZUluTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJPcGVuIF9GcmFtZSBpbiBOZXcgV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ29weSgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpm
cm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19DT1BZKSk7Ci0gICAgcmV0dXJuIHN0b2Nr
TGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKQotewotICAgIHN0
YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChH
VEtfU1RPQ0tfREVMRVRFKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tM
YWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfU0VMRUNUX0FM
TCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0luc2VydCBV
bmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnSW5wdXRNZXRob2RzKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJbnB1
dCBfTWV0aG9kcyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpCi17
Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9j
a0xhYmVsKEdUS19TVE9DS19HT19CQUNLKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0K
LVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKQotewotICAgIHN0YXRpYyBTdHJp
bmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tf
R09fRk9SV0FSRCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnU3RvcCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3Ry
aW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19TVE9QKSk7Ci0gICAgcmV0dXJu
IHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9SZWxvYWQiKSk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdDdXQoKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9
IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ1VUKSk7Ci0gICAgcmV0
dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpCi17
Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9j
a0xhYmVsKEdUS19TVE9DS19QQVNURSkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1T
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIk5vIEd1ZXNzZXMgRm91bmQiKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiX0lnbm9yZSBTcGVsbGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0xlYXJuU3BlbGxpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9M
ZWFybiBTcGVsbGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdl
YigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1NlYXJjaCB0aGUgV2ViIikp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0xvb2sgVXAgaW4g
RGljdGlvbmFyeSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3BlbiBMaW5rIikpOwotfQotCi1T
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiSWdub3JlIF9HcmFtbWFyIikpOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJTcGVsbGluZyBhbmQgX0dyYW1tYXIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChib29sIHNob3cpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoc2hvdyA/IF8oIl9TaG93IFNwZWxsaW5nIGFuZCBHcmFtbWFyIikgOiBfKCJfSGlk
ZSBTcGVsbGluZyBhbmQgR3JhbW1hciIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrU3BlbGxpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9DaGVj
ayBEb2N1bWVudCBOb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1Nw
ZWxsaW5nV2hpbGVUeXBpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNo
ZWNrIFNwZWxsaW5nIFdoaWxlIF9UeXBpbmciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNoZWNrIF9HcmFtbWFyIFdpdGggU3BlbGxpbmciKSk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiX0ZvbnQiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkKLXsK
LSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2Nr
TGFiZWwoR1RLX1NUT0NLX0JPTEQpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9j
a0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19JVEFMSUMp
KTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuZGVybGluZSgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpm
cm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19VTkRFUkxJTkUpKTsKLSAgICByZXR1cm4g
c3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9PdXRsaW5lIikpOwotfQotCi1TdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkluc3BlY3QgX0VsZW1lbnQiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJNTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiTFJNIF9MZWZ0LXRvLXJpZ2h0IG1hcmsiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxNTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiUkxNIF9SaWdodC10by1sZWZ0IG1hcmsiKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiTFJFIExlZnQtdG8tcmlnaHQgX2VtYmVkZGluZyIpKTsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTEVNYXJrKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTEUgUmlnaHQtdG8tbGVmdCBlX21iZWRkaW5nIikpOwot
fQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcmsoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSTyBMZWZ0LXRvLXJpZ2h0IF9vdmVycmlk
ZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE9NYXJr
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTE8gUmlnaHQtdG8tbGVmdCBv
X3ZlcnJpZGUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0
UERGTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUERGIF9Qb3AgZGly
ZWN0aW9uYWwgZm9ybWF0dGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Vu
aWNvZGVJbnNlcnRaV1NNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJa
V1MgX1plcm8gd2lkdGggc3BhY2UiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0WldKTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
WldKIFplcm8gd2lkdGggX2pvaW5lciIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGVJbnNlcnRaV05KTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiWldOSiBaZXJvIHdpZHRoIF9ub24tam9pbmVyIikpOwotfQotCi1TdHJpbmcgc2VhcmNoTWVu
dU5vUmVjZW50U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJObyByZWNlbnQgc2VhcmNoZXMiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hNZW51UmVjZW50U2Vh
cmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSZWNlbnQgc2Vh
cmNoZXMiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9DbGVhciByZWNlbnQgc2VhcmNo
ZXMiKSk7Ci19Ci0KLVN0cmluZyBBWERlZmluaXRpb25UZXh0KCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJkZWZpbml0aW9uIikpOwotfQotCi1TdHJpbmcgQVhEZXNjcmlwdGlv
bkxpc3RUZXJtVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidGVybSIp
KTsKLX0KLQotU3RyaW5nIEFYRGVzY3JpcHRpb25MaXN0RGV0YWlsVGV4dCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZGVzY3JpcHRpb24iKSk7Ci19Ci0KLVN0cmluZyBBWEZv
b3RlclJvbGVEZXNjcmlwdGlvblRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oImZvb3RlciIpKTsKLX0KLQotU3RyaW5nIEFYQnV0dG9uQWN0aW9uVmVyYigpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicHJlc3MiKSk7Ci19Ci0KLVN0cmluZyBBWFJhZGlv
QnV0dG9uQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2Vs
ZWN0IikpOwotfQotCi1TdHJpbmcgQVhUZXh0RmllbGRBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJhY3RpdmF0ZSIpKTsKLX0KLQotU3RyaW5nIEFYQ2hlY2tl
ZENoZWNrQm94QWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
dW5jaGVjayIpKTsKLX0KLQotU3RyaW5nIEFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJjaGVjayIpKTsKLX0KLQotU3RyaW5n
IEFYTGlua0FjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImp1
bXAiKSk7Ci19Ci0KLVN0cmluZyBBWE1lbnVMaXN0UG9wdXBBY3Rpb25WZXJiKCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWE1lbnVMaXN0QWN0aW9uVmVyYigpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotICAgIAotU3RyaW5nIG1pc3NpbmdQbHVnaW5UZXh0KCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJNaXNzaW5nIFBsdWctaW4iKSk7Ci19
Ci0KLVN0cmluZyBjcmFzaGVkUGx1Z2luVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJQbHVnLWluIEZhaWx1cmUiKSk7Ci19Ci0K
LVN0cmluZyBibG9ja2VkUGx1Z2luQnlDb250ZW50U2VjdXJpdHlQb2xpY3lUZXh0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlu
c2VjdXJlUGx1Z2luVmVyc2lvblRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgaW5hY3RpdmVQbHVnaW5UZXh0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIG11
bHRpcGxlRmlsZVVwbG9hZFRleHQodW5zaWduZWQgbnVtYmVyT2ZGaWxlcykKLXsKLSAgICAvLyBG
SVhNRTogSWYgdGhpcyBmaWxlIGdldHMgbG9jYWxpemVkLCB0aGlzIHNob3VsZCByZWFsbHkgYmUg
bG9jYWxpemVkIGFzIG9uZSBzdHJpbmcgd2l0aCBhIHdpbGRjYXJkIGZvciB0aGUgbnVtYmVyLgot
ICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXJPZkZpbGVzKSArIFN0cmluZzo6ZnJvbVVU
RjgoXygiIGZpbGVzIikpOwotfQotCi1TdHJpbmcgdW5rbm93bkZpbGVTaXplVGV4dCgpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVW5rbm93biIpKTsKLX0KLQotU3RyaW5nIGlt
YWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKENfKCJUaXRsZSBzdHJp
bmcgZm9yIGltYWdlcyIsICIlcyAgKCVkeCVkIHBpeGVscykiKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpKTsKLQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Ci19
Ci0KLQotI2lmIEVOQUJMRShWSURFTykKLQotU3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdTdGF0
ZVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxvYWRpbmcuLi4iKSk7
Ci19Ci0KLVN0cmluZyBtZWRpYUVsZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMaXZlIEJyb2FkY2FzdCIpKTsKLX0KLQotU3Ry
aW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIGlmIChuYW1lID09ICJBdWRpb0VsZW1lbnQiKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJhdWRpbyBlbGVtZW50IGNvbnRyb2xsZXIiKSk7Ci0gICAgaWYgKG5h
bWUgPT0gIlZpZGVvRWxlbWVudCIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
InZpZGVvIGVsZW1lbnQgY29udHJvbGxlciIpKTsKLSAgICBpZiAobmFtZSA9PSAiTXV0ZUJ1dHRv
biIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm11dGUiKSk7Ci0gICAgaWYg
KG5hbWUgPT0gIlVuTXV0ZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInVubXV0ZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiUGxheUJ1dHRvbiIpCi0gICAgICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBsYXkiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlBhdXNl
QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF1c2UiKSk7Ci0g
ICAgaWYgKG5hbWUgPT0gIlNsaWRlciIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIm1vdmllIHRpbWUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlclRodW1iIikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidGltZWxpbmUgc2xpZGVyIHRodW1iIikpOwot
ICAgIGlmIChuYW1lID09ICJSZXdpbmRCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJiYWNrIDMwIHNlY29uZHMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlJldHVyblRv
UmVhbHRpbWVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyZXR1
cm4gdG8gcmVhbHRpbWUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkN1cnJlbnRUaW1lRGlzcGxheSIp
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImVsYXBzZWQgdGltZSIpKTsKLSAg
ICBpZiAobmFtZSA9PSAiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJyZW1haW5pbmcgdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU3Rh
dHVzRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0YXR1cyIp
KTsKLSAgICBpZiAobmFtZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZW50ZXIgZnVsbHNjcmVlbiIpKTsKLSAgICBpZiAobmFt
ZSA9PSAiRXhpdEZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJleGl0IGZ1bGxzY3JlZW4iKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtGb3J3YXJk
QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZmFzdCBmb3J3YXJk
IikpOwotICAgIGlmIChuYW1lID09ICJTZWVrQmFja0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oImZhc3QgcmV2ZXJzZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2hv
d0Nsb3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Xygic2hvdyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkhpZGVDbG9zZWRD
YXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImhpZGUg
Y2xvc2VkIGNhcHRpb25zIikpOwotICAgIGlmIChuYW1lID09ICJDb250cm9sc1BhbmVsIikKLSAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibWVkaWEgY29udHJvbHMiKSk7Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIGlmIChuYW1lID09ICJBdWRpb0VsZW1lbnQiKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJhdWRpbyBlbGVtZW50IHBsYXliYWNrIGNvbnRyb2xzIGFuZCBzdGF0
dXMgZGlzcGxheSIpKTsKLSAgICBpZiAobmFtZSA9PSAiVmlkZW9FbGVtZW50IikKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidmlkZW8gZWxlbWVudCBwbGF5YmFjayBjb250cm9s
cyBhbmQgc3RhdHVzIGRpc3BsYXkiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIk11dGVCdXR0b24iKQot
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtdXRlIGF1ZGlvIHRyYWNrcyIpKTsK
LSAgICBpZiAobmFtZSA9PSAiVW5NdXRlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygidW5tdXRlIGF1ZGlvIHRyYWNrcyIpKTsKLSAgICBpZiAobmFtZSA9PSAiUGxh
eUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImJlZ2luIHBsYXli
YWNrIikpOwotICAgIGlmIChuYW1lID09ICJQYXVzZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInBhdXNlIHBsYXliYWNrIikpOwotICAgIGlmIChuYW1lID09ICJT
bGlkZXIiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIHNj
cnViYmVyIikpOwotICAgIGlmIChuYW1lID09ICJTbGlkZXJUaHVtYiIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIm1vdmllIHRpbWUgc2NydWJiZXIgdGh1bWIiKSk7Ci0gICAg
aWYgKG5hbWUgPT0gIlJld2luZEJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInNlZWsgbW92aWUgYmFjayAzMCBzZWNvbmRzIikpOwotICAgIGlmIChuYW1lID09ICJS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygicmV0dXJuIHN0cmVhbWluZyBtb3ZpZSB0byByZWFsIHRpbWUiKSk7Ci0gICAgaWYgKG5hbWUg
PT0gIkN1cnJlbnRUaW1lRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oImN1cnJlbnQgbW92aWUgdGltZSBpbiBzZWNvbmRzIikpOwotICAgIGlmIChuYW1lID09ICJU
aW1lUmVtYWluaW5nRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
Im51bWJlciBvZiBzZWNvbmRzIG9mIG1vdmllIHJlbWFpbmluZyIpKTsKLSAgICBpZiAobmFtZSA9
PSAiU3RhdHVzRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImN1
cnJlbnQgbW92aWUgc3RhdHVzIikpOwotICAgIGlmIChuYW1lID09ICJTZWVrQmFja0J1dHRvbiIp
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInNlZWsgcXVpY2tseSBiYWNrIikp
OwotICAgIGlmIChuYW1lID09ICJTZWVrRm9yd2FyZEJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInNlZWsgcXVpY2tseSBmb3J3YXJkIikpOwotICAgIGlmIChuYW1l
ID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJQbGF5IG1vdmllIGluIGZ1bGxzY3JlZW4gbW9kZSIpKTsKLSAgICBpZiAobmFtZSA9
PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiRXhpdCBmdWxsc2NyZWVuIG1vZGUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNob3dDbG9z
ZWRDYXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0
YXJ0IGRpc3BsYXlpbmcgY2xvc2VkIGNhcHRpb25zIikpOwotICAgIGlmIChuYW1lID09ICJIaWRl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJzdG9wIGRpc3BsYXlpbmcgY2xvc2VkIGNhcHRpb25zIikpOwotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkTWVk
aWFUaW1lRGVzY3JpcHRpb24oZmxvYXQgdGltZSkKLXsKLSAgICBpZiAoIXN0ZDo6aXNmaW5pdGUo
dGltZSkpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImluZGVmaW5pdGUgdGlt
ZSIpKTsKLQotICAgIGludCBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8aW50PihhYnModGltZSkpOwot
ICAgIGludCBkYXlzID0gc2Vjb25kcyAvICg2MCAqIDYwICogMjQpOwotICAgIGludCBob3VycyA9
IHNlY29uZHMgLyAoNjAgKiA2MCk7Ci0gICAgaW50IG1pbnV0ZXMgPSAoc2Vjb25kcyAvIDYwKSAl
IDYwOwotICAgIHNlY29uZHMgJT0gNjA7Ci0KLSAgICBpZiAoZGF5cykgewotICAgICAgICBHT3du
UHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBkYXlzICVkIGhvdXJzICVkIG1p
bnV0ZXMgJWQgc2Vjb25kcyIsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSk7Ci0gICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Ci0gICAgfQotCi0gICAg
aWYgKGhvdXJzKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmlu
dGYoIiVkIGhvdXJzICVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIsIGhvdXJzLCBtaW51dGVzLCBzZWNv
bmRzKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgaWYgKG1pbnV0ZXMpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gc3RyaW5n
KGdfc3RyZHVwX3ByaW50ZigiJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgbWludXRlcywgc2Vjb25k
cykpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOwotICAg
IH0KLQotICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIHNlY29u
ZHMiLCBzZWNvbmRzKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgp
KTsKLX0KLSNlbmRpZiAgLy8gRU5BQkxFKFZJREVPKQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3Nh
Z2VWYWx1ZU1pc3NpbmdUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2
YWx1ZSBtaXNzaW5nIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3Np
bmdGb3JDaGVja2JveFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRh
dGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19
Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRl
eHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1
ZU1pc3NpbmdGb3JSYWRpb1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFs
aWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQo
KTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0eXBl
IG1pc21hdGNoIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hG
b3JFbWFpbFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlk
YXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1l
c3NhZ2VUeXBlTWlzbWF0Y2hGb3JNdWx0aXBsZUVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7
Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvclVSTFRleHQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlw
ZU1pc21hdGNoVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VQYXR0ZXJuTWlz
bWF0Y2hUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXR0ZXJuIG1p
c21hdGNoIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChpbnQs
IGludCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0b28gbG9uZyIpKTsKLX0K
LQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KGNvbnN0IFN0cmlu
ZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmFuZ2UgdW5kZXJmbG93Iikp
OwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChjb25zdCBT
dHJpbmcmKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJhbmdlIG92ZXJmbG93
IikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VTdGVwTWlzbWF0Y2hUZXh0KGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Xygic3RlcCBtaXNtYXRjaCIpKTsKLX0KLQotU3RyaW5nIHVuYWNjZXB0YWJsZVRMU0NlcnRpZmlj
YXRlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJVbmFjY2VwdGFibGUgVExT
IGNlcnRpZmljYXRlIikpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkU3RyaW5nKGNvbnN0IGNoYXIq
IGtleSkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChrZXksIHN0cmxlbihrZXkpKTsK
LX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlQmFkSW5wdXRGb3JOdW1iZXJUZXh0KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVN
aXNtYXRjaFRleHQoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLVN0cmluZyB0ZXh0
VHJhY2tDbG9zZWRDYXB0aW9uc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KENfKCJDbG9zZWQgQ2FwdGlvbnMiLCAiTWVudSBzZWN0aW9uIGhlYWRpbmcgZm9yIGNsb3NlZCBj
YXB0aW9ucyIpKTsKLX0KLQotU3RyaW5nIHRleHRUcmFja1N1YnRpdGxlc1RleHQoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJTdWJ0aXRsZXMiLCAiTWVudSBzZWN0aW9uIGhl
YWRpbmcgZm9yIHN1YnRpdGxlcyIpKTsKLX0KLQotU3RyaW5nIHRleHRUcmFja09mZlRleHQoKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJPZmYiLCAiTWVudSBpdGVtIGxhYmVs
IGZvciB0aGUgdHJhY2sgdGhhdCByZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlvbnMi
KSk7Ci19Ci0KLVN0cmluZyB0ZXh0VHJhY2tOb0xhYmVsVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoQ18oIk5vIGxhYmVsIiwgIk1lbnUgaXRlbSBsYWJlbCBmb3IgYSBjbG9z
ZWQgY2FwdGlvbnMgdHJhY2sgdGhhdCBoYXMgbm8gb3RoZXIgbmFtZSIpKTsKLX0KLSNlbmRpZgot
Ci1TdHJpbmcgc25hcHNob3R0ZWRQbHVnSW5MYWJlbFRpdGxlKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChDXygiU25hcHNob3R0ZWQgUGx1Zy1JbiIsICJUaXRsZSBvZiB0aGUgbGFi
ZWwgdG8gc2hvdyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Ci19Ci0KLVN0cmluZyBzbmFw
c2hvdHRlZFBsdWdJbkxhYmVsU3VidGl0bGUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KENfKCJDbGljayB0byByZXN0YXJ0IiwgIlN1YnRpdGxlIG9mIHRoZSBsYWJlbCB0byBzaG93
IG9uIGEgc25hcHNob3R0ZWQgcGx1Zy1pbiIpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
ODk4YWY3ZDhiZWJjYmUwNWM5YWJlN2ZmNGE0MWUxN2M5MDhjZjk3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Mb2dnaW5nR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFsaXplTG9nZ2luZy5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLQotI2lmICFMT0dfRElTQUJMRUQKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNs
dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBJbnNwaXJlZCBieSB0aGUgY29kZSB1c2VkIGJ5IHRoZSBRdCBw
b3J0Ci0KLXZvaWQgaW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkKLXsKLSAg
ICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzID0gZmFsc2U7Ci0gICAg
aWYgKGRpZEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGRpZEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMgPSB0cnVlOwotCi0gICAgY2hhciogbG9nRW52
ID0gZ2V0ZW52KCJXRUJLSVRfREVCVUciKTsKLSAgICBpZiAoIWxvZ0VudikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gd2Ugc2V0IHVwIHRoZSBsb2dzIGFueXdheSBiZWNhdXNlIHNvbWUgb2Yg
b3VyIGxvZ2dpbmcsIHN1Y2ggYXMKLSAgICAvLyBzb3VwJ3MgaXMgYXZhaWxhYmxlIGluIHJlbGVh
c2UgYnVpbGRzCi0jaWYgZGVmaW5lZChOREVCVUcpCi0gICAgZ193YXJuaW5nKCJXRUJLSVRfREVC
VUcgaXMgbm90IGVtcHR5LCBidXQgdGhpcyBpcyBhIHJlbGVhc2UgYnVpbGQuIE5vdGljZSB0aGF0
IG1hbnkgbG9nIG1lc3NhZ2VzIHdpbGwgb25seSBhcHBlYXIgaW4gYSBkZWJ1ZyBidWlsZC4iKTsK
LSNlbmRpZgotCi0gICAgY2hhcioqIGxvZ3YgPSBnX3N0cnNwbGl0KGxvZ0VudiwgIiAiLCAtMSk7
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgbG9ndltpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChXVEZM
b2dDaGFubmVsKiBjaGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKGxvZ3ZbaV0pKQotICAgICAg
ICAgICAgY2hhbm5lbC0+c3RhdGUgPSBXVEZMb2dDaGFubmVsT247Ci0gICAgfQotCi0gICAgZ19z
dHJmcmVldihsb2d2KTsKLQotICAgIC8vIHRvIGRpc2FibGUgbG9nZ2luZyBub3RJbXBsZW1lbnRl
ZCBzZXQgdGhlIERJU0FCTEVfTklfV0FSTklORwotICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxl
IHRvIDEKLSAgICBMb2dOb3RZZXRJbXBsZW1lbnRlZC5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlH
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjdmMTRjZDhkZjdhNTYyYjAyZWMz
MmI4ZGZhMmY0Y2Y5NmZiMmIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEV4dGVuc2lvbk1hcCB7Ci0gICAgY29u
c3QgY2hhciogZXh0ZW5zaW9uOwotICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlOwotfTsKLQotc3Rh
dGljIGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNpb25NYXAgW10gPSB7Ci0gICAgeyAiYm1wIiwg
ImltYWdlL2JtcCIgfSwKLSAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCi0gICAgeyAiZ2lmIiwg
ImltYWdlL2dpZiIgfSwKLSAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9LAotICAgIHsgImh0bWwi
LCAidGV4dC9odG1sIiB9LAotICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCi0gICAgeyAi
anBlZyIsICJpbWFnZS9qcGVnIiB9LAotICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAotICAg
IHsgImpzIiwgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKLSAgICB7ICJwZGYiLCAiYXBw
bGljYXRpb24vcGRmIiB9LAotICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0sCi0gICAgeyAicnNz
IiwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiIH0sCi0gICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwi
IH0sCi0gICAgeyAidGV4dCIsICJ0ZXh0L3BsYWluIiB9LAotICAgIHsgInR4dCIsICJ0ZXh0L3Bs
YWluIiB9LAotICAgIHsgInhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCi0gICAgeyAieG1sIiwg
InRleHQveG1sIiB9LAotICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKLSAgICB7ICJ4aHRtbCIs
ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCi0gICAgeyAid21sIiwgInRleHQvdm5kLndhcC53
bWwiIH0sCi0gICAgeyAid21sYyIsICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiIH0sCi0gICAg
eyAwLCAwIH0KLX07Ci0KLVN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4
dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgU3RyaW5nIHMgPSBleHQubG93ZXIoKTsKLSAgICBjb25zdCBFeHRlbnNpb25NYXAg
KmUgPSBleHRlbnNpb25NYXA7Ci0gICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgewotICAgICAgICBp
ZiAocyA9PSBlLT5leHRlbnNpb24pCi0gICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7Ci0g
ICAgICAgICsrZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgTUlN
RVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYp
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmMWMxY2M4M2EwMjM0OThjMWFiMmI4NGRjMTA5ZTlhOWM1Zjg1MGM0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgemVja2VAc2VsZmlzaC5vcmcKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgotICogIENvcHlyaWdo
dCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJ
Z2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk1haW5GcmFtZVNjcm9sbGJhckd0ay5oIgotCi0jaW5jbHVkZSAi
R3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLVBhc3NSZWZQdHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3RrPiBNYWluRnJhbWVTY3JvbGxi
YXJHdGs6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWFpbkZy
YW1lU2Nyb2xsYmFyR3RrKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbikpOwotfQotCi0vLyBB
IE1haW5GcmFtZVNjcm9sbGJhciBpcyBqdXN0IGEgbm9uLXBhaW50aW5nIHNjcm9sbGJhci4gT3Ro
ZXJ3aXNlIGl0IGlzIGZ1bGx5Ci0vLyBmdW5jdGlvbmFsLiBBIG5vbi1wYWludGluZyBzY3JvbGxi
YXIgYWxsb3dzIGEgbWFpbi1mcmFtZSBTY3JvbGxWaWV3IHRvIHVzZQotLy8gYSBjb250YWluaW5n
IEd0a1Njcm9sbGVkV2luZG93IGFzIGl0cyB1c2VyIGludGVyZmFjZS4gVGhlIENocm9tZUNsaWVu
dCBpbiB0aGUKLS8vIFdlYktpdCBsYXllciBqdXN0IGxpc3RlbnMgZm9yIHNjcm9sbGluZyBhbmQg
c2l6aW5nIGNoYW5nZXMgYW5kIHVwZGF0ZXMgaXRzCi0vLyBjb250YWluZXIgKHRoZSBHdGtTY3Jv
bGxlZFdpbmRvdykgYWNjb3JkaW5nbHkuIFRoZSBTY3JvbGxWaWV3IGlzIHJlc3BvbnNpYmxlCi0v
LyBmb3IgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIGEgTWFpbkZyYW1lU2Nyb2xs
YmFyIG9yIG5hdGl2ZSBzY3JvbGxiYXIuCi1NYWluRnJhbWVTY3JvbGxiYXJHdGs6Ok1haW5GcmFt
ZVNjcm9sbGJhckd0ayhTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQotICAgIDogU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBv
cmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcikKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHRha2UgdXAgYW55IHNwYWNlLgotICAgIHJlc2l6ZSgwLCAwKTsKLX0KLQotdm9pZCBNYWluRnJh
bWVTY3JvbGxiYXJHdGs6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBNYWluIGZyYW1lIHNjcm9sbGJhcnMgYXJlIG5vdCBwYWlu
dGVkIGJ5IFdlYkNvcmUuCi0gICAgcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3YjhjYjYzOGZkYWNjOWIwYzI1YzYwNDgxODVkNzUwYTcwZjU0MGY3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0KLSNpZm5kZWYgTWFpbkZyYW1lU2Nyb2xsYmFy
R3RrX2gKLSNkZWZpbmUgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrX2gKLQotI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrIDogcHVibGljIFNjcm9sbGJhciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3RrPiBjcmVh
dGUoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLQotcHJpdmF0ZToK
LSAgICBNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmll
bnRhdGlvbik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBTY3JvbGxiYXJHdGtfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA2ZDZlMjVjOTkwMDVhMjQyMDBj
YTlkNGYwNTAyNTVmZTIyZjRjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2
ZW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNp
bmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgot
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4g
IFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKLS8vIG1vcmUgbGlrZSB3aGF0IEZpcmVm
b3ggZG9lcywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCi0vLyBhdCBidWls
ZCB0aW1lLgotU3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdk
a0tleUNvZGUodW5zaWduZWQga2V5Q29kZSkKLXsKLSAgICBzd2l0Y2ggKGtleUNvZGUpIHsKLSAg
ICAgICAgY2FzZSBHREtfTWVudToKLSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgIGNh
c2UgR0RLX0FsdF9SOgotICAgICAgICAgICAgcmV0dXJuICJBbHQiOwotICAgICAgICBjYXNlIEdE
S19DbGVhcjoKLSAgICAgICAgICAgIHJldHVybiAiQ2xlYXIiOwotICAgICAgICBjYXNlIEdES19E
b3duOgotICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKLSAgICAgICAgICAgIC8vICJFbmQiCi0g
ICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiAiRW5kIjsKLSAgICAgICAg
ICAgIC8vICJFbnRlciIKLSAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNl
IEdES19LUF9FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0
dXJuICJFbnRlciI7Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1
cm4gIkV4ZWN1dGUiOwotICAgICAgICBjYXNlIEdES19GMToKLSAgICAgICAgICAgIHJldHVybiAi
RjEiOwotICAgICAgICBjYXNlIEdES19GMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwotICAg
ICAgICBjYXNlIEdES19GMzoKLSAgICAgICAgICAgIHJldHVybiAiRjMiOwotICAgICAgICBjYXNl
IEdES19GNDoKLSAgICAgICAgICAgIHJldHVybiAiRjQiOwotICAgICAgICBjYXNlIEdES19GNToK
LSAgICAgICAgICAgIHJldHVybiAiRjUiOwotICAgICAgICBjYXNlIEdES19GNjoKLSAgICAgICAg
ICAgIHJldHVybiAiRjYiOwotICAgICAgICBjYXNlIEdES19GNzoKLSAgICAgICAgICAgIHJldHVy
biAiRjciOwotICAgICAgICBjYXNlIEdES19GODoKLSAgICAgICAgICAgIHJldHVybiAiRjgiOwot
ICAgICAgICBjYXNlIEdES19GOToKLSAgICAgICAgICAgIHJldHVybiAiRjkiOwotICAgICAgICBj
YXNlIEdES19GMTA6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMCI7Ci0gICAgICAgIGNhc2UgR0RL
X0YxMToKLSAgICAgICAgICAgIHJldHVybiAiRjExIjsKLSAgICAgICAgY2FzZSBHREtfRjEyOgot
ICAgICAgICAgICAgcmV0dXJuICJGMTIiOwotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAg
ICAgICByZXR1cm4gIkYxMyI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgICAgIHJl
dHVybiAiRjE0IjsKLSAgICAgICAgY2FzZSBHREtfRjE1OgotICAgICAgICAgICAgcmV0dXJuICJG
MTUiOwotICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNiI7Ci0g
ICAgICAgIGNhc2UgR0RLX0YxNzoKLSAgICAgICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAgICAg
Y2FzZSBHREtfRjE4OgotICAgICAgICAgICAgcmV0dXJuICJGMTgiOwotICAgICAgICBjYXNlIEdE
S19GMTk6Ci0gICAgICAgICAgICByZXR1cm4gIkYxOSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoK
LSAgICAgICAgICAgIHJldHVybiAiRjIwIjsKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAg
ICAgICAgcmV0dXJuICJGMjEiOwotICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkYyMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoKLSAgICAgICAgICAgIHJldHVybiAi
RjIzIjsKLSAgICAgICAgY2FzZSBHREtfRjI0OgotICAgICAgICAgICAgcmV0dXJuICJGMjQiOwot
ICAgICAgICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKLSAgICAg
ICAgY2FzZSBHREtfSG9tZToKLSAgICAgICAgICAgIHJldHVybiAiSG9tZSI7Ci0gICAgICAgIGNh
c2UgR0RLX0luc2VydDoKLSAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICAgICAgY2Fz
ZSBHREtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiAiTGVmdCI7Ci0gICAgICAgIGNhc2UgR0RL
X1BhZ2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiAiUGFnZURvd24iOwotICAgICAgICBjYXNl
IEdES19QYWdlX1VwOgotICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAiOwotICAgICAgICBjYXNl
IEdES19QYXVzZToKLSAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOwotICAgICAgICBjYXNlIEdE
S18zMjcwX1ByaW50U2NyZWVuOgotICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAgICAgICAg
IHJldHVybiAiUHJpbnRTY3JlZW4iOwotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAg
ICAgIHJldHVybiAiUmlnaHQiOwotICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAg
ICByZXR1cm4gIlNlbGVjdCI7Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0
dXJuICJVcCI7Ci0gICAgICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMg
VSswMDdGLgotICAgICAgICBjYXNlIEdES19EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gIlUr
MDA3RiI7Ci0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJldHVybiAi
VSswMDA4IjsKLSAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgotICAgICAgICBjYXNlIEdE
S18zMjcwX0JhY2tUYWI6Ci0gICAgICAgIGNhc2UgR0RLX1RhYjoKLSAgICAgICAgICAgIHJldHVy
biAiVSswMDA5IjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBw
ZXIoa2V5Q29kZSkpKTsKLSAgICB9Ci19Ci0KLWludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Ondp
bmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBrZXljb2RlKQotewotICAgIHN3aXRj
aCAoa2V5Y29kZSkgewotICAgICAgICBjYXNlIEdES19LUF8wOgotICAgICAgICAgICAgcmV0dXJu
IFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNlIEdE
S19LUF8xOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtl
eXBhZCAxIGtleQotICAgICAgICBjYXNlIEdES19LUF8yOgotICAgICAgICAgICAgcmV0dXJuICBW
S19OVU1QQUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0tQXzM6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtl
eXBhZCAzIGtleQotICAgICAgICBjYXNlIEdES19LUF80OgotICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBHREtf
S1BfNToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlw
YWQgNSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNjoKLSAgICAgICAgICAgIHJldHVybiBWS19O
VU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQ
Xzc6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBh
ZCA3IGtleQotICAgICAgICBjYXNlIEdES19LUF84OgotICAgICAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1Bf
OToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFk
IDkga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgotICAgICAgICAgICAgcmV0dXJu
IFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQotICAgICAgICBjYXNlIEdES19LUF9B
ZGQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKLSAgICAgICAg
Y2FzZSBHREtfS1BfU3VidHJhY3Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8v
ICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQotICAgICAgICBjYXNl
IEdES19LUF9EaXZpZGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERp
dmlkZSBrZXkKLQotICAgICAgICBjYXNlIEdES19LUF9QYWdlX1VwOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1Bh
Z2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS1BfRW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsg
Ly8gKDIzKSBFTkQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0hvbWU6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQotICAgICAgICBjYXNlIEdES19LUF9MZWZ0
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKLSAg
ICAgICAgY2FzZSBHREtfS1BfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikg
VVAgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1JpZ2h0OgotICAgICAgICAgICAgcmV0
dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19L
UF9Eb3duOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBr
ZXkKLQotICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktf
QkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1Rh
YjoKLSAgICAgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgotICAgICAgICBjYXNlIEdES19UYWI6
Ci0gICAgICAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfQ2xlYXI6Ci0gICAgICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50
ZXI6Ci0gICAgICAgIGNhc2UgR0RLX1JldHVybjoKLSAgICAgICAgICAgIHJldHVybiBWS19SRVRV
Uk47IC8vKDBEKSBSZXR1cm4ga2V5Ci0KLSAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJ
RlQga2V5Ci0gICAgICAgICAgICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKLQotICAgICAg
ICBjYXNlIEdES19NZW51OgotICAgICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFw
cGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCi0KLSAgICAgICAgICAgIC8vIFZLX01F
TlUgKDEyKSBBTFQga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NhcHNf
TG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgotICAgICAgICBjYXNlIEdES19LYW5hX1No
aWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVk
aXRvciAoSU1FKSBLYW5hIG1vZGUKLSAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCi0g
ICAgICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCi0gICAgICAgICAgICAv
LyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0hhbmd1bF9I
YW5qYToKLSAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9k
ZQotICAgICAgICBjYXNlIEdES19LYW5qaToKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsg
Ly8gKDE5KSBJTUUgS2FuamkgbW9kZQotICAgICAgICBjYXNlIEdES19Fc2NhcGU6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKLSAgICAgICAgICAgIC8vIFZL
X0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAotICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAo
MUQpIElNRSBub25jb252ZXJ0Ci0gICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNj
ZXB0Ci0gICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJl
cXVlc3QKLSAgICAgICAgY2FzZSBHREtfc3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1BB
Q0U7IC8vICgyMCkgU1BBQ0VCQVIKLSAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQotICAgICAgICBjYXNlIEdE
S19QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERP
V04ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiBWS19FTkQ7
IC8vICgyMykgRU5EIGtleQotICAgICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgICAg
IGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9X
IGtleQotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19SSUdI
VDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAg
ICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5Ci0gICAgICAgIGNh
c2UgR0RLX1NlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VM
RUNUIGtleQotICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVybiBWS19T
TkFQU0hPVDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1
dGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0luc2VydDoKLSAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX0RlbGV0ZToKLSAgICAgICAgY2FzZSBHREtfS1BfRGVsZXRlOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5Ci0gICAgICAgIGNhc2UgR0RLX0hlbHA6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQotICAgICAgICBjYXNl
IEdES18wOgotICAgICAgICBjYXNlIEdES19wYXJlbnJpZ2h0OgotICAgICAgICAgICAgcmV0dXJu
IFZLXzA7ICAgIC8vICAoMzApIDApIGtleQotICAgICAgICBjYXNlIEdES18xOgotICAgICAgICBj
YXNlIEdES19leGNsYW06Ci0gICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtl
eQotICAgICAgICBjYXNlIEdES18yOgotICAgICAgICBjYXNlIEdES19hdDoKLSAgICAgICAgICAg
IHJldHVybiBWS18yOyAvLyAgKDMyKSAyICYga2V5Ci0gICAgICAgIGNhc2UgR0RLXzM6Ci0gICAg
ICAgIGNhc2UgR0RLX251bWJlcnNpZ246Ci0gICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNl
ICczJzogY2FzZSAnIyc7Ci0gICAgICAgIGNhc2UgR0RLXzQ6Ci0gICAgICAgIGNhc2UgR0RLX2Rv
bGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOwotICAgICAgICAgICAgcmV0dXJuIFZLXzQ7Ci0gICAg
ICAgIGNhc2UgR0RLXzU6Ci0gICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkgICclJwotICAgICAgICBjYXNlIEdES182OgotICAg
ICAgICBjYXNlIEdES19hc2NpaWNpcmN1bToKLSAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAg
KDM2KSA2IGtleSAgJ14nCi0gICAgICAgIGNhc2UgR0RLXzc6Ci0gICAgICAgIGNhc2UgR0RLX2Ft
cGVyc2FuZDoKLSAgICAgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAn
JicKLSAgICAgICAgY2FzZSBHREtfODoKLSAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfODsgLy8gICgzOCkgOCBrZXkgICcqJwotICAgICAgICBjYXNlIEdE
S185OgotICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktf
OTsgLy8gICgzOSkgOSBrZXkgJygnCi0gICAgICAgIGNhc2UgR0RLX2E6Ci0gICAgICAgIGNhc2Ug
R0RLX0E6Ci0gICAgICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6
IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKLSAgICAgICAgY2FzZSBHREtfYjoKLSAgICAgICAgY2Fz
ZSBHREtfQjoKLSAgICAgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdi
JzogY2FzZSAnQic6IHJldHVybiAweDQyOwotICAgICAgICBjYXNlIEdES19jOgotICAgICAgICBj
YXNlIEdES19DOgotICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2Ug
J2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7Ci0gICAgICAgIGNhc2UgR0RLX2Q6Ci0gICAgICAg
IGNhc2UgR0RLX0Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2Fz
ZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKLSAgICAgICAgY2FzZSBHREtfZToKLSAgICAg
ICAgY2FzZSBHREtfRToKLSAgICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBj
YXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OwotICAgICAgICBjYXNlIEdES19mOgotICAg
ICAgICBjYXNlIEdES19GOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5
IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7Ci0gICAgICAgIGNhc2UgR0RLX2c6Ci0g
ICAgICAgIGNhc2UgR0RLX0c6Ci0gICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBr
ZXkgY2FzZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKLSAgICAgICAgY2FzZSBHREtfaDoK
LSAgICAgICAgY2FzZSBHREtfSDoKLSAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBI
IGtleSBjYXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4OwotICAgICAgICBjYXNlIEdES19p
OgotICAgICAgICBjYXNlIEdES19JOgotICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkp
IEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7Ci0gICAgICAgIGNhc2UgR0RL
X2o6Ci0gICAgICAgIGNhc2UgR0RLX0o6Ci0gICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0
QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKLSAgICAgICAgY2FzZSBH
REtfazoKLSAgICAgICAgY2FzZSBHREtfSzoKLSAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAg
KDRCKSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOwotICAgICAgICBjYXNl
IEdES19sOgotICAgICAgICBjYXNlIEdES19MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8v
ICAoNEMpIEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7Ci0gICAgICAgIGNh
c2UgR0RLX206Ci0gICAgICAgIGNhc2UgR0RLX006Ci0gICAgICAgICAgICByZXR1cm4gVktfTTsg
Ly8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKLSAgICAgICAg
Y2FzZSBHREtfbjoKLSAgICAgICAgY2FzZSBHREtfTjoKLSAgICAgICAgICAgIHJldHVybiBWS19O
OyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOwotICAgICAg
ICBjYXNlIEdES19vOgotICAgICAgICBjYXNlIEdES19POgotICAgICAgICAgICAgcmV0dXJuIFZL
X087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7Ci0gICAg
ICAgIGNhc2UgR0RLX3A6Ci0gICAgICAgIGNhc2UgR0RLX1A6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKLSAg
ICAgICAgY2FzZSBHREtfcToKLSAgICAgICAgY2FzZSBHREtfUToKLSAgICAgICAgICAgIHJldHVy
biBWS19ROyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOwot
ICAgICAgICBjYXNlIEdES19yOgotICAgICAgICBjYXNlIEdES19SOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7
Ci0gICAgICAgIGNhc2UgR0RLX3M6Ci0gICAgICAgIGNhc2UgR0RLX1M6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1
MzsKLSAgICAgICAgY2FzZSBHREtfdDoKLSAgICAgICAgY2FzZSBHREtfVDoKLSAgICAgICAgICAg
IHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAw
eDU0OwotICAgICAgICBjYXNlIEdES191OgotICAgICAgICBjYXNlIEdES19VOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJu
IDB4NTU7Ci0gICAgICAgIGNhc2UgR0RLX3Y6Ci0gICAgICAgIGNhc2UgR0RLX1Y6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1
cm4gMHg1NjsKLSAgICAgICAgY2FzZSBHREtfdzoKLSAgICAgICAgY2FzZSBHREtfVzoKLSAgICAg
ICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJl
dHVybiAweDU3OwotICAgICAgICBjYXNlIEdES194OgotICAgICAgICBjYXNlIEdES19YOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzog
cmV0dXJuIDB4NTg7Ci0gICAgICAgIGNhc2UgR0RLX3k6Ci0gICAgICAgIGNhc2UgR0RLX1k6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1kn
OiByZXR1cm4gMHg1OTsKLSAgICAgICAgY2FzZSBHREtfejoKLSAgICAgICAgY2FzZSBHREtfWjoK
LSAgICAgICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAn
Wic6IHJldHVybiAweDVBOwotICAgICAgICBjYXNlIEdES19NZXRhX0w6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJh
bCBrZXlib2FyZCkKLSAgICAgICAgY2FzZSBHREtfTWV0YV9SOgotICAgICAgICAgICAgcmV0dXJu
IFZLX1JXSU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCi0g
ICAgICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQotICAgICAgICAg
ICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQotICAgICAgICAgICAgLy8gVktf
U1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZF
KSBEZWNpbWFsIGtleQotICAgICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQot
ICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQotCi0gICAgICAgIGNhc2Ug
R0RLX051bV9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVN
IExPQ0sga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQotCi0gICAgICAgIGNhc2Ug
R0RLX1NoaWZ0X0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQg
U0hJRlQga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NoaWZ0X1I6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUlNISUZUOyAvLyAoQTEpIFJpZ2h0IFNISUZUIGtleQotICAgICAgICBjYXNlIEdES19Db250
cm9sX0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05U
Uk9MIGtleQotICAgICAgICBjYXNlIEdES19Db250cm9sX1I6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUkNPTlRST0w7IC8vIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKLSAgICAgICAgY2FzZSBHREtf
QWx0X0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtl
eQotICAgICAgICBjYXNlIEdES19BbHRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsg
Ly8gKEE1KSBSaWdodCBNRU5VIGtleQotCi0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sg
KEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZL
X0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtl
eQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQ
OiBCcm93c2VyIFJlZnJlc2gga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5
KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JS
T1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKLSAg
ICAgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBC
cm93c2VyIEZhdm9yaXRlcyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKLSAgICAgICAgICAg
IC8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkK
LSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1
bWUgRG93biBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAw
MC9YUDogVm9sdW1lIFVwIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAo
QjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX01F
RElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQot
ICAgICAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBN
ZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dz
IDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hf
TUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKLSAgICAgICAgICAgIC8v
IFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRp
YSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQ
OiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIg
KEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5Ci0KLSAgICAgICAg
ICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKLSAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgot
ICAgICAgICBjYXNlIEdES19jb2xvbjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9j
YXNlICc7JzogY2FzZSAnOic6IHJldHVybiAweEJBOwotICAgICAgICAgICAgLy8gVktfT0VNX1BM
VVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX3BsdXM6Ci0gICAgICAgIGNhc2UgR0RLX2VxdWFsOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJu
IDB4QkI7Ci0gICAgICAgICAgICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6
IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5Ci0gICAgICAgIGNhc2UgR0RLX2Nv
bW1hOgotICAgICAgICBjYXNlIEdES19sZXNzOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9D
T01NQTsgLy9jYXNlICcsJzogY2FzZSAnPCc6IHJldHVybiAweEJDOwotICAgICAgICAgICAgLy8g
VktfT0VNX01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9u
LCB0aGUgJy0nIGtleQotICAgICAgICBjYXNlIEdES19taW51czoKLSAgICAgICAgY2FzZSBHREtf
dW5kZXJzY29yZToKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6
IGNhc2UgJ18nOiByZXR1cm4gMHhCRDsKLSAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJF
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX3BlcmlvZDoKLSAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKLSAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJu
IDB4QkU7Ci0gICAgICAgICAgICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcvPycga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX3NsYXNoOgotICAgICAgICBjYXNlIEdES19xdWVzdGlvbjoKLSAgICAgICAgICAgIHJldHVy
biBWS19PRU1fMjsgLy9jYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOwotICAgICAgICAg
ICAgLy8gVktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnYH4nIGtleQotICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgot
ICAgICAgICBjYXNlIEdES19xdW90ZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7
IC8vY2FzZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsKLSAgICAgICAgICAgIC8vIFZLX09F
TV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJk
LCB0aGUgJ1t7JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6Ci0gICAgICAgIGNh
c2UgR0RLX2JyYWNlbGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdb
JzogY2FzZSAneyc6IHJldHVybiAweERCOwotICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwn
IGtleQotICAgICAgICBjYXNlIEdES19iYWNrc2xhc2g6Ci0gICAgICAgIGNhc2UgR0RLX2JhcjoK
LSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1
cm4gMHhEQzsKLSAgICAgICAgICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfYnJhY2tldHJpZ2h0OgotICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgotICAgICAg
ICAgICAgcmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweERE
OwotICAgICAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNo
YXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0
aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX3F1b3RlcmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX3F1b3Rl
ZGJsOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyIn
OiByZXR1cm4gMHhERTsKLSAgICAgICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KLSAgICAgICAg
ICAgIC8vIFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUg
YnJhY2tldCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9h
cmQKLSAgICAgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBX
aW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNv
ZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBr
ZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9y
IG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJl
bWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCi0g
ICAgICAgICAgICAvLyBWS19BVFROIChGNikgQXR0biBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NS
U0VMIChGNykgQ3JTZWwga2V5Ci0gICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtl
eQotICAgICAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5Ci0gICAgICAgICAg
ICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBa
b29tIGtleQotICAgICAgICAgICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UKLSAgICAgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKLSAgICAgICAgICAgIC8v
IFZLX09FTV9DTEVBUiAoRkUpIENsZWFyIGtleQotICAgICAgICBjYXNlIEdES19GMToKLSAgICAg
ICAgY2FzZSBHREtfRjI6Ci0gICAgICAgIGNhc2UgR0RLX0YzOgotICAgICAgICBjYXNlIEdES19G
NDoKLSAgICAgICAgY2FzZSBHREtfRjU6Ci0gICAgICAgIGNhc2UgR0RLX0Y2OgotICAgICAgICBj
YXNlIEdES19GNzoKLSAgICAgICAgY2FzZSBHREtfRjg6Ci0gICAgICAgIGNhc2UgR0RLX0Y5Ogot
ICAgICAgICBjYXNlIEdES19GMTA6Ci0gICAgICAgIGNhc2UgR0RLX0YxMToKLSAgICAgICAgY2Fz
ZSBHREtfRjEyOgotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoK
LSAgICAgICAgY2FzZSBHREtfRjE1OgotICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAgIGNh
c2UgR0RLX0YxNzoKLSAgICAgICAgY2FzZSBHREtfRjE4OgotICAgICAgICBjYXNlIEdES19GMTk6
Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICBj
YXNlIEdES19GMjI6Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoKLSAgICAgICAgY2FzZSBHREtfRjI0
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOwotICAgICAg
ICBjYXNlIEdES19LRVlfVm9pZFN5bWJvbDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNT
S0VZOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi19
Ci0KLVN0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1
bnNpZ25lZCB2YWwpCi17Ci0gICAgc3dpdGNoICh2YWwpIHsKLSAgICAgICAgY2FzZSBHREtfSVNP
X0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfUmV0
dXJuOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHIiKTsKLSAgICAgICAgY2FzZSBHREtf
QmFja1NwYWNlOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHg4Iik7Ci0gICAgICAgIGNh
c2UgR0RLX1RhYjoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlx0Iik7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZh
bCk7Ci0gICAgICAgICAgICBnbG9uZyBud2M7Ci0gICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFy
MTYgPSBnX3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2MsIDApOwotCi0gICAgICAgICAgICBT
dHJpbmcgcmV0VmFsOwotICAgICAgICAgICAgaWYgKHVjaGFyMTYpCi0gICAgICAgICAgICAgICAg
cmV0VmFsID0gU3RyaW5nKChVQ2hhciopdWNoYXIxNiwgbndjKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXRWYWwgPSBTdHJpbmcoKTsKLQotICAgICAgICAgICAgZ19mcmVl
KHVjaGFyMTYpOwotCi0gICAgICAgICAgICByZXR1cm4gcmV0VmFsOwotICAgIH0KLX0KLQotc3Rh
dGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqIGV2ZW50KQotewotICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
PyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci19Ci0KLXN0
YXRpYyBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2Rr
RXZlbnRLZXkqIGV2ZW50KQotewotICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOwotICAg
IGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdE
S18zMjcwX0JhY2tUYWIpCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlm
dEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAg
bW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0
ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpB
bHRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAgIG1v
ZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5OwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Ci19Ci0KLS8vIEtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2
ZW50LCBjb25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKLSAgICA6
IFBsYXRmb3JtRXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNG
b3JHZGtLZXlFdmVudChldmVudCksIGN1cnJlbnRUaW1lKCkpCi0gICAgLCBtX3RleHQoY29tcG9z
aXRpb25SZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5z
aW1wbGVTdHJpbmcgOiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCi0gICAg
LCBtX3VubW9kaWZpZWRUZXh0KG1fdGV4dCkKLSAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVu
dGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKLSAgICAsIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKLSAg
ICAsIG1fbmF0aXZlVmlydHVhbEtleUNvZGUoZXZlbnQtPmtleXZhbCkKLSAgICAsIG1fbWFjQ2hh
ckNvZGUoMCkKLSAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1faXNLZXlwYWQoZXZl
bnQtPmtleXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkK
LSAgICAsIG1faXNTeXN0ZW1LZXkoZmFsc2UpCi0gICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQot
ICAgICwgbV9jb21wb3NpdGlvblJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQotewotICAgIC8v
IFRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9y
IGtleXMgdGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KLSAgICBpZiAoY29tcG9z
aXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKQotICAgICAgICBtX3dpbmRvd3NWaXJ0
dWFsS2V5Q29kZSA9IFZLX1BST0NFU1NLRVk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29t
cGF0aWJpbGl0eU1vZGUpCi17Ci0gICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlE
b3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3Ro
ZXIgY29udmVyc2lvbnMuCi0gICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKLSAgICBtX3R5
cGUgPSB0eXBlOwotCi0gICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsK
LSAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBT
dHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBt
X2NvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkgewotICAgICAgICAvLyBI
YXZpbmcgZW1wdHkgdGV4dCwgcHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlw
cmVzcykgZXZlbnQKLSAgICAgICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQg
dHJpZ2dlciBjb21wb3NpdGlvbiBldmVudHMgc2hvdWxkIG5vdAotICAgICAgICAvLyBmaXJlIGtl
eXByZXNzLgotICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKLSAgICAgICAgbV91bm1vZGlmaWVk
VGV4dCA9IFN0cmluZygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fa2V5SWRlbnRpZmllciA9
IFN0cmluZygpOwotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7Ci0gICAgfQot
fQotCi1ib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQot
ewotICAgIHJldHVybiBnZGtfa2V5bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9n
ZXRfZGVmYXVsdCgpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJl
bnRNb2RpZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRL
ZXksIGJvb2wmIG1ldGFLZXkpCi17Ci0gICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOwotICAgIGd0
a19nZXRfY3VycmVudF9ldmVudF9zdGF0ZSgmc3RhdGUpOwotCi0gICAgc2hpZnRLZXkgPSBzdGF0
ZSAmIEdES19TSElGVF9NQVNLOwotICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01B
U0s7Ci0gICAgYWx0S2V5ID0gc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1ldGFLZXkgPSBz
dGF0ZSAmIEdES19NRVRBX01BU0s7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDA0MTAxYzFmYTNkNzI4NjZjYmM5NTNmODRiNTcyODU5MzdmMzIxM2QuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTcgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0qIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbW9kaWZpZXIgaXMg
QWx0IGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0QxX01BU0suCi0KLS8vIEtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2ZW50
KQotewotICAgIG1fdGltZXN0YW1wID0gZXZlbnQtPnRpbWU7Ci0gICAgbV9wb3NpdGlvbiA9IElu
dFBvaW50KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOwotICAgIG1fZ2xvYmFsUG9zaXRp
b24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlfcm9vdCk7Ci0K
LSAgICBtX21vZGlmaWVycyA9IDA7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9N
QVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0
YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsK
LSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSykKLSAgICAgICAgbV9tb2RpZmll
cnMgfD0gQWx0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTUVUQV9NQVNLKQotICAg
ICAgICBtX21vZGlmaWVycyB8PSBNZXRhS2V5OwotCi0gICAgc3dpdGNoIChldmVudC0+dHlwZSkg
ewotICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNT
OgotICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgY2FzZSBHREtfQlVUVE9OX1JFTEVB
U0U6Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDsKLSAgICAg
ICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkgewotICAgICAgICAgICAg
bV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKLSAgICAgICAgICAgIG1fY2xp
Y2tDb3VudCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRP
Tl9QUkVTUykKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0gICAgICAgIGVsc2UgaWYg
KGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMjsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJF
U1MpCi0gICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgIGlmIChldmVudC0+
YnV0dG9uID09IDEpCi0gICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAg
IGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMikKLSAgICAgICAgICAgIG1fYnV0dG9uID0gTWlk
ZGxlQnV0dG9uOwotICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDMpCi0gICAgICAg
ICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH07Ci19Ci0KLVBsYXRmb3Jt
TW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKiBtb3Rpb24pCi17
Ci0gICAgbV90aW1lc3RhbXAgPSBtb3Rpb24tPnRpbWU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBv
aW50KChpbnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlv
biA9IEludFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55X3Jvb3QpOwot
Ci0gICAgbV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZU
X01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtl
eTsKLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1fbW9k
aWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NRVRBX01BU0sp
Ci0gICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7Ci0KLSAgICBzd2l0Y2ggKG1vdGlvbi0+
dHlwZSkgewotICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6Ci0gICAgICAgIG1fdHlwZSA9IFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7Ci0gICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247Ci0g
ICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH07Ci0KLSAgICBpZiAobW90aW9uLT5z
dGF0ZSAmIEdES19CVVRUT04xX01BU0spCi0gICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsK
LSAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKLSAgICAgICAg
bV9idXR0b24gPSBNaWRkbGVCdXR0b247Ci0gICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdE
S19CVVRUT04zX01BU0spCi0gICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247Ci19Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcy
MzI0YTBjNWY5MTZjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0
IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCi0KLSNpbmNs
dWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIldp
ZGdldC5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBHdGtXaWRnZXQqIGdldFRvcGxldmVsKEd0a1dpZGdldCogd2lkZ2V0KQotewotICAg
IEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwot
ICAgIHJldHVybiBndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRvcGxldmVsKSA/IHRvcGxldmVsIDog
MDsKLX0KLQotc3RhdGljIEdka1Zpc3VhbCogZ2V0VmlzdWFsKFdpZGdldCogd2lkZ2V0KQotewot
ICAgIEd0a1dpZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJv
b3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOwotICAgIGlmICgh
Y29udGFpbmVyKSB7Ci0gICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRf
ZGVmYXVsdCgpOwotICAgICAgICByZXR1cm4gc2NyZWVuID8gZ2RrX3NjcmVlbl9nZXRfc3lzdGVt
X3Zpc3VhbChzY3JlZW4pIDogMDsKLSAgICB9Ci0KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3Jl
YWxpemVkKGNvbnRhaW5lcikpCi0gICAgICAgIGNvbnRhaW5lciA9IGdldFRvcGxldmVsKGNvbnRh
aW5lcik7Ci0gICAgcmV0dXJuIGNvbnRhaW5lciA/IGdka193aW5kb3dfZ2V0X3Zpc3VhbChndGtf
d2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOwotfQotCi1pbnQgc2NyZWVuRGVwdGgo
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZXRWaXN1YWwod2lk
Z2V0KTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgcmV0dXJuIDI0OwotICAgIHJldHVybiBn
ZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpOwotfQotCi1pbnQgc2NyZWVuRGVwdGhQZXJDb21w
b25lbnQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZXRWaXN1
YWwod2lkZ2V0KTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgcmV0dXJuIDg7Ci0KLSAgICBy
ZXR1cm4gZ2RrX3Zpc3VhbF9nZXRfYml0c19wZXJfcmdiKHZpc3VhbCk7Ci19Ci0KLWJvb2wgc2Ny
ZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQotewotICAgIHJldHVybiBzY3JlZW5EZXB0
aCh3aWRnZXQpIDwgMjsKLX0KLQotCi1zdGF0aWMgR2RrU2NyZWVuKiBnZXRTY3JlZW4oR3RrV2lk
Z2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfaGFzX3NjcmVlbih3aWRnZXQp
ID8gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0
KCk7Ci19Ci0KLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIEd0
a1dpZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOwotICAgIGlmIChjb250YWlu
ZXIpCi0gICAgICAgIGNvbnRhaW5lciA9IGdldFRvcGxldmVsKGNvbnRhaW5lcik7Ci0KLSAgICBH
ZGtTY3JlZW4qIHNjcmVlbiA9IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2Rr
X3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci0KLSAgICBnaW50IG1vbml0b3IgPSBjb250YWluZXIgPyBnZGtfc2NyZWVu
X2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250
YWluZXIpKSA6IDA7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnk7Ci0gICAgZ2RrX3NjcmVl
bl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsICZnZW9tZXRyeSk7Ci0KLSAg
ICByZXR1cm4gRmxvYXRSZWN0KGdlb21ldHJ5LngsIGdlb21ldHJ5LnksIGdlb21ldHJ5LndpZHRo
LCBnZW9tZXRyeS5oZWlnaHQpOwotfQotCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChX
aWRnZXQqIHdpZGdldCkKLXsKLSAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdU
S19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50
KCkpIDogMDsKLSAgICBpZiAoY29udGFpbmVyICYmICFndGtfd2lkZ2V0X2dldF9yZWFsaXplZChj
b250YWluZXIpKQotICAgICAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwotCi0gICAgR2Rr
U2NyZWVuKiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdka19z
Y3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwotCi0gICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVlbl9n
ZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFp
bmVyKSkgOiAwOwotCi0gICAgR2RrUmVjdGFuZ2xlIHdvcmtBcmVhOwotICAgIGdka19zY3JlZW5f
Z2V0X21vbml0b3Jfd29ya2FyZWEoc2NyZWVuLCBtb25pdG9yLCAmd29ya0FyZWEpOwotCi0gICAg
cmV0dXJuIEZsb2F0UmVjdCh3b3JrQXJlYS54LCB3b3JrQXJlYS55LCB3b3JrQXJlYS53aWR0aCwg
d29ya0FyZWEuaGVpZ2h0KTsKLQotfQotCi12b2lkIHNjcmVlbkNvbG9yUHJvZmlsZShDb2xvclBy
b2ZpbGUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdo
ZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hl
ZWxFdmVudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGJmOWE4OWQ3
NmQwNWY1MjhlZDM0OWRlMDUzNjcyNzEyZGY4YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
V2hlZWxFdmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25zdHJ1Y3RvcnMKLVBs
YXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVu
dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVsdGEgPSAxOwotCi0gICAgbV90eXBlID0g
UGxhdGZvcm1FdmVudDo6V2hlZWw7Ci0gICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwot
Ci0gICAgbV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRf
TUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7Ci0gICAgaWYgKGV2ZW50LT5z
dGF0ZSAmIEdES19DT05UUk9MX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEN0cmxLZXk7
Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1fbW9kaWZp
ZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKLSAg
ICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKLQotICAgIG1fZGVsdGFYID0gMDsKLSAgICBt
X2RlbHRhWSA9IDA7Ci0KLSAgICAvLyBEb2NzIHNheSBhbiB1cHdhcmRzIHNjcm9sbCAoYXdheSBm
cm9tIHRoZSB1c2VyKSBoYXMgYSBwb3NpdGl2ZSBkZWx0YQotICAgIHN3aXRjaCAoZXZlbnQtPmRp
cmVjdGlvbikgewotICAgICAgICBjYXNlIEdES19TQ1JPTExfVVA6Ci0gICAgICAgICAgICBtX2Rl
bHRhWSA9IGRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9M
TF9ET1dOOgotICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGE7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6Ci0gICAgICAgICAgICBtX2RlbHRhWCA9
IGRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdI
VDoKLSAgICAgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0j
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9T
TU9PVEg6IHsKLSAgICAgICAgICAgICAgICBnZG91YmxlIGRlbHRhWCwgZGVsdGFZOwotICAgICAg
ICAgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhyZWludGVycHJldF9jYXN0PEdk
a0V2ZW50Kj4oZXZlbnQpLCAmZGVsdGFYLCAmZGVsdGFZKTsKLSAgICAgICAgICAgICAgICBtX2Rl
bHRhWCA9IC1kZWx0YVg7Ci0gICAgICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGFZOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV93aGVl
bFRpY2tzWCA9IG1fZGVsdGFYOwotICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKLQotICAg
IG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54KSwgc3RhdGlj
X2Nhc3Q8aW50PihldmVudC0+eSkpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChz
dGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55
X3Jvb3QpKTsKLSAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7Ci0g
ICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1F
OiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNj
cm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50Ci0gICAgbV9kZWx0YVggKj0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci0gICAgbV9kZWx0YVkgKj0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDUyNThm
MzZhY2Y3NDM3M2RmMTAwMjZmZDhjOTg5NDYwZmY2Yzk0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3cuaCIKLQotI2lmIFVTRShHTFgpCi0KLSNpbmNsdWRlIDxYMTEvZXh0
ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5o
PgotI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdyo+IFdpbmRvd0hhc2hNYXA7Ci1zdGF0aWMgV2luZG93SGFz
aE1hcCYgZ2V0V2luZG93SGFzaE1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5k
b3dIYXNoTWFwLCB3aW5kb3dIYXNoTWFwLCAoKSk7Ci0gICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7
Ci19Ci0KLXN0YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKLXN0YXRpYyBHZGtGaWx0ZXJSZXR1
cm4gZmlsdGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZl
bnQsIHZvaWQqKQotewotICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4o
Z2RrWEV2ZW50KTsKLSAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBY
RGFtYWdlTm90aWZ5KQotICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAg
IFhEYW1hZ2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1h
Z2VOb3RpZnlFdmVudCo+KHhFdmVudCk7Ci0gICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1h
cCA9IGdldFdpbmRvd0hhc2hNYXAoKTsKLSAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0g
d2luZG93SGFzaE1hcC5maW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7Ci0gICAgaWYgKGkgPT0g
d2luZG93SGFzaE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7
Ci0KLSAgICBpLT52YWx1ZS0+Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0gICAgWERhbWFn
ZVN1YnRyYWN0KEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkp
LCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKLSAgICByZXR1cm4gR0RLX0ZJTFRF
Ul9SRU1PVkU7Ci19Ci0KLXN0YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUo
KQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJv
b2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNlOwotCi0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm4gaGFzRXh0ZW5zaW9uczsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAg
IGludCBlcnJvckJhc2U7Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQ
TEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0
ZW5zaW9uKGRpc3BsYXksICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGV2ZW50QmFzZTsKLSAgICBpZiAoIVhDb21wb3NpdGVR
dWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVy
c2lvbiAwLjIuCi0gICAgaW50IG1ham9yLCBtaW5vcjsKLSAgICBYQ29tcG9zaXRlUXVlcnlWZXJz
aW9uKGRpc3BsYXksICZtYWpvciwgJm1pbm9yKTsKLSAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFq
b3IgJiYgbWlub3IgPCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaGFzRXh0ZW5z
aW9ucyA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NPd25QdHI8UmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNpemUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKLX0K
LQotUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
KGNvbnN0IEludFNpemUmIHNpemUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCi0gICAg
OiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fd2luZG93KDApCi0gICAgLCBtX3BhcmVudFdpbmRvdygw
KQotICAgICwgbV9waXhtYXAoMCkKLSAgICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkK
LSAgICAsIG1fc3VyZmFjZSgwKQotICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZh
bHNlKQotICAgICwgbV9kYW1hZ2UoMCkKLSAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkK
LSAgICAsIG1fZGFtYWdlTm90aWZ5RGF0YSgwKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBH
REtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBTY3Jl
ZW4qIHNjcmVlbiA9IERlZmF1bHRTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSk7Ci0KLSAgICAvLyBU
aGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dw
dS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYwotICAgIFhTZXRXaW5kb3dBdHRyaWJ1
dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRp
cmVjdCA9IFRydWU7Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXks
Ci0gICAgICAgIFJvb3RXaW5kb3dPZlNjcmVlbihzY3JlZW4pLAotICAgICAgICBXaWR0aE9mU2Ny
ZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAxLAotICAgICAgICAwLAotICAgICAgICBDb3B5RnJvbVBh
cmVudCwKLSAgICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAg
ICAgICBDV092ZXJyaWRlUmVkaXJlY3QsCi0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAg
ICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKLQotICAgIHdpbmRvd0F0dHJp
YnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7Ci0gICAgd2luZG93QXR0cmli
dXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOwotICAgIG1fd2luZG93ID0gWENyZWF0ZVdp
bmRvdyhkaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRv
dywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5k
b3coZGlzcGxheSwgbV93aW5kb3cpOwotCi0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0
PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotICAgIGdldFdpbmRvd0hh
c2hNYXAoKS5hZGQobV93aW5kb3csIHRoaXMpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAg
WEV2ZW50IGV2ZW50OwotICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0
cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlID09IE1h
cE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRN
YXNrKTsKLSAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENv
bXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlz
cGxheSwgbV93aW5kb3csIFhEYW1hZ2VSZXBvcnROb25FbXB0eSk7Ci19Ci0KLVJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQotewotICAgIEFT
U0VSVChtX2RhbWFnZSk7Ci0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBBU1NFUlQobV9wYXJl
bnRXaW5kb3cpOwotCi0gICAgZ2V0V2luZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7Ci0g
ICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5kb3df
cmVtb3ZlX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhE
YW1hZ2VFdmVudCksIDApOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hE
SVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFhEYW1hZ2VEZXN0cm95KGRp
c3BsYXksIG1fZGFtYWdlKTsKLSAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7
Ci0gICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOwotICAgIGNsZWFu
dXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIERpc3BsYXkqIGRp
c3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsK
LSAgICBYUmVzaXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgWEZsdXNoKGRpc3BsYXkpOwotCi0gICAgaWYgKG1fbmVlZHNDb250
ZXh0ID09IENyZWF0ZUdMQ29udGV4dCkgewotICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUo
KTsKLSAgICAgICAgLy8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0
IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCi0gICAgICAg
IC8vIHdoZXJlIGEgc3dhcCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFj
ayBidWZmZXJzIGFyZSBwcm9wZXJseSByZXNpemVkLgotICAgICAgICBpZiAoY29udGV4dCgpID09
IEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpKQotICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVm
ZmVycygpOwotICAgIH0KLQotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgbV9uZWVkc05ld1BpeG1h
cEFmdGVyUmVzaXplID0gdHJ1ZTsKLX0KLQotR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6Y29udGV4dCgpCi17Ci0gICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0
ZUdMQ29udGV4dCk7Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250
ZXh0LmdldCgpOwotCi0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBtX2NvbnRleHQgPSBHTENv
bnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmlu
Z0NvbnRleHQoKSk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKLX0KLQotdm9pZCBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQot
ewotICAgIGlmICghbV9waXhtYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIFhGcmVlUGl4bWFw
KGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1h
cCk7Ci0gICAgbV9waXhtYXAgPSAwOwotICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci19Ci0KLWNh
aXJvX3N1cmZhY2VfdCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZv
cldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBB
ZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7
Ci0KLSAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKLQotICAgIC8vIEl0
J3MgaW1wb3J0YW50IHRoYXQgdGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1l
IERpc3BsYXkgcG9pbnRlciBhcyB0aGUgdGFyZ2V0Ci0gICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJh
d2luZyBzcGVlZCBjYW4gYmUgMTAweCBzbG93ZXIuCi0gICAgRGlzcGxheSogbmV3UGl4bWFwRGlz
cGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0
KSk7Ci0gICAgUGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5l
d1BpeG1hcERpc3BsYXksIG1fd2luZG93KTsKLSAgICBpZiAoIW5ld1BpeG1hcCkgewotICAgICAg
ICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIGlmICgh
WEdldFdpbmRvd0F0dHJpYnV0ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dB
dHRyaWJ1dGVzKSkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwot
ICAgICAgICBYRnJlZVBpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJm
YWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5
LCBuZXdQaXhtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwot
Ci0gICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQg
d2luZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucwotICAg
IC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3Vz
IHJlc2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCi0gICAgLy8g
cGl4bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6
ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKLSAgICAvLyBwaXht
YXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KLSAgICBpZiAobV9z
dXJmYWNlKSB7Ci0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNy
LmdldCgpLCAxLCAxLCAxKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwg
MCk7Ci0gICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVw
UGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOwotICAg
IG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7Ci0KLSAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwot
fQotCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2Fs
bGJhY2soKQotewotICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQotICAgICAgICBtX2Rh
bWFnZU5vdGlmeUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjJhNDhiMmVhNWM0YWY2NjAxNDM3ZDlmNWM5MjE4YTYy
NDQwZDk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisr
KyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
SWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3dfaAotCi0jaWYgVVNFKEdMWCkKLQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1
ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotCi10eXBlZGVmIHVuc2ln
bmVkIGxvbmcgUGl4bWFwOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKLXR5cGVkZWYg
dW5zaWduZWQgbG9uZyBEYW1hZ2U7Ci10eXBlZGVmIHZvaWQgKCpEYW1hZ2VOb3RpZnlDYWxsYmFj
aykodm9pZCopOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93IHsKLXB1YmxpYzoKLSAgICBlbnVtIEdMQ29udGV4dE5lZWRlZCB7IENyZWF0
ZUdMQ29udGV4dCwgRG9Ob3RDcmVhdGVHTENvbnRleHQgfTsKLSAgICBzdGF0aWMgUGFzc093blB0
cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBHTENv
bnRleHROZWVkZWQgPSBDcmVhdGVHTENvbnRleHQpOwotICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93KCk7Ci0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1f
c2l6ZTsgfQotCi0gICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7Ci0gICAg
R0xDb250ZXh0KiBjb250ZXh0KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2VG
b3JXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgV2luZG93IHdpbmRvd0lkKCkgeyByZXR1cm4gbV93
aW5kb3c7IH0KLSAgICB2b2lkIGNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOwotCi0gICAgdm9p
ZCBzZXREYW1hZ2VOb3RpZnlDYWxsYmFjayhEYW1hZ2VOb3RpZnlDYWxsYmFjayBjYWxsYmFjaywg
dm9pZCogZGF0YSkKLSAgICB7Ci0gICAgICAgIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2sgPSBjYWxs
YmFjazsKLSAgICAgICAgbV9kYW1hZ2VOb3RpZnlEYXRhID0gZGF0YTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYsIEdMQ29u
dGV4dE5lZWRlZCk7Ci0gICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwot
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgV2luZG93IG1fd2luZG93OwotICAgIFdpbmRvdyBt
X3BhcmVudFdpbmRvdzsKLSAgICBQaXhtYXAgbV9waXhtYXA7Ci0gICAgR0xDb250ZXh0TmVlZGVk
IG1fbmVlZHNDb250ZXh0OwotICAgIE93blB0cjxHTENvbnRleHQ+IG1fY29udGV4dDsKLSAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAgdW5zaWduZWQgaW50IG1fcGVu
ZGluZ1Jlc2l6ZVNvdXJjZUlkOwotICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXpl
OwotCi0gICAgRGFtYWdlIG1fZGFtYWdlOwotICAgIERhbWFnZU5vdGlmeUNhbGxiYWNrIG1fZGFt
YWdlTm90aWZ5Q2FsbGJhY2s7Ci0gICAgdm9pZCogbV9kYW1hZ2VOb3RpZnlEYXRhOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEdMWCkKLQotI2VuZGlmIC8v
IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SdW5Mb29wR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwZjM1Y2E2
NmQyMjBiNDBkNGY2M2Y3ZDlmNmM5ODQyNzU3NzcxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9v
cEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSdW5Mb29w
LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SdW5Mb29wOjpS
dW5Mb29wKCkKLXsKLSAgICAvLyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgZG9lc24ndCBhZGQg
YW4gZXh0cmEgcmVmZXJlbmNlLgotICAgIG1fcnVuTG9vcENvbnRleHQgPSBpc01haW5UaHJlYWQo
KSA/IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9u
ZXcoKSk7Ci0gICAgQVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOwotICAgIEdSZWZQdHI8R01haW5M
b29wPiBpbm5lcm1vc3RMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX3J1bkxvb3BD
b250ZXh0LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsKLSAgICBt
X3J1bkxvb3BNYWluTG9vcHMuYXBwZW5kKGlubmVybW9zdExvb3ApOwotfQotCi1SdW5Mb29wOjp+
UnVuTG9vcCgpCi17Ci0gICAgZm9yIChpbnQgaSA9IG1fcnVuTG9vcE1haW5Mb29wcy5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmco
bV9ydW5Mb29wTWFpbkxvb3BzW2ldLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSk7Ci0gICAg
fQotfQotCi12b2lkIFJ1bkxvb3A6OnJ1bigpCi17Ci0gICAgUnVuTG9vcCogbWFpblJ1bkxvb3Ag
PSBSdW5Mb29wOjpjdXJyZW50KCk7Ci0gICAgR01haW5Mb29wKiBpbm5lcm1vc3RMb29wID0gbWFp
blJ1bkxvb3AtPmlubmVybW9zdExvb3AoKTsKLSAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5p
bmcoaW5uZXJtb3N0TG9vcCkpIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExv
b3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBu
ZXN0ZWQgbG9vcCBpZiB0aGUgaW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgotICAg
IEdNYWluTG9vcCogbmVzdGVkTWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcoMCwgRkFMU0UpOwot
ICAgIG1haW5SdW5Mb29wLT5wdXNoTmVzdGVkTWFpbkxvb3AobmVzdGVkTWFpbkxvb3ApOwotICAg
IGdfbWFpbl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7Ci0gICAgbWFpblJ1bkxvb3AtPnBvcE5l
c3RlZE1haW5Mb29wKCk7Ci19Ci0KLUdNYWluTG9vcCogUnVuTG9vcDo6aW5uZXJtb3N0TG9vcCgp
Ci17Ci0gICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVy
ZS4KLSAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOwotICAgIHJldHVy
biBtX3J1bkxvb3BNYWluTG9vcHNbMF0uZ2V0KCk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6cHVzaE5l
c3RlZE1haW5Mb29wKEdNYWluTG9vcCogbmVzdGVkTG9vcCkKLXsKLSAgICAvLyBUaGUgaW5uZXJt
b3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgotICAgIEFTU0VSVCghbV9ydW5M
b29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVuZChh
ZG9wdEdSZWYobmVzdGVkTG9vcCkpOwotfQotCi12b2lkIFJ1bkxvb3A6OnBvcE5lc3RlZE1haW5M
b29wKCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJl
IHRoZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAg
bV9ydW5Mb29wTWFpbkxvb3BzLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBSdW5Mb29wOjpzdG9w
KCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRo
ZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgR1Jl
ZlB0cjxHTWFpbkxvb3A+IGxhc3RNYWluTG9vcCA9IG1fcnVuTG9vcE1haW5Mb29wcy5sYXN0KCk7
Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgpKSkKLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOwotfQotCi1nYm9vbGVh
biBSdW5Mb29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKLXsKLSAgICBydW5Mb29wLT5w
ZXJmb3JtV29yaygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBSdW5Mb29wOjp3YWtl
VXAoKQotewotICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9z
b3VyY2VfbmV3KCkpOwotICAgIGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0KCksIEdf
UFJJT1JJVFlfREVGQVVMVCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJjZS5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29yayksIHRo
aXMsIDApOwotICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9vcENvbnRl
eHQuZ2V0KCkpOwotCi0gICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENvbnRleHQu
Z2V0KCkpOwotfQotCi1SdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wKiBydW5M
b29wKQotICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCi0gICAgLCBtX3RpbWVyU291cmNlKDApCi17
Ci19Ci0KLVJ1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCi17Ci0gICAgc3RvcCgpOwot
fQotCi12b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6Y2xlYXJUaW1lclNvdXJjZSgpCi17Ci0gICAg
bV90aW1lclNvdXJjZSA9IDA7Ci19Ci0KLWdib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGlt
ZXJGaXJlZENhbGxiYWNrKFJ1bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCi17Ci0gICAgR1NvdXJj
ZSogY3VycmVudFRpbWVyU291cmNlID0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCk7Ci0gICAg
Ym9vbCBpc1JlcGVhdGluZyA9IHRpbWVyLT5pc1JlcGVhdGluZygpOwotICAgIC8vIFRoaXMgY2Fu
IGNoYW5nZSB0aGUgdGltZXJTb3VyY2UgYnkgc3RhcnRpbmcgYSBuZXcgdGltZXIgd2l0aGluIHRo
ZSBjYWxsYmFjay4KLSAgICB0aW1lci0+ZmlyZWQoKTsKLSAgICBpZiAoIWlzUmVwZWF0aW5nICYm
IGN1cnJlbnRUaW1lclNvdXJjZSA9PSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKSkKLSAgICAg
ICAgdGltZXItPmNsZWFyVGltZXJTb3VyY2UoKTsKLSAgICByZXR1cm4gaXNSZXBlYXRpbmc7Ci19
Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVydmFsLCBi
b29sIHJlcGVhdCkKLXsKLSAgICBpZiAobV90aW1lclNvdXJjZSkKLSAgICAgICAgc3RvcCgpOwot
Ci0gICAgbV90aW1lclNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0
aWNfY2FzdDxndWludD4oZmlyZUludGVydmFsICogMTAwMCkpKTsKLSAgICBtX2lzUmVwZWF0aW5n
ID0gcmVwZWF0OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLmdldCgp
LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1l
ckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lclNv
dXJjZS5nZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKLX0KLQotdm9p
ZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3AoKQotewotICAgIGlmICghbV90aW1lclNvdXJjZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNlLmdl
dCgpKTsKLSAgICBjbGVhclRpbWVyU291cmNlKCk7Ci19Ci0KLWJvb2wgUnVuTG9vcDo6VGltZXJC
YXNlOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGltZXJTb3VyY2U7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1NoYXJlZEJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDQw
ZjI4ZTlkZjcxZTRlZWQwZTFhMDEyNmU2NjUwZDM1YzYzNmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1No
YXJlZEJ1ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
Ci0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCi17Ci0gICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKLSAgICBnY2hhciogY29udGVudHM7Ci0gICAgZ3NpemUg
c2l6ZTsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVu
dHMoZmlsZW5hbWUuZGF0YSgpLCAmY29udGVudHMsICZzaXplLCAmZXJyb3IpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGZ1bGx5IHJlYWQgY29udGVudHMgb2YgZmlsZSAlcyAtICVz
IiwgZmlsZW5hbWVGb3JEaXNwbGF5KGZpbGVQYXRoKS51dGY4KCkuZGF0YSgpLCBlcnJvci0+bWVz
c2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGNvbnRlbnRzLCBzaXplKTsKLSAgICBnX2ZyZWUoY29udGVudHMpOwotCi0gICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0MzFhMzUyZjczM2YwZWIzYTc2OGY5ODIxYTQwMjU2NDMwMzA0
ZjYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCi0KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgot
I2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGd1aW50IHNoYXJlZFRpbWVyOwotc3RhdGljIHZvaWQgKCpzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24pKCk7Ci0KLXZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9u
KHZvaWQgKCpmKSgpKQotewotICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiB0aW1lb3V0X2NiKGdwb2ludGVyKQotewotICAgIGlmIChzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24pCi0gICAgICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOwot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChk
b3VibGUgaW50ZXJ2YWwpCi17Ci0gICAgQVNTRVJUKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik7
Ci0KLSAgICBndWludCBpbnRlcnZhbEluTVMgPSBzdGF0aWNfY2FzdDxndWludD4oaW50ZXJ2YWwg
KiAxMDAwKTsKLQotICAgIHN0b3BTaGFyZWRUaW1lcigpOwotICAgIHNoYXJlZFRpbWVyID0gZ190
aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9SRURSQVcsIGludGVydmFsSW5NUywgdGltZW91
dF9jYiwgMCwgMCk7Ci19Ci0KLXZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKLXsKLSAgICBpZiAoc2hh
cmVkVGltZXIgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gcmVtb3ZlZFNv
dXJjZSA9IGdfc291cmNlX3JlbW92ZShzaGFyZWRUaW1lcik7Ci0gICAgQVNTRVJUX1VOVVNFRChy
ZW1vdmVkU291cmNlLCByZW1vdmVkU291cmNlKTsKLSAgICBzaGFyZWRUaW1lciA9IDA7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyZjczMTZjYWZkMmVjZWY3YjYxZThhZGYxMjkzNjI2OGE5MjI0YzRi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlNvdW5kLmgiCi0KLSNpbmNsdWRl
IDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzeXN0ZW1CZWVwKCkK
LXsKLSAgICBnZGtfYmVlcCgpOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjM0NDQ5M2Q1YjMxZDhkZDg1MDM5ODkzNjhm
YWFiMDM1NGEzMzkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQVhPYmplY3RD
YWNoZS5oIgotI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJETlMuaCIKLSNp
bmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGVFBE
aXJlY3RvcnlEb2N1bWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCi0vKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cg
RFJUIHRvIHJ1bik6ICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXZvaWQgZ2V0U3VwcG9y
dGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmlu
ZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4
LCBjb25zdCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVy
biBTdHJpbmcoKTsgfQotZmxvYXQgdXNlcklkbGVUaW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gRkxUX01BWDsgfSAvLyByZXR1cm4gYW4gYXJiaXRyYXJpbHkgaGlnaCB1c2VySWRsZVRp
bWUgc28gdGhhdCByZWxlYXNpbmcgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBpc24ndCBwb3N0
cG9uZWQKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJB
Z2VudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyYjJjMGVmMWU4MDJjMmVlMTgzZmUy
MTc4OTBjMTk2M2IzNTlkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVzZXJBZ2Vu
dEd0ay5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaWYgT1MoVU5JWCkKLSNpbmNsdWRlIDxz
eXMvdXRzbmFtZS5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJTeXN0ZW1JbmZvLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogcGxh
dGZvcm1Gb3JVQVN0cmluZygpCi17Ci0jaWYgUExBVEZPUk0oWDExKQotICAgIHJldHVybiAiWDEx
IjsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuICIiOwotI2VsaWYgUExBVEZPUk0oTUFD
KQotICAgIHJldHVybiAiTWFjaW50b3NoIjsKLSNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19E
SVJFQ1RGQikKLSAgICByZXR1cm4gIkRpcmVjdEZCIjsKLSNlbHNlCi0gICAgcmV0dXJuICJVbmtu
b3duIjsKLSNlbmRpZgotfQotCi1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtVmVyc2lvbkZvclVBU3Ry
aW5nKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdWFPU1ZlcnNpb24sIChT
dHJpbmcoKSkpOwotICAgIGlmICghdWFPU1ZlcnNpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gdWFPU1ZlcnNpb247Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHVhT1NWZXJzaW9uID0gd2lu
ZG93c1ZlcnNpb25Gb3JVQVN0cmluZygpOwotI2VsaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYp
IHx8IENQVShYODZfNjQpCi0gICAgdWFPU1ZlcnNpb24gPSAiSW50ZWwgTWFjIE9TIFgiOwotI2Vs
c2UKLSAgICB1YU9TVmVyc2lvbiA9ICJQUEMgTWFjIE9TIFgiOwotI2VuZGlmCi0jZWxpZiBPUyhV
TklYKQotICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7Ci0gICAgaWYgKHVuYW1lKCZuYW1lKSAhPSAt
MSkKLSAgICAgICAgdWFPU1ZlcnNpb24gPSBTdHJpbmc6OmZvcm1hdCgiJXMgJXMiLCBuYW1lLnN5
c25hbWUsIG5hbWUubWFjaGluZSk7Ci0gICAgZWxzZQotICAgICAgICB1YU9TVmVyc2lvbiA9IFN0
cmluZygiVW5rbm93biIpOwotI2Vsc2UKLSAgICB1YU9TVmVyc2lvbiA9IFN0cmluZygiVW5rbm93
biIpOwotI2VuZGlmCi0gICAgcmV0dXJuIHVhT1NWZXJzaW9uOwotfQotCi1TdHJpbmcgc3RhbmRh
cmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYg
YXBwbGljYXRpb25WZXJzaW9uKQotewotICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgdXNlciBhZ2Vu
dCBzdHJpbmcgd2l0aCBhIGxpYmVyYWwgaW50ZXJwcmV0YXRpb24gb2YgCi0gICAgLy8gaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Vc2VyX0FnZW50X1N0cmluZ3NfUmVm
ZXJlbmNlCi0gICAgLy8KLSAgICAvLyBGb3JtaW5nIGEgZnVuY3Rpb25hbCB1c2VyIGFnZW50IGlz
IHJlYWxseSBkaWZmaWN1bHQuIFdlIG11c3QgbWVudGlvbiBTYWZhcmksIGJlY2F1c2Ugc29tZQot
ICAgIC8vIHNpdGVzIGNoZWNrIGZvciB0aGF0IHdoZW4gZGV0ZWN0aW5nIFdlYktpdCBicm93c2Vy
cy4gQWRkaXRpb25hbGx5IHNvbWUgc2l0ZXMgYXNzdW1lIHRoYXQKLSAgICAvLyBicm93c2VycyB0
aGF0IGFyZSAiU2FmYXJpIiBidXQgbm90IHJ1bm5pbmcgb24gT1MgWCBhcmUgdGhlIFNhZmFyaSBp
T1MgYnJvd3Nlciwgc28gd2UKLSAgICAvLyBhbHNvIGNsYWltIHRvIGJlICBDaHJvbWl1bS4gR2V0
dGluZyB0aGlzIHdyb25nIGNhbiBjYXVzZSBzaXRlcyB0byBsb2FkIHRoZSB3cm9uZyBKYXZhU2Ny
aXB0LAotICAgIC8vIENTUywgb3IgY3VzdG9tIGZvbnRzLiBJbiBzb21lIGNhc2VzIHNpdGVzIHdv
bid0IGxvYWQgcmVzb3VyY2VzIGF0IGFsbC4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IENTdHJpbmcsIHVhVmVyc2lvbiwgKFN0cmluZzo6Zm9ybWF0KCIlaS4laSIsIFVTRVJfQUdFTlRf
R1RLX01BSk9SX1ZFUlNJT04sIFVTRVJfQUdFTlRfR1RLX01JTk9SX1ZFUlNJT04pLnV0ZjgoKSkp
OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdGF0aWNVQSwgKFN0cmlu
Zzo6Zm9ybWF0KCJNb3ppbGxhLzUuMCAoJXM7ICVzKSBBcHBsZVdlYktpdC8lcyAoS0hUTUwsIGxp
a2UgR2Vja28pICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiQ2hyb21pdW0vMjUuMC4xMzQ5LjIgQ2hyb21lLzI1LjAuMTM0
OS4yIFNhZmFyaS8lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1Gb3JVQVN0cmluZygpLCBwbGF0Zm9ybVZl
cnNpb25Gb3JVQVN0cmluZygpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFWZXJzaW9uLmRhdGEo
KSwgdWFWZXJzaW9uLmRhdGEoKSkpKTsKLSAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY1VBOwotCi0gICAgU3RyaW5nIGZpbmFsQXBwbGljYXRp
b25WZXJzaW9uID0gYXBwbGljYXRpb25WZXJzaW9uOwotICAgIGlmIChmaW5hbEFwcGxpY2F0aW9u
VmVyc2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uID0gdWFW
ZXJzaW9uLmRhdGEoKTsKLQotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMgJXMvJXMiLCBz
dGF0aWNVQS51dGY4KCkuZGF0YSgpLCBhcHBsaWNhdGlvbk5hbWUudXRmOCgpLmRhdGEoKSwgZmlu
YWxBcHBsaWNhdGlvblZlcnNpb24udXRmOCgpLmRhdGEoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJB
Z2VudEd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzE3NTMzZTA3MzA0NTc0YzAyYzlhNjc5MmM1
NmE5NTU3MjJhOWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFVzZXJBZ2VudEd0a19oCi0jZGVmaW5lIFVzZXJBZ2VudEd0a19o
Ci0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIHN0YW5kYXJkVXNlckFn
ZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lID0gIiIsIGNvbnN0IFN0cmluZyYgYXBw
bGljYXRpb25WZXJzaW9uID0gIiIpOwotCi19Ci0KLSNlbmRpZiAvLyBVc2VyQWdlbnRHdGtfaAot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggYTY4YmY0
ZDFmMzM3NjY1NzBiZTE0ZDYwMDk2MzlhYmEwNjliMWU0NS4uYTljZTVjNWRiNzFkMGQ1ZjZmYzgz
NTQ2MWUwNjUwNzRiOTIxMjU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL1BPVEZJTEVTLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9Q
T1RGSUxFUy5pbgpAQCAtMSw4ICsxLDggQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2gg
Y29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5ncy4KIEVycm9yc0d0ay5jcHAKLUd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmNwcAotTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKIC4uL2dyYXBoaWNzL2d0
ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcAorLi4vLi4vLi4vUGxhdGZvcm0vZ3Rr
L0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorLi4vLi4vLi4vUGxhdGZvcm0vZ3RrL0xvY2Fs
aXplZFN0cmluZ3NHdGsuY3BwCiAuLi8uLi8uLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5jcHAKIC4uLy4uLy4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29u
dGV4dE1lbnVDbGllbnRHdGsuY3BwCiAuLi8uLi8uLi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Z3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM0MjNmYTVkZWQyMjZkZWI5N2NlNzMzYjE3ZWRjMTliYjdjZDY5NDcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSUdB
TElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0
b3JlLmgiCi0KLSNkZWZpbmUgU0VDUkVUX1dJVEhfVU5TVEFCTEUgMQotI2RlZmluZSBTRUNSRVRf
QVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgotI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNyZWRlbnRpYWxCYWNraW5nU3Rv
cmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSwgYmFja2luZ1N0b3JlLCAoKSk7Ci0gICAgcmV0dXJuIGJh
Y2tpbmdTdG9yZTsKLX0KLQotc3RhdGljIEdSZWZQdHI8R0hhc2hUYWJsZT4gY3JlYXRlQXR0cmli
dXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsID0gQ3JlZGVudGlhbCgpKQot
ewotICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGNoYWxsZW5nZS5zb3Vw
TWVzc2FnZSgpKTsKLSAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdS
ZWYoc2VjcmV0X2F0dHJpYnV0ZXNfYnVpbGQoCi0gICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFU
X05FVFdPUkssCi0gICAgICAgICJkb21haW4iLCBzb3VwX2F1dGhfZ2V0X3JlYWxtKGNoYWxsZW5n
ZS5zb3VwQXV0aCgpKSwKLSAgICAgICAgInNlcnZlciIsIHVyaS0+aG9zdCwKLSAgICAgICAgInBy
b3RvY29sIiwgdXJpLT5zY2hlbWUsCi0gICAgICAgICJhdXRodHlwZSIsIHNvdXBfYXV0aF9nZXRf
c2NoZW1lX25hbWUoY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAotICAgICAgICAicG9ydCIsIHVyaS0+
cG9ydCwKLSAgICAgICAgTlVMTCkpOwotICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0KLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGF0dHJp
YnV0ZXMuZ2V0KCksIGdfc3RyZHVwKCJ1c2VyIiksIGdfc3RyZHVwKGNyZWRlbnRpYWwudXNlcigp
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlczsKLX0KLQotc3RydWN0IENy
ZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhIHsKLSAgICBDcmVkZW50
aWFsQmFja2luZ1N0b3JlOjpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2s7
Ci0gICAgdm9pZCogZGF0YTsKLX07Ci0KLXN0YXRpYyB2b2lkIGNyZWRlbnRpYWxGb3JDaGFsbGVu
Z2VBc3luY1JlYWR5Q2FsbGJhY2soU2VjcmV0U2VydmljZSogc2VydmljZSwgR0FzeW5jUmVzdWx0
KiBhc3luY1Jlc3VsdCwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0Rh
dGEqIGNhbGxiYWNrRGF0YSkKLXsKLSAgICBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpDcmVkZW50
aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2sgPSBjYWxsYmFja0RhdGEtPmNhbGxiYWNr
OwotICAgIHZvaWQqIGRhdGEgPSBjYWxsYmFja0RhdGEtPmRhdGE7Ci0gICAgZGVsZXRlIGNhbGxi
YWNrRGF0YTsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHT3duUHRyPEdMaXN0
PiBlbGVtZW50cyhzZWNyZXRfc2VydmljZV9zZWFyY2hfZmluaXNoKHNlcnZpY2UsIGFzeW5jUmVz
dWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoZXJyb3IgfHwgIWVsZW1lbnRzIHx8ICFl
bGVtZW50cy0+ZGF0YSkgewotICAgICAgICBjYWxsYmFjayhDcmVkZW50aWFsKCksIGRhdGEpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1JlZlB0cjxTZWNyZXRJdGVtPiBzZWNyZXRJ
dGVtID0gYWRvcHRHUmVmKHN0YXRpY19jYXN0PFNlY3JldEl0ZW0qPihlbGVtZW50cy0+ZGF0YSkp
OwotICAgIEdSZWZQdHI8R0hhc2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihzZWNyZXRf
aXRlbV9nZXRfYXR0cmlidXRlcyhzZWNyZXRJdGVtLmdldCgpKSk7Ci0gICAgU3RyaW5nIHVzZXIg
PSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVf
bG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ1c2VyIikpKTsKLSAgICBpZiAodXNlci5pc0VtcHR5
KCkpIHsKLSAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgR1JlZlB0cjxTZWNyZXRWYWx1
ZT4gc2VjcmV0VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0X3NlY3JldChzZWNyZXRJ
dGVtLmdldCgpKSk7Ci0gICAgY29uc3QgY2hhciogcGFzc3dvcmREYXRhID0gc2VjcmV0X3ZhbHVl
X2dldChzZWNyZXRWYWx1ZS5nZXQoKSwgJmxlbmd0aCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0g
U3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZERhdGEsIGxlbmd0aCk7Ci0KLSAgICBjYWxsYmFjayhD
cmVkZW50aWFsKHVzZXIsIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQp
LCBkYXRhKTsKLX0KLQotdm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpjcmVkZW50aWFsRm9y
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRl
bnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKLXsKLSAgICAv
LyBUaGUgZGVmYXVsdCBmbGFnIG9ubHkgcmV0dXJucyB0aGUgbW9zdCByZWNlbnQgaXRlbSwgbm90
IGFsbCBvZiB0aGVtLgotICAgIFNlY3JldFNlYXJjaEZsYWdzIHNlYXJjaEZsYWdzID0gc3RhdGlj
X2Nhc3Q8U2VjcmV0U2VhcmNoRmxhZ3M+KFNFQ1JFVF9TRUFSQ0hfVU5MT0NLIHwgU0VDUkVUX1NF
QVJDSF9MT0FEX1NFQ1JFVFMpOwotICAgIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5
Q2FsbGJhY2tEYXRhKiBjYWxsYmFja0RhdGEgPSBuZXcgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFz
eW5jUmVhZHlDYWxsYmFja0RhdGE7Ci0gICAgY2FsbGJhY2tEYXRhLT5jYWxsYmFjayA9IGNhbGxi
YWNrOwotICAgIGNhbGxiYWNrRGF0YS0+ZGF0YSA9IGRhdGE7Ci0KLSAgICBzZWNyZXRfc2Vydmlj
ZV9zZWFyY2goCi0gICAgICAgIDAsIC8vIFRoZSBkZWZhdWx0IFNlY3JldFNlcnZpY2UuCi0gICAg
ICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCi0gICAgICAgIGNyZWF0ZUF0dHJpYnV0
ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKS5nZXQoKSwKLSAgICAgICAgc2VhcmNo
RmxhZ3MsCi0gICAgICAgIDAsIC8vIGNhbmNlbGxhYmxlCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlD
YWxsYmFjayksCi0gICAgICAgIGNhbGxiYWNrRGF0YSk7Ci19Ci0KLXZvaWQgQ3JlZGVudGlhbEJh
Y2tpbmdTdG9yZTo6c3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQot
ewotICAgIENTdHJpbmcgdXRmOFBhc3N3b3JkID0gY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0Zjgo
KTsKLSAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBuZXdTZWNyZXRWYWx1ZSA9IGFkb3B0R1JlZihz
ZWNyZXRfdmFsdWVfbmV3KHV0ZjhQYXNzd29yZC5kYXRhKCksIHV0ZjhQYXNzd29yZC5sZW5ndGgo
KSwgInRleHQvcGxhaW4iKSk7Ci0KLSAgICBzZWNyZXRfc2VydmljZV9zdG9yZSgKLSAgICAgICAg
MCwgLy8gVGhlIGRlZmF1bHQgU2VjcmV0U2VydmljZS4KLSAgICAgICAgU0VDUkVUX1NDSEVNQV9D
T01QQVRfTkVUV09SSywKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxs
ZW5nZShjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpLmdldCgpLAotICAgICAgICBTRUNSRVRfQ09MTEVD
VElPTl9ERUZBVUxULAotICAgICAgICBfKCJXZWJLaXRHVEsrIHBhc3N3b3JkIiksCi0gICAgICAg
IG5ld1NlY3JldFZhbHVlLmdldCgpLAotICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQotICAgICAg
ICAwLCAvLyBjYWxsYmFjawotICAgICAgICAwKTsgLy8gZGF0YQotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0
ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDIwZGE5YTE1N2ZiYzE5NmU2Mjg3MDQyMmFjZTllZmU4OTc0OGVlNmQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSUdBTElBIFMuTC4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIENyZWRlbnRpYWxCYWNraW5n
U3RvcmVfaAotCi0jaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCi1jbGFzcyBDcmVkZW50aWFsQmFj
a2luZ1N0b3JlIHsKLVdURl9NQUtFX05PTkNPUFlBQkxFKENyZWRlbnRpYWxCYWNraW5nU3RvcmUp
OwotcHVibGljOgotICAgIGZyaWVuZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVkZW50aWFs
QmFja2luZ1N0b3JlKCk7Ci0gICAgdmlydHVhbCB+Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpIHsg
fQotCi0gICAgdHlwZWRlZiB2b2lkICgqQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrKShj
b25zdCBDcmVkZW50aWFsJiwgdm9pZCogZGF0YSk7Ci0KLSAgICB2b2lkIGNyZWRlbnRpYWxGb3JD
aGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsRm9yQ2hh
bGxlbmdlQ2FsbGJhY2ssIHZvaWQqIGRhdGEpOwotICAgIHZvaWQgc3RvcmVDcmVkZW50aWFsc0Zv
ckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRp
YWwmKTsKLXByaXZhdGU6Ci0gICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpIHsgfQotfTsKLQot
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpOwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDcmVkZW50aWFsQmFja2luZ1N0b3JlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM1ZTVhMDVmYTQ5MTk1ZmIzMGJmNjlkZWQ1NjJkNTQzYjhiNjEwMTguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKLXsKLSAgICAvLyBGSVhNRTog
U2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgotICAgIHJldHVybiAiIjsKLX0KLQotY29uc3QgY2hh
ciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHVz
ZSBzeXN0ZW0gbG9jYWxlLgotICAgIHJldHVybiAiZW5fdXMiOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGQ3ZjkwMzdhMjU3NTNiYzI2ODZhZTdhNDliNGJiOGY5MDEyZjg2OGYuLmQ0
M2UxMzM3YzY1OWY3NzI0MmE0YzAwNjAxMjEzMGVjNTRhMWVmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCkBAIC01MDcsOSArNTA3LDEyIEBAIGxpYlBsYXRmb3JtR3RrMl9sYV9DUFBGTEFHUyA9IFwK
IAktREdUS19BUElfVkVSU0lPTl8yPTEgXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJJChwbGF0
Zm9ybWd0a19jcHBmbGFncykgXAorCSQocGxhdGZvcm1fd2ViY29yZV9jcHBmbGFncykgXAogCSQo
amF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCi0JJChH
VEsyX0NGTEFHUykKKwkkKEdUSzJfQ0ZMQUdTKSBcCisJJChMSUJTRUNSRVRfQ0ZMQUdTKSBcCisJ
JChMSUJTT1VQX0NGTEFHUykKIAogIyBJbmplY3RlZCBCdW5kbGUKIGluamVjdGVkYnVuZGxlZGly
ID0gJChsaWJkaXIpL3dlYmtpdDJndGstMy4wL2luamVjdGVkLWJ1bmRsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXggOTVkNzZhYmQwOGI3
OTYwMjU2ZTZhOGVjZGNkZDZkMmQzODU1MTU3Ny4uMjZhOTgxMWMxZmJjNmRmYjcwNDFmYzUzMzVj
OWJiYmJkZGI0YmRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdl
YktleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oCkBAIC0zNyw4ICszNyw4IEBAIE9CSkNfQ0xBU1MgTlNWaWV3OwogI2luY2x1
ZGUgPFFLZXlFdmVudD4KICNlbGlmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlIDxHT3duUHRyR3Rr
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblJlc3VsdHMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0d0a0lucHV0TWV0aG9kRmlsdGVyLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vQ29tcG9z
aXRpb25SZXN1bHRzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrSW5wdXRNZXRob2RGaWx0ZXIu
aD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2VsaWYgUExBVEZPUk0oRUZM
KQogI2luY2x1ZGUgPEV2YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvV2ViRXZlbnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50
RmFjdG9yeS5oCmluZGV4IDA4NTgxNWM0MmQ0NzdiMTJlZGY5NmQxNTY4OTI2YTlmZjhhZmU2Yzcu
LjEyMzQyMDgwZDkyMjA0MDAzMzRjNWMyMjk3YTk0YjNkNDBkM2NiMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMjgsNyArMjgsNyBAQAogI2Rl
ZmluZSBXZWJFdmVudEZhY3RvcnlfaAogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0NvbXBv
c2l0aW9uUmVzdWx0cy5oPgogCiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudElt
cGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwCmluZGV4IGJmNjE2MjQwYTAxZmJmMzg5ODAxNzEyNzhhOGI2NjdhY2M4YTZlODEuLjNiMTJj
MzZhMDljNjQwNzFjMTMyZTE0YmJlYWM0Y2Q3MjkwNjQyYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTM4LDkgKzM4
LDkgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eUd0ay5oIgorI2luY2x1
ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtV
dGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKaW5k
ZXggOWZmMjE0ZTkwMjZmZTcyNTQxYzAzMzRjYWViYWY5ZDkzZjkxOTBmZS4uODQ3NDI2ODE0M2I4
OTAxZTBkM2ZkMDlmOWY1ZjM3MmVmNjY2MGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmgKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZS5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAKaW5kZXggMDY4YTI4Y2Rk
YzViMDRhMGNmMjU0ZWRhZWY4NDM5MWRkNDlmNDY2Mi4uY2FlNmJmM2I2OGY3Y2QzZmIzNDE2MTNm
YjYyZTI2YTUwZGYwZjA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcApAQCAtMjUsNyArMjUsNyBAQAog
I2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0
a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcAppbmRleCBlZGRlMjg5ZGVk
YjRmNzM1MDRhZmE3MTdiYWZmZWI2MjQ2YWMyYzcwLi4wOGI5YjM0NTI5NzJjOGRjMzQ4YzVmM2Ew
OGNiNzgwZWYwYjY5Zjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0U2V0dGluZ3MuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiV2Vi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBZ2VudEd0ay5oPgorI2luY2x1ZGUg
PFBsYXRmb3JtL1VzZXJBZ2VudEd0ay5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKaW5kZXggMDg5OWI4NTYzODk0YTQw
MDVhMTI4MzFmNjVlM2Y5ZWIyYjY3MjhjOC4uOWQ2NmFlNTA0N2ZhYzY0ZDE2YjQ0YzE4MjEzMGYx
ODYyMTJhOTVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0VUlDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIldlYktpdFdl
YlZpZXdQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUu
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxp
dGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
OGQ1NGI1ZmMzNWM3YzE1ZWVkNGRmOWIzZjYwMmViMzIzMmMyM2NkZS4uZmM3YjYxZGMwM2RiMjI0
MDYyYTc2NDRlODhiNmEwNmY4MGYyMjc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTU2LDkgKzU2LDkgQEAKICNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3Bl
cnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRHJhZ0ljb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3Jt
L0RyYWdJY29uLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgorI2luY2x1ZGUg
PFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8u
aD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBiYTcyZGRjODY5OGVkNWQ1MDIyMDRmZTAyOWI0MzI0
YWY3ZDZlY2JmLi5mOTVjM2YyMDJjN2M2MTY2Yjg5ODQ1ZDVjMmNhNDQxODU0ZTcwMDBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCkBAIC00MSwxNiArNDEsMTYgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJWaWV3
QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgiCisjaW5jbHVkZSA8UGxhdGZvcm0vRHJhZ0ljb24uaD4K
KyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CiAjaW5jbHVkZSA8UGxhdGZvcm0vR3Rr
VmVyc2lvbmluZy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a0NsaWNrQ291bnRlci5oPgorI2lu
Y2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJv
YXJkR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdE
YXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EcmFnSWNvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R093blB0ckd0ay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrQ2xpY2tDb3VudGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HdGtEcmFnQW5kRHJvcEhlbHBlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZEhlbHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVm
UHRyQ2Fpcm8uaD4KQEAgLTY3LDcgKzY3LDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKSAmJiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQotI2luY2x1ZGUgPFdlYkNv
cmUvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oPgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3
QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwCmluZGV4IDhiODdjMTUyMjAyYTYy
OWVhNDdmMDFhNDJiZmRlZGI3MTQwYmU1ZGEuLjQwYTQwOTAxMzlmNWM2ZjQxOWFkZDI5ZTBlNjhm
NmY5NTYwNjU4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0yMyw4
ICsyMyw4IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgPFBsYXRmb3JtL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ29sb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwCmluZGV4IDdlN2ViMDE2NzU4MjFhNWFiMmUzZGE0MmNjMjVlNjBhZTE3MThiOWEuLmQ4
MGQyNDRmM2IxMWVjYzY2NTUxNTE5OTBmNjNiOTVjZDRkYjQ2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAg
LTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsu
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CiAKIFdlYlZpZXdUZXN0OjpXZWJW
aWV3VGVzdCgpCiAgICAgOiBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9z
aW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKaW5kZXggZWQyYjRkZjhm
MGRhNDU5MDg4NDM1ODM5ZGI2ZDM4Y2E5Yzk3MDAzZi4uNWFkZjI1OGRhOGFjNDQyMmJhNDg3Y2Ew
YzQ1MGIwODIyNjQ2YjU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+CiAj
aW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3Rr
LmNwcAppbmRleCBlYWJkMmQ2YjQxOTU5MGFkOThmZTMzOWFkYzc3M2Q2ZWNmMjNmNmE5Li4zMmIy
MTE2ZDU3MzE2MTUwNTM0MTlhY2UzMzQwOTQ0YjIwZjc0ZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApAQCAtMzIs
OCArMzIsOCBAQAogCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRpbGl0aWVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
dGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5j
bHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggZjQ1ZDdl
MzRiMWQzMzI1OTRlMDIyNTVhZjJkODY4ZDg4YzU1YTQzMS4uN2QyOTFhNzI0ODE1Y2ZhYWY4ODgw
NzQ5MTE1NzVjYWM1YzgzYjVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUGFnZVByb3h5R3RrLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIldlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFnZW50R3Rr
Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vVXNlckFnZW50R3RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0
a3guaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCmluZGV4IGE0MTgzOWEzZWI5NzY0
ZWQ0NzM0YWYyZTk3Njg0NzdlOTBlZjM0MjcuLjc5ZDAxOGIyMWYzMDI2OGIxOGJiZWIwYTgyNzVm
NzE4YjBkZmQ4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
UG9wdXBNZW51UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJO
YXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRp
ZXMuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAppbmRleCA0YjMzNWJjZGU2
NTQ1OTAwYjA0MjM5NzY1YTJhYTEyMzNkZjdkYTM0Li5lMTY3NWQxZWQwN2Y4MzMzNzM3MzcxNzE0
MmJlMzQ3YmUzZGNjZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYlBvcHVwTWVudVByb3h5R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFdlYlBv
cHVwTWVudVByb3h5R3RrX2gKIAogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9HdGtQb3B1cE1lbnUuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtQb3B1
cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBlMTMzYzA2NGY0YzA4ODBjMDFjNTcwZTk3MGY1MWE3YTAxODdmMDJmLi41
Njk1NTI4OWQ5NzdlNWQzYWExNTJkZWNhMWY0MGZlZjM4M2ZhMDZmIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMt
MDMtMTggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdIE1pZ3JhdGUgR1RLLXNwZWNpZmljLCBub24tbGF5ZXItdmlvbGF0aW5nIHNvdXJjZSBjb2Rl
IHRvIFNvdXJjZS9QbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEyNTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVmZXJlbmNlIHRoZSBwbGF0Zm9ybWd0a19j
cHBmbGFncyB2YXJpYWJsZSBpbiB0aGUgbGliV2ViQ29yZUludGVybmFscy5sYSBDUFBGTEFHUyBs
aXN0LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW06IEFkanN1dCB0aGUg
cGF0aHMgdG8gR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGFuZCBJbnRSZWN0R3RrLmNwcCwgdGhl
IGZpbGVzIGhhdmUKKyAgICAgICAgbW92ZWQgdG8gU291cmNlL1BsYXRmb3JtLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHA6IEluY2x1ZGUgdGhlIEdP
d25QdHJHdGsuaCBoZWFkZXIgdGhyb3VnaCB0aGUgZm9yd2FyZGluZyBoZWFkZXIgcG9pbnRpbmcK
KyAgICAgICAgdG8gdGhlIFBsYXRmb3JtIGZyYW1ld29yay4KKwogMjAxMy0wMy0xNSAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MTQ0ODg0Pyk6IFdlYktpdDIuRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMgQVBJIHRlc3QgaXMgYXNz
ZXJ0aW5nCmRpZmYgLS1naXQgYS9Ub29scy9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDBkMTg0ZDA3NWJhMjFhMDA5YTE2MWFjOTQ0NmZmNGE1MWYzYjJmZDQuLmRm
YzQyNjBjMWUyMDFlZTRhMDRhMzk2NTA3NjFmY2MyMjkxMjY3ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC04Myw2ICs4Myw3
IEBAIEJVSUxUX1NPVVJDRVMgKz0gJChsaWJ3ZWJjb3JlaW50ZXJuYWxzX2J1aWx0X3NvdXJjZXMp
CiAKIGxpYldlYkNvcmVJbnRlcm5hbHNfbGFfQ1BQRkxBR1MgPSBcCiAJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKKwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBc
CiAJJCh3ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykg
XApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXggMzQ0ZjYwYjQ1MjUyOWNhNmYwZmJj
ZWJlMmY1MDE2ODkwZDJlMzg5OC4uZDI1M2IyNWRiYWJjZWUzMGRkMjJjMjY1MTAyMDc2ODlmOWJj
YzRhNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC05NiwxMCArOTYsMTAgQEAg
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xERkxBR1MgPSBcCiAJJChQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERGTEFHUykKIAogUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9U
ZXN0R3RrX1NPVVJDRVMgPSBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZp
bHRlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAogCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvY29uZmlnLmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
Z3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
UGxhdGZvcm1XZWJWaWV3R3RrLmNwcAppbmRleCBiYTZmYWIwNDg0MGMxMjc3YzZmYjEzMTc3ZjEy
MjY2NzU2NzQ3YzIxLi4xMzk2ZGE5ZjlhY2VlZGNmZTZhOThiMWFmNjlhZTVhZDJkMzgyZTlhIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAKQEAg
LTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdl
YlZpZXcuaCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvR093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBs
YXRmb3JtL0dPd25QdHJHdGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggZmZkYmU5YWVhYTAwZDBiOGIwZGY0OWQzZWY0MmRiZjIxOTNmZjhjNC4uYjYxY2VmOTM1
NGRlMmYwMjY1OWE4NjcxYzMyYzcxYzgzMzljMTZmMCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAzLTE4ICBaYW4gRG9iZXJzZWsg
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVj
aWZpYywgbm9uLWxheWVyLXZpb2xhdGluZyBzb3VyY2UgY29kZSB0byBTb3VyY2UvUGxhdGZvcm0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjU0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IERlZmluZSB0aGUgbmV3IHBsYXRmb3JtX3dlYmNvcmVfY3BwZmxhZ3MgdmFyaWFi
bGUuCisKIDIwMTMtMDMtMTUgIEphZSBIeXVuIFBhcmsgIDxqYWUucGFya0Bjb21wYW55MTAwLm5l
dD4KIAogICAgICAgICBbR1RLXSBhY2NlbGVyYXRpb25fYmFja2VuZF9kZXNjcmlwdGlvbiBkb2Vz
IG5vdCBjb25jYXRlbmF0ZSAiKGdsZXMyIgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9H
TlVtYWtlZmlsZS5hbQppbmRleCAxMjk2ZmIwZTYzZGQ4YjlhYTViNTk4YmNjOGY0NzFmZDI2Yzdj
YTQ0Li5iOWRiODliYjUxNDJiM2IxZjc4ZGI1NDFiNTBlZmU5ODdiZTkzNGRjIDEwMDY0NAotLS0g
YS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtNzAsNiArNzAsNyBAQCBq
YXZhc2NyaXB0Y29yZV9idWlsdF9zb3VyY2VzIDo9CiBqYXZhc2NyaXB0Y29yZV9idWlsdF9ub3Nv
dXJjZXMgOj0KIGxsaW50X25vc291cmNlcyA6PQogb2ZmbGluZWFzbV9ub3NvdXJjZXMgOj0KK3Bs
YXRmb3JtX3dlYmNvcmVfY3BwZmxhZ3MgOj0KIHBsYXRmb3JtZ3RrX2NwcGZsYWdzIDo9CiBwbGF0
Zm9ybWd0a19zb3VyY2VzIDo9CiB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgOj0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194074</attachid>
            <date>2013-03-20 09:15:54 -0700</date>
            <delta_ts>2013-03-26 10:02:13 -0700</delta_ts>
            <desc>Provisional patch</desc>
            <filename>bug-112546-20130320171143.patch</filename>
            <type>text/plain</type>
            <size>62681</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MzE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4Zjc1YTExZjIyMGVi
M2RmZjJiNjg2Zjg1NDcwOTU0NDQ0NGE1MmE4Li4xYTljZmU3N2FjOTAyNzEzOGExZmZkZDJiNmEw
NGNhN2MyMGYzZGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMy0yMCAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTWln
cmF0ZSBHVEstc3BlY2lmaWMsIG5vbi1sYXllci12aW9sYXRpbmcgc291cmNlIGNvZGUgdG8gU291
cmNlL1BsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTI1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFJl
bW92ZWQuCisKIDIwMTMtMDMtMTkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDYyNzcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDhiY2E2YTNlZGFmMzgxNThhMDc1MTVhMjgzYzNkYThkMjQ5ZWM5Yi4uMDI4ZDQyYjdlNmIzMzEw
ZTgyMGNjYmY3ZDIzNmU3ZjliNzMwMWI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisy
MDEzLTAzLTIwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVjaWZpYywgbm9uLWxheWVyLXZpb2xhdGluZyBzb3VyY2Ug
Y29kZSB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMjU0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtWZXJzaW9uaW5nLmMuCisgICAgICAgIChndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUpOgor
ICAgICAgICAoZ3RrX2FkanVzdG1lbnRfY29uZmlndXJlKToKKyAgICAgICAgKGdldERlZmF1bHRH
REtQb2ludGVyRGV2aWNlKToKKyAgICAgICAgKGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKToK
KyAgICAgICAgKGJsYW5rQ3Vyc29yKToKKyAgICAgICAgKGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVs
KToKKyAgICAgICAgKGdka19jYWlyb19mb3JtYXRfZm9yX2NvbnRlbnQpOgorICAgICAgICAoZ2Rr
X2NhaXJvX3N1cmZhY2VfY29lcmNlX3RvX2ltYWdlKToKKyAgICAgICAgKGNvbnZlcnRfYWxwaGEp
OgorICAgICAgICAoY29udmVydF9ub19hbHBoYSk6CisgICAgICAgIChnZGtfcGl4YnVmX2dldF9m
cm9tX3N1cmZhY2UpOgorICAgICAgICAoZ2V0R2RrRHJhd2FibGVTaXplKToKKyAgICAgICAgKGdf
c2lnbmFsX2FjY3VtdWxhdG9yX2ZpcnN0X3dpbnMpOgorICAgICAgICAoZ2RrX3dpbmRvd19jcmVh
dGVfc2ltaWxhcl9zdXJmYWNlKToKKyAgICAgICAgKGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKToK
KyAgICAgICAgKGdldFNjcmVlbldvcmtBcmVhKToKKyAgICAgICAgKGdka19zY3JlZW5fZ2V0X21v
bml0b3Jfd29ya2FyZWEpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaC4KKwogMjAx
My0wMy0yMCAgUGFuIERlbmcgIDxwYW4uZGVuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogW05ldHdvcmtdIEZpeCB0aGUgYnVnIG9mIFdlYlNvY2tldEZyYW1lVmlldyBjcmFz
aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCA2ZGNiMmMzY2RiMmNjNzY0ZjJiZWZkNTZkYWZmM2Y5ZDk5
NDQ3ZTdkLi5kYjBmMTEyZGRkZGU5NDIwMjc0NWFmMzFjY2VjYTdlNzk3ZGYwNjU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMDMtMjAgIFphbiBEb2JlcnNlayAgPHpk
b2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1pZ3JhdGUgR1RLLXNwZWNpZmlj
LCBub24tbGF5ZXItdmlvbGF0aW5nIHNvdXJjZSBjb2RlIHRvIFNvdXJjZS9QbGF0Zm9ybQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNTQ2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKwogMjAxMy0wMy0xNyAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9y
Zz4KIAogICAgICAgICBbR1RLXSBGaXggYW5kIGltcHJvdmUgZGlzdCBob29rcyBmb3IgdHJhbnNs
YXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGNjYmJjYmMxYmIyMTQ1ODIwNzJjODhkZGQ0NGRjNTAwNTU0
ZGY0OS4uYjdkMzdhYTNkYmYyMTZkZTNiOWVhNWVkNWVlY2E0NzQ1NDZjNmExNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAzLTIwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVjaWZpYywgbm9uLWxh
eWVyLXZpb2xhdGluZyBzb3VyY2UgY29kZSB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjU0NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHA6CisgICAgICAgICogU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcDoKKwogMjAxMy0wMy0xOSAgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+IGFuZCBNaWtoYWlsIFBvemRu
eWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dL
Ml0gU2VwYXJhdGUgV2ViVmlldyBmdXJ0aGVyIGZyb20gRXdrVmlldwpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDVmOTYwY2I0NWZhNWE0OTNmYTNhMDE0ZWQxYzY1ZjJiZjEyNmZjOWMuLmI0MGJj
MzJjYzAyMTJhMDkxNzg0ZjdkMWQyZGEyYWIwNzgwNjhlZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9Q
bGF0Zm9ybS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUu
YW0KQEAgLTYsMTEgKzYsMzQgQEAKICMgRm9yIG5vdyB3ZSBvbmx5IGJ1aWxkIHRoZSBsaWJQbGF0
Zm9ybUd0ayBsaWJyYXJ5IGFzIHRoZXJlIGFyZSBubyBzb3VyY2UgZmlsZXMgaW4gcGxhY2UgeWV0
CiAjIHRoYXQgY291bGQgYmUgYnVpbHQgaW50byBsaWJQbGF0Zm9ybS4KIAotaW5jbHVkZSAkKHNy
Y2RpcikvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0KLQogcGxhdGZvcm1ndGtf
Y3BwZmxhZ3MgKz0gXAogCS1EV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORz1cIkBXRUJLSVRH
VEtfQVBJX1ZFUlNJT05AXCIgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9ybS9ndGsKKwkt
SSQoc3JjZGlyKS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMgXAorCS1JJChzcmNkaXIpL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORyBcCisJLUkkKHNyY2RpcikvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvaW5jbHVkZS9LSFIgXAorCS1EREFUQV9ESVI9XCIke2RhdGFkaXJ9XCIKKwor
IyBUaGlzIGlzIHRoZSBtaW5pbWFsIHNldCBvZiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybSBzdWJk
aXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaGVhZGVycyByZXF1aXJlZCBieSB0aGUgR1RLLXNwZWNp
ZmljCisjIHBsYXRmb3JtIHNvdXJjZSBmaWxlcy4gVGhlc2UgaW5jbHVzaW9ucyBhcmUgcmVxdWly
ZWQgZHVlIHRvIHBsYXRmb3JtIGxheWVyIHNvdXJjZSBmaWxlcyBub3QgeWV0IGNvbXBsZXRlbHkg
bWlncmF0ZWQKKyMgaW50byBTb3VyY2UvUGxhdGZvcm0uIE9ubHkgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0gc3ViZGlyZWN0b3JpZXMgbXVzdCBiZSBsaXN0ZWQgaGVyZSBhcyB0aGlzLCBjb3VwbGVk
IHdpdGggdGhlCisjIGhlYWRlciBpbmNsdXNpb24gaW4gc291cmNlIGZpbGVzIHRoYXQncyBkb25l
IHZpYSBzcGVjaWZ5aW5nIHRoZSBoZWFkZXIgYmFzZW5hbWUsIHByZXZlbnRzIGFueSBwbGF0Zm9y
bSB2aW9sYXRpb25zCisjIG9jY3VycmluZy4KK3BsYXRmb3JtX3dlYmNvcmVfY3BwZmxhZ3MgKz0g
XAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtIFwKKwktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWlybyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBc
CisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrIFwKKwktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0CiAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJbGliUGxhdGZvcm1H
dGsubGEKQEAgLTMwLDYgKzUzLDkgQEAgbGliUGxhdGZvcm1HdGtfbGFfQ1BQRkxBR1MgPSBcCiAJ
LURCVUlMRElOR19XRUJLSVQgXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJJChwbGF0Zm9ybWd0
a19jcHBmbGFncykgXAorCSQocGxhdGZvcm1fd2ViY29yZV9jcHBmbGFncykgXAogCSQoamF2YXNj
cmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCi0JJChHVEtfQ0ZM
QUdTKQorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU0VDUkVUX0NGTEFHUykgXAorCSQoTElCU09V
UF9DRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmlsZS5saXN0LmFtCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3OTZiZWNmYjcyZTM3YmVmZWI2N2FkNTUxOGY2Mjk4NzllYTQ2NjMxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9QbGF0
Zm9ybS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1w
bGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKLQlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuYyBcCi0JU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtWZXJzaW9uaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMmY4NGMy
ZWY4ODY2YzAzYzA2ZjE2ZGMyMTU5ZmZlYTk5N2NkYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5n
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotCi0jaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKLSNpbmNsdWRlIDxYMTEvWGF0b20uaD4K
LSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2VuZGlmCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMTQsIDApCi12b2lkIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShHdGtBZGp1c3RtZW50KiBh
ZGp1c21lbnQsIGdkb3VibGUgdmFsdWUpCi17Ci0gICAgICAgIG1fYWRqdXN0bWVudC0+dmFsdWUg
PSBtX2N1cnJlbnRQb3M7Ci0gICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9h
ZGp1c3RtZW50KTsKLX0KLQotdm9pZCBndGtfYWRqdXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0
bWVudCogYWRqdXN0bWVudCwgZ2RvdWJsZSB2YWx1ZSwgZ2RvdWJsZSBsb3dlciwgZ2RvdWJsZSB1
cHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgc3RlcEluY3JlbWVu
dCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VTaXplKQotewotICAgIGdfb2Jq
ZWN0X2ZyZWV6ZV9ub3RpZnkoR19PQkpFQ1QoYWRqdXN0bWVudCkpOwotCi0gICAgZ19vYmplY3Rf
c2V0KGFkanVzdG1lbnQsCi0gICAgICAgICAgICAgICAgICJsb3dlciIsIGxvd2VyLAotICAgICAg
ICAgICAgICAgICAidXBwZXIiLCB1cHBlciwKLSAgICAgICAgICAgICAgICAgInN0ZXAtaW5jcmVt
ZW50Iiwgc3RlcEluY3JlbWVudCwKLSAgICAgICAgICAgICAgICAgInBhZ2UtaW5jcmVtZW50Iiwg
cGFnZUluY3JlbWVudCwKLSAgICAgICAgICAgICAgICAgInBhZ2Utc2l6ZSIsIHBhZ2VTaXplLAot
ICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGdfb2JqZWN0X3RoYXdfbm90aWZ5KEdfT0JK
RUNUKGFkanVzdG1lbnQpKTsKLQotICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQoYWRqdXN0bWVu
dCk7Ci0gICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChhZGp1c3RtZW50KTsKLX0KLSNl
bmRpZgotCi1HZGtEZXZpY2UgKmdldERlZmF1bHRHREtQb2ludGVyRGV2aWNlKEdka1dpbmRvdyog
d2luZG93KQotewotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0RldmljZU1hbmFn
ZXIgKm1hbmFnZXIgPSAgZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka193aW5kb3df
Z2V0X2Rpc3BsYXkod2luZG93KSk7Ci0gICAgcmV0dXJuIGdka19kZXZpY2VfbWFuYWdlcl9nZXRf
Y2xpZW50X3BvaW50ZXIobWFuYWdlcik7Ci0jZWxzZQotICAgIHJldHVybiBnZGtfZGV2aWNlX2dl
dF9jb3JlX3BvaW50ZXIoKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgotfQotCi0jaWYg
IUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQotdm9pZCBnZGtfd2luZG93X2dldF9yb290X2Nv
b3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4LCBnaW50IHksIGdpbnQqIHJvb3RYLCBnaW50
KiByb290WSkKLXsKLSAgICBnZGtfd2luZG93X2dldF9yb290X29yaWdpbih3aW5kb3csIHJvb3RY
LCByb290WSk7Ci0gICAgKnJvb3RYID0gKnJvb3RYICsgeDsKLSAgICAqcm9vdFkgPSAqcm9vdFkg
KyB5OwotfQotI2VuZGlmCi0KLUdka0N1cnNvciAqIGJsYW5rQ3Vyc29yKCkKLXsKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLSAgICByZXR1cm4gZ2RrX2N1cnNvcl9uZXcoR0RLX0JM
QU5LX0NVUlNPUik7Ci0jZWxzZQotICAgIEdka0N1cnNvciAqIGN1cnNvcjsKLSAgICBHZGtQaXht
YXAgKiBzb3VyY2U7Ci0gICAgR2RrUGl4bWFwICogbWFzazsKLSAgICBHZGtDb2xvciBmb3JlZ3Jv
dW5kID0geyAwLCA2NTUzNSwgMCwgMCB9OyAvLyBSZWQuCi0gICAgR2RrQ29sb3IgYmFja2dyb3Vu
ZCA9IHsgMCwgMCwgMCwgNjU1MzUgfTsgLy8gQmx1ZS4KLSAgICBzdGF0aWMgZ2NoYXIgY3Vyc29y
Qml0c1tdID0gezB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwfTsKLQotICAg
IHNvdXJjZSA9IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgwLCBjdXJzb3JCaXRzLCA4LCA4
KTsKLSAgICBtYXNrID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMs
IDgsIDgpOwotICAgIGN1cnNvciA9IGdka19jdXJzb3JfbmV3X2Zyb21fcGl4bWFwKHNvdXJjZSwg
bWFzaywgJmZvcmVncm91bmQsICZiYWNrZ3JvdW5kLCA4LCA4KTsKLSAgICBnZGtfcGl4bWFwX3Vu
cmVmKHNvdXJjZSk7Ci0gICAgZ2RrX3BpeG1hcF91bnJlZihtYXNrKTsKLSAgICByZXR1cm4gY3Vy
c29yOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotfQotCi0jaWYgIUdU
S19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotY29uc3QgZ2NoYXIqIGd0a19tZW51X2l0ZW1fZ2V0
X2xhYmVsKEd0a01lbnVJdGVtKiBtZW51SXRlbSkKLXsKLSAgICBHdGtXaWRnZXQgKiBsYWJlbCA9
IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obWVudUl0ZW0pKTsKLSAgICBpZiAoR1RLX0lTX0xB
QkVMKGxhYmVsKSkKLSAgICAgICAgcmV0dXJuIGd0a19sYWJlbF9nZXRfdGV4dChHVEtfTEFCRUwo
bGFiZWwpKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNiwgMCkKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMgY2Fpcm9fZm9ybWF0
X3QKLWdka19jYWlyb19mb3JtYXRfZm9yX2NvbnRlbnQoY2Fpcm9fY29udGVudF90IGNvbnRlbnQp
Ci17Ci0gICAgc3dpdGNoIChjb250ZW50KSB7Ci0gICAgY2FzZSBDQUlST19DT05URU5UX0NPTE9S
OgotICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX1JHQjI0OwotICAgIGNhc2UgQ0FJUk9fQ09O
VEVOVF9BTFBIQToKLSAgICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9BODsKLSAgICBjYXNlIENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEE6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENB
SVJPX0ZPUk1BVF9BUkdCMzI7Ci0gICAgfQotfQotCi1zdGF0aWMgY2Fpcm9fc3VyZmFjZV90Kgot
Z2RrX2NhaXJvX3N1cmZhY2VfY29lcmNlX3RvX2ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19jb250ZW50X3QgY29u
dGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCkKLXsKLSAgICBjYWlyb19z
dXJmYWNlX3QgKiBjb3B5OwotICAgIGNhaXJvX3QgKiBjcjsKLQotICAgIGlmIChjYWlyb19zdXJm
YWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAg
ICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IGNvbnRlbnQKLSAgICAg
ICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSkgPj0gd2lkdGgKLSAg
ICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpID49IGhlaWdo
dCkKLSAgICAgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpOwotCi0g
ICAgY29weSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKGdka19jYWlyb19mb3JtYXRfZm9y
X2NvbnRlbnQoY29udGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpOwot
Ci0gICAgY3IgPSBjYWlyb19jcmVhdGUoY29weSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ciwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IpOwotICAgIGNhaXJvX2Rlc3Ry
b3koY3IpOwotCi0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb252ZXJ0X2Fs
cGhhKGd1Y2hhciAqIGRlc3REYXRhLCBpbnQgZGVzdFN0cmlkZSwKLSAgICAgICAgICAgICAgZ3Vj
aGFyICogc3JjRGF0YSwgaW50IHNyY1N0cmlkZSwKLSAgICAgICAgICAgICAgaW50IHNyY1gsIGlu
dCBzcmNZLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaW50IHgsIHk7Ci0KLSAgICBz
cmNEYXRhICs9IHNyY1N0cmlkZSAqIHNyY1kgKyBzcmNZICogNDsKLQotICAgIGZvciAoeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICBndWludDMyICogc3JjID0gKGd1aW50MzIgKikg
c3JjRGF0YTsKLQotICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAg
ICAgICAgZ3VpbnQgYWxwaGEgPSBzcmNbeF0gPj4gMjQ7Ci0KLSAgICAgICAgICAgIGlmICghYWxw
aGEpIHsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDBdID0gMDsKLSAgICAgICAg
ICAgICAgICBkZXN0RGF0YVt4ICogNCArIDFdID0gMDsKLSAgICAgICAgICAgICAgICBkZXN0RGF0
YVt4ICogNCArIDJdID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZGVzdERhdGFbeCAqIDQgKyAwXSA9ICgoKHNyY1t4XSAmIDB4ZmYwMDAwKSA+PiAxNikgKiAyNTUg
KyBhbHBoYSAvIDIpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAx
XSA9ICgoKHNyY1t4XSAmIDB4MDBmZjAwKSA+PiAgOCkgKiAyNTUgKyBhbHBoYSAvIDIpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAyXSA9ICgoKHNyY1t4XSAmIDB4
MDAwMGZmKSA+PiAgMCkgKiAyNTUgKyBhbHBoYSAvIDIpIC8gYWxwaGE7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzcmNEYXRhICs9IHNyY1N0cmlkZTsKLSAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0
cmlkZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb252ZXJ0X25vX2FscGhhKGd1Y2hhciAq
IGRlc3REYXRhLCBpbnQgZGVzdFN0cmlkZSwgZ3VjaGFyICogc3JjRGF0YSwKLSAgICAgICAgICAg
ICAgICAgaW50IHNyY1N0cmlkZSwgaW50IHNyY1gsIGludCBzcmNZLAotICAgICAgICAgICAgICAg
ICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaW50IHgsIHk7Ci0KLSAgICBzcmNEYXRh
ICs9IHNyY1N0cmlkZSAqIHNyY1kgKyBzcmNYICogNDsKLQotICAgIGZvciAoeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykgewotICAgICAgICBndWludDMyICogc3JjID0gKGd1aW50MzIgKikgc3JjRGF0
YTsKLQotICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgICAgICAg
ZGVzdERhdGFbeCAqIDMgKyAwXSA9IHNyY1t4XSA+PiAxNjsKLSAgICAgICAgICAgIGRlc3REYXRh
W3ggKiAzICsgMV0gPSBzcmNbeF0gPj4gIDg7Ci0gICAgICAgICAgICBkZXN0RGF0YVt4ICogMyAr
IDJdID0gc3JjW3hdOwotICAgICAgICB9Ci0KLSAgICAgICAgc3JjRGF0YSArPSBzcmNTdHJpZGU7
Ci0gICAgICAgIGRlc3REYXRhICs9IGRlc3RTdHJpZGU7Ci0gICAgfQotfQotCi0vKioKLSAqIGdk
a19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZToKLSAqIEBzdXJmYWNlOiBzdXJmYWNlIHRvIGNvcHkg
ZnJvbQotICogQHNyY194OiBTb3VyY2UgWCBjb29yZGluYXRlIHdpdGhpbiBAc3VyZmFjZQotICog
QHNyY195OiBTb3VyY2UgWSBjb29yZGluYXRlIHdpdGhpbiBAc3VyZmFjZQotICogQHdpZHRoOiBX
aWR0aCBpbiBwaXhlbHMgb2YgcmVnaW9uIHRvIGdldAotICogQGhlaWdodDogSGVpZ2h0IGluIHBp
eGVscyBvZiByZWdpb24gdG8gZ2V0Ci0gKgotICogVHJhbnNmZXJzIGltYWdlIGRhdGEgZnJvbSBh
ICNjYWlyb19zdXJmYWNlX3QgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIFJHQihBKQotICogcmVwcmVz
ZW50YXRpb24gaW5zaWRlIGEgI0dka1BpeGJ1Zi4gVGhpcyBhbGxvd3MgeW91IHRvIGVmZmljaWVu
dGx5IHJlYWQKLSAqIGluZGl2aWR1YWwgcGl4ZWxzIGZyb20gY2Fpcm8gc3VyZmFjZXMuIEZvciAj
R2RrV2luZG93cywgdXNlCi0gKiBnZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdygpIGluc3RlYWQu
Ci0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhbiBSR0IgcGl4YnVmIHdpdGggOCBi
aXRzIHBlciBjaGFubmVsLiBUaGUgcGl4YnVmCi0gKiB3aWxsIGNvbnRhaW4gYW4gYWxwaGEgY2hh
bm5lbCBpZiB0aGUgQHN1cmZhY2UgY29udGFpbnMgb25lLgotICoKLSAqIFJldHVybiB2YWx1ZTog
KHRyYW5zZmVyIGZ1bGwpOiBBIG5ld2x5LWNyZWF0ZWQgcGl4YnVmIHdpdGggYSByZWZlcmVuY2Ug
Y291bnQKLSAqIG9mIDEsIG9yICVOVUxMIG9uIGVycm9yCi0gKiovCi1HZGtQaXhidWYqCi1nZGtf
cGl4YnVmX2dldF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90ICogc3VyZmFjZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjWCwgaW50IHNyY1ksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGNhaXJvX2NvbnRl
bnRfdCBjb250ZW50OwotICAgIEdka1BpeGJ1ZiAqIGRlc3Q7Ci0KLSAgICAvKiBHZW5lcmFsIHNh
bml0eSBjaGVja3MgKi8KLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdXJmYWNlLCBOVUxMKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzcmNYID49IDAgJiYgc3JjWSA+PSAwLCBOVUxMKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCwgTlVMTCk7
Ci0KLSAgICBjb250ZW50ID0gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSB8IENB
SVJPX0NPTlRFTlRfQ09MT1I7Ci0gICAgZGVzdCA9IGdka19waXhidWZfbmV3KEdES19DT0xPUlNQ
QUNFX1JHQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgISEoY29udGVudCAmIENBSVJPX0NP
TlRFTlRfQUxQSEEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICA4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHN1cmZhY2UgPSBnZGtfY2Fpcm9f
c3VyZmFjZV9jb2VyY2VfdG9faW1hZ2Uoc3VyZmFjZSwgY29udGVudCwgc3JjWCArIHdpZHRoLCBz
cmNZICsgaGVpZ2h0KTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UpOwotICAgIGlm
IChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSB8fCAhZGVzdCkgewotICAgICAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LQotICAgIGlmIChnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoZGVzdCkpCi0gICAgICAgIGNvbnZl
cnRfYWxwaGEoZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzKGRlc3QpLAotICAgICAgICAgICAgICAgICAg
ICAgICBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoZGVzdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgc3JjWCwgc3JjWSwKLSAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGgsIGhlaWdodCk7Ci0gICAgZWxzZQotICAgICAgICBjb252ZXJ0X25vX2FscGhhKGdka19waXhi
dWZfZ2V0X3BpeGVscyhkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3BpeGJ1
Zl9nZXRfcm93c3RyaWRlKGRlc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHNyY1gsIHNyY1ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotICAgIHJl
dHVybiBkZXN0OwotfQotCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjQsIDApCi12b2lkIGdl
dEdka0RyYXdhYmxlU2l6ZShHZGtEcmF3YWJsZSAqZHJhd2FibGUsIGludCAqd2lkdGgsIGludCAq
aGVpZ2h0KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoR0RLX0lTX1BJWE1BUChkcmF3YWJsZSkg
fHwgR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpOwotCi0gICAgaWYgKEdES19JU19QSVhNQVAoZHJh
d2FibGUpKSB7Ci0gICAgICAgIGdka19waXhtYXBfZ2V0X3NpemUoR0RLX1BJWE1BUChkcmF3YWJs
ZSksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR2RrV2lu
ZG93ICp3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICAqd2lkdGggPSBnZGtfd2lu
ZG93X2dldF93aWR0aCh3aW5kb3cpOwotICAgICpoZWlnaHQgPSBnZGtfd2luZG93X2dldF9oZWln
aHQod2luZG93KTsKLX0KLSNlbHNlCi12b2lkIGdldEdka0RyYXdhYmxlU2l6ZShHZGtEcmF3YWJs
ZSAqZHJhd2FibGUsIGludCAqd2lkdGgsIGludCAqaGVpZ2h0KQotewotICAgIGdka19kcmF3YWJs
ZV9nZXRfc2l6ZShkcmF3YWJsZSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0jZW5kaWYgLy8gR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMjQsIDApCi0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgotCi0j
aWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNywgMSkKLWdib29sZWFuIGdfc2lnbmFsX2FjY3Vt
dWxhdG9yX2ZpcnN0X3dpbnMoR1NpZ25hbEludm9jYXRpb25IaW50ICppbnZvY2F0aW9uSGludCwg
R1ZhbHVlICpyZXR1cm5BY2N1bXVsYXRvciwgY29uc3QgR1ZhbHVlICpoYW5kbGVyUmV0dXJuLCBn
cG9pbnRlciBkYXRhKQotewotICAgIGdfdmFsdWVfY29weShoYW5kbGVyUmV0dXJuLCByZXR1cm5B
Y2N1bXVsYXRvcik7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotI2VuZGlmCi0KLSNpZiAhR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMjIsIDApCi1jYWlyb19zdXJmYWNlX3QgKmdka193aW5kb3dfY3JlYXRl
X3NpbWlsYXJfc3VyZmFjZShHZGtXaW5kb3cgKndpbmRvdywgY2Fpcm9fY29udGVudF90IGNvbnRl
bnQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBjYWlyb190ICpjYWlyb0NvbnRleHQg
PSBnZGtfY2Fpcm9fY3JlYXRlKHdpbmRvdyk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90ICpjYWlyb1N1
cmZhY2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNhaXJvQ29udGV4dCk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV90ICpuZXdTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcihjYWlyb1N1cmZh
Y2UsIGNvbnRlbnQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGNhaXJvX2Rlc3Ryb3koY2Fpcm9Db250
ZXh0KTsKLSAgICByZXR1cm4gbmV3U3VyZmFjZTsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMiwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCA2KQotI2lmZGVm
IEdES19XSU5ET1dJTkdfWDExCi1zdGF0aWMgaW50IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKEdk
a1NjcmVlbiAqc2NyZWVuKQotewotICAgIERpc3BsYXkgKmRpc3BsYXkgPSBHREtfRElTUExBWV9Y
RElTUExBWShnZGtfc2NyZWVuX2dldF9kaXNwbGF5KHNjcmVlbikpOwotICAgIFdpbmRvdyByb290
V2luZG93ID0gWFJvb3RXaW5kb3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVNQkVSKHNjcmVlbikp
OwotICAgIEF0b20gY3VycmVudERlc2t0b3AgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9D
VVJSRU5UX0RFU0tUT1AiLCBUcnVlKTsKLQotICAgIEF0b20gdHlwZTsKLSAgICBpbnQgZm9ybWF0
OwotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXNDb3VudCwgYnl0ZXNBZnRlcjsKLSAgICB1bnNpZ25l
ZCBjaGFyICpyZXR1cm5lZERhdGEgPSBOVUxMOwotICAgIFhHZXRXaW5kb3dQcm9wZXJ0eShkaXNw
bGF5LCByb290V2luZG93LCBjdXJyZW50RGVza3RvcCwgMCwgR19NQVhMT05HLCBGYWxzZSwgWEFf
Q0FSRElOQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRlbXND
b3VudCwgJmJ5dGVzQWZ0ZXIsICZyZXR1cm5lZERhdGEpOwotCi0gICAgaW50IHdvcmtzcGFjZSA9
IDA7Ci0gICAgaWYgKHR5cGUgPT0gWEFfQ0FSRElOQUwgJiYgZm9ybWF0ID09IDMyICYmIGl0ZW1z
Q291bnQgPiAwKQotICAgICAgICB3b3Jrc3BhY2UgPSAoaW50KXJldHVybmVkRGF0YVswXTsKLQot
ICAgIGlmIChyZXR1cm5lZERhdGEpCi0gICAgICAgIFhGcmVlKHJldHVybmVkRGF0YSk7Ci0KLSAg
ICByZXR1cm4gd29ya3NwYWNlOwotfQotCi1zdGF0aWMgdm9pZCBnZXRTY3JlZW5Xb3JrQXJlYShH
ZGtTY3JlZW4gKnNjcmVlbiwgR2RrUmVjdGFuZ2xlICphcmVhKQotewotICAgIERpc3BsYXkgKmRp
c3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfc2NyZWVuX2dldF9kaXNwbGF5KHNjcmVl
bikpOwotICAgIEF0b20gd29ya0FyZWEgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9XT1JL
QVJFQSIsIFRydWUpOwotCi0gICAgLyogRGVmYXVsdHMgaW4gY2FzZSBvZiBlcnJvci4gKi8KLSAg
ICBhcmVhLT54ID0gMDsKLSAgICBhcmVhLT55ID0gMDsKLSAgICBhcmVhLT53aWR0aCA9IGdka19z
Y3JlZW5fZ2V0X3dpZHRoKHNjcmVlbik7Ci0gICAgYXJlYS0+aGVpZ2h0ID0gZ2RrX3NjcmVlbl9n
ZXRfaGVpZ2h0KHNjcmVlbik7Ci0KLSAgICBpZiAod29ya0FyZWEgPT0gTm9uZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgV2luZG93IHJvb3RXaW5kb3cgPSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBH
REtfU0NSRUVOX1hOVU1CRVIoc2NyZWVuKSk7Ci0gICAgQXRvbSB0eXBlOwotICAgIGludCBmb3Jt
YXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOwotICAgIHVuc2ln
bmVkIGNoYXIgKnJldHVybmVkRGF0YSA9IDA7Ci0gICAgaW50IHJlc3VsdCA9IFhHZXRXaW5kb3dQ
cm9wZXJ0eShkaXNwbGF5LCByb290V2luZG93LCB3b3JrQXJlYSwgMCwgNCAqIDMyIC8qIE1heCBs
ZW5ndGggKi8sIEZhbHNlLCBBbnlQcm9wZXJ0eVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmdHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVyLCAm
cmV0dXJuZWREYXRhKTsKLSAgICBpZiAocmVzdWx0ICE9IFN1Y2Nlc3MgfHwgdHlwZSA9PSBOb25l
IHx8ICFmb3JtYXQgfHwgYnl0ZXNBZnRlciB8fCBpdGVtc0NvdW50ICUgNCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaW50IGRlc2t0b3AgPSBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChzY3JlZW4p
OwotICAgIGxvbmcgKndvcmtBcmVhcyA9IChsb25nICopcmV0dXJuZWREYXRhOwotICAgIGFyZWEt
PnggPSB3b3JrQXJlYXNbZGVza3RvcCAqIDRdOwotICAgIGFyZWEtPnkgPSB3b3JrQXJlYXNbZGVz
a3RvcCAqIDQgKyAxXTsKLSAgICBhcmVhLT53aWR0aCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCAr
IDJdOwotICAgIGFyZWEtPmhlaWdodCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCArIDNdOwotCi0g
ICAgWEZyZWUocmV0dXJuZWREYXRhKTsKLX0KLSNlbmRpZiAvLyBHREtfV0lORE9XSU5HX1gxMQot
Ci12b2lkIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICpzY3JlZW4s
IGludCBtb25pdG9yLCBHZGtSZWN0YW5nbGUgKmFyZWEpCi17Ci0gICAgZ2RrX3NjcmVlbl9nZXRf
bW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIGFyZWEpOwotCi0jaWZkZWYgR0RLX1dJ
TkRPV0lOR19YMTEKLSAgICBHZGtSZWN0YW5nbGUgd29ya0FyZWE7Ci0gICAgZ2V0U2NyZWVuV29y
a0FyZWEoc2NyZWVuLCAmd29ya0FyZWEpOwotICAgIGdka19yZWN0YW5nbGVfaW50ZXJzZWN0KCZ3
b3JrQXJlYSwgYXJlYSwgYXJlYSk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCAzLCA2KQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9u
aW5nLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNjYWM2MzNhMGQxNWJkOTc4MDNkMDViMTZlNWY2MzQxMjUzYThh
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrVmVyc2lvbmlu
Z19oCi0jZGVmaW5lIEd0a1ZlcnNpb25pbmdfaAotCi0jaW5jbHVkZSAiYXV0b3Rvb2xzY29uZmln
LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0j
aW5jbHVkZSA8Z2RrL2dka2tleXN5bXMtY29tcGF0Lmg+Ci0jZW5kaWYKLQotR19CRUdJTl9ERUNM
UwotCi0vLyBNYWNyb3MgdG8gYXZvaWQgZGVwcmVjYXRpb24gY2hlY2tpbmcgY2h1cm4KLSNpZm5k
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSNkZWZpbmUgR0RLX1dJTkRPV19YV0lORE9XKHdpbmRvdykg
KGdka194MTFfd2luZG93X2dldF94aWQod2luZG93KSkKLSNlbHNlCi1HZGtQaXhidWYqIGdka19w
aXhidWZfZ2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGludCBzcmNY
LCBpbnQgc3JjWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3
aWR0aCwgaW50IGhlaWdodCk7Ci12b2lkIGdldEdka0RyYXdhYmxlU2l6ZShHZGtEcmF3YWJsZSog
ZHJhd2FibGUsIGludCogd2lkdGgsIGludCogaGVpZ2h0KTsKLSNlbmRpZgotCi0jaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDIzLCA0KQotI2RlZmluZSBnZGtfcGl4bWFwX2dldF9zaXplIGdka19k
cmF3YWJsZV9nZXRfc2l6ZQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCA0KQot
Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCAwKQotI2RlZmluZSBnZGtfd2luZG93X2dl
dF9kaXNwbGF5KHdpbmRvdykgZ2RrX2RyYXdhYmxlX2dldF9kaXNwbGF5KHdpbmRvdykKLSNkZWZp
bmUgZ2RrX3dpbmRvd19nZXRfdmlzdWFsIGdka19kcmF3YWJsZV9nZXRfdmlzdWFsCi0jZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMjIsIDApCi1jYWlyb19zdXJmYWNlX3QqIGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3Vy
ZmFjZShHZGtXaW5kb3cqIHdpbmRvdywgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCi0K
LSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjEsIDIpCi0jZGVmaW5lIGdka192aXN1YWxfZ2V0
X2RlcHRoKHZpc3VhbCkgKHZpc3VhbCktPmRlcHRoCi0jZGVmaW5lIGdka192aXN1YWxfZ2V0X2Jp
dHNfcGVyX3JnYih2aXN1YWwpICh2aXN1YWwpLT5iaXRzX3Blcl9yZ2IKLSNkZWZpbmUgZ2RrX2Ry
YWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpIChjb250ZXh0KS0+YWN0aW9u
Ci0jZGVmaW5lIGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkgKGNvbnRleHQp
LT5hY3Rpb25zCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjEsIDIpCi0KLSNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAsIDApCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X3JlYWxp
emVkKHdpZGdldCkgR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpCi0jZGVmaW5lIGd0a193aWRn
ZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSkgR1RLX1dJREdFVF9TRVRfRkxBR1MoKHdpZGdl
dCksIEdUS19SRUFMSVpFRCkKLSNkZWZpbmUgZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3NpemUo
cmFuZ2UpIChyYW5nZSktPm1pbl9zbGlkZXJfc2l6ZQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDIwLCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE5LCAwKQotI2RlZmlu
ZSBndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHdpZGdldCkgR1RLX1dJREdFVF9UT1BMRVZFTCh3aWRn
ZXQpCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkgR1RLX1dJREdFVF9S
RUFMSVpFRCh3aWRnZXQpCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X2hhc193aW5kb3cod2lkZ2V0
KSAhR1RLX1dJREdFVF9OT19XSU5ET1cod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9j
YW5fZm9jdXMod2lkZ2V0KSBHVEtfV0lER0VUX0NBTl9GT0NVUyh3aWRnZXQpCi0jZGVmaW5lIGd0
a193aWRnZXRfaXNfc2Vuc2l0aXZlKHdpZGdldCkgR1RLX1dJREdFVF9JU19TRU5TSVRJVkUod2lk
Z2V0KQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE5LCAwKQotCi0jaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDE4LCAwKQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdp
ZGdldCwgRkFMU0UpIEdUS19XSURHRVRfVU5TRVRfRkxBR1MoKHdpZGdldCksIEdUS19WSVNJQkxF
KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF92aXNpYmxlKHdpZGdldCkgKEdUS19XSURHRVRfRkxB
R1Mod2lkZ2V0KSAmIEdUS19WSVNJQkxFKQotCi0jZGVmaW5lIGd0a193aWRnZXRfc2V0X3dpbmRv
dyh3aWRnZXQsIG5ld193aW5kb3cpICh3aWRnZXQpLT53aW5kb3cgPSAobmV3X3dpbmRvdykKLSNk
ZWZpbmUgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKHdpZGdldCwgVFJVRSkgR1RLX1dJREdFVF9T
RVRfRkxBR1MoKHdpZGdldCksIEdUS19DQU5fRk9DVVMpCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0
X2FsbG9jYXRpb24od2lkZ2V0LCBhbGxvYykgKCooYWxsb2MpID0gKHdpZGdldCktPmFsbG9jYXRp
b24pCi0jZGVmaW5lIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCBhbGxvYykgKCh3
aWRnZXQpLT5hbGxvY2F0aW9uID0gKihhbGxvYykpCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMTgsIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCi12b2lkIGdk
a193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQg
eSwgZ2ludCogcm9vdFgsIGdpbnQqIHJvb3RZKTsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNywgMykKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLWNvbnN0IGdj
aGFyKiBndGtfbWVudV9pdGVtX2dldF9sYWJlbChHdGtNZW51SXRlbSopOwotI2VuZGlmIC8vIEdU
S19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwg
MTQsIDApCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpICh3aWRnZXQpLT53
aW5kb3cKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkaikgKGFkaiktPnZhbHVl
Ci0jZGVmaW5lIGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpIChkaWFsb2cpLT52
Ym94Ci0jZGVmaW5lIGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRpYWxvZykgKGRpYWxvZykt
PmFjdGlvbl9hcmVhCi0jZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEp
IChkYXRhKS0+bGVuZ3RoCi0jZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRh
KSAoZGF0YSktPmRhdGEKLSNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90YXJnZXQoZGF0
YSkgKGRhdGEpLT50YXJnZXQKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShh
ZGosIG5ld1ZhbHVlKSAoKGFkaiktPnBhZ2Vfc2l6ZSA9IG5ld1ZhbHVlKQotI2RlZmluZSBndGtf
YWRqdXN0bWVudF9zZXRfdmFsdWUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT52YWx1ZSA9IG5ld1Zh
bHVlKQotI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqLCBuZXdWYWx1ZSkgKChh
ZGopLT5sb3dlciA9IG5ld1ZhbHVlKQotI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfdXBwZXIo
YWRqLCBuZXdWYWx1ZSkgKChhZGopLT51cHBlciA9IG5ld1ZhbHVlKQotCi12b2lkIGd0a19hZGp1
c3RtZW50X2NvbmZpZ3VyZShHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVl
LCBnZG91YmxlIGxvd2VyLCBnZG91YmxlIHVwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2RvdWJsZSBzdGVwSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3Vi
bGUgcGFnZVNpemUpOwotCi12b2lkIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShHdGtBZGp1c3Rt
ZW50KiBhZGp1c21lbnQsIGdkb3VibGUgdmFsdWUpOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE0LCAwKQotCi1HZGtEZXZpY2UqIGdldERlZmF1bHRHREtQb2ludGVyRGV2aWNlKEdk
a1dpbmRvdyogd2luZG93KTsKLUdka0N1cnNvciogYmxhbmtDdXJzb3IoKTsKLQotI2lmICFHTElC
X0NIRUNLX1ZFUlNJT04oMiwgMjcsIDEpCi1nYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9m
aXJzdF93aW5zKEdTaWduYWxJbnZvY2F0aW9uSGludCogaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSog
cmV0dXJuQWNjdW11bGF0b3IsIGNvbnN0IEdWYWx1ZSogaGFuZGxlclJldHVybiwgZ3BvaW50ZXIg
ZGF0YSk7Ci0jZW5kaWYKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCA2KQotdm9pZCBn
ZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmthcmVhKEdka1NjcmVlbiAqLCBpbnQgbW9uaXRvciwg
R2RrUmVjdGFuZ2xlICphcmVhKTsKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLy8g
R3RrVmVyc2lvbmluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDBiYTU1N2Q1ODRlN2EzNDdj
MDg0MGI5MjE5MDgwMjYxODUwYjc1YWUuLmEwOTNiNmUzMjRlOTViOTZiZjg3MWI3NGEwNzQxMzhh
NjNiNDAzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDUsOCArMTA1LDcgQEAgd2ViY29y
ZV9jcHBmbGFncyArPSBcCiAJLUkkKHRvcF9idWlsZGRpcikvV2ViQ29yZS9iaW5kaW5ncy9qcyBc
CiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZSBcCiAJLUkkKHRvcF9i
dWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL0phdmFTY3JpcHRDb3JlIFwKLQktRERBVEFfRElSPVwiJHtkYXRhZGlyfVwiCisJLUkkKHRv
cF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUKIAogd2ViY29yZWd0a19j
cHBmbGFncyArPSBcCiAJLURXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HPVwiQFdFQktJVEdU
S19BUElfVkVSU0lPTkBcIiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0Y2Qx
ZmMzOWMyNTMwMmZkMmVkOGEwODcwYzdhMWQ1NmNjODA1YzE2Li5lM2Q4ZmQ5NDcwNmY0NjVhNWE3
ZTRiMDU2MDFjMzJhYmY0MDI5ZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTU3ODMsMTQgKzU3ODMsNiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
YW1lcGFkc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1VzZXJBZ2VudEd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LaWxsUmluZ05vbmUuY3BwIFwKQEAgLTU5NDksOCArNTk0MSw2IEBAIHdlYmNvcmVf
cGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9T
b2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VTb3VwLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwIFwKQEAgLTYwNTMsNyArNjA0Myw2IEBAIHdlYmNvcmVf
cGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtVGlt
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJF
bmNoYW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hl
Y2tlckVuY2hhbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2
ZXIuaCBcCkBAIC02MTcwLDcgKzYxNTksNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9uQXRrLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWlyby9XaWRnZXRCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Vv
Y2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmNwcCBcCkBAIC02MTkzLDk3
ICs2MTgxLDExNSBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9T
aW5rR1N0cmVhbWVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtD
YWlyb1V0aWxpdGllcy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HZGtDYWlyb1V0aWxpdGllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RGF0YU9iamVjdEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2Jq
ZWN0R3RrLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEhlbHBlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkSGVscGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1l
bnVHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbGJhclRoZW1lR3RrLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0azIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGszLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVw
TWVudUd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1l
bnVHdGsuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAor
CitwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q29tcG9zaXRpb25SZXN1bHRzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250
ZXh0TWVudUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVu
dUl0ZW1HdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EcmFnRGF0YUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFn
SWNvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0NsaWNrQ291bnRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtDbGlja0NvdW50ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdB
bmREcm9wSGVscGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVz
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQ
dHJHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRn
ZXQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0Lmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrVXRpbGl0aWVzLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxp
dGllcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvTGFuZ3VhZ2VHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9j
YWxpemVkU3RyaW5nc0d0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dn
aW5nR3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0
cnlHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xs
YmFyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9s
bGJhckd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0azIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGszLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2hhcmVkVGltZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291
bmRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5o
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmggXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1VHdGsuY3BwCiAKIGlmIFRBUkdFVF9YMTEKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAor
cGxhdGZvcm1ndGtfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAKIGlmIFVTRV9PUEVOR0wKIHdlYmNvcmVndGtfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250
ZXh0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250
ZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4
dC5oCitwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAogZW5kaWYgIyBFTkQgVVNFX09Q
RU5HTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuYyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWMyZjg0YzJlZjg4NjZjMDNjMDZmMTZkYzIxNTlmZmVhOTk3Y2RjOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKQEAg
LTAsMCArMSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworI2lmZGVmIEdES19X
SU5ET1dJTkdfWDExCisjaW5jbHVkZSA8WDExL1hhdG9tLmg+CisjaW5jbHVkZSA8Z2RrL2dka3gu
aD4KKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQordm9pZCBndGtf
YWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZh
bHVlKQoreworICAgICAgICBtX2FkanVzdG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9zOworICAg
ICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7Cit9CisKK3Zv
aWQgZ3RrX2FkanVzdG1lbnRfY29uZmlndXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdk
b3VibGUgdmFsdWUsIGdkb3VibGUgbG93ZXIsIGdkb3VibGUgdXBwZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFnZUluY3Jl
bWVudCwgZ2RvdWJsZSBwYWdlU2l6ZSkKK3sKKyAgICBnX29iamVjdF9mcmVlemVfbm90aWZ5KEdf
T0JKRUNUKGFkanVzdG1lbnQpKTsKKworICAgIGdfb2JqZWN0X3NldChhZGp1c3RtZW50LAorICAg
ICAgICAgICAgICAgICAibG93ZXIiLCBsb3dlciwKKyAgICAgICAgICAgICAgICAgInVwcGVyIiwg
dXBwZXIsCisgICAgICAgICAgICAgICAgICJzdGVwLWluY3JlbWVudCIsIHN0ZXBJbmNyZW1lbnQs
CisgICAgICAgICAgICAgICAgICJwYWdlLWluY3JlbWVudCIsIHBhZ2VJbmNyZW1lbnQsCisgICAg
ICAgICAgICAgICAgICJwYWdlLXNpemUiLCBwYWdlU2l6ZSwKKyAgICAgICAgICAgICAgICAgTlVM
TCk7CisKKyAgICBnX29iamVjdF90aGF3X25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7CisK
KyAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKGFkanVzdG1lbnQpOworICAgIGd0a19hZGp1c3Rt
ZW50X3ZhbHVlX2NoYW5nZWQoYWRqdXN0bWVudCk7Cit9CisjZW5kaWYKKworR2RrRGV2aWNlICpn
ZXREZWZhdWx0R0RLUG9pbnRlckRldmljZShHZGtXaW5kb3cqIHdpbmRvdykKK3sKKyNpZm5kZWYg
R1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtEZXZpY2VNYW5hZ2VyICptYW5hZ2VyID0gIGdka19k
aXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KHdpbmRvdykp
OworICAgIHJldHVybiBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFn
ZXIpOworI2Vsc2UKKyAgICByZXR1cm4gZ2RrX2RldmljZV9nZXRfY29yZV9wb2ludGVyKCk7Cisj
ZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKK30KKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNywgMykKK3ZvaWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93KiB3aW5k
b3csIGdpbnQgeCwgZ2ludCB5LCBnaW50KiByb290WCwgZ2ludCogcm9vdFkpCit7CisgICAgZ2Rr
X3dpbmRvd19nZXRfcm9vdF9vcmlnaW4od2luZG93LCByb290WCwgcm9vdFkpOworICAgICpyb290
WCA9ICpyb290WCArIHg7CisgICAgKnJvb3RZID0gKnJvb3RZICsgeTsKK30KKyNlbmRpZgorCitH
ZGtDdXJzb3IgKiBibGFua0N1cnNvcigpCit7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYs
IDApCisgICAgcmV0dXJuIGdka19jdXJzb3JfbmV3KEdES19CTEFOS19DVVJTT1IpOworI2Vsc2UK
KyAgICBHZGtDdXJzb3IgKiBjdXJzb3I7CisgICAgR2RrUGl4bWFwICogc291cmNlOworICAgIEdk
a1BpeG1hcCAqIG1hc2s7CisgICAgR2RrQ29sb3IgZm9yZWdyb3VuZCA9IHsgMCwgNjU1MzUsIDAs
IDAgfTsgLy8gUmVkLgorICAgIEdka0NvbG9yIGJhY2tncm91bmQgPSB7IDAsIDAsIDAsIDY1NTM1
IH07IC8vIEJsdWUuCisgICAgc3RhdGljIGdjaGFyIGN1cnNvckJpdHNbXSA9IHsweDAsIDB4MCwg
MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MH07CisKKyAgICBzb3VyY2UgPSBnZGtfYml0bWFw
X2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29yQml0cywgOCwgOCk7CisgICAgbWFzayA9IGdka19i
aXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgwLCBjdXJzb3JCaXRzLCA4LCA4KTsKKyAgICBjdXJzb3Ig
PSBnZGtfY3Vyc29yX25ld19mcm9tX3BpeG1hcChzb3VyY2UsIG1hc2ssICZmb3JlZ3JvdW5kLCAm
YmFja2dyb3VuZCwgOCwgOCk7CisgICAgZ2RrX3BpeG1hcF91bnJlZihzb3VyY2UpOworICAgIGdk
a19waXhtYXBfdW5yZWYobWFzayk7CisgICAgcmV0dXJuIGN1cnNvcjsKKyNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKK30KKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAx
NiwgMCkKK2NvbnN0IGdjaGFyKiBndGtfbWVudV9pdGVtX2dldF9sYWJlbChHdGtNZW51SXRlbSog
bWVudUl0ZW0pCit7CisgICAgR3RrV2lkZ2V0ICogbGFiZWwgPSBndGtfYmluX2dldF9jaGlsZChH
VEtfQklOKG1lbnVJdGVtKSk7CisgICAgaWYgKEdUS19JU19MQUJFTChsYWJlbCkpCisgICAgICAg
IHJldHVybiBndGtfbGFiZWxfZ2V0X3RleHQoR1RLX0xBQkVMKGxhYmVsKSk7CisgICAgcmV0dXJu
IDA7Cit9CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCisKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorc3RhdGljIGNhaXJvX2Zvcm1hdF90CitnZGtfY2Fpcm9fZm9ybWF0
X2Zvcl9jb250ZW50KGNhaXJvX2NvbnRlbnRfdCBjb250ZW50KQoreworICAgIHN3aXRjaCAoY29u
dGVudCkgeworICAgIGNhc2UgQ0FJUk9fQ09OVEVOVF9DT0xPUjoKKyAgICAgICAgcmV0dXJuIENB
SVJPX0ZPUk1BVF9SR0IyNDsKKyAgICBjYXNlIENBSVJPX0NPTlRFTlRfQUxQSEE6CisgICAgICAg
IHJldHVybiBDQUlST19GT1JNQVRfQTg7CisgICAgY2FzZSBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfQVJHQjMyOwor
ICAgIH0KK30KKworc3RhdGljIGNhaXJvX3N1cmZhY2VfdCoKK2dka19jYWlyb19zdXJmYWNlX2Nv
ZXJjZV90b19pbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBoZWlnaHQpCit7CisgICAgY2Fpcm9fc3VyZmFjZV90ICogY29weTsKKyAg
ICBjYWlyb190ICogY3I7CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNl
KSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKKyAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9n
ZXRfY29udGVudChzdXJmYWNlKSA9PSBjb250ZW50CisgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpID49IHdpZHRoCisgICAgICAgICYmIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSA+PSBoZWlnaHQpCisgICAgICAgIHJldHVybiBj
YWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKTsKKworICAgIGNvcHkgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZShnZGtfY2Fpcm9fZm9ybWF0X2Zvcl9jb250ZW50KGNvbnRlbnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKKworICAgIGNyID0gY2Fpcm9fY3Jl
YXRlKGNvcHkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAsIDApOwor
ICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICBjYWlyb19kZXN0cm95KGNyKTsKKworICAgIHJldHVy
biBjb3B5OworfQorCitzdGF0aWMgdm9pZAorY29udmVydF9hbHBoYShndWNoYXIgKiBkZXN0RGF0
YSwgaW50IGRlc3RTdHJpZGUsCisgICAgICAgICAgICAgIGd1Y2hhciAqIHNyY0RhdGEsIGludCBz
cmNTdHJpZGUsCisgICAgICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIGludCB4LCB5OworCisgICAgc3JjRGF0YSArPSBzcmNTdHJpZGUg
KiBzcmNZICsgc3JjWSAqIDQ7CisKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
KyAgICAgICAgZ3VpbnQzMiAqIHNyYyA9IChndWludDMyICopIHNyY0RhdGE7CisKKyAgICAgICAg
Zm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGd1aW50IGFscGhhID0g
c3JjW3hdID4+IDI0OworCisgICAgICAgICAgICBpZiAoIWFscGhhKSB7CisgICAgICAgICAgICAg
ICAgZGVzdERhdGFbeCAqIDQgKyAwXSA9IDA7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAq
IDQgKyAxXSA9IDA7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAyXSA9IDA7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0g
PSAoKChzcmNbeF0gJiAweGZmMDAwMCkgPj4gMTYpICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhh
OworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAoKChzcmNbeF0gJiAweDAw
ZmYwMCkgPj4gIDgpICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOworICAgICAgICAgICAgICAg
IGRlc3REYXRhW3ggKiA0ICsgMl0gPSAoKChzcmNbeF0gJiAweDAwMDBmZikgPj4gIDApICogMjU1
ICsgYWxwaGEgLyAyKSAvIGFscGhhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdERh
dGFbeCAqIDQgKyAzXSA9IGFscGhhOworICAgICAgICB9CisKKyAgICAgICAgc3JjRGF0YSArPSBz
cmNTdHJpZGU7CisgICAgICAgIGRlc3REYXRhICs9IGRlc3RTdHJpZGU7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZAorY29udmVydF9ub19hbHBoYShndWNoYXIgKiBkZXN0RGF0YSwgaW50IGRlc3RT
dHJpZGUsIGd1Y2hhciAqIHNyY0RhdGEsCisgICAgICAgICAgICAgICAgIGludCBzcmNTdHJpZGUs
IGludCBzcmNYLCBpbnQgc3JjWSwKKyAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQoreworICAgIGludCB4LCB5OworCisgICAgc3JjRGF0YSArPSBzcmNTdHJpZGUgKiBzcmNZ
ICsgc3JjWCAqIDQ7CisKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAg
ICAgZ3VpbnQzMiAqIHNyYyA9IChndWludDMyICopIHNyY0RhdGE7CisKKyAgICAgICAgZm9yICh4
ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiAzICsgMF0g
PSBzcmNbeF0gPj4gMTY7CisgICAgICAgICAgICBkZXN0RGF0YVt4ICogMyArIDFdID0gc3JjW3hd
ID4+ICA4OworICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMgKyAyXSA9IHNyY1t4XTsKKyAgICAg
ICAgfQorCisgICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOworICAgICAgICBkZXN0RGF0YSAr
PSBkZXN0U3RyaWRlOworICAgIH0KK30KKworLyoqCisgKiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1
cmZhY2U6CisgKiBAc3VyZmFjZTogc3VyZmFjZSB0byBjb3B5IGZyb20KKyAqIEBzcmNfeDogU291
cmNlIFggY29vcmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UKKyAqIEBzcmNfeTogU291cmNlIFkgY29v
cmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UKKyAqIEB3aWR0aDogV2lkdGggaW4gcGl4ZWxzIG9mIHJl
Z2lvbiB0byBnZXQKKyAqIEBoZWlnaHQ6IEhlaWdodCBpbiBwaXhlbHMgb2YgcmVnaW9uIHRvIGdl
dAorICoKKyAqIFRyYW5zZmVycyBpbWFnZSBkYXRhIGZyb20gYSAjY2Fpcm9fc3VyZmFjZV90IGFu
ZCBjb252ZXJ0cyBpdCB0byBhbiBSR0IoQSkKKyAqIHJlcHJlc2VudGF0aW9uIGluc2lkZSBhICNH
ZGtQaXhidWYuIFRoaXMgYWxsb3dzIHlvdSB0byBlZmZpY2llbnRseSByZWFkCisgKiBpbmRpdmlk
dWFsIHBpeGVscyBmcm9tIGNhaXJvIHN1cmZhY2VzLiBGb3IgI0dka1dpbmRvd3MsIHVzZQorICog
Z2RrX3BpeGJ1Zl9nZXRfZnJvbV93aW5kb3coKSBpbnN0ZWFkLgorICoKKyAqIFRoaXMgZnVuY3Rp
b24gd2lsbCBjcmVhdGUgYW4gUkdCIHBpeGJ1ZiB3aXRoIDggYml0cyBwZXIgY2hhbm5lbC4gVGhl
IHBpeGJ1ZgorICogd2lsbCBjb250YWluIGFuIGFscGhhIGNoYW5uZWwgaWYgdGhlIEBzdXJmYWNl
IGNvbnRhaW5zIG9uZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogQSBu
ZXdseS1jcmVhdGVkIHBpeGJ1ZiB3aXRoIGEgcmVmZXJlbmNlIGNvdW50CisgKiBvZiAxLCBvciAl
TlVMTCBvbiBlcnJvcgorICoqLworR2RrUGl4YnVmKgorZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJm
YWNlKGNhaXJvX3N1cmZhY2VfdCAqIHN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHNyY1gsIGludCBzcmNZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBjYWlyb19jb250ZW50X3QgY29udGVudDsKKyAgICBH
ZGtQaXhidWYgKiBkZXN0OworCisgICAgLyogR2VuZXJhbCBzYW5pdHkgY2hlY2tzICovCisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc3VyZmFjZSwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwod2lkdGggPiAwICYmIGhlaWdodCA+IDAsIE5VTEwpOworCisgICAgY29udGVudCA9IGNh
aXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgfCBDQUlST19DT05URU5UX0NPTE9SOwor
ICAgIGRlc3QgPSBnZGtfcGl4YnVmX25ldyhHREtfQ09MT1JTUEFDRV9SR0IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICEhKGNvbnRlbnQgJiBDQUlST19DT05URU5UX0FMUEhBKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgs
IGhlaWdodCk7CisKKyAgICBzdXJmYWNlID0gZ2RrX2NhaXJvX3N1cmZhY2VfY29lcmNlX3RvX2lt
YWdlKHN1cmZhY2UsIGNvbnRlbnQsIHNyY1ggKyB3aWR0aCwgc3JjWSArIGhlaWdodCk7CisgICAg
Y2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgfHwgIWRlc3QpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1
cmZhY2UpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZ2RrX3BpeGJ1
Zl9nZXRfaGFzX2FscGhhKGRlc3QpKQorICAgICAgICBjb252ZXJ0X2FscGhhKGdka19waXhidWZf
Z2V0X3BpeGVscyhkZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3BpeGJ1Zl9nZXRf
cm93c3RyaWRlKGRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgIHNy
Y1gsIHNyY1ksCisgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOworICAgIGVs
c2UKKyAgICAgICAgY29udmVydF9ub19hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNYLCBz
cmNZLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICByZXR1cm4gZGVzdDsKK30KKworI2lm
IEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2Rr
RHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKEdES19JU19QSVhNQVAoZHJhd2FibGUpIHx8IEdES19JU19XSU5ET1coZHJh
d2FibGUpKTsKKworICAgIGlmIChHREtfSVNfUElYTUFQKGRyYXdhYmxlKSkgeworICAgICAgICBn
ZGtfcGl4bWFwX2dldF9zaXplKEdES19QSVhNQVAoZHJhd2FibGUpLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdka1dpbmRvdyAqd2luZG93ID0gR0RLX1dJ
TkRPVyhkcmF3YWJsZSk7CisgICAgKndpZHRoID0gZ2RrX3dpbmRvd19nZXRfd2lkdGgod2luZG93
KTsKKyAgICAqaGVpZ2h0ID0gZ2RrX3dpbmRvd19nZXRfaGVpZ2h0KHdpbmRvdyk7Cit9CisjZWxz
ZQordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndp
ZHRoLCBpbnQgKmhlaWdodCkKK3sKKyAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUoZHJhd2FibGUs
IHdpZHRoLCBoZWlnaHQpOworfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAw
KQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworI2lmICFHTElCX0NIRUNLX1ZFUlNJ
T04oMiwgMjcsIDEpCitnYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9maXJzdF93aW5zKEdT
aWduYWxJbnZvY2F0aW9uSGludCAqaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSAqcmV0dXJuQWNjdW11
bGF0b3IsIGNvbnN0IEdWYWx1ZSAqaGFuZGxlclJldHVybiwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBnX3ZhbHVlX2NvcHkoaGFuZGxlclJldHVybiwgcmV0dXJuQWNjdW11bGF0b3IpOworICAgIHJl
dHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAw
KQorY2Fpcm9fc3VyZmFjZV90ICpnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoR2Rr
V2luZG93ICp3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgY2Fpcm9fdCAqY2Fpcm9Db250ZXh0ID0gZ2RrX2NhaXJvX2NyZWF0ZSh3
aW5kb3cpOworICAgIGNhaXJvX3N1cmZhY2VfdCAqY2Fpcm9TdXJmYWNlID0gY2Fpcm9fZ2V0X3Rh
cmdldChjYWlyb0NvbnRleHQpOworICAgIGNhaXJvX3N1cmZhY2VfdCAqbmV3U3VyZmFjZSA9IGNh
aXJvX3N1cmZhY2VfY3JlYXRlX3NpbWlsYXIoY2Fpcm9TdXJmYWNlLCBjb250ZW50LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBjYWlyb19kZXN0cm95KGNhaXJvQ29udGV4dCk7CisgICAgcmV0dXJuIG5l
d1N1cmZhY2U7Cit9CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCisKKyNp
ZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQor
c3RhdGljIGludCBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChHZGtTY3JlZW4gKnNjcmVlbikKK3sK
KyAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9n
ZXRfZGlzcGxheShzY3JlZW4pKTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93
KGRpc3BsYXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKKyAgICBBdG9tIGN1cnJlbnRE
ZXNrdG9wID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfQ1VSUkVOVF9ERVNLVE9QIiwgVHJ1
ZSk7CisKKyAgICBBdG9tIHR5cGU7CisgICAgaW50IGZvcm1hdDsKKyAgICB1bnNpZ25lZCBsb25n
IGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7CisgICAgdW5zaWduZWQgY2hhciAqcmV0dXJuZWREYXRh
ID0gTlVMTDsKKyAgICBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRvdywgY3Vy
cmVudERlc2t0b3AsIDAsIEdfTUFYTE9ORywgRmFsc2UsIFhBX0NBUkRJTkFMLAorICAgICAgICAg
ICAgICAgICAgICAgICAmdHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVyLCAm
cmV0dXJuZWREYXRhKTsKKworICAgIGludCB3b3Jrc3BhY2UgPSAwOworICAgIGlmICh0eXBlID09
IFhBX0NBUkRJTkFMICYmIGZvcm1hdCA9PSAzMiAmJiBpdGVtc0NvdW50ID4gMCkKKyAgICAgICAg
d29ya3NwYWNlID0gKGludClyZXR1cm5lZERhdGFbMF07CisKKyAgICBpZiAocmV0dXJuZWREYXRh
KQorICAgICAgICBYRnJlZShyZXR1cm5lZERhdGEpOworCisgICAgcmV0dXJuIHdvcmtzcGFjZTsK
K30KKworc3RhdGljIHZvaWQgZ2V0U2NyZWVuV29ya0FyZWEoR2RrU2NyZWVuICpzY3JlZW4sIEdk
a1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlf
WERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKKyAgICBBdG9tIHdvcmtB
cmVhID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfV09SS0FSRUEiLCBUcnVlKTsKKworICAg
IC8qIERlZmF1bHRzIGluIGNhc2Ugb2YgZXJyb3IuICovCisgICAgYXJlYS0+eCA9IDA7CisgICAg
YXJlYS0+eSA9IDA7CisgICAgYXJlYS0+d2lkdGggPSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3Jl
ZW4pOworICAgIGFyZWEtPmhlaWdodCA9IGdka19zY3JlZW5fZ2V0X2hlaWdodChzY3JlZW4pOwor
CisgICAgaWYgKHdvcmtBcmVhID09IE5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIFdpbmRv
dyByb290V2luZG93ID0gWFJvb3RXaW5kb3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVNQkVSKHNj
cmVlbikpOworICAgIEF0b20gdHlwZTsKKyAgICBpbnQgZm9ybWF0OworICAgIHVuc2lnbmVkIGxv
bmcgaXRlbXNDb3VudCwgYnl0ZXNBZnRlcjsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXR1cm5lZERh
dGEgPSAwOworICAgIGludCByZXN1bHQgPSBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9v
dFdpbmRvdywgd29ya0FyZWEsIDAsIDQgKiAzMiAvKiBNYXggbGVuZ3RoICovLCBGYWxzZSwgQW55
UHJvcGVydHlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUs
ICZmb3JtYXQsICZpdGVtc0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7CisgICAg
aWYgKHJlc3VsdCAhPSBTdWNjZXNzIHx8IHR5cGUgPT0gTm9uZSB8fCAhZm9ybWF0IHx8IGJ5dGVz
QWZ0ZXIgfHwgaXRlbXNDb3VudCAlIDQpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBkZXNr
dG9wID0gZ2V0U2NyZWVuQ3VycmVudERlc2t0b3Aoc2NyZWVuKTsKKyAgICBsb25nICp3b3JrQXJl
YXMgPSAobG9uZyAqKXJldHVybmVkRGF0YTsKKyAgICBhcmVhLT54ID0gd29ya0FyZWFzW2Rlc2t0
b3AgKiA0XTsKKyAgICBhcmVhLT55ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMV07CisgICAg
YXJlYS0+d2lkdGggPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAyXTsKKyAgICBhcmVhLT5oZWln
aHQgPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAzXTsKKworICAgIFhGcmVlKHJldHVybmVkRGF0
YSk7Cit9CisjZW5kaWYgLy8gR0RLX1dJTkRPV0lOR19YMTEKKwordm9pZCBnZGtfc2NyZWVuX2dl
dF9tb25pdG9yX3dvcmthcmVhKEdka1NjcmVlbiAqc2NyZWVuLCBpbnQgbW9uaXRvciwgR2RrUmVj
dGFuZ2xlICphcmVhKQoreworICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2Ny
ZWVuLCBtb25pdG9yLCBhcmVhKTsKKworI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisgICAgR2Rr
UmVjdGFuZ2xlIHdvcmtBcmVhOworICAgIGdldFNjcmVlbldvcmtBcmVhKHNjcmVlbiwgJndvcmtB
cmVhKTsKKyAgICBnZGtfcmVjdGFuZ2xlX2ludGVyc2VjdCgmd29ya0FyZWEsIGFyZWEsIGFyZWEp
OworI2VuZGlmCit9CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzY2Fj
NjMzYTBkMTViZDk3ODAzZDA1YjE2ZTVmNjM0MTI1M2E4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCkBAIC0wLDAgKzEsMTI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrVmVyc2lvbmlu
Z19oCisjZGVmaW5lIEd0a1ZlcnNpb25pbmdfaAorCisjaW5jbHVkZSAiYXV0b3Rvb2xzY29uZmln
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisj
aW5jbHVkZSA8Z2RrL2dka2tleXN5bXMtY29tcGF0Lmg+CisjZW5kaWYKKworR19CRUdJTl9ERUNM
UworCisvLyBNYWNyb3MgdG8gYXZvaWQgZGVwcmVjYXRpb24gY2hlY2tpbmcgY2h1cm4KKyNpZm5k
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyNkZWZpbmUgR0RLX1dJTkRPV19YV0lORE9XKHdpbmRvdykg
KGdka194MTFfd2luZG93X2dldF94aWQod2luZG93KSkKKyNlbHNlCitHZGtQaXhidWYqIGdka19w
aXhidWZfZ2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGludCBzcmNY
LCBpbnQgc3JjWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3
aWR0aCwgaW50IGhlaWdodCk7Cit2b2lkIGdldEdka0RyYXdhYmxlU2l6ZShHZGtEcmF3YWJsZSog
ZHJhd2FibGUsIGludCogd2lkdGgsIGludCogaGVpZ2h0KTsKKyNlbmRpZgorCisjaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDIzLCA0KQorI2RlZmluZSBnZGtfcGl4bWFwX2dldF9zaXplIGdka19k
cmF3YWJsZV9nZXRfc2l6ZQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCA0KQor
CisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCAwKQorI2RlZmluZSBnZGtfd2luZG93X2dl
dF9kaXNwbGF5KHdpbmRvdykgZ2RrX2RyYXdhYmxlX2dldF9kaXNwbGF5KHdpbmRvdykKKyNkZWZp
bmUgZ2RrX3dpbmRvd19nZXRfdmlzdWFsIGdka19kcmF3YWJsZV9nZXRfdmlzdWFsCisjZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDApCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMjIsIDApCitjYWlyb19zdXJmYWNlX3QqIGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3Vy
ZmFjZShHZGtXaW5kb3cqIHdpbmRvdywgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCisK
KyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjEsIDIpCisjZGVmaW5lIGdka192aXN1YWxfZ2V0
X2RlcHRoKHZpc3VhbCkgKHZpc3VhbCktPmRlcHRoCisjZGVmaW5lIGdka192aXN1YWxfZ2V0X2Jp
dHNfcGVyX3JnYih2aXN1YWwpICh2aXN1YWwpLT5iaXRzX3Blcl9yZ2IKKyNkZWZpbmUgZ2RrX2Ry
YWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpIChjb250ZXh0KS0+YWN0aW9u
CisjZGVmaW5lIGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkgKGNvbnRleHQp
LT5hY3Rpb25zCisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjEsIDIpCisKKyNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAsIDApCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X3JlYWxp
emVkKHdpZGdldCkgR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpCisjZGVmaW5lIGd0a193aWRn
ZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSkgR1RLX1dJREdFVF9TRVRfRkxBR1MoKHdpZGdl
dCksIEdUS19SRUFMSVpFRCkKKyNkZWZpbmUgZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3NpemUo
cmFuZ2UpIChyYW5nZSktPm1pbl9zbGlkZXJfc2l6ZQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDIwLCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE5LCAwKQorI2RlZmlu
ZSBndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHdpZGdldCkgR1RLX1dJREdFVF9UT1BMRVZFTCh3aWRn
ZXQpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkgR1RLX1dJREdFVF9S
RUFMSVpFRCh3aWRnZXQpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X2hhc193aW5kb3cod2lkZ2V0
KSAhR1RLX1dJREdFVF9OT19XSU5ET1cod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9j
YW5fZm9jdXMod2lkZ2V0KSBHVEtfV0lER0VUX0NBTl9GT0NVUyh3aWRnZXQpCisjZGVmaW5lIGd0
a193aWRnZXRfaXNfc2Vuc2l0aXZlKHdpZGdldCkgR1RLX1dJREdFVF9JU19TRU5TSVRJVkUod2lk
Z2V0KQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE5LCAwKQorCisjaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDE4LCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdp
ZGdldCwgRkFMU0UpIEdUS19XSURHRVRfVU5TRVRfRkxBR1MoKHdpZGdldCksIEdUS19WSVNJQkxF
KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF92aXNpYmxlKHdpZGdldCkgKEdUS19XSURHRVRfRkxB
R1Mod2lkZ2V0KSAmIEdUS19WSVNJQkxFKQorCisjZGVmaW5lIGd0a193aWRnZXRfc2V0X3dpbmRv
dyh3aWRnZXQsIG5ld193aW5kb3cpICh3aWRnZXQpLT53aW5kb3cgPSAobmV3X3dpbmRvdykKKyNk
ZWZpbmUgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKHdpZGdldCwgVFJVRSkgR1RLX1dJREdFVF9T
RVRfRkxBR1MoKHdpZGdldCksIEdUS19DQU5fRk9DVVMpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0
X2FsbG9jYXRpb24od2lkZ2V0LCBhbGxvYykgKCooYWxsb2MpID0gKHdpZGdldCktPmFsbG9jYXRp
b24pCisjZGVmaW5lIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCBhbGxvYykgKCh3
aWRnZXQpLT5hbGxvY2F0aW9uID0gKihhbGxvYykpCisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMTgsIDApCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCit2b2lkIGdk
a193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQg
eSwgZ2ludCogcm9vdFgsIGdpbnQqIHJvb3RZKTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNywgMykKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKK2NvbnN0IGdj
aGFyKiBndGtfbWVudV9pdGVtX2dldF9sYWJlbChHdGtNZW51SXRlbSopOworI2VuZGlmIC8vIEdU
S19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwg
MTQsIDApCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpICh3aWRnZXQpLT53
aW5kb3cKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkaikgKGFkaiktPnZhbHVl
CisjZGVmaW5lIGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpIChkaWFsb2cpLT52
Ym94CisjZGVmaW5lIGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRpYWxvZykgKGRpYWxvZykt
PmFjdGlvbl9hcmVhCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEp
IChkYXRhKS0+bGVuZ3RoCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRh
KSAoZGF0YSktPmRhdGEKKyNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90YXJnZXQoZGF0
YSkgKGRhdGEpLT50YXJnZXQKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShh
ZGosIG5ld1ZhbHVlKSAoKGFkaiktPnBhZ2Vfc2l6ZSA9IG5ld1ZhbHVlKQorI2RlZmluZSBndGtf
YWRqdXN0bWVudF9zZXRfdmFsdWUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT52YWx1ZSA9IG5ld1Zh
bHVlKQorI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqLCBuZXdWYWx1ZSkgKChh
ZGopLT5sb3dlciA9IG5ld1ZhbHVlKQorI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfdXBwZXIo
YWRqLCBuZXdWYWx1ZSkgKChhZGopLT51cHBlciA9IG5ld1ZhbHVlKQorCit2b2lkIGd0a19hZGp1
c3RtZW50X2NvbmZpZ3VyZShHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVl
LCBnZG91YmxlIGxvd2VyLCBnZG91YmxlIHVwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2RvdWJsZSBzdGVwSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3Vi
bGUgcGFnZVNpemUpOworCit2b2lkIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShHdGtBZGp1c3Rt
ZW50KiBhZGp1c21lbnQsIGdkb3VibGUgdmFsdWUpOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE0LCAwKQorCitHZGtEZXZpY2UqIGdldERlZmF1bHRHREtQb2ludGVyRGV2aWNlKEdk
a1dpbmRvdyogd2luZG93KTsKK0dka0N1cnNvciogYmxhbmtDdXJzb3IoKTsKKworI2lmICFHTElC
X0NIRUNLX1ZFUlNJT04oMiwgMjcsIDEpCitnYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9m
aXJzdF93aW5zKEdTaWduYWxJbnZvY2F0aW9uSGludCogaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSog
cmV0dXJuQWNjdW11bGF0b3IsIGNvbnN0IEdWYWx1ZSogaGFuZGxlclJldHVybiwgZ3BvaW50ZXIg
ZGF0YSk7CisjZW5kaWYKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCA2KQordm9pZCBn
ZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmthcmVhKEdka1NjcmVlbiAqLCBpbnQgbW9uaXRvciwg
R2RrUmVjdGFuZ2xlICphcmVhKTsKKyNlbmRpZgorCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8g
R3RrVmVyc2lvbmluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGFmZDQzZWU0YTU0
MDkzYWFjYTcyNjQ5MGZlODU3ODc1ZmE0MTEwZmYuLmQyMGViMjgwZjcwODg5MDY5ZDRmODQwODUw
NjZjOWYzNTJjN2M4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC02MjMsNyArNjIz
LDcgQEAgUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RrZXlldmVudHNfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0a2V5ZXZlbnRzX0xERkxBR1MgPSAk
KHdlYmtpdF90ZXN0c19sZGZsYWdzKQogCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGNvcHlhbmRw
YXN0ZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0ZS5j
IFwKLQlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYworCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29w
eWFuZHBhc3RlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZDdmOTAzN2EyNTc1M2JjMjY4NmFlN2E0OWI0YmI4
ZjkwMTJmODY4Zi4uZDQzZTEzMzdjNjU5Zjc3MjQyYTRjMDA2MDEyMTMwZWM1NGExZWYxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KQEAgLTUwNyw5ICs1MDcsMTIgQEAgbGliUGxhdGZvcm1HdGsyX2xh
X0NQUEZMQUdTID0gXAogCS1ER1RLX0FQSV9WRVJTSU9OXzI9MSBcCiAJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKIAkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybV93ZWJjb3JlX2Nw
cGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFs
aWFzaW5nIFwKLQkkKEdUSzJfQ0ZMQUdTKQorCSQoR1RLMl9DRkxBR1MpIFwKKwkkKExJQlNFQ1JF
VF9DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKQogCiAjIEluamVjdGVkIEJ1bmRsZQogaW5q
ZWN0ZWRidW5kbGVkaXIgPSAkKGxpYmRpcikvd2Via2l0Mmd0ay0zLjAvaW5qZWN0ZWQtYnVuZGxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCmlu
ZGV4IDMxY2Q1ZGE4YTRiNDA3ODA1MmZjODVjOTg0YjJjZmRjNDI4ZGJkMzUuLjM5NjllMGM4NjVl
ZGUwMjJiZWE1OWExNmJiNjI4NmUwMWFhODQ5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCkBAIC0yOSwxMCArMjksMTAgQEAKICNpbmNs
dWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8UGxhdGZvcm0vR3RrVmVy
c2lvbmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YU9iamVjdEd0ay5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAppbmRl
eCBiZDczYWIxZTgzMDEzM2YyYmFhYjQzNWRkZjkwYzE3NWIxYmViNTc1Li5jYjg4YTgyMGE1MTQ0
M2U2NDk2ZmVmNTcwYzMyM2FhODI1OTg3NDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiUGxh
dGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAi
V2luZG93c0tleWJvYXJkQ29kZXMuaCIKLSNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtWZXJzaW9uaW5n
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8Z2RrL2dk
ay5oPgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcAppbmRleCBiYTcyZGRjODY5OGVkNWQ1MDIyMDRmZTAyOWI0MzI0YWY3
ZDZlY2JmLi4yMzQ0Zjg5NGRmMzNlMGQzNzU0YWFmMWE5NDM2MjY0OGEyMWM1ZmJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViVmlld0Jhc2VJ
bnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1ZlcnNpb25pbmcuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZEd0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xp
cGJvYXJkVXRpbGl0aWVzR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+
CkBAIC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtDbGlja0NvdW50ZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0d0a0RyYWdBbmREcm9wSGVscGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9O
ZXRzY2FwZVBsdWdpblgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAppbmRleCA2ZTA3NzY3ZDFkMWNkZjI5
MjdlNmE0ODIzMjAyZDhiZjRkNjIxNWUwLi5hMTg0Njg3OGIzMTA0NjE0YjdhMjZmYzI3Y2VhYjc5
YTFhNGI5OGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcApAQCAt
NDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGd0ay9ndGt4Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxn
ZGsvZ2RreC5oPgotI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkgJiYgZGVmaW5l
ZChIQVZFX0VDT1JFX1gpCiAjaW5jbHVkZSA8RWNvcmVfWC5oPgogI2VuZGlmCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGQ2N2Y3YmZlODY5N2Q4
NTU5MTVkY2I0MzVkMTUyN2ViNGJhNzk0Ni4uZDIyZDFhZjJhNTJjOWY5YWVmZDQ4NzE5Mzc3OTAy
YTJkMjA0MWNlOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAzLTIwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVjaWZpYywgbm9u
LWxheWVyLXZpb2xhdGluZyBzb3VyY2UgY29kZSB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjU0NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
CisKIDIwMTMtMDMtMjAgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CiAK
ICAgICAgICAgW0dUS10gYWNjZXNzaWJpbGl0eS9hcmlhLXNjcm9sbGJhci1yb2xlLmh0bWwgaXMg
ZmFpbGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtl
ZmlsZS5hbQppbmRleCBkZWJjZDI0OGU0YzYxMWE2NjRmZjM4ZjM4MzVmYTkzOTc5YjFlMGJjLi5k
YzQwYmM4MmY1MmZmMWU2NzZjN2FiMGQ1MGYwNzU3ZjZmZjAxNWEyIDEwMDY0NAotLS0gYS9Ub29s
cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtODMsNiArODMs
NyBAQCBCVUlMVF9TT1VSQ0VTICs9ICQobGlid2ViY29yZWludGVybmFsc19idWlsdF9zb3VyY2Vz
KQogCiBsaWJXZWJDb3JlSW50ZXJuYWxzX2xhX0NQUEZMQUdTID0gXAogCSQoZ2xvYmFsX2NwcGZs
YWdzKSBcCisJJChwbGF0Zm9ybWd0a19jcHBmbGFncykgXAogCSQod2ViY29yZV9jcHBmbGFncykg
XAogCSQod2ViY29yZWd0a19jcHBmbGFncykgXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3Mp
IFwKQEAgLTEyNSw2ICsxMjYsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DUFBGTEFHUyAr
PSBcCiBlbmRpZgogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMgXAogCVRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlQ29tbW9uLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVQ
cmVmaXguaCBcCkBAIC0xNDksNyArMTUxLDcgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09V
UkNFUyA9IFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jb25maWcuaCBcCiAJVG9vbHMvRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCiAJVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwIFwKLSAgICAJVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcCBcCisJVG9vbHMv
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcCBcCiAJVG9v
bHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCBcCkBAIC0x
NjgsOCArMTcwLDcgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXcuaCBcCiAJVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRyb2xsZXIuaCBcCiAJVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIFwKLQlUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvV29ya1F1ZXVlSXRlbUd0ay5jcHAgXAotCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrVmVyc2lvbmluZy5jCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1H
dGsuY3BwCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NYWEZMQUdTID0gXAogCSQoZ2xvYmFs
X2N4eGZsYWdzKSBcCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggNDMz
Yjg3ZDhkMjJhOTBmZDc0N2EyNjYzZDIzYjRmNDg4OTcxZDBiMi4uMTJiODQ2MTY5ZjllNDRkYTY5
YmM4MTQxM2UxNmEyNTcyNmM5ZWEwNyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAzLTIwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNaWdyYXRlIEdUSy1zcGVjaWZpYywgbm9u
LWxheWVyLXZpb2xhdGluZyBzb3VyY2UgY29kZSB0byBTb3VyY2UvUGxhdGZvcm0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjU0NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
CisKIDIwMTMtMDMtMTkgIERhdmlkIFJvc2NhICA8bm93cmVwQGdtYWlsLmNvbT4KIAogICAgICAg
ICBbUXRdIFFTdHlsZTogU2V0IFN0YXRlX0VuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHBhaW50aW5n
IHN0eWxlIHdpZGdldHMuCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDEyOTZmYjBlNjNkZDhiOWFhNWI1OThiY2M4ZjQ3MWZkMjZjN2NhNDQuLmI5ZGI4
OWJiNTE0MmIzYjFmNzhkYjU0MWI1MGVmZTk4N2JlOTM0ZGMgMTAwNjQ0Ci0tLSBhL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC03MCw2ICs3MCw3IEBAIGphdmFzY3JpcHRj
b3JlX2J1aWx0X3NvdXJjZXMgOj0KIGphdmFzY3JpcHRjb3JlX2J1aWx0X25vc291cmNlcyA6PQog
bGxpbnRfbm9zb3VyY2VzIDo9CiBvZmZsaW5lYXNtX25vc291cmNlcyA6PQorcGxhdGZvcm1fd2Vi
Y29yZV9jcHBmbGFncyA6PQogcGxhdGZvcm1ndGtfY3BwZmxhZ3MgOj0KIHBsYXRmb3JtZ3RrX3Nv
dXJjZXMgOj0KIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyA6PQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195104</attachid>
            <date>2013-03-26 10:02:22 -0700</date>
            <delta_ts>2013-03-28 10:06:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112546-20130326175804.patch</filename>
            <type>text/plain</type>
            <size>64838</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2ODc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1ODIyMzQyOWE5OWYw
ODMzNjQ1YzBjYWNjZGJiYzNmNTE0NTUxYWM1Li4wZDAxMTM3NjQyNjYzMjIyNzExNmU3NGM5OTQz
ZTYzYWY3OWVjZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMy0yNiAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVp
bGQgR1RLLXNwZWNpZmljLCBub24tbGF5ZXItdmlvbGF0aW5nIHNvdXJjZSBjb2RlIGludG8gV2Vi
Q29yZS1pbmRlcGVuZGVudCBsaWJQbGF0Zm9ybUd0ay5sYQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogT25seSBzcGVjaWZ5
IHRoZSB2ZXJ5IG1pbmltYWwgc2V0IG9mIGluY2x1c2lvbiBkaXJlY3RvcmllcywgY29udGFpbmlu
ZyB0aGUgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0KKyAgICAgICAgZGlyZWN0b3J5IGFuZCBpdHMg
c3ViZGlyZWN0b3JpZXMuIFRoaXMgd2lsbCBhbGxvdyBvbmx5IGZvciB0aGUgV2ViQ29yZS1pbmRl
cGVuZGVudCBHVEstc3BlY2lmaWMgc291cmNlcyB0byBiZSBidWlsdCBpbnRvCisgICAgICAgIGxp
YlBsYXRmb3JtR3RrLmxhLiBBbHNvIGluY2x1ZGUgdGhlIEdUSywgbGlic2VjcmV0IGFuZCBsaWJz
b3VwIGRlcGVuZGVuY2llcycgY2ZsYWdzIGFtb25nc3QgdGhlIGxpYlBsYXRmb3JtR3RrJ3MKKyAg
ICAgICAgQ1BQRkxBR1MuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogUmVtb3ZlZC4g
VGhlIGJ1aWxkIHRhcmdldHMgYXJlIG5vdyBsaXN0ZWQgKGFuZCB3aWxsIGJlIGxpc3RlZCB1bnRp
bCB0aGUgbWlncmF0aW9uKSBpbiB0aGUKKyAgICAgICAgR05VbWFrZWZpbGUubGlzdC5hbSB1bmRl
ciBTb3VyY2UvV2ViQ29yZSwgZm9sbG93aW5nIHRoZSBjb21tb24gc2Vuc2Ugb2Ygc3BlY2lmeWlu
ZyB0aGUgYnVpbGQgdGFyZ2V0IGluIHRoZQorICAgICAgICBHTlVtYWtlZmlsZS5saXN0LmFtIHBs
YWNlZCBpbiB0aGUgc2FtZSBmcmFtZXdvcmsgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBzb3VyY2Ug
ZmlsZSBpcyBsb2NhdGVkLgorCiAyMDEzLTAzLTI1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBvd25lcnNoaXAgb2YgY29tcG9z
aXRvciBWaWRlb0xheWVyIHRvIFdlYk1lZGlhUGxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjYwOTViNDdm
NDVjYzI0Mjc3OWQ1YmU2MzhmNDg2ZDI0OGRkOTg2Ny4uMjE4YTAxYjAyNzgxNjk0Y2E5NmY1Mzkx
ODk4ZTMzNmJlZWE4ZTBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAzLTI2
ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBC
dWlsZCBHVEstc3BlY2lmaWMsIG5vbi1sYXllci12aW9sYXRpbmcgc291cmNlIGNvZGUgaW50byBX
ZWJDb3JlLWluZGVwZW5kZW50IGxpYlBsYXRmb3JtR3RrLmxhCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI1NDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBQYXNzaW5nIHRoZSBEQVRBX0RJUiB2YWx1ZSB0aHJvdWdo
IHRoZSBjcHBmbGFncyBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSBhcyB0aGUgYWZmZWN0ZWQgc291
cmNlIGlzIG5vdworICAgICAgICBidWlsdCBpbnRvIGxpYlBsYXRmb3JtR3RrLmxhLgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEJ1aWxkIHRoZSBHVEstc3BlY2lmaWMgc291cmNlIGZp
bGVzIHRoYXQgYXJlIGFscmVhZHkgaW5kZXBlbmRlbnQgb2YgV2ViQ29yZSBpbnRvIHRoZQorICAg
ICAgICBsaWJQbGF0Zm9ybUd0ay5sYSBieSBhc3NpZ25pbmcgdGhlIGJ1aWxkIHRhcmdldHMgbGlz
dGluZyB0byB0aGUgcGxhdGZvcm1ndGtfc291cmNlcyB2YXJpYWJsZS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtWZXJzaW9uaW5nLmMuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oLgorCiAy
MDEzLTAzLTI2ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IERlY29yYXRpb25zIGluIHNldmVyYWwgY29uc2VjdXRpdmUgbGlu
ZXMgYXJlIG5vdCBtb3ZlZCBjb3JyZWN0bHkgaW4gRFRFLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDhh
YzFlNmE5YThhNmE4NjM1MzBjNzIwN2I3YTRkNzcxOTlmZWRiNjMuLjY0NTMxNzhkMGI1MGZhYTlj
NDMwOGVkYWQzZjJkOTY4MDFjYWQzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAxMy0wMy0yNiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQnVpbGQgR1RLLXNwZWNpZmljLCBub24tbGF5ZXItdmlvbGF0aW5nIHNvdXJj
ZSBjb2RlIGludG8gV2ViQ29yZS1pbmRlcGVuZGVudCBsaWJQbGF0Zm9ybUd0ay5sYQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNTQ2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bTogVGhlIEd0a1ZlcnNpb25pbmcuYyBmaWxlIGhhcyBtb3ZlZCBiYWNrIHVuZGVyIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtLgorCiAyMDEzLTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtSZWdyZXNzaW9uXSB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93IHJldHVybnMgdmFsdWUgdGhhdCBkb2Vzbid0
IHBhc3MgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UIG1hY3JvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggN2M1NDMzZjUxNTI5MDkzZTdhMzJhMGU4NjZmODU2MzM3NGViM2U5ZC4uNTU2MzllN2Qz
ZjU3MWZmODkxZWViMTgwYTE1MjZiZjE4YjM5MWQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDEzLTAzLTI2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBCdWlsZCBHVEstc3BlY2lmaWMsIG5vbi1sYXllci12aW9sYXRpbmcgc291
cmNlIGNvZGUgaW50byBXZWJDb3JlLWluZGVwZW5kZW50IGxpYlBsYXRmb3JtR3RrLmxhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI1NDYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBSZWZlcmVuY2UgdGhlIHBsYXRmb3JtX3dlYmNvcmVfY3BwZmxhZ3MgYW5kIEdUSywgbGli
c2VjcmV0IGFuZCBsaWJzb3VwIGRlcGVuZGVuY2llcycgY2ZsYWdzIGFtb25nc3QgdGhlCisgICAg
ICAgIGxpYlBsYXRmb3JtR3RrMidzIENQUEZMQUdTLgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJh
dGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsOiBSZW1vdmUgdGhlIFBsYXRmb3JtIGZyYW1ld29yayBm
cm9tIHRoZSBsaXN0IG9mIHRoZSBmcmFtZXdvcmtzIHRvIGJlIHNlYXJjaGVkCisgICAgICAgIGZv
ciBmb3J3YXJkaW5nIGhlYWRlcnMsIGl0J3MgYXQgdGhlIG1vbWVudCBub3QgbmVjZXNzYXJ5IHRv
IGJlIGluY2x1ZGVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3Bw
OiBBZGp1c3QgdGhlIGZvcndhcmRpbmcgaGVhZGVyIGZvciBHdGtWZXJzaW9uaW5nLmggdGhhdCdz
IGJlZW4gbW92ZWQgYmFjayB1bmRlciB0aGUKKyAgICAgICAgV2ViQ29yZSBmcmFtZXdvcmsuCisg
ICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwOiBEaXR0by4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6IERpdHRvLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3Bw
OiBEaXR0by4KKwogMjAxMy0wMy0yNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmVuYW1lIEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFr
ZWZpbGUuYW0KaW5kZXggNWY5NjBjYjQ1ZmE1YTQ5M2ZhM2EwMTRlZDFjNjVmMmJmMTI2ZmM5Yy4u
YjQwYmMzMmNjMDIxMmEwOTE3ODRmN2QxZDJkYTJhYjA3ODA2OGVlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtl
ZmlsZS5hbQpAQCAtNiwxMSArNiwzNCBAQAogIyBGb3Igbm93IHdlIG9ubHkgYnVpbGQgdGhlIGxp
YlBsYXRmb3JtR3RrIGxpYnJhcnkgYXMgdGhlcmUgYXJlIG5vIHNvdXJjZSBmaWxlcyBpbiBwbGFj
ZSB5ZXQKICMgdGhhdCBjb3VsZCBiZSBidWlsdCBpbnRvIGxpYlBsYXRmb3JtLgogCi1pbmNsdWRl
ICQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlzdC5hbQotCiBwbGF0Zm9y
bWd0a19jcHBmbGFncyArPSBcCiAJLURXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HPVwiQFdF
QktJVEdUS19BUElfVkVSU0lPTkBcIiBcCi0JLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0
aworCS1JJChzcmNkaXIpL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYyBcCisJLUkkKHNyY2Rp
cikvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZSBcCisJLUkkKHNyY2RpcikvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0tIUiBcCisJLUREQVRBX0RJUj1cIiR7ZGF0YWRpcn1c
IgorCisjIFRoaXMgaXMgdGhlIG1pbmltYWwgc2V0IG9mIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
IHN1YmRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBoZWFkZXJzIHJlcXVpcmVkIGJ5IHRoZSBHVEst
c3BlY2lmaWMKKyMgcGxhdGZvcm0gc291cmNlIGZpbGVzLiBUaGVzZSBpbmNsdXNpb25zIGFyZSBy
ZXF1aXJlZCBkdWUgdG8gcGxhdGZvcm0gbGF5ZXIgc291cmNlIGZpbGVzIG5vdCB5ZXQgY29tcGxl
dGVseSBtaWdyYXRlZAorIyBpbnRvIFNvdXJjZS9QbGF0Zm9ybS4gT25seSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybSBzdWJkaXJlY3RvcmllcyBtdXN0IGJlIGxpc3RlZCBoZXJlIGFzIHRoaXMsIGNv
dXBsZWQgd2l0aCB0aGUKKyMgaGVhZGVyIGluY2x1c2lvbiBpbiBzb3VyY2UgZmlsZXMgdGhhdCdz
IGRvbmUgdmlhIHNwZWNpZnlpbmcgdGhlIGhlYWRlciBiYXNlbmFtZSwgcHJldmVudHMgYW55IHBs
YXRmb3JtIHZpb2xhdGlvbnMKKyMgb2NjdXJyaW5nLgorcGxhdGZvcm1fd2ViY29yZV9jcHBmbGFn
cyArPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0gXAorCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbiBcCisJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhaXJvIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcyBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lciBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsgXAorCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQKIAogbm9pbnN0X0xUTElCUkFSSUVTICs9IFwKIAlsaWJQbGF0
Zm9ybUd0ay5sYQpAQCAtMzAsNiArNTMsOSBAQCBsaWJQbGF0Zm9ybUd0a19sYV9DUFBGTEFHUyA9
IFwKIAktREJVSUxESU5HX1dFQktJVCBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHBsYXRm
b3JtZ3RrX2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybV93ZWJjb3JlX2NwcGZsYWdzKSBcCiAJJChq
YXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKLQkkKEdU
S19DRkxBR1MpCisJJChHVEtfQ0ZMQUdTKSBcCisJJChMSUJTRUNSRVRfQ0ZMQUdTKSBcCisJJChM
SUJTT1VQX0NGTEFHUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc5NmJlY2ZiNzJlMzdiZWZlYjY3YWQ1NTE4ZjYyOTg3OWVhNDY2
MzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAg
QEAKLXBsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAotCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVy
c2lvbmluZy5jIFwKLQlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMy
Zjg0YzJlZjg4NjZjMDNjMDZmMTZkYzIxNTlmZmVhOTk3Y2RjOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNp
b25pbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBT
LkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlIDxn
dGsvZ3RrLmg+Ci0KLSNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQotI2luY2x1ZGUgPFgxMS9YYXRv
bS5oPgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0jZW5kaWYKLQotI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxNCwgMCkKLXZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1l
bnQqIGFkanVzbWVudCwgZ2RvdWJsZSB2YWx1ZSkKLXsKLSAgICAgICAgbV9hZGp1c3RtZW50LT52
YWx1ZSA9IG1fY3VycmVudFBvczsKLSAgICAgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdl
ZChtX2FkanVzdG1lbnQpOwotfQotCi12b2lkIGd0a19hZGp1c3RtZW50X2NvbmZpZ3VyZShHdGtB
ZGp1c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxvd2VyLCBnZG91
YmxlIHVwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwSW5j
cmVtZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUpCi17Ci0gICAg
Z19vYmplY3RfZnJlZXplX25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7Ci0KLSAgICBnX29i
amVjdF9zZXQoYWRqdXN0bWVudCwKLSAgICAgICAgICAgICAgICAgImxvd2VyIiwgbG93ZXIsCi0g
ICAgICAgICAgICAgICAgICJ1cHBlciIsIHVwcGVyLAotICAgICAgICAgICAgICAgICAic3RlcC1p
bmNyZW1lbnQiLCBzdGVwSW5jcmVtZW50LAotICAgICAgICAgICAgICAgICAicGFnZS1pbmNyZW1l
bnQiLCBwYWdlSW5jcmVtZW50LAotICAgICAgICAgICAgICAgICAicGFnZS1zaXplIiwgcGFnZVNp
emUsCi0gICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgZ19vYmplY3RfdGhhd19ub3RpZnko
R19PQkpFQ1QoYWRqdXN0bWVudCkpOwotCi0gICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGp1
c3RtZW50KTsKLSAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKGFkanVzdG1lbnQpOwot
fQotI2VuZGlmCi0KLUdka0RldmljZSAqZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2lu
ZG93KiB3aW5kb3cpCi17Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrRGV2aWNl
TWFuYWdlciAqbWFuYWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dp
bmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKLSAgICByZXR1cm4gZ2RrX2RldmljZV9tYW5hZ2Vy
X2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKTsKLSNlbHNlCi0gICAgcmV0dXJuIGdka19kZXZp
Y2VfZ2V0X2NvcmVfcG9pbnRlcigpOwotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi19Ci0K
LSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCi12b2lkIGdka193aW5kb3dfZ2V0X3Jv
b3RfY29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQgeSwgZ2ludCogcm9vdFgs
IGdpbnQqIHJvb3RZKQotewotICAgIGdka193aW5kb3dfZ2V0X3Jvb3Rfb3JpZ2luKHdpbmRvdywg
cm9vdFgsIHJvb3RZKTsKLSAgICAqcm9vdFggPSAqcm9vdFggKyB4OwotICAgICpyb290WSA9ICpy
b290WSArIHk7Ci19Ci0jZW5kaWYKLQotR2RrQ3Vyc29yICogYmxhbmtDdXJzb3IoKQotewotI2lm
IEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotICAgIHJldHVybiBnZGtfY3Vyc29yX25ldyhH
REtfQkxBTktfQ1VSU09SKTsKLSNlbHNlCi0gICAgR2RrQ3Vyc29yICogY3Vyc29yOwotICAgIEdk
a1BpeG1hcCAqIHNvdXJjZTsKLSAgICBHZGtQaXhtYXAgKiBtYXNrOwotICAgIEdka0NvbG9yIGZv
cmVncm91bmQgPSB7IDAsIDY1NTM1LCAwLCAwIH07IC8vIFJlZC4KLSAgICBHZGtDb2xvciBiYWNr
Z3JvdW5kID0geyAwLCAwLCAwLCA2NTUzNSB9OyAvLyBCbHVlLgotICAgIHN0YXRpYyBnY2hhciBj
dXJzb3JCaXRzW10gPSB7MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDB9Owot
Ci0gICAgc291cmNlID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMs
IDgsIDgpOwotICAgIG1hc2sgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29y
Qml0cywgOCwgOCk7Ci0gICAgY3Vyc29yID0gZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhtYXAoc291
cmNlLCBtYXNrLCAmZm9yZWdyb3VuZCwgJmJhY2tncm91bmQsIDgsIDgpOwotICAgIGdka19waXht
YXBfdW5yZWYoc291cmNlKTsKLSAgICBnZGtfcGl4bWFwX3VucmVmKG1hc2spOwotICAgIHJldHVy
biBjdXJzb3I7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi19Ci0KLSNp
ZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi1jb25zdCBnY2hhciogZ3RrX21lbnVfaXRl
bV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qIG1lbnVJdGVtKQotewotICAgIEd0a1dpZGdldCAqIGxh
YmVsID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtZW51SXRlbSkpOwotICAgIGlmIChHVEtf
SVNfTEFCRUwobGFiZWwpKQotICAgICAgICByZXR1cm4gZ3RrX2xhYmVsX2dldF90ZXh0KEdUS19M
QUJFTChsYWJlbCkpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE2LCAwKQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBjYWlyb19m
b3JtYXRfdAotZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChjYWlyb19jb250ZW50X3QgY29u
dGVudCkKLXsKLSAgICBzd2l0Y2ggKGNvbnRlbnQpIHsKLSAgICBjYXNlIENBSVJPX0NPTlRFTlRf
Q09MT1I6Ci0gICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfUkdCMjQ7Ci0gICAgY2FzZSBDQUlS
T19DT05URU5UX0FMUEhBOgotICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0E4OwotICAgIGNh
c2UgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gQ0FJUk9fRk9STUFUX0FSR0IzMjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjYWlyb19zdXJmYWNl
X3QqCi1nZGtfY2Fpcm9fc3VyZmFjZV9jb2VyY2VfdG9faW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2NvbnRlbnRf
dCBjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KQotewotICAgIGNh
aXJvX3N1cmZhY2VfdCAqIGNvcHk7Ci0gICAgY2Fpcm9fdCAqIGNyOwotCi0gICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0g
ICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gY29udGVudAot
ICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSA+PSB3aWR0
aAotICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkgPj0g
aGVpZ2h0KQotICAgICAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7
Ci0KLSAgICBjb3B5ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoZ2RrX2NhaXJvX2Zvcm1h
dF9mb3JfY29udGVudChjb250ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dCk7Ci0KLSAgICBjciA9IGNhaXJvX2NyZWF0ZShjb3B5KTsKLSAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjcik7Ci0gICAgY2Fpcm9f
ZGVzdHJveShjcik7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnZl
cnRfYWxwaGEoZ3VjaGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLAotICAgICAgICAgICAg
ICBndWNoYXIgKiBzcmNEYXRhLCBpbnQgc3JjU3RyaWRlLAotICAgICAgICAgICAgICBpbnQgc3Jj
WCwgaW50IHNyY1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpbnQgeCwgeTsKLQot
ICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1kgKiA0OwotCi0gICAgZm9yICh5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQz
MiAqKSBzcmNEYXRhOwotCi0gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0g
ICAgICAgICAgICBndWludCBhbHBoYSA9IHNyY1t4XSA+PiAyNDsKLQotICAgICAgICAgICAgaWYg
KCFhbHBoYSkgewotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAwOwotICAg
ICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAwOwotICAgICAgICAgICAgICAgIGRl
c3REYXRhW3ggKiA0ICsgMl0gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBkZXN0RGF0YVt4ICogNCArIDBdID0gKCgoc3JjW3hdICYgMHhmZjAwMDApID4+IDE2KSAq
IDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICog
NCArIDFdID0gKCgoc3JjW3hdICYgMHgwMGZmMDApID4+ICA4KSAqIDI1NSArIGFscGhhIC8gMikg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0gKCgoc3JjW3hd
ICYgMHgwMDAwZmYpID4+ICAwKSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
fQotCi0gICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOwotICAgICAgICBkZXN0RGF0YSArPSBk
ZXN0U3RyaWRlOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvbnZlcnRfbm9fYWxwaGEoZ3Vj
aGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLCBndWNoYXIgKiBzcmNEYXRhLAotICAgICAg
ICAgICAgICAgICBpbnQgc3JjU3RyaWRlLCBpbnQgc3JjWCwgaW50IHNyY1ksCi0gICAgICAgICAg
ICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIHNy
Y0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1ggKiA0OwotCi0gICAgZm9yICh5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBz
cmNEYXRhOwotCi0gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAg
ICAgICBkZXN0RGF0YVt4ICogMyArIDBdID0gc3JjW3hdID4+IDE2OwotICAgICAgICAgICAgZGVz
dERhdGFbeCAqIDMgKyAxXSA9IHNyY1t4XSA+PiAgODsKLSAgICAgICAgICAgIGRlc3REYXRhW3gg
KiAzICsgMl0gPSBzcmNbeF07Ci0gICAgICAgIH0KLQotICAgICAgICBzcmNEYXRhICs9IHNyY1N0
cmlkZTsKLSAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsKLSAgICB9Ci19Ci0KLS8qKgot
ICogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlOgotICogQHN1cmZhY2U6IHN1cmZhY2UgdG8g
Y29weSBmcm9tCi0gKiBAc3JjX3g6IFNvdXJjZSBYIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNl
Ci0gKiBAc3JjX3k6IFNvdXJjZSBZIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCi0gKiBAd2lk
dGg6IFdpZHRoIGluIHBpeGVscyBvZiByZWdpb24gdG8gZ2V0Ci0gKiBAaGVpZ2h0OiBIZWlnaHQg
aW4gcGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKLSAqCi0gKiBUcmFuc2ZlcnMgaW1hZ2UgZGF0YSBm
cm9tIGEgI2NhaXJvX3N1cmZhY2VfdCBhbmQgY29udmVydHMgaXQgdG8gYW4gUkdCKEEpCi0gKiBy
ZXByZXNlbnRhdGlvbiBpbnNpZGUgYSAjR2RrUGl4YnVmLiBUaGlzIGFsbG93cyB5b3UgdG8gZWZm
aWNpZW50bHkgcmVhZAotICogaW5kaXZpZHVhbCBwaXhlbHMgZnJvbSBjYWlybyBzdXJmYWNlcy4g
Rm9yICNHZGtXaW5kb3dzLCB1c2UKLSAqIGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KCkgaW5z
dGVhZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGFuIFJHQiBwaXhidWYgd2l0
aCA4IGJpdHMgcGVyIGNoYW5uZWwuIFRoZSBwaXhidWYKLSAqIHdpbGwgY29udGFpbiBhbiBhbHBo
YSBjaGFubmVsIGlmIHRoZSBAc3VyZmFjZSBjb250YWlucyBvbmUuCi0gKgotICogUmV0dXJuIHZh
bHVlOiAodHJhbnNmZXIgZnVsbCk6IEEgbmV3bHktY3JlYXRlZCBwaXhidWYgd2l0aCBhIHJlZmVy
ZW5jZSBjb3VudAotICogb2YgMSwgb3IgJU5VTEwgb24gZXJyb3IKLSAqKi8KLUdka1BpeGJ1ZioK
LWdka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QgKiBzdXJmYWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9f
Y29udGVudF90IGNvbnRlbnQ7Ci0gICAgR2RrUGl4YnVmICogZGVzdDsKLQotICAgIC8qIEdlbmVy
YWwgc2FuaXR5IGNoZWNrcyAqLwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN1cmZhY2UsIE5V
TEwpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNyY1ggPj0gMCAmJiBzcmNZID49IDAsIE5V
TEwpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBO
VUxMKTsKLQotICAgIGNvbnRlbnQgPSBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2Up
IHwgQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLSAgICBkZXN0ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NP
TE9SU1BBQ0VfUkdCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAhIShjb250ZW50ICYgQ0FJ
Uk9fQ09OVEVOVF9BTFBIQSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgc3VyZmFjZSA9IGdka19j
YWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShzdXJmYWNlLCBjb250ZW50LCBzcmNYICsgd2lk
dGgsIHNyY1kgKyBoZWlnaHQpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7Ci0g
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpIHx8ICFkZXN0KSB7Ci0gICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKGdka19waXhidWZfZ2V0X2hhc19hbHBoYShkZXN0KSkKLSAgICAgICAg
Y29udmVydF9hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCksCi0gICAgICAgICAgICAg
ICAgICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAot
ICAgICAgICAgICAgICAgICAgICAgICBzcmNYLCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCwgaGVpZ2h0KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnZlcnRfbm9fYWxwaGEoZ2Rr
X3BpeGJ1Zl9nZXRfcGl4ZWxzKGRlc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtf
cGl4YnVmX2dldF9yb3dzdHJpZGUoZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjWCwgc3JjWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0g
ICAgcmV0dXJuIGRlc3Q7Ci19Ci0KLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKLXZv
aWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwg
aW50ICpoZWlnaHQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChHREtfSVNfUElYTUFQKGRyYXdh
YmxlKSB8fCBHREtfSVNfV0lORE9XKGRyYXdhYmxlKSk7Ci0KLSAgICBpZiAoR0RLX0lTX1BJWE1B
UChkcmF3YWJsZSkpIHsKLSAgICAgICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShHREtfUElYTUFQKGRy
YXdhYmxlKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBH
ZGtXaW5kb3cgKndpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgICp3aWR0aCA9IGdk
a193aW5kb3dfZ2V0X3dpZHRoKHdpbmRvdyk7Ci0gICAgKmhlaWdodCA9IGdka193aW5kb3dfZ2V0
X2hlaWdodCh3aW5kb3cpOwotfQotI2Vsc2UKLXZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0Ry
YXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQpCi17Ci0gICAgZ2RrX2Ry
YXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLSNlbmRpZiAvLyBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKLQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8y
Ci0KLSNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQotZ2Jvb2xlYW4gZ19zaWduYWxf
YWNjdW11bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKmludm9jYXRpb25I
aW50LCBHVmFsdWUgKnJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUgKmhhbmRsZXJSZXR1
cm4sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ192YWx1ZV9jb3B5KGhhbmRsZXJSZXR1cm4sIHJl
dHVybkFjY3VtdWxhdG9yKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0jZW5kaWYKLQotI2lmICFH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLWNhaXJvX3N1cmZhY2VfdCAqZ2RrX3dpbmRvd19j
cmVhdGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRvdyAqd2luZG93LCBjYWlyb19jb250ZW50X3Qg
Y29udGVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGNhaXJvX3QgKmNhaXJvQ29u
dGV4dCA9IGdka19jYWlyb19jcmVhdGUod2luZG93KTsKLSAgICBjYWlyb19zdXJmYWNlX3QgKmNh
aXJvU3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY2Fpcm9Db250ZXh0KTsKLSAgICBjYWlyb19z
dXJmYWNlX3QgKm5ld1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFyKGNhaXJv
U3VyZmFjZSwgY29udGVudCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgY2Fpcm9fZGVzdHJveShjYWly
b0NvbnRleHQpOwotICAgIHJldHVybiBuZXdTdXJmYWNlOwotfQotI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDIsIDIyLCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCi0j
aWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKLXN0YXRpYyBpbnQgZ2V0U2NyZWVuQ3VycmVudERlc2t0
b3AoR2RrU2NyZWVuICpzY3JlZW4pCi17Ci0gICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7Ci0gICAgV2luZG93
IHJvb3RXaW5kb3cgPSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBHREtfU0NSRUVOX1hOVU1CRVIoc2Ny
ZWVuKSk7Ci0gICAgQXRvbSBjdXJyZW50RGVza3RvcCA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJf
TkVUX0NVUlJFTlRfREVTS1RPUCIsIFRydWUpOwotCi0gICAgQXRvbSB0eXBlOwotICAgIGludCBm
b3JtYXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOwotICAgIHVu
c2lnbmVkIGNoYXIgKnJldHVybmVkRGF0YSA9IE5VTEw7Ci0gICAgWEdldFdpbmRvd1Byb3BlcnR5
KGRpc3BsYXksIHJvb3RXaW5kb3csIGN1cnJlbnREZXNrdG9wLCAwLCBHX01BWExPTkcsIEZhbHNl
LCBYQV9DQVJESU5BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZp
dGVtc0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7Ci0KLSAgICBpbnQgd29ya3Nw
YWNlID0gMDsKLSAgICBpZiAodHlwZSA9PSBYQV9DQVJESU5BTCAmJiBmb3JtYXQgPT0gMzIgJiYg
aXRlbXNDb3VudCA+IDApCi0gICAgICAgIHdvcmtzcGFjZSA9IChpbnQpcmV0dXJuZWREYXRhWzBd
OwotCi0gICAgaWYgKHJldHVybmVkRGF0YSkKLSAgICAgICAgWEZyZWUocmV0dXJuZWREYXRhKTsK
LQotICAgIHJldHVybiB3b3Jrc3BhY2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFNjcmVlbldvcmtB
cmVhKEdka1NjcmVlbiAqc2NyZWVuLCBHZGtSZWN0YW5nbGUgKmFyZWEpCi17Ci0gICAgRGlzcGxh
eSAqZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXko
c2NyZWVuKSk7Ci0gICAgQXRvbSB3b3JrQXJlYSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVU
X1dPUktBUkVBIiwgVHJ1ZSk7Ci0KLSAgICAvKiBEZWZhdWx0cyBpbiBjYXNlIG9mIGVycm9yLiAq
LwotICAgIGFyZWEtPnggPSAwOwotICAgIGFyZWEtPnkgPSAwOwotICAgIGFyZWEtPndpZHRoID0g
Z2RrX3NjcmVlbl9nZXRfd2lkdGgoc2NyZWVuKTsKLSAgICBhcmVhLT5oZWlnaHQgPSBnZGtfc2Ny
ZWVuX2dldF9oZWlnaHQoc2NyZWVuKTsKLQotICAgIGlmICh3b3JrQXJlYSA9PSBOb25lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3Bs
YXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKLSAgICBBdG9tIHR5cGU7Ci0gICAgaW50
IGZvcm1hdDsKLSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7Ci0gICAg
dW5zaWduZWQgY2hhciAqcmV0dXJuZWREYXRhID0gMDsKLSAgICBpbnQgcmVzdWx0ID0gWEdldFdp
bmRvd1Byb3BlcnR5KGRpc3BsYXksIHJvb3RXaW5kb3csIHdvcmtBcmVhLCAwLCA0ICogMzIgLyog
TWF4IGxlbmd0aCAqLywgRmFsc2UsIEFueVByb3BlcnR5VHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRlbXNDb3VudCwgJmJ5dGVzQWZ0
ZXIsICZyZXR1cm5lZERhdGEpOwotICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcyB8fCB0eXBlID09
IE5vbmUgfHwgIWZvcm1hdCB8fCBieXRlc0FmdGVyIHx8IGl0ZW1zQ291bnQgJSA0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnQgZGVza3RvcCA9IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKHNj
cmVlbik7Ci0gICAgbG9uZyAqd29ya0FyZWFzID0gKGxvbmcgKilyZXR1cm5lZERhdGE7Ci0gICAg
YXJlYS0+eCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNF07Ci0gICAgYXJlYS0+eSA9IHdvcmtBcmVh
c1tkZXNrdG9wICogNCArIDFdOwotICAgIGFyZWEtPndpZHRoID0gd29ya0FyZWFzW2Rlc2t0b3Ag
KiA0ICsgMl07Ci0gICAgYXJlYS0+aGVpZ2h0ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgM107
Ci0KLSAgICBYRnJlZShyZXR1cm5lZERhdGEpOwotfQotI2VuZGlmIC8vIEdES19XSU5ET1dJTkdf
WDExCi0KLXZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKnNj
cmVlbiwgaW50IG1vbml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAgICBnZGtfc2NyZWVu
X2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgYXJlYSk7Ci0KLSNpZmRlZiBH
REtfV0lORE9XSU5HX1gxMQotICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKLSAgICBnZXRTY3Jl
ZW5Xb3JrQXJlYShzY3JlZW4sICZ3b3JrQXJlYSk7Ci0gICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNl
Y3QoJndvcmtBcmVhLCBhcmVhLCBhcmVhKTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDMsIDMsIDYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1Zl
cnNpb25pbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2NhYzYzM2EwZDE1YmQ5NzgwM2QwNWIxNmU1ZjYzNDEy
NTNhOGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtWZXJz
aW9uaW5nX2gKLSNkZWZpbmUgR3RrVmVyc2lvbmluZ19oCi0KLSNpbmNsdWRlICJhdXRvdG9vbHNj
b25maWcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy1jb21wYXQuaD4KLSNlbmRpZgotCi1HX0JFR0lO
X0RFQ0xTCi0KLS8vIE1hY3JvcyB0byBhdm9pZCBkZXByZWNhdGlvbiBjaGVja2luZyBjaHVybgot
I2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotI2RlZmluZSBHREtfV0lORE9XX1hXSU5ET1cod2lu
ZG93KSAoZ2RrX3gxMV93aW5kb3dfZ2V0X3hpZCh3aW5kb3cpKQotI2Vsc2UKLUdka1BpeGJ1Ziog
Z2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgaW50
IHNyY1gsIGludCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLXZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdh
YmxlKiBkcmF3YWJsZSwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOwotI2VuZGlmCi0KLSNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQpCi0jZGVmaW5lIGdka19waXhtYXBfZ2V0X3NpemUg
Z2RrX2RyYXdhYmxlX2dldF9zaXplCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMs
IDQpCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDApCi0jZGVmaW5lIGdka193aW5k
b3dfZ2V0X2Rpc3BsYXkod2luZG93KSBnZGtfZHJhd2FibGVfZ2V0X2Rpc3BsYXkod2luZG93KQot
I2RlZmluZSBnZGtfd2luZG93X2dldF92aXN1YWwgZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwKLSNl
bmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMiwgMCkKLWNhaXJvX3N1cmZhY2VfdCogZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxh
cl9zdXJmYWNlKEdka1dpbmRvdyogd2luZG93LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwg
MCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKLSNkZWZpbmUgZ2RrX3Zpc3Vh
bF9nZXRfZGVwdGgodmlzdWFsKSAodmlzdWFsKS0+ZGVwdGgKLSNkZWZpbmUgZ2RrX3Zpc3VhbF9n
ZXRfYml0c19wZXJfcmdiKHZpc3VhbCkgKHZpc3VhbCktPmJpdHNfcGVyX3JnYgotI2RlZmluZSBn
ZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkgKGNvbnRleHQpLT5h
Y3Rpb24KLSNkZWZpbmUgZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSAoY29u
dGV4dCktPmFjdGlvbnMKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKLQot
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRf
cmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkKLSNkZWZpbmUgZ3Rr
X3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9GTEFHUygo
d2lkZ2V0KSwgR1RLX1JFQUxJWkVEKQotI2RlZmluZSBndGtfcmFuZ2VfZ2V0X21pbl9zbGlkZXJf
c2l6ZShyYW5nZSkgKHJhbmdlKS0+bWluX3NsaWRlcl9zaXplCi0jZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMjAsIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCi0j
ZGVmaW5lIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSBHVEtfV0lER0VUX1RPUExFVkVM
KHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lE
R0VUX1JFQUxJWkVEKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfaGFzX3dpbmRvdyh3
aWRnZXQpICFHVEtfV0lER0VUX05PX1dJTkRPVyh3aWRnZXQpCi0jZGVmaW5lIGd0a193aWRnZXRf
Z2V0X2Nhbl9mb2N1cyh3aWRnZXQpIEdUS19XSURHRVRfQ0FOX0ZPQ1VTKHdpZGdldCkKLSNkZWZp
bmUgZ3RrX3dpZGdldF9pc19zZW5zaXRpdmUod2lkZ2V0KSBHVEtfV0lER0VUX0lTX1NFTlNJVElW
RSh3aWRnZXQpCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCi0KLSNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDApCi0jZGVmaW5lIGd0a193aWRnZXRfc2V0X3Zpc2li
bGUod2lkZ2V0LCBGQUxTRSkgR1RLX1dJREdFVF9VTlNFVF9GTEFHUygod2lkZ2V0KSwgR1RLX1ZJ
U0lCTEUpCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X3Zpc2libGUod2lkZ2V0KSAoR1RLX1dJREdF
VF9GTEFHUyh3aWRnZXQpICYgR1RLX1ZJU0lCTEUpCi0KLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRf
d2luZG93KHdpZGdldCwgbmV3X3dpbmRvdykgKHdpZGdldCktPndpbmRvdyA9IChuZXdfd2luZG93
KQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMod2lkZ2V0LCBUUlVFKSBHVEtfV0lE
R0VUX1NFVF9GTEFHUygod2lkZ2V0KSwgR1RLX0NBTl9GT0NVUykKLSNkZWZpbmUgZ3RrX3dpZGdl
dF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9jKSAoKihhbGxvYykgPSAod2lkZ2V0KS0+YWxs
b2NhdGlvbikKLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9j
KSAoKHdpZGdldCktPmFsbG9jYXRpb24gPSAqKGFsbG9jKSkKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tf
VkVSU0lPTigyLCAxOCwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKLXZv
aWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwg
Z2ludCB5LCBnaW50KiByb290WCwgZ2ludCogcm9vdFkpOwotI2VuZGlmIC8vIEdUS19DSEVDS19W
RVJTSU9OKDIsIDE3LCAzKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotY29u
c3QgZ2NoYXIqIGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKEd0a01lbnVJdGVtKik7Ci0jZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi0KLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCkgKHdpZGdl
dCktPndpbmRvdwotI2RlZmluZSBndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqKSAoYWRqKS0+
dmFsdWUKLSNkZWZpbmUgZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxvZykgKGRpYWxv
ZyktPnZib3gKLSNkZWZpbmUgZ3RrX2RpYWxvZ19nZXRfYWN0aW9uX2FyZWEoZGlhbG9nKSAoZGlh
bG9nKS0+YWN0aW9uX2FyZWEKLSNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgo
ZGF0YSkgKGRhdGEpLT5sZW5ndGgKLSNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRh
KGRhdGEpIChkYXRhKS0+ZGF0YQotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3Rhcmdl
dChkYXRhKSAoZGF0YSktPnRhcmdldAotI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9z
aXplKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+cGFnZV9zaXplID0gbmV3VmFsdWUpCi0jZGVmaW5l
IGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGosIG5ld1ZhbHVlKSAoKGFkaiktPnZhbHVlID0g
bmV3VmFsdWUpCi0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9sb3dlcihhZGosIG5ld1ZhbHVl
KSAoKGFkaiktPmxvd2VyID0gbmV3VmFsdWUpCi0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF91
cHBlcihhZGosIG5ld1ZhbHVlKSAoKGFkaiktPnVwcGVyID0gbmV3VmFsdWUpCi0KLXZvaWQgZ3Rr
X2FkanVzdG1lbnRfY29uZmlndXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdkb3VibGUg
dmFsdWUsIGdkb3VibGUgbG93ZXIsIGdkb3VibGUgdXBwZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZG91YmxlIHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFnZUluY3JlbWVudCwg
Z2RvdWJsZSBwYWdlU2l6ZSk7Ci0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0Fk
anVzdG1lbnQqIGFkanVzbWVudCwgZ2RvdWJsZSB2YWx1ZSk7Ci0jZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTQsIDApCi0KLUdka0RldmljZSogZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZp
Y2UoR2RrV2luZG93KiB3aW5kb3cpOwotR2RrQ3Vyc29yKiBibGFua0N1cnNvcigpOwotCi0jaWYg
IUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNywgMSkKLWdib29sZWFuIGdfc2lnbmFsX2FjY3VtdWxh
dG9yX2ZpcnN0X3dpbnMoR1NpZ25hbEludm9jYXRpb25IaW50KiBpbnZvY2F0aW9uSGludCwgR1Zh
bHVlKiByZXR1cm5BY2N1bXVsYXRvciwgY29uc3QgR1ZhbHVlKiBoYW5kbGVyUmV0dXJuLCBncG9p
bnRlciBkYXRhKTsKLSNlbmRpZgotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCi12
b2lkIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICosIGludCBtb25p
dG9yLCBHZGtSZWN0YW5nbGUgKmFyZWEpOwotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRp
ZiAvLyBHdGtWZXJzaW9uaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGVjODI2ZjUwMjIz
OWY1ODMxMThiNzA3YjE5ZjViNTUzYmQ2MjZlYS4uYTNiOGY0YTAyMDg3OTQ0YjYxZTVjN2M3MzM1
ZWQ5OGZjZTFmZDdlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwNSw4ICsxMDUsNyBAQCB3
ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJDb3JlL2JpbmRpbmdz
L2pzIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlIFwKIAktSSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUgXAotCS1EREFUQV9ESVI9XCIke2RhdGFkaXJ9XCIKKwkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZQogCiB3ZWJjb3Jl
Z3RrX2NwcGZsYWdzICs9IFwKIAktRFdFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkc9XCJAV0VC
S0lUR1RLX0FQSV9WRVJTSU9OQFwiIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGYyNzAzNjk1OTZmYjIzMWM1M2FlNTI1ZjRhNzk3MDM0MDNmZWRjNWYuLmQwZDEwODE2OGU0NWJi
YTc5NGY2MmMzNTg4ZWYyMmZhZjNmYjU3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtNTc4MywxNCArNTc4Myw2IEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dhbWVwYWRzR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tVUkxH
dGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvVXNlckFnZW50R3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAgXApAQCAtNTk1MCw4ICs1OTQyLDYgQEAgd2Vi
Y29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAgXApAQCAtNjA1NCw3ICs2MDQ0LDYgQEAgd2Vi
Y29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TeXN0
ZW1UaW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hl
Y2tlckVuY2hhbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1Rl
eHRDaGVja2VyRW5jaGFudC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3Rr
L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlS
ZXNvbHZlci5oIFwKQEAgLTYxNzEsNyArNjE2MCw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhaXJvL1dpZGdldEJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuY3BwIFwKQEAgLTYx
OTQsOTcgKzYxODIsMTE1IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3cuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJl
YW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1NpbmtHU3RyZWFtZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0NvbG9yR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dka0NhaXJvVXRpbGl0aWVzLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Rh
dGFPYmplY3RHdGsuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3Rr
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bv
cHVwTWVudUd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVH
dGsuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbGJhclRoZW1lR3RrMi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxiYXJUaGVtZUd0azMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNo
UG9wdXBNZW51R3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBv
cHVwTWVudUd0ay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dC5oCisKK3BsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NvbnRleHRNZW51R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRl
eHRNZW51SXRlbUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RyYWdJY29uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0NsaWNrQ291bnRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
RHJhZ0FuZERyb3BIZWxwZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
RHJhZ0FuZERyb3BIZWxwZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lu
cHV0TWV0aG9kRmlsdGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lu
cHV0TWV0aG9kRmlsdGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGls
aXRpZXMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdp
bldpZGdldC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRn
ZXQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtVdGlsaXRpZXMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
VXRpbGl0aWVzLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5n
LmMgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0xvZ2dpbmdHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVS
ZWdpc3RyeUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVT
Y3JvbGxiYXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1l
U2Nyb2xsYmFyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJk
R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrMi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0azMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Tb3VuZEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250
ZXh0LmgKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRQb2ludEd0ay5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3RrLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUu
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUd0ay5jcHAKIAogaWYgVEFSR0VUX1gxMQogd2ViY29yZWd0a19zb3VyY2VzICs9
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDEx
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luVmlld0d0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJl
ZC5oCitwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcAogaWYgVVNFX09QRU5HTAogd2ViY29yZWd0
a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xD
b250ZXh0LmgKK3BsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCiBlbmRpZiAjIEVORCBV
U0VfT1BFTkdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVy
c2lvbmluZy5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYzJmODRjMmVmODg2NmMwM2MwNmYxNmRjMjE1OWZmZWE5OTdjZGM4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcu
YwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEg
THRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaWZkZWYg
R0RLX1dJTkRPV0lOR19YMTEKKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKyNpbmNsdWRlIDxnZGsv
Z2RreC5oPgorI2VuZGlmCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTQsIDApCit2b2lk
IGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShHdGtBZGp1c3RtZW50KiBhZGp1c21lbnQsIGdkb3Vi
bGUgdmFsdWUpCit7CisgICAgICAgIG1fYWRqdXN0bWVudC0+dmFsdWUgPSBtX2N1cnJlbnRQb3M7
CisgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9hZGp1c3RtZW50KTsKK30K
Kwordm9pZCBndGtfYWRqdXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVu
dCwgZ2RvdWJsZSB2YWx1ZSwgZ2RvdWJsZSBsb3dlciwgZ2RvdWJsZSB1cHBlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdl
SW5jcmVtZW50LCBnZG91YmxlIHBhZ2VTaXplKQoreworICAgIGdfb2JqZWN0X2ZyZWV6ZV9ub3Rp
ZnkoR19PQkpFQ1QoYWRqdXN0bWVudCkpOworCisgICAgZ19vYmplY3Rfc2V0KGFkanVzdG1lbnQs
CisgICAgICAgICAgICAgICAgICJsb3dlciIsIGxvd2VyLAorICAgICAgICAgICAgICAgICAidXBw
ZXIiLCB1cHBlciwKKyAgICAgICAgICAgICAgICAgInN0ZXAtaW5jcmVtZW50Iiwgc3RlcEluY3Jl
bWVudCwKKyAgICAgICAgICAgICAgICAgInBhZ2UtaW5jcmVtZW50IiwgcGFnZUluY3JlbWVudCwK
KyAgICAgICAgICAgICAgICAgInBhZ2Utc2l6ZSIsIHBhZ2VTaXplLAorICAgICAgICAgICAgICAg
ICBOVUxMKTsKKworICAgIGdfb2JqZWN0X3RoYXdfbm90aWZ5KEdfT0JKRUNUKGFkanVzdG1lbnQp
KTsKKworICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQoYWRqdXN0bWVudCk7CisgICAgZ3RrX2Fk
anVzdG1lbnRfdmFsdWVfY2hhbmdlZChhZGp1c3RtZW50KTsKK30KKyNlbmRpZgorCitHZGtEZXZp
Y2UgKmdldERlZmF1bHRHREtQb2ludGVyRGV2aWNlKEdka1dpbmRvdyogd2luZG93KQoreworI2lm
bmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0RldmljZU1hbmFnZXIgKm1hbmFnZXIgPSAg
Z2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2lu
ZG93KSk7CisgICAgcmV0dXJuIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIo
bWFuYWdlcik7CisjZWxzZQorICAgIHJldHVybiBnZGtfZGV2aWNlX2dldF9jb3JlX3BvaW50ZXIo
KTsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorfQorCisjaWYgIUdUS19DSEVDS19WRVJT
SU9OKDIsIDE3LCAzKQordm9pZCBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cq
IHdpbmRvdywgZ2ludCB4LCBnaW50IHksIGdpbnQqIHJvb3RYLCBnaW50KiByb290WSkKK3sKKyAg
ICBnZGtfd2luZG93X2dldF9yb290X29yaWdpbih3aW5kb3csIHJvb3RYLCByb290WSk7CisgICAg
KnJvb3RYID0gKnJvb3RYICsgeDsKKyAgICAqcm9vdFkgPSAqcm9vdFkgKyB5OworfQorI2VuZGlm
CisKK0dka0N1cnNvciAqIGJsYW5rQ3Vyc29yKCkKK3sKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNiwgMCkKKyAgICByZXR1cm4gZ2RrX2N1cnNvcl9uZXcoR0RLX0JMQU5LX0NVUlNPUik7Cisj
ZWxzZQorICAgIEdka0N1cnNvciAqIGN1cnNvcjsKKyAgICBHZGtQaXhtYXAgKiBzb3VyY2U7Cisg
ICAgR2RrUGl4bWFwICogbWFzazsKKyAgICBHZGtDb2xvciBmb3JlZ3JvdW5kID0geyAwLCA2NTUz
NSwgMCwgMCB9OyAvLyBSZWQuCisgICAgR2RrQ29sb3IgYmFja2dyb3VuZCA9IHsgMCwgMCwgMCwg
NjU1MzUgfTsgLy8gQmx1ZS4KKyAgICBzdGF0aWMgZ2NoYXIgY3Vyc29yQml0c1tdID0gezB4MCwg
MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwfTsKKworICAgIHNvdXJjZSA9IGdka19i
aXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgwLCBjdXJzb3JCaXRzLCA4LCA4KTsKKyAgICBtYXNrID0g
Z2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMsIDgsIDgpOworICAgIGN1
cnNvciA9IGdka19jdXJzb3JfbmV3X2Zyb21fcGl4bWFwKHNvdXJjZSwgbWFzaywgJmZvcmVncm91
bmQsICZiYWNrZ3JvdW5kLCA4LCA4KTsKKyAgICBnZGtfcGl4bWFwX3VucmVmKHNvdXJjZSk7Cisg
ICAgZ2RrX3BpeG1hcF91bnJlZihtYXNrKTsKKyAgICByZXR1cm4gY3Vyc29yOworI2VuZGlmIC8v
IEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorfQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDE2LCAwKQorY29uc3QgZ2NoYXIqIGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKEd0a01lbnVJ
dGVtKiBtZW51SXRlbSkKK3sKKyAgICBHdGtXaWRnZXQgKiBsYWJlbCA9IGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4obWVudUl0ZW0pKTsKKyAgICBpZiAoR1RLX0lTX0xBQkVMKGxhYmVsKSkKKyAg
ICAgICAgcmV0dXJuIGd0a19sYWJlbF9nZXRfdGV4dChHVEtfTEFCRUwobGFiZWwpKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKKworI2lm
ZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgY2Fpcm9fZm9ybWF0X3QKK2dka19jYWlyb19m
b3JtYXRfZm9yX2NvbnRlbnQoY2Fpcm9fY29udGVudF90IGNvbnRlbnQpCit7CisgICAgc3dpdGNo
IChjb250ZW50KSB7CisgICAgY2FzZSBDQUlST19DT05URU5UX0NPTE9SOgorICAgICAgICByZXR1
cm4gQ0FJUk9fRk9STUFUX1JHQjI0OworICAgIGNhc2UgQ0FJUk9fQ09OVEVOVF9BTFBIQToKKyAg
ICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9BODsKKyAgICBjYXNlIENBSVJPX0NPTlRFTlRfQ09M
T1JfQUxQSEE6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9BUkdC
MzI7CisgICAgfQorfQorCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KgorZ2RrX2NhaXJvX3N1cmZh
Y2VfY29lcmNlX3RvX2ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19jb250ZW50X3QgY29udGVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGhlaWdodCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QgKiBjb3B5
OworICAgIGNhaXJvX3QgKiBjcjsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1
cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQorICAgICAgICAmJiBjYWlyb19zdXJm
YWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IGNvbnRlbnQKKyAgICAgICAgJiYgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSkgPj0gd2lkdGgKKyAgICAgICAgJiYgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpID49IGhlaWdodCkKKyAgICAgICAgcmV0
dXJuIGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpOworCisgICAgY29weSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKGdka19jYWlyb19mb3JtYXRfZm9yX2NvbnRlbnQoY29udGVu
dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpOworCisgICAgY3IgPSBjYWly
b19jcmVhdGUoY29weSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRP
Ul9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgc3VyZmFjZSwgMCwg
MCk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAg
cmV0dXJuIGNvcHk7Cit9CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0X2FscGhhKGd1Y2hhciAqIGRl
c3REYXRhLCBpbnQgZGVzdFN0cmlkZSwKKyAgICAgICAgICAgICAgZ3VjaGFyICogc3JjRGF0YSwg
aW50IHNyY1N0cmlkZSwKKyAgICAgICAgICAgICAgaW50IHNyY1gsIGludCBzcmNZLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBzcmNEYXRhICs9IHNyY1N0
cmlkZSAqIHNyY1kgKyBzcmNZICogNDsKKworICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykgeworICAgICAgICBndWludDMyICogc3JjID0gKGd1aW50MzIgKikgc3JjRGF0YTsKKworICAg
ICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgZ3VpbnQgYWxw
aGEgPSBzcmNbeF0gPj4gMjQ7CisKKyAgICAgICAgICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAg
ICAgICAgICBkZXN0RGF0YVt4ICogNCArIDBdID0gMDsKKyAgICAgICAgICAgICAgICBkZXN0RGF0
YVt4ICogNCArIDFdID0gMDsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0g
MDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQg
KyAwXSA9ICgoKHNyY1t4XSAmIDB4ZmYwMDAwKSA+PiAxNikgKiAyNTUgKyBhbHBoYSAvIDIpIC8g
YWxwaGE7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAxXSA9ICgoKHNyY1t4XSAm
IDB4MDBmZjAwKSA+PiAgOCkgKiAyNTUgKyBhbHBoYSAvIDIpIC8gYWxwaGE7CisgICAgICAgICAg
ICAgICAgZGVzdERhdGFbeCAqIDQgKyAyXSA9ICgoKHNyY1t4XSAmIDB4MDAwMGZmKSA+PiAgMCkg
KiAyNTUgKyBhbHBoYSAvIDIpIC8gYWxwaGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZXN0RGF0YVt4ICogNCArIDNdID0gYWxwaGE7CisgICAgICAgIH0KKworICAgICAgICBzcmNEYXRh
ICs9IHNyY1N0cmlkZTsKKyAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0X25vX2FscGhhKGd1Y2hhciAqIGRlc3REYXRhLCBpbnQg
ZGVzdFN0cmlkZSwgZ3VjaGFyICogc3JjRGF0YSwKKyAgICAgICAgICAgICAgICAgaW50IHNyY1N0
cmlkZSwgaW50IHNyY1gsIGludCBzcmNZLAorICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBzcmNEYXRhICs9IHNyY1N0cmlkZSAq
IHNyY1kgKyBzcmNYICogNDsKKworICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewor
ICAgICAgICBndWludDMyICogc3JjID0gKGd1aW50MzIgKikgc3JjRGF0YTsKKworICAgICAgICBm
b3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMg
KyAwXSA9IHNyY1t4XSA+PiAxNjsKKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiAzICsgMV0gPSBz
cmNbeF0gPj4gIDg7CisgICAgICAgICAgICBkZXN0RGF0YVt4ICogMyArIDJdID0gc3JjW3hdOwor
ICAgICAgICB9CisKKyAgICAgICAgc3JjRGF0YSArPSBzcmNTdHJpZGU7CisgICAgICAgIGRlc3RE
YXRhICs9IGRlc3RTdHJpZGU7CisgICAgfQorfQorCisvKioKKyAqIGdka19waXhidWZfZ2V0X2Zy
b21fc3VyZmFjZToKKyAqIEBzdXJmYWNlOiBzdXJmYWNlIHRvIGNvcHkgZnJvbQorICogQHNyY194
OiBTb3VyY2UgWCBjb29yZGluYXRlIHdpdGhpbiBAc3VyZmFjZQorICogQHNyY195OiBTb3VyY2Ug
WSBjb29yZGluYXRlIHdpdGhpbiBAc3VyZmFjZQorICogQHdpZHRoOiBXaWR0aCBpbiBwaXhlbHMg
b2YgcmVnaW9uIHRvIGdldAorICogQGhlaWdodDogSGVpZ2h0IGluIHBpeGVscyBvZiByZWdpb24g
dG8gZ2V0CisgKgorICogVHJhbnNmZXJzIGltYWdlIGRhdGEgZnJvbSBhICNjYWlyb19zdXJmYWNl
X3QgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIFJHQihBKQorICogcmVwcmVzZW50YXRpb24gaW5zaWRl
IGEgI0dka1BpeGJ1Zi4gVGhpcyBhbGxvd3MgeW91IHRvIGVmZmljaWVudGx5IHJlYWQKKyAqIGlu
ZGl2aWR1YWwgcGl4ZWxzIGZyb20gY2Fpcm8gc3VyZmFjZXMuIEZvciAjR2RrV2luZG93cywgdXNl
CisgKiBnZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdygpIGluc3RlYWQuCisgKgorICogVGhpcyBm
dW5jdGlvbiB3aWxsIGNyZWF0ZSBhbiBSR0IgcGl4YnVmIHdpdGggOCBiaXRzIHBlciBjaGFubmVs
LiBUaGUgcGl4YnVmCisgKiB3aWxsIGNvbnRhaW4gYW4gYWxwaGEgY2hhbm5lbCBpZiB0aGUgQHN1
cmZhY2UgY29udGFpbnMgb25lLgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwp
OiBBIG5ld2x5LWNyZWF0ZWQgcGl4YnVmIHdpdGggYSByZWZlcmVuY2UgY291bnQKKyAqIG9mIDEs
IG9yICVOVUxMIG9uIGVycm9yCisgKiovCitHZGtQaXhidWYqCitnZGtfcGl4YnVmX2dldF9mcm9t
X3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90ICogc3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3JjWCwgaW50IHNyY1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50Owor
ICAgIEdka1BpeGJ1ZiAqIGRlc3Q7CisKKyAgICAvKiBHZW5lcmFsIHNhbml0eSBjaGVja3MgKi8K
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdXJmYWNlLCBOVUxMKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzcmNYID49IDAgJiYgc3JjWSA+PSAwLCBOVUxMKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCwgTlVMTCk7CisKKyAgICBjb250ZW50
ID0gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSB8IENBSVJPX0NPTlRFTlRfQ09M
T1I7CisgICAgZGVzdCA9IGdka19waXhidWZfbmV3KEdES19DT0xPUlNQQUNFX1JHQiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgISEoY29udGVudCAmIENBSVJPX0NPTlRFTlRfQUxQSEEpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCwgaGVpZ2h0KTsKKworICAgIHN1cmZhY2UgPSBnZGtfY2Fpcm9fc3VyZmFjZV9jb2VyY2Vf
dG9faW1hZ2Uoc3VyZmFjZSwgY29udGVudCwgc3JjWCArIHdpZHRoLCBzcmNZICsgaGVpZ2h0KTsK
KyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UpOworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSB8fCAhZGVzdCkgeworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3koc3VyZmFjZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChnZGtf
cGl4YnVmX2dldF9oYXNfYWxwaGEoZGVzdCkpCisgICAgICAgIGNvbnZlcnRfYWxwaGEoZ2RrX3Bp
eGJ1Zl9nZXRfcGl4ZWxzKGRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVm
X2dldF9yb3dzdHJpZGUoZGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgc3JjWCwgc3JjWSwKKyAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7Cisg
ICAgZWxzZQorICAgICAgICBjb252ZXJ0X25vX2FscGhhKGdka19waXhidWZfZ2V0X3BpeGVscyhk
ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRl
KGRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNy
Y1gsIHNyY1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOworCisg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgIHJldHVybiBkZXN0OworfQor
CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjQsIDApCit2b2lkIGdldEdka0RyYXdhYmxlU2l6
ZShHZGtEcmF3YWJsZSAqZHJhd2FibGUsIGludCAqd2lkdGgsIGludCAqaGVpZ2h0KQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoR0RLX0lTX1BJWE1BUChkcmF3YWJsZSkgfHwgR0RLX0lTX1dJTkRP
VyhkcmF3YWJsZSkpOworCisgICAgaWYgKEdES19JU19QSVhNQVAoZHJhd2FibGUpKSB7CisgICAg
ICAgIGdka19waXhtYXBfZ2V0X3NpemUoR0RLX1BJWE1BUChkcmF3YWJsZSksIHdpZHRoLCBoZWln
aHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR2RrV2luZG93ICp3aW5kb3cgPSBH
REtfV0lORE9XKGRyYXdhYmxlKTsKKyAgICAqd2lkdGggPSBnZGtfd2luZG93X2dldF93aWR0aCh3
aW5kb3cpOworICAgICpoZWlnaHQgPSBnZGtfd2luZG93X2dldF9oZWlnaHQod2luZG93KTsKK30K
KyNlbHNlCit2b2lkIGdldEdka0RyYXdhYmxlU2l6ZShHZGtEcmF3YWJsZSAqZHJhd2FibGUsIGlu
dCAqd2lkdGgsIGludCAqaGVpZ2h0KQoreworICAgIGdka19kcmF3YWJsZV9nZXRfc2l6ZShkcmF3
YWJsZSwgd2lkdGgsIGhlaWdodCk7Cit9CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwg
MjQsIDApCisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCisjaWYgIUdMSUJfQ0hFQ0tf
VkVSU0lPTigyLCAyNywgMSkKK2dib29sZWFuIGdfc2lnbmFsX2FjY3VtdWxhdG9yX2ZpcnN0X3dp
bnMoR1NpZ25hbEludm9jYXRpb25IaW50ICppbnZvY2F0aW9uSGludCwgR1ZhbHVlICpyZXR1cm5B
Y2N1bXVsYXRvciwgY29uc3QgR1ZhbHVlICpoYW5kbGVyUmV0dXJuLCBncG9pbnRlciBkYXRhKQor
eworICAgIGdfdmFsdWVfY29weShoYW5kbGVyUmV0dXJuLCByZXR1cm5BY2N1bXVsYXRvcik7Cisg
ICAgcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwg
MjIsIDApCitjYWlyb19zdXJmYWNlX3QgKmdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3VyZmFj
ZShHZGtXaW5kb3cgKndpbmRvdywgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKK3sKKyAgICBjYWlyb190ICpjYWlyb0NvbnRleHQgPSBnZGtfY2Fpcm9fY3Jl
YXRlKHdpbmRvdyk7CisgICAgY2Fpcm9fc3VyZmFjZV90ICpjYWlyb1N1cmZhY2UgPSBjYWlyb19n
ZXRfdGFyZ2V0KGNhaXJvQ29udGV4dCk7CisgICAgY2Fpcm9fc3VyZmFjZV90ICpuZXdTdXJmYWNl
ID0gY2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcihjYWlyb1N1cmZhY2UsIGNvbnRlbnQsIHdp
ZHRoLCBoZWlnaHQpOworICAgIGNhaXJvX2Rlc3Ryb3koY2Fpcm9Db250ZXh0KTsKKyAgICByZXR1
cm4gbmV3U3VyZmFjZTsKK30KKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkK
KworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCA2KQorI2lmZGVmIEdES19XSU5ET1dJTkdf
WDExCitzdGF0aWMgaW50IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKEdka1NjcmVlbiAqc2NyZWVu
KQoreworICAgIERpc3BsYXkgKmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfc2Ny
ZWVuX2dldF9kaXNwbGF5KHNjcmVlbikpOworICAgIFdpbmRvdyByb290V2luZG93ID0gWFJvb3RX
aW5kb3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVNQkVSKHNjcmVlbikpOworICAgIEF0b20gY3Vy
cmVudERlc2t0b3AgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9DVVJSRU5UX0RFU0tUT1Ai
LCBUcnVlKTsKKworICAgIEF0b20gdHlwZTsKKyAgICBpbnQgZm9ybWF0OworICAgIHVuc2lnbmVk
IGxvbmcgaXRlbXNDb3VudCwgYnl0ZXNBZnRlcjsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXR1cm5l
ZERhdGEgPSBOVUxMOworICAgIFhHZXRXaW5kb3dQcm9wZXJ0eShkaXNwbGF5LCByb290V2luZG93
LCBjdXJyZW50RGVza3RvcCwgMCwgR19NQVhMT05HLCBGYWxzZSwgWEFfQ0FSRElOQUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRlbXNDb3VudCwgJmJ5dGVzQWZ0
ZXIsICZyZXR1cm5lZERhdGEpOworCisgICAgaW50IHdvcmtzcGFjZSA9IDA7CisgICAgaWYgKHR5
cGUgPT0gWEFfQ0FSRElOQUwgJiYgZm9ybWF0ID09IDMyICYmIGl0ZW1zQ291bnQgPiAwKQorICAg
ICAgICB3b3Jrc3BhY2UgPSAoaW50KXJldHVybmVkRGF0YVswXTsKKworICAgIGlmIChyZXR1cm5l
ZERhdGEpCisgICAgICAgIFhGcmVlKHJldHVybmVkRGF0YSk7CisKKyAgICByZXR1cm4gd29ya3Nw
YWNlOworfQorCitzdGF0aWMgdm9pZCBnZXRTY3JlZW5Xb3JrQXJlYShHZGtTY3JlZW4gKnNjcmVl
biwgR2RrUmVjdGFuZ2xlICphcmVhKQoreworICAgIERpc3BsYXkgKmRpc3BsYXkgPSBHREtfRElT
UExBWV9YRElTUExBWShnZGtfc2NyZWVuX2dldF9kaXNwbGF5KHNjcmVlbikpOworICAgIEF0b20g
d29ya0FyZWEgPSBYSW50ZXJuQXRvbShkaXNwbGF5LCAiX05FVF9XT1JLQVJFQSIsIFRydWUpOwor
CisgICAgLyogRGVmYXVsdHMgaW4gY2FzZSBvZiBlcnJvci4gKi8KKyAgICBhcmVhLT54ID0gMDsK
KyAgICBhcmVhLT55ID0gMDsKKyAgICBhcmVhLT53aWR0aCA9IGdka19zY3JlZW5fZ2V0X3dpZHRo
KHNjcmVlbik7CisgICAgYXJlYS0+aGVpZ2h0ID0gZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVl
bik7CisKKyAgICBpZiAod29ya0FyZWEgPT0gTm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2luZG93IHJvb3RXaW5kb3cgPSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBHREtfU0NSRUVOX1hOVU1C
RVIoc2NyZWVuKSk7CisgICAgQXRvbSB0eXBlOworICAgIGludCBmb3JtYXQ7CisgICAgdW5zaWdu
ZWQgbG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOworICAgIHVuc2lnbmVkIGNoYXIgKnJldHVy
bmVkRGF0YSA9IDA7CisgICAgaW50IHJlc3VsdCA9IFhHZXRXaW5kb3dQcm9wZXJ0eShkaXNwbGF5
LCByb290V2luZG93LCB3b3JrQXJlYSwgMCwgNCAqIDMyIC8qIE1heCBsZW5ndGggKi8sIEZhbHNl
LCBBbnlQcm9wZXJ0eVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
dHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVyLCAmcmV0dXJuZWREYXRhKTsK
KyAgICBpZiAocmVzdWx0ICE9IFN1Y2Nlc3MgfHwgdHlwZSA9PSBOb25lIHx8ICFmb3JtYXQgfHwg
Ynl0ZXNBZnRlciB8fCBpdGVtc0NvdW50ICUgNCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50
IGRlc2t0b3AgPSBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChzY3JlZW4pOworICAgIGxvbmcgKndv
cmtBcmVhcyA9IChsb25nICopcmV0dXJuZWREYXRhOworICAgIGFyZWEtPnggPSB3b3JrQXJlYXNb
ZGVza3RvcCAqIDRdOworICAgIGFyZWEtPnkgPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAxXTsK
KyAgICBhcmVhLT53aWR0aCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCArIDJdOworICAgIGFyZWEt
PmhlaWdodCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCArIDNdOworCisgICAgWEZyZWUocmV0dXJu
ZWREYXRhKTsKK30KKyNlbmRpZiAvLyBHREtfV0lORE9XSU5HX1gxMQorCit2b2lkIGdka19zY3Jl
ZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICpzY3JlZW4sIGludCBtb25pdG9yLCBH
ZGtSZWN0YW5nbGUgKmFyZWEpCit7CisgICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRy
eShzY3JlZW4sIG1vbml0b3IsIGFyZWEpOworCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAg
ICBHZGtSZWN0YW5nbGUgd29ya0FyZWE7CisgICAgZ2V0U2NyZWVuV29ya0FyZWEoc2NyZWVuLCAm
d29ya0FyZWEpOworICAgIGdka19yZWN0YW5nbGVfaW50ZXJzZWN0KCZ3b3JrQXJlYSwgYXJlYSwg
YXJlYSk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCA2KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTNjYWM2MzNhMGQxNWJkOTc4MDNkMDViMTZlNWY2MzQxMjUzYThhOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgKQEAgLTAsMCAr
MSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHdGtWZXJz
aW9uaW5nX2gKKyNkZWZpbmUgR3RrVmVyc2lvbmluZ19oCisKKyNpbmNsdWRlICJhdXRvdG9vbHNj
b25maWcuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy1jb21wYXQuaD4KKyNlbmRpZgorCitHX0JFR0lO
X0RFQ0xTCisKKy8vIE1hY3JvcyB0byBhdm9pZCBkZXByZWNhdGlvbiBjaGVja2luZyBjaHVybgor
I2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorI2RlZmluZSBHREtfV0lORE9XX1hXSU5ET1cod2lu
ZG93KSAoZ2RrX3gxMV93aW5kb3dfZ2V0X3hpZCh3aW5kb3cpKQorI2Vsc2UKK0dka1BpeGJ1Ziog
Z2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgaW50
IHNyY1gsIGludCBzcmNZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdh
YmxlKiBkcmF3YWJsZSwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworI2VuZGlmCisKKyNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQpCisjZGVmaW5lIGdka19waXhtYXBfZ2V0X3NpemUg
Z2RrX2RyYXdhYmxlX2dldF9zaXplCisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMs
IDQpCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDApCisjZGVmaW5lIGdka193aW5k
b3dfZ2V0X2Rpc3BsYXkod2luZG93KSBnZGtfZHJhd2FibGVfZ2V0X2Rpc3BsYXkod2luZG93KQor
I2RlZmluZSBnZGtfd2luZG93X2dldF92aXN1YWwgZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwKKyNl
bmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMiwgMCkKK2NhaXJvX3N1cmZhY2VfdCogZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxh
cl9zdXJmYWNlKEdka1dpbmRvdyogd2luZG93LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwg
MCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKKyNkZWZpbmUgZ2RrX3Zpc3Vh
bF9nZXRfZGVwdGgodmlzdWFsKSAodmlzdWFsKS0+ZGVwdGgKKyNkZWZpbmUgZ2RrX3Zpc3VhbF9n
ZXRfYml0c19wZXJfcmdiKHZpc3VhbCkgKHZpc3VhbCktPmJpdHNfcGVyX3JnYgorI2RlZmluZSBn
ZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkgKGNvbnRleHQpLT5h
Y3Rpb24KKyNkZWZpbmUgZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSAoY29u
dGV4dCktPmFjdGlvbnMKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKKwor
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRf
cmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkKKyNkZWZpbmUgZ3Rr
X3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9GTEFHUygo
d2lkZ2V0KSwgR1RLX1JFQUxJWkVEKQorI2RlZmluZSBndGtfcmFuZ2VfZ2V0X21pbl9zbGlkZXJf
c2l6ZShyYW5nZSkgKHJhbmdlKS0+bWluX3NsaWRlcl9zaXplCisjZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMjAsIDApCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCisj
ZGVmaW5lIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSBHVEtfV0lER0VUX1RPUExFVkVM
KHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lE
R0VUX1JFQUxJWkVEKHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfaGFzX3dpbmRvdyh3
aWRnZXQpICFHVEtfV0lER0VUX05PX1dJTkRPVyh3aWRnZXQpCisjZGVmaW5lIGd0a193aWRnZXRf
Z2V0X2Nhbl9mb2N1cyh3aWRnZXQpIEdUS19XSURHRVRfQ0FOX0ZPQ1VTKHdpZGdldCkKKyNkZWZp
bmUgZ3RrX3dpZGdldF9pc19zZW5zaXRpdmUod2lkZ2V0KSBHVEtfV0lER0VUX0lTX1NFTlNJVElW
RSh3aWRnZXQpCisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCisKKyNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDApCisjZGVmaW5lIGd0a193aWRnZXRfc2V0X3Zpc2li
bGUod2lkZ2V0LCBGQUxTRSkgR1RLX1dJREdFVF9VTlNFVF9GTEFHUygod2lkZ2V0KSwgR1RLX1ZJ
U0lCTEUpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X3Zpc2libGUod2lkZ2V0KSAoR1RLX1dJREdF
VF9GTEFHUyh3aWRnZXQpICYgR1RLX1ZJU0lCTEUpCisKKyNkZWZpbmUgZ3RrX3dpZGdldF9zZXRf
d2luZG93KHdpZGdldCwgbmV3X3dpbmRvdykgKHdpZGdldCktPndpbmRvdyA9IChuZXdfd2luZG93
KQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMod2lkZ2V0LCBUUlVFKSBHVEtfV0lE
R0VUX1NFVF9GTEFHUygod2lkZ2V0KSwgR1RLX0NBTl9GT0NVUykKKyNkZWZpbmUgZ3RrX3dpZGdl
dF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9jKSAoKihhbGxvYykgPSAod2lkZ2V0KS0+YWxs
b2NhdGlvbikKKyNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9j
KSAoKHdpZGdldCktPmFsbG9jYXRpb24gPSAqKGFsbG9jKSkKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tf
VkVSU0lPTigyLCAxOCwgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKK3Zv
aWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwg
Z2ludCB5LCBnaW50KiByb290WCwgZ2ludCogcm9vdFkpOworI2VuZGlmIC8vIEdUS19DSEVDS19W
RVJTSU9OKDIsIDE3LCAzKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorY29u
c3QgZ2NoYXIqIGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKEd0a01lbnVJdGVtKik7CisjZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCisKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNCwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCkgKHdpZGdl
dCktPndpbmRvdworI2RlZmluZSBndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqKSAoYWRqKS0+
dmFsdWUKKyNkZWZpbmUgZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxvZykgKGRpYWxv
ZyktPnZib3gKKyNkZWZpbmUgZ3RrX2RpYWxvZ19nZXRfYWN0aW9uX2FyZWEoZGlhbG9nKSAoZGlh
bG9nKS0+YWN0aW9uX2FyZWEKKyNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgo
ZGF0YSkgKGRhdGEpLT5sZW5ndGgKKyNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRh
KGRhdGEpIChkYXRhKS0+ZGF0YQorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3Rhcmdl
dChkYXRhKSAoZGF0YSktPnRhcmdldAorI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9z
aXplKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+cGFnZV9zaXplID0gbmV3VmFsdWUpCisjZGVmaW5l
IGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGosIG5ld1ZhbHVlKSAoKGFkaiktPnZhbHVlID0g
bmV3VmFsdWUpCisjZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9sb3dlcihhZGosIG5ld1ZhbHVl
KSAoKGFkaiktPmxvd2VyID0gbmV3VmFsdWUpCisjZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF91
cHBlcihhZGosIG5ld1ZhbHVlKSAoKGFkaiktPnVwcGVyID0gbmV3VmFsdWUpCisKK3ZvaWQgZ3Rr
X2FkanVzdG1lbnRfY29uZmlndXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdkb3VibGUg
dmFsdWUsIGdkb3VibGUgbG93ZXIsIGdkb3VibGUgdXBwZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZG91YmxlIHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFnZUluY3JlbWVudCwg
Z2RvdWJsZSBwYWdlU2l6ZSk7CisKK3ZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0Fk
anVzdG1lbnQqIGFkanVzbWVudCwgZ2RvdWJsZSB2YWx1ZSk7CisjZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTQsIDApCisKK0dka0RldmljZSogZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZp
Y2UoR2RrV2luZG93KiB3aW5kb3cpOworR2RrQ3Vyc29yKiBibGFua0N1cnNvcigpOworCisjaWYg
IUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNywgMSkKK2dib29sZWFuIGdfc2lnbmFsX2FjY3VtdWxh
dG9yX2ZpcnN0X3dpbnMoR1NpZ25hbEludm9jYXRpb25IaW50KiBpbnZvY2F0aW9uSGludCwgR1Zh
bHVlKiByZXR1cm5BY2N1bXVsYXRvciwgY29uc3QgR1ZhbHVlKiBoYW5kbGVyUmV0dXJuLCBncG9p
bnRlciBkYXRhKTsKKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCit2
b2lkIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICosIGludCBtb25p
dG9yLCBHZGtSZWN0YW5nbGUgKmFyZWEpOworI2VuZGlmCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvLyBHdGtWZXJzaW9uaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggZTM5NmJl
NmNiNGU0YTBlY2YyODE0ZGMwM2RiNDVmZDIxNzNlMTdmYS4uMzdjY2FhNDZiMTc4MGI1ZDkxYjMy
NThkOTczYWYzYTk2MzIwMzlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTYyOCw3
ICs2MjgsNyBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGtleWV2ZW50c19MREFERCA9ICQod2Vi
a2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFH
UyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCiAKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29w
eWFuZHBhc3RlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBh
c3RlLmMgXAotCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jCisJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rl
c3Rjb3B5YW5kcGFzdGVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAxNTVlNjdkMDIzYjI2M2JiZmIyNDgwOTJk
M2M4NDRkZmNlMGY5OThmLi45M2I4ZWZhZWU5YjE1YjE0MmM1MWQyN2MzYWYzMThmOTBlNmExMTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNTEyLDkgKzUxMiwxMiBAQCBsaWJQbGF0Zm9ybUd0
azJfbGFfQ1BQRkxBR1MgPSBcCiAJLURHVEtfQVBJX1ZFUlNJT05fMj0xIFwKIAkkKGdsb2JhbF9j
cHBmbGFncykgXAogCSQocGxhdGZvcm1ndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtX3dlYmNv
cmVfY3BwZmxhZ3MpIFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJLWZuby1zdHJp
Y3QtYWxpYXNpbmcgXAotCSQoR1RLMl9DRkxBR1MpCisJJChHVEsyX0NGTEFHUykgXAorCSQoTElC
U0VDUkVUX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCiAKICMgSW5qZWN0ZWQgQnVuZGxl
CiBpbmplY3RlZGJ1bmRsZWRpciA9ICQobGliZGlyKS93ZWJraXQyZ3RrLTMuMC9pbmplY3RlZC1i
dW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2Fy
ZGluZy1oZWFkZXJzLnBsIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJk
aW5nLWhlYWRlcnMucGwKaW5kZXggYjc4M2E1ODg5MGJkZTQ1N2IxMjcwNTczOWU1YzY0N2I5YmQz
ZWQ0Ny4uYmM1NDk2ZjQ4ODEwYjhkOTI4OWIxZTIwMDhjYjhkN2QyMzcxNDEwZiAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMu
cGwKQEAgLTM2LDcgKzM2LDcgQEAgdXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsKIG15ICRzcmNS
b290ID0gcmVhbHBhdGgoRmlsZTo6U3BlYy0+Y2F0ZmlsZShkaXJuYW1lKGFic19wYXRoKCQwKSks
ICIuLi8uLiIpKTsKIG15ICRpbmNGcm9tUm9vdCA9IGFic19wYXRoKCRBUkdWWzBdKTsKIG15IEBw
bGF0Zm9ybVByZWZpeGVzID0gKCJibGFja2JlcnJ5IiwgImNmIiwgImNocm9taXVtIiwgImN1cmwi
LCAiZWZsIiwgImd0ayIsICJtYWMiLCAicXQiLCAic291cCIsICJ2OCIsICJ3aW4iLCAid3giKTsK
LW15IEBmcmFtZXdvcmtzID0gKCJKYXZhU2NyaXB0Q29yZSIsICJQbGF0Zm9ybSIsICJXZWJDb3Jl
IiwgIldlYktpdDIiKTsKK215IEBmcmFtZXdvcmtzID0gKCJKYXZhU2NyaXB0Q29yZSIsICJXZWJD
b3JlIiwgIldlYktpdDIiKTsKIG15IEBza2lwcGVkUHJlZml4ZXM7CiBteSBAZnJhbWV3b3JrSGVh
ZGVyczsKIG15ICRmcmFtZXdvcms7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJn
dW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IDMxY2Q1ZGE4YTRiNDA3ODA1MmZjODVjOTg0YjJjZmRj
NDI4ZGJkMzUuLjM5NjllMGM4NjVlZGUwMjJiZWE1OWExNmJiNjI4NmUwMWFhODQ5ZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCkBAIC0y
OSwxMCArMjksMTAgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5j
bHVkZSA8UGxhdGZvcm0vR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YU9i
amVjdEd0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2Vi
RXZlbnRGYWN0b3J5LmNwcAppbmRleCBiZDczYWIxZTgzMDEzM2YyYmFhYjQzNWRkZjkwYzE3NWIx
YmViNTc1Li5jYjg4YTgyMGE1MTQ0M2U2NDk2ZmVmNTcwYzMyM2FhODI1OTg3NDM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0zMSw3ICsz
MSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKLSNpbmNsdWRlIDxQ
bGF0Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5n
Lmg+CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CiAj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBiYTcyZGRjODY5OGVk
NWQ1MDIyMDRmZTAyOWI0MzI0YWY3ZDZlY2JmLi4yMzQ0Zjg5NGRmMzNlMGQzNzU0YWFmMWE5NDM2
MjY0OGEyMWM1ZmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUgPFBsYXRm
b3JtL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZEd0ay5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EYXRhT2JqZWN0R3RrLmg+CkBAIC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9HdGtDbGlja0NvdW50ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWZQdHJDYWlyby5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcApp
bmRleCA2ZTA3NzY3ZDFkMWNkZjI5MjdlNmE0ODIzMjAyZDhiZjRkNjIxNWUwLi5hMTg0Njg3OGIz
MTA0NjE0YjdhMjZmYzI3Y2VhYjc5YTFhNGI5OGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNj
YXBlUGx1Z2luWDExLmNwcApAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGd0ay9ndGt4Lmg+
CiAjZW5kaWYKICNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1Zl
cnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNlbGlmIFBM
QVRGT1JNKEVGTCkgJiYgZGVmaW5lZChIQVZFX0VDT1JFX1gpCiAjaW5jbHVkZSA8RWNvcmVfWC5o
PgogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggOTgxODhjODVmOWFlNGFmNjQ4Y2E0N2QzNGQwYWQ1M2Y0MjIxZDZmMy4uNmM3MjAwMzVm
MzYzZmIwMDU0OGZiNmE3ZGVjMzNkYjQzMTViZmY2OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDEzLTAzLTI2ICBa
YW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBCdWls
ZCBHVEstc3BlY2lmaWMsIG5vbi1sYXllci12aW9sYXRpbmcgc291cmNlIGNvZGUgaW50byBXZWJD
b3JlLWluZGVwZW5kZW50IGxpYlBsYXRmb3JtR3RrLmxhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI1NDYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZWZlcmVuY2UgdGhl
IHBsYXRmb3JtZ3RrX2NwcGZsYWdzIGFtb25nc3QgdGhlIGxpYldlYkNvcmVJbnRlcm5hbHMnIENQ
UEZMQUdTLiBHdGtWZXJzaW9uaW5nLmMgZmlsZSBoYXMKKyAgICAgICAgbW92ZWQgYmFjayB0byBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS4gRml4IGFuIGluZGVudGF0aW9uIGlzc3VlIGFzIHdlbGwu
CisKKzIwMTMtMDMtMjYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4KIAogICAgICAgICAqIFNjcmlwdHMvcnVu
LWd0ay10ZXN0czoKZGlmZiAtLWdpdCBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvR05V
bWFrZWZpbGUuYW0KaW5kZXggZGViY2QyNDhlNGM2MTFhNjY0ZmYzOGYzODM1ZmE5Mzk3OWIxZTBi
Yy4uZGM0MGJjODJmNTJmZjFlNjc2YzdhYjBkNTBmMDc1N2Y2ZmYwMTVhMiAxMDA2NDQKLS0tIGEv
VG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTgzLDYg
KzgzLDcgQEAgQlVJTFRfU09VUkNFUyArPSAkKGxpYndlYmNvcmVpbnRlcm5hbHNfYnVpbHRfc291
cmNlcykKIAogbGliV2ViQ29yZUludGVybmFsc19sYV9DUFBGTEFHUyA9IFwKIAkkKGdsb2JhbF9j
cHBmbGFncykgXAorCSQocGxhdGZvcm1ndGtfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxh
Z3MpIFwKIAkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZs
YWdzKSBcCkBAIC0xMjUsNiArMTI2LDcgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfQ1BQRkxB
R1MgKz0gXAogZW5kaWYKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIFwKIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZUNvbW1vbi5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlUHJlZml4LmggXApAQCAtMTQ5LDcgKzE1MSw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVl
X1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY29uZmlnLmggXAogCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggXAogCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcCBcCi0gICAgCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAorCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBc
CiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcCBc
CiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmggXApA
QCAtMTY4LDggKzE3MCw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJ
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3LmggXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmggXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBcCi0JVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a1ZlcnNpb25pbmcuYworCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9Xb3JrUXVldWVJ
dGVtR3RrLmNwcAogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DWFhGTEFHUyA9IFwKIAkkKGds
b2JhbF9jeHhmbGFncykgXApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4
IDgyNGExYjNjZmU1Njg4YjFjNDkyYTM1YTk0ZTJjMGUzY2FhMWM5MWQuLjk5ZTk4ODE1NTU3Yzky
NzBkODgxNTlkNzliMjhjYjBhYjE4MjAxODkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0wMy0yNiAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgR1RLLXNwZWNpZmljLCBu
b24tbGF5ZXItdmlvbGF0aW5nIHNvdXJjZSBjb2RlIGludG8gV2ViQ29yZS1pbmRlcGVuZGVudCBs
aWJQbGF0Zm9ybUd0ay5sYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEyNTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogRGVmaW5lIHRoZSBuZXcgcGxhdGZvcm1fd2ViY29y
ZV9jcHBmbGFncy4KKwogMjAxMy0wMy0yNiAgUmlqdWJyYXRhIEJoYXVtaWsgIDxyaWp1YnJhdGEu
YmhhdW1pa0BpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gRW5hYmxlIEluZGV4ZWREQiBieSBk
ZWZhdWx0CmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDIyOGI4MjVmNGVkYmIxYWYwZWU4MmZkMzczMjRlNGUwYjU1NDBkNDguLjE5NDliMjQ2NjAxNGVj
ZmI2ZTEyYTJiOTNkOWFkYTYzNTVkMGY5MDEgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisr
KyBiL0dOVW1ha2VmaWxlLmFtCkBAIC03MCw2ICs3MCw3IEBAIGphdmFzY3JpcHRjb3JlX2J1aWx0
X3NvdXJjZXMgOj0KIGphdmFzY3JpcHRjb3JlX2J1aWx0X25vc291cmNlcyA6PQogbGxpbnRfbm9z
b3VyY2VzIDo9CiBvZmZsaW5lYXNtX25vc291cmNlcyA6PQorcGxhdGZvcm1fd2ViY29yZV9jcHBm
bGFncyA6PQogcGxhdGZvcm1ndGtfY3BwZmxhZ3MgOj0KIHBsYXRmb3JtZ3RrX3NvdXJjZXMgOj0K
IHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyA6PQo=
</data>
<flag name="review"
          id="216940"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="216943"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>