<?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>81011</bug_id>
          
          <creation_ts>2012-03-13 10:55:10 -0700</creation_ts>
          <short_desc>[GTK] Add ContextMenu API to WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-06-23 03:55:25 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>80600</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>577541</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-13 10:55:10 -0700</bug_when>
    <thetext>As proposed in the mailing list we should add a WebKitWebView::context-menu signal, similar to ::populate-menu in WebKit1, but more flexible to make it easier to customize the proposed menu.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577574</commentid>
    <comment_count>1</comment_count>
      <attachid>131675</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-13 11:16:59 -0700</bug_when>
    <thetext>Created attachment 131675
Patch

It adds WebKitContextMenu and WebKitContextMenuItem objects as proposed in the mailing list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577600</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-13 11:30:20 -0700</bug_when>
    <thetext>Patch doesn&apos;t apply because it depends on bug #80600</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649217</commentid>
    <comment_count>3</comment_count>
      <attachid>147596</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-14 09:13:26 -0700</bug_when>
    <thetext>Created attachment 147596
Patch updated to apply on current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649219</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 09:17:04 -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>651478</commentid>
    <comment_count>5</comment_count>
      <attachid>147596</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-18 10:07:47 -0700</bug_when>
    <thetext>Comment on attachment 147596
Patch updated to apply on current git master

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

This patch looks pretty good, but I think I&apos;d prefer it WebKitContextMenuItem didn&apos;t contain a &quot;live&quot; submenu element (just a cache of the realized version of the ContextMenuItem).

The reason I say this is because I&apos;m not sure that it makes sense to have further modifications of a submenu alter some previously instantiated WebKitContextMenuItem. Instead, it makes sense to me for the code to duplicate the submenu item&apos;s contents and not hold on to a reference. This allows code like:

WebKitContentMenuItem* item1= webkit_context_menu_item_new_with_submenu(submenu);

/* make some minor changes to the submenu */
WebKitContentMenuItem* item2 = webkit_context_menu_item_new_with_submenu(submenu);

/* make some minor changes to the submenu */
WebKitContentMenuItem* item3 = webkit_context_menu_item_new_with_submenu(submenu);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:106
&gt; +WebKitContextMenu* webkit_context_menu_with_items(GList* items)

Probably best to call this webkit_context_new_menu_with_items to make it clear that it&apos;s a constructor. This seems to be the style in the Gnome platform (just searched devhelp for &quot;new_with&quot;).

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:118
&gt; +    g_object_ref_sink(item);
&gt; +    menu-&gt;priv-&gt;items = g_list_insert(menu-&gt;priv-&gt;items, item, position);

I think it just makes sense to roll this into webkit_context_menu_insert. I believe the double cast/checks for webkit_context_menu_prepend and webkit_context_menu_append shouldn&apos;t be a big deal, but you can always just eliminate them in the outer methods.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:126
&gt; + * Adds @item at the beginning of the @menu item list.

Probably just best to day &quot;Adds @item at the beginning of the @menu.&quot; as the fact that it&apos;s a list is somewhat of an implementation detail. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:141
&gt; + *
&gt; + * Adds @item at the end of the @menu item list.

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:157
&gt; + * Inserts @item into the @menu item list at the given position.

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:177
&gt; + * Moves @item to the given position in the @menu item list.
&gt; + * The first position is 0.

I love how you specified the what happens when you pass weird values to webkit_context_menu_insert. Do you mind doing the same here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:54
&gt; + * @WEBKIT_CONTEXT_MENU_ACTION_SPELLING_GUESS: Guess spelling.

It&apos;s probably better to say something like &quot;A proposed replacement for a misspelled word.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:55
&gt; + * @WEBKIT_CONTEXT_MENU_ACTION_NO_GUESSES_FOUND: No gesses found.

&quot;An indicator in the menu that spellchecking found no proposed replacements.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:56
&gt; + * @WEBKIT_CONTEXT_MENU_ACTION_IGNORE_SPELLING: Ignore spelling.

&quot;An item which causes the spellchecker to ignore the word for this session.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:57
&gt; + * @WEBKIT_CONTEXT_MENU_ACTION_LEARN_SPELLING: Learn spelling.

&apos;An item which causes the spellchecker to add the word to the dictionary.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:59
&gt; + * @WEBKIT_CONTEXT_MENU_ACTION_FONT_MENU: Font menu.

Not sure what this is either...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:125
&gt; +    WEBKIT_CONTEXT_MENU_ACTION_BASE_APPLICATION = 10000

WEBKIT_CONTEXT_MENU_ACTION_CUSTOM perhaps?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp:45
&gt; +G_DEFINE_TYPE(WebKitContextMenuItem, webkit_context_menu_item, G_TYPE_INITIALLY_UNOWNED)

I like the use of G_TYPE_INITIALLY_UNOWNED here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp:161
&gt; + * action to be performed.

action from being performed.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp:165
&gt; +WebKitContextMenuItem* webkit_context_menu_item_new_from_stock(WebKitContextMenuAction action)

webkit_context_menu_item_new_from_webkit_action? The use of the word stock here makes me think of the set of GTK+ stock items.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp:251
&gt; + * webkit_context_menu_item_get_stock_action:

webkit_context_menu_item_get_webkit_action?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:964
&gt; +     *  and return %TRUE so tha the proposed menu will not be shown.

so tha -&gt; so that

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:970
&gt; +     *  build your own #GtkMenu and return %TRUE to prevent the proposed menu to be shown.

prevent the proposed menu to be shown -&gt; prevent the proposed menu from being shown

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1262
&gt; +        if (webkit_context_menu_item_get_stock_action(item) == WEBKIT_CONTEXT_MENU_ACTION_UNICODE) {
&gt; +            unicodeMenuItemPosition = i;
&gt; +            break;
&gt; +        }

It makes sense to just do return i here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:41
&gt; +    static gboolean viewContextMenuCallback(WebKitWebView* webView, WebKitContextMenu* contextMenu, GdkEvent* event, WebKitHitTestResult* hitTestResult, ContextMenuTest* test)

contextMenuCallback?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:46
&gt; +        g_assert(WEBKIT_IS_CONTEXT_MENU(contextMenu));
&gt; +        test-&gt;assertObjectIsDeletedWhenTestFinishes(G_OBJECT(contextMenu));
&gt; +        test-&gt;checkContextMenuEvent(event);
&gt; +        g_assert(WEBKIT_IS_HIT_TEST_RESULT(hitTestResult));

It&apos;s probably better to put these actions in the base class implementation of ::contextMenu and then just call ContextMenuTest::contextMenu from each implementation.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:49
&gt; +        return test-&gt;contextMenu(contextMenu, event, hitTestResult);

The base class is responsible for starting the main loop, so why not quit the main loop in ContextMenuTest::contextMenu?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:83
&gt; +        if (state &amp; Visible)
&gt; +            g_assert(gtk_action_get_visible(action));
&gt; +        else
&gt; +            g_assert(!gtk_action_get_visible(action));
&gt; +

Perhaps this could just be g_assert(gtk_action_get_visible(action) == (state &amp; Visible));

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:94
&gt; +        if (state &amp; Enabled)
&gt; +            g_assert(gtk_action_get_sensitive(action));
&gt; +        else
&gt; +            g_assert(!gtk_action_get_sensitive(action));
&gt; +
&gt; +        if (GTK_IS_TOGGLE_ACTION(action)) {
&gt; +            if (state &amp; Checked)
&gt; +                g_assert(gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
&gt; +            else
&gt; +                g_assert(!gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)));
&gt; +        }

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:167
&gt; +    void showContextMenuAtPositionAndWaitUntilFinish(int x, int y)

showContextMenuAtPositionAndWaitUntilFinish -&gt; showContextMenuAtPositionAndWaitUntilFinished

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:175
&gt; +    void showContextMenuAndWaitUntilFinish()

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:581
&gt; +            finishMainLoopAfterDelay(1);

A one second delay in a test is way too long. How about just spining the main loop until there are no more events to process?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:117
&gt;      g_timeout_add_seconds(seconds, reinterpret_cast&lt;GSourceFunc&gt;(testLoadTimeoutFinishLoop), m_mainLoop);

Assuming spinning the main loop doesn&apos;t work above, this is a good opportunity to rename testLoadTimeoutFinishLoop to quitMainLoop and bring it closer to here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652183</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-19 01:07:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 147596 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147596&amp;action=review

Thank you very much for reviewing it ;-)

&gt; This patch looks pretty good, but I think I&apos;d prefer it WebKitContextMenuItem didn&apos;t contain a &quot;live&quot; submenu element (just a cache of the realized version of the ContextMenuItem).
&gt; 
&gt; The reason I say this is because I&apos;m not sure that it makes sense to have further modifications of a submenu alter some previously instantiated WebKitContextMenuItem. Instead, it makes sense to me for the code to duplicate the submenu item&apos;s contents and not hold on to a reference. This allows code like:
&gt; 
&gt; WebKitContentMenuItem* item1= webkit_context_menu_item_new_with_submenu(submenu);
&gt; 
&gt; /* make some minor changes to the submenu */
&gt; WebKitContentMenuItem* item2 = webkit_context_menu_item_new_with_submenu(submenu);
&gt; 
&gt; /* make some minor changes to the submenu */
&gt; WebKitContentMenuItem* item3 = webkit_context_menu_item_new_with_submenu(submenu);

This is pretty weird. I&apos;ve tried to make the API as similar as GTK+ as possible. In GTK+ the same menu can&apos;t be a submenu of more than one menu item, the same way a GtkWidget can&apos;t be added to more than one container. I&apos;ll add the check to make sure it doesn&apos;t happen, the same way GTK+ does.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:106
&gt; &gt; +WebKitContextMenu* webkit_context_menu_with_items(GList* items)
&gt; 
&gt; Probably best to call this webkit_context_new_menu_with_items to make it clear that it&apos;s a constructor. This seems to be the style in the Gnome platform (just searched devhelp for &quot;new_with&quot;).

Indeed, and that was my intention. I guess I typed it wrong the first time and then I copy-pasted every time I used it :-P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:118
&gt; &gt; +    g_object_ref_sink(item);
&gt; &gt; +    menu-&gt;priv-&gt;items = g_list_insert(menu-&gt;priv-&gt;items, item, position);
&gt; 
&gt; I think it just makes sense to roll this into webkit_context_menu_insert. I believe the double cast/checks for webkit_context_menu_prepend and webkit_context_menu_append shouldn&apos;t be a big deal, but you can always just eliminate them in the outer methods.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:126
&gt; &gt; + * Adds @item at the beginning of the @menu item list.
&gt; 
&gt; Probably just best to day &quot;Adds @item at the beginning of the @menu.&quot; as the fact that it&apos;s a list is somewhat of an implementation detail. :)

I agree.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenu.cpp:177
&gt; &gt; + * Moves @item to the given position in the @menu item list.
&gt; &gt; + * The first position is 0.
&gt; 
&gt; I love how you specified the what happens when you pass weird values to webkit_context_menu_insert. Do you mind doing the same here?

Sure.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:59
&gt; &gt; + * @WEBKIT_CONTEXT_MENU_ACTION_FONT_MENU: Font menu.
&gt; 
&gt; Not sure what this is either...

me neither, I guess it&apos;s mac specific, I&apos;ll look at it again.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuActions.h:125
&gt; &gt; +    WEBKIT_CONTEXT_MENU_ACTION_BASE_APPLICATION = 10000
&gt; 
&gt; WEBKIT_CONTEXT_MENU_ACTION_CUSTOM perhaps?

Ok, I tried to use the same values than WebCore, but I prefer CUSTOM too.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp:165
&gt; &gt; +WebKitContextMenuItem* webkit_context_menu_item_new_from_stock(WebKitContextMenuAction action)
&gt; 
&gt; webkit_context_menu_item_new_from_webkit_action? The use of the word stock here makes me think of the set of GTK+ stock items.

actions refers to GtkAction, GTK+ has stock icons, these are webkit stock actions, it has nothing to do. We could use webkit_context_menu_item_new_from_stock_action() so that api dones&apos;t look like GTK+ api that takes a stock icon and it&apos;s consistent with webkit_context_menu_item_get_stock_action().

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp:251
&gt; &gt; + * webkit_context_menu_item_get_stock_action:
&gt; 
&gt; webkit_context_menu_item_get_webkit_action?

I prefer stock_action.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1262
&gt; &gt; +        if (webkit_context_menu_item_get_stock_action(item) == WEBKIT_CONTEXT_MENU_ACTION_UNICODE) {
&gt; &gt; +            unicodeMenuItemPosition = i;
&gt; &gt; +            break;
&gt; &gt; +        }
&gt; 
&gt; It makes sense to just do return i here.

Yes.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:46
&gt; &gt; +        g_assert(WEBKIT_IS_CONTEXT_MENU(contextMenu));
&gt; &gt; +        test-&gt;assertObjectIsDeletedWhenTestFinishes(G_OBJECT(contextMenu));
&gt; &gt; +        test-&gt;checkContextMenuEvent(event);
&gt; &gt; +        g_assert(WEBKIT_IS_HIT_TEST_RESULT(hitTestResult));
&gt; 
&gt; It&apos;s probably better to put these actions in the base class implementation of ::contextMenu and then just call ContextMenuTest::contextMenu from each implementation.

Why is that better?, it requires to manually call the parent method from each implementation, which is easier to forget.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:49
&gt; &gt; +        return test-&gt;contextMenu(contextMenu, event, hitTestResult);
&gt; 
&gt; The base class is responsible for starting the main loop, so why not quit the main loop in ContextMenuTest::contextMenu?

Because it&apos;s pure virtual, but I can make it just virtual and finish the mainloop there, all implementation will have explicitly call the parent class anyway, so it&apos;s even more code for the same result. Calling contextMenu() in the impl look weird to me, so I&apos;ll add a helper method in the parent to finish the loop.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:83
&gt; &gt; +        if (state &amp; Visible)
&gt; &gt; +            g_assert(gtk_action_get_visible(action));
&gt; &gt; +        else
&gt; &gt; +            g_assert(!gtk_action_get_visible(action));
&gt; &gt; +
&gt; 
&gt; Perhaps this could just be g_assert(gtk_action_get_visible(action) == (state &amp; Visible));

I&apos;ll try that way.


&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:581
&gt; &gt; +            finishMainLoopAfterDelay(1);
&gt; 
&gt; A one second delay in a test is way too long. How about just spining the main loop until there are no more events to process?

Ok, I&apos;ll try

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp:117
&gt; &gt;      g_timeout_add_seconds(seconds, reinterpret_cast&lt;GSourceFunc&gt;(testLoadTimeoutFinishLoop), m_mainLoop);
&gt; 
&gt; Assuming spinning the main loop doesn&apos;t work above, this is a good opportunity to rename testLoadTimeoutFinishLoop to quitMainLoop and bring it closer to here.

It makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652266</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-19 02:39:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 147596 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147596&amp;action=review
&gt; 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:83
&gt; &gt; +        if (state &amp; Visible)
&gt; &gt; +            g_assert(gtk_action_get_visible(action));
&gt; &gt; +        else
&gt; &gt; +            g_assert(!gtk_action_get_visible(action));
&gt; &gt; +
&gt; 
&gt; Perhaps this could just be g_assert(gtk_action_get_visible(action) == (state &amp; Visible));

It gives a compile warning because it&apos;s a comparison between signed and unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652353</commentid>
    <comment_count>8</comment_count>
      <attachid>148319</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-19 05:58:35 -0700</bug_when>
    <thetext>Created attachment 148319
Updated patch addressing review comments

Patch updated to address review comments. I&apos;ve also added a new test case for the submenu api.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655489</commentid>
    <comment_count>9</comment_count>
      <attachid>148319</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-22 09:03:14 -0700</bug_when>
    <thetext>Comment on attachment 148319
Updated patch addressing review comments

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

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp:562
&gt; +    static gboolean viewButtonPressEventCallback(GtkWidget*, GdkEvent* event, ContextMenuDisabledTest* test)

buttonPressEventCallback?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656062</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-23 03:55:25 -0700</bug_when>
    <thetext>Committed r121093: &lt;http://trac.webkit.org/changeset/121093&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131675</attachid>
            <date>2012-03-13 11:16:59 -0700</date>
            <delta_ts>2012-06-14 09:13:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-context-menu-api.diff</filename>
            <type>text/plain</type>
            <size>115127</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzMmZmYTJjLi44ZGU5Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5
IEBACisyMDEyLTAzLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBBZGQgQ29udGV4dE1lbnUgQVBJIHRvIFdlYktpdDIgR1RLKyBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMDEx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdl
YktpdFdlYlZpZXc6OmNvbnRleHQtbWVudSBzaWduYWwgYW5kIFdlYktpdENvbnRleHRNZW51IGFu
ZAorICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2JqZWN0cyB0byBjdXN0b21pemUgdGhl
IGRlZmF1bHQgbWVudSBvcgorICAgICAgICBidWlscyBuZXcgbWVudXMuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBkZXN0aW5hdGlvbi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5jcHA6IEFkZGVkLgorICAgICAgICAo
d2Via2l0Q29udGV4dE1lbnVGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51
X2luaXQpOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdENvbnRleHRNZW51UG9wdWxhdGUpOiBQb3B1bGF0ZSB0aGUgZ2l2ZW4gdmVjdG9y
IG9mCisgICAgICAgIENvbnRleHRNZW51SXRlbXMgd2l0aCB0aGUgV2ViS2l0Q29udGV4dE1lbnUg
aXRlbXMgcmVsZWFzaW5nIHRoZQorICAgICAgICBpdGVtcyBhZGRlZCB0byB0aGUgdmVjdG9yLgor
ICAgICAgICAod2Via2l0Q29udGV4dE1lbnVDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0Q29u
dGV4dE1lbnUgZm9yIHRoZQorICAgICAgICBnaXZlbiBXS0FycmF5UmVmIG9mIFdLQ29udGV4dE1l
bnVJdGVtUmVmLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9uZXcpOiBDcmVhdGUgYSBu
ZXcgV2ViS2l0Q29udGV4dE1lbnUuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X3dpdGhf
aXRlbXMpOiBDcmVhdGUgYSBuZXcgV2ViS2l0Q29udGV4dE1lbnUKKyAgICAgICAgdXNpbmcgdGhl
IGdpdmVuIGxpc3Qgb2YgV2ViS2l0Q29udGV4dE1lbnVJdGVtLgorICAgICAgICAod2Via2l0Q29u
dGV4dE1lbnVJbnNlcnQpOiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IGEKKyAgICAgICAgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtIGludG8gdGhlIFdlYktpdENvbnRleHRNZW51LgorICAgICAgICAo
d2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKTogQWRkIGl0ZW0gYXQgdGhlIGJlZ2lubmluZy4K
KyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKTogQWRkIGl0ZW0gYXQgdGhlIGVu
ZC4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KTogSW5zZXJ0IGl0ZW0gYXQg
YSByYW5kb20gcG9zaXRpb24uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRl
bSk6IE1vdmUgYW4gZXhpc3RpbmcgaXRlbSB0byBhIG5ldworICAgICAgICBwb3NpdGlvbi4KKyAg
ICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKTogR2V0IHRoZSBsaXN0IG9mIGl0
ZW1zLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyk6IEdldCB0aGUg
bnVtYmVyIG9mIGl0ZW1zLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9maXJzdCk6IEdl
dCB0aGUgZmlyc3QgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdCk6IEdl
dCB0aGUgbGFzdCBpdGVtLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbV9h
dF9wb3NpdGlvbik6IEdldCB0aGUgaXRlbSBhdCB0aGUKKyAgICAgICAgZ2l2ZW4gcG9zaXRpb24u
CisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZSk6IFJlbW92ZSB0aGUgZ2l2ZW4g
aXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbCk6IFJlbW92ZSBh
bGwgaXRlbXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb25zLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUFjdGlvbklzQ2hl
Y2thYmxlKTogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0b2NrCisgICAgICAgIGFjdGlvbiBpcyBhIHRv
Z2dsZSBhY3Rpb24uCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEFjdGlvblRh
Zyk6IEdldCB0aGUgV2ViQ29yZQorICAgICAgICBDb250ZXh0TWVudUFjdGlvbiBjb3JyZXNwb25k
aW5nIHRvIHRoZSBnaXZlbiBzdG9jayBhY3Rpb24uCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVu
dUFjdGlvbkdldEZvckNvbnRleHRNZW51SXRlbSk6IEdldCB0aGUgc3RvY2sKKyAgICAgICAgYWN0
aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFdlYkNvcmUgQ29udGV4dE1lbnVBY3Rpb24u
CisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldExhYmVsKTogR2V0IHRoZSBsYWJl
bCBzdHJpbmcgb2YgdGhlCisgICAgICAgIGdpdmVuIHN0b2NrIGFjdGlvbi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0
ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdENvbnRleHRNZW51SXRlbUZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdENvbnRleHRN
ZW51SXRlbUNyZWF0ZSk6IENyZWF0ZSBhIG5ldyBXZWJLaXRDb250ZXh0TWVudUl0ZW0KKyAgICAg
ICAgZm9yIHRoZSBnaXZlbiBXS0NvbnRleHRNZW51SXRlbVJlZi4KKyAgICAgICAgKHdlYmtpdENv
bnRleHRNZW51SXRlbUNyZWF0ZUZvckd0a0l0ZW0pOiBDcmVhdGUgYSBuZXcKKyAgICAgICAgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtIHVzaW5nIHRoZSBnaXZlbiBHdGtNZW51SXRlbS4KKyAgICAgICAg
KHdlYmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnUpOiBTZXQgdGhlIGdpdmVuIEd0a01lbnUg
YXMKKyAgICAgICAgc3VibWVudSBvZiB0aGUgaXRlbS4gVGhpcyBpcyB1c2VkIG9ubHkgdG8gYWRk
IElucHV0IE1ldGhvZHMKKyAgICAgICAgc3VibWVudSB0aGF0IGlzIGNyZWF0ZWQgYnkgR1RLLgor
ICAgICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVtUmVsZWFzZSk6IFJlbGVhc2UgdGhlIFdlYkNv
cmUKKyAgICAgICAgQ29udGV4dE1lbnVJdGVtIGFzc29jaWF0ZWQgdG8gdGhlIGl0ZW0uCisgICAg
ICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KTogQ3JlYXRlIGEgbmV3IFdlYktpdENv
bnRleHRNZW51SXRlbQorICAgICAgICBmb3IgdGhlIGdpdmVuIEd0a0FjdGlvbi4KKyAgICAgICAg
KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9jayk6IENyZWF0ZSBhIG5ldwor
ICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIGEgc3RvY2sgYWN0aW9uLgorICAgICAg
ICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX3dpdGhfbGFiZWwpOiBD
cmVhdGUgYSBuZXcKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtIGZvciBhIHN0b2NrIGFj
dGlvbiB1c2luZyBhIGN1c3RvbSBsYWJlbC4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfd2l0aF9zdWJtZW51KTogQ3JlYXRlIGEgbmV3CisgICAgICAgIFdlYktpdENvbnRl
eHRNZW51SXRlbSB3aXRoIGEgc3VibWVudS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfc2VwYXJhdG9yKTogQ3JlYXRlIGEgbmV3IHNlcGFyYXRvcgorICAgICAgICBtZW51
IGl0ZW0uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbik6IEdl
dCB0aGUgR3RrQWN0aW9uIG9mIHRoZSBpdGVtLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdG9ja19hY3Rpb24pOiBHZXQgdGhlIHN0b2NrIGFjdGlvbgorICAgICAgICBv
ZiB0aGUgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0
b3IpOiBXaGV0aGVyIGl0ZW0gaXMgYSBzZXBhcmF0b3IuCisgICAgICAgICh3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUpOiBTZXQgb3IgcmVwbGFjZSB0aGUKKyAgICAgICAgc3Vi
bWVudSBvZiB0aGUgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
c3VibWVudSk6IEdldCB0aGUgc3VibWVudSBvZiB0aGUgaXRlbS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaDogQWRk
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oOiBBZGQgZm9y
d2FyZCBkZWNsYXJhdGlvbiBvZgorICAgICAgICBXZWJLaXRDb250ZXh0TWVudSBhbmQgV2ViS2l0
Q29udGV4dE1lbnVJdGVtIHN0cnVjdHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFk
ZCBXZWJLaXRXZWJWaWV3Ojpjb250ZXh0LW1lbnUgc2lnbmFsLgorICAgICAgICAod2Via2l0V2Vi
Vmlld0NyZWF0ZUFuZEFwcGVuZElucHV0TWV0aG9kc01lbnVJdGVtKTogVXNlCisgICAgICAgIFdl
YktpdENvbnRleHRNZW51IEFQSSB0byBhZGQgdGhlIGlucHV0IG1ldGhvZHMgc3VibWVudSB0byB0
aGUKKyAgICAgICAgZGVmYXVsdCBjb250ZXh0IG1lbnUuCisgICAgICAgICh3ZWJraXRXZWJWaWV3
Q29udGV4dE1lbnUpOiBDcmVhdGUgYSBXZWJLaXRDb250ZXh0TWVudSBmb3IgdGhlCisgICAgICAg
IGRlZmF1bHQgY29udGV4dCBtZW51IGFuZCBlbWl0IFdlYktpdFdlYlZpZXc6OmNvbnRleHQtbWVu
dQorICAgICAgICBzaWduYWwuIFRoZW4gcG9wdWxhdGUgdGhlIGNvbnRleHQgbWVudSBwcm94eSB3
aXRoIHRoZSByZXN1bHRpbmcKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFkZCBzZWN0aW9ucyBmb3IKKyAgICAg
ICAgV2ViS2l0Q29udGV4dE1lbnUgYW5kIFdlYktpdENvbnRleHRNZW51SXRlbS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3
IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5
cGVzOiBBZGQKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9nZXRfdHlwZSBhbmQgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF90eXBlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IHRlc3QgZm9yIGNvbnRleHQgbWVudS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KToKKyAgICAgICAgKHRlc3RD
b250ZXh0TWVudVBvcHVsYXRlTWVudSk6CisgICAgICAgICh0ZXN0Q29udGV4dE1lbnVDdXN0b21N
ZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KToKKyAgICAgICAgKGJl
Zm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdE1haW4uaDoKKyAgICAgICAgKFRlc3Q6On5UZXN0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3
VGVzdDo6ZmluaXNoTWFpbkxvb3BBZnRlckRlbGF5KTogU3RvcCB0aGUgbWFpbiBsb29wIGFmdGVy
CisgICAgICAgIGEgZ2l2ZW4gZGVsYXkgaW4gc2Vjb25kcy4KKyAgICAgICAgKFdlYlZpZXdUZXN0
Ojp3YWl0KTogVXNlIGZpbmlzaE1haW5Mb29wQWZ0ZXJEZWxheS4KKyAgICAgICAgKFdlYlZpZXdU
ZXN0OjpjbGlja01vdXNlQnV0dG9uKTogU3ludGhlc2l6ZSBhIGNsaWNrIGV2ZW50IChidXR0b24K
KyAgICAgICAgcHJlc3MgKyBidXR0b24gcmVsZWFzZSkKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpk
b01vdXNlQnV0dG9uRXZlbnQpOiBTeW50aGVzaXplIGEgYnV0dG9uIGV2ZW50LgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGQgV2ViS2l0Q29udGV4dE1lbnUuaCwKKyAgICAgICAg
V2ViS2l0Q29udGV4dE1lbnVJdGVtLmggYW5kIFdlYktpdENvbnRleHRNZW51QWN0aW9ucy5oLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6CisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6c2hvd0NvbnRleHRNZW51KTogQXR0YWNoIHRo
ZQorICAgICAgICBwb3B1cCBtZW51IHRvIHRoZSB2aWV3IHdpZGdldCBiZWZvcmUgc2hvd2luZyBp
dC4KKwogMjAxMi0wMy0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gRml4IHNldmVyYWwgZG9jdW1lbnRhdGlvbiBpc3N1ZXMgaW4g
V2ViS2l0MiBHVEsrIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAyY2IzM2RjLi4zMWMwODg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODQsNiArODQsOSBAQCBub2Rpc3RfbGlid2Via2l0
Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuaCBc
CisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMu
aCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0u
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCkBAIC01MzMsOCAr
NTM2LDE3IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5o
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5j
cHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
UHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250
ZXh0TWVudUFjdGlvbnMuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmggXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbS5j
cHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
SXRlbS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudUl0ZW1Qcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERlZmluZXMuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RG93bmxvYWQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvbnRleHRNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvbnRleHRNZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42NDExM2UxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuY3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRDb250ZXh0TWVudS5oIgorCisjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJdGVt
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51UHJpdmF0ZS5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBf
V2ViS2l0Q29udGV4dE1lbnVQcml2YXRlIHsKKyAgICBHTGlzdCogaXRlbXM7Cit9OworCitHX0RF
RklORV9UWVBFKFdlYktpdENvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51LCBHX1RZUEVf
T0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRDb250ZXh0TWVudUZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBXZWJLaXRDb250ZXh0TWVudSogbWVudSA9IFdFQktJVF9DT05URVhU
X01FTlUob2JqZWN0KTsKKyAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwobWVudSk7
CisgICAgbWVudS0+cHJpdi0+fldlYktpdENvbnRleHRNZW51UHJpdmF0ZSgpOworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9jb250ZXh0X21lbnVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9pbml0KFdlYktpdENv
bnRleHRNZW51KiBtZW51KQoreworICAgIFdlYktpdENvbnRleHRNZW51UHJpdmF0ZSogcHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShtZW51LCBXRUJLSVRfVFlQRV9DT05URVhUX01F
TlUsIFdlYktpdENvbnRleHRNZW51UHJpdmF0ZSk7CisgICAgbWVudS0+cHJpdiA9IHByaXY7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRDb250ZXh0TWVudVByaXZhdGUoKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2NvbnRleHRfbWVudV9jbGFzc19pbml0KFdlYktpdENvbnRleHRNZW51Q2xhc3Mq
IGxpc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKGxpc3RDbGFzcyk7CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdENv
bnRleHRNZW51RmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUobGlzdENs
YXNzLCBzaXplb2YoV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlKSk7Cit9CisKK3ZvaWQgd2Via2l0
Q29udGV4dE1lbnVQb3B1bGF0ZShXZWJLaXRDb250ZXh0TWVudSogbWVudSwgVmVjdG9yPENvbnRl
eHRNZW51SXRlbT4mIGNvbnRleHRNZW51SXRlbXMpCit7CisgICAgZm9yIChHTGlzdCogaXRlbSA9
IG1lbnUtPnByaXYtPml0ZW1zOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAg
ICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtLT5kYXRhKTsKKyAgICAgICAgY29udGV4dE1lbnVJdGVtcy5hcHBlbmQoQ29u
dGV4dE1lbnVJdGVtKHdlYmtpdENvbnRleHRNZW51SXRlbVJlbGVhc2UobWVudUl0ZW0pKSk7Cisg
ICAgfQorfQorCitXZWJLaXRDb250ZXh0TWVudSogd2Via2l0Q29udGV4dE1lbnVDcmVhdGUoV0tB
cnJheVJlZiB3a0l0ZW1zKQoreworICAgIFdlYktpdENvbnRleHRNZW51KiBtZW51ID0gd2Via2l0
X2NvbnRleHRfbWVudV9uZXcoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlH
ZXRTaXplKHdrSXRlbXMpOyArK2kpIHsKKyAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgd2tJ
dGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJ
bmRleCh3a0l0ZW1zLCBpKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZCht
ZW51LCB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVhdGUod2tJdGVtKSk7CisgICAgfQorICAgIG1l
bnUtPnByaXYtPml0ZW1zID0gZ19saXN0X3JldmVyc2UobWVudS0+cHJpdi0+aXRlbXMpOworCisg
ICAgcmV0dXJuIG1lbnU7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9uZXc6Cisg
KgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnUgb2JqZWN0IHRvIGJlIHVzZWQg
YXMgYSBzdWJtZW51IG9mIGFuIGV4aXN0aW5nCisgKiAjV2ViS2l0Q29udGV4dE1lbnUuIFRoZSBj
b250ZXh0IG1lbnUgb2YgYSAjV2ViS2l0V2ViVmlldyBpcyBjcmVhdGVkIGJ5IHRoZSB2aWV3Cisg
KiBhbmQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IG9mICNXZWJLaXRXZWJWaWV3Ojpjb250ZXh0LW1l
bnUgc2lnbmFsLgorICogVG8gYWRkIGl0ZW1zIHRvIHRoZSBtZW51IHVzZSB3ZWJraXRfY29udGV4
dF9tZW51X3ByZXBlbmQoKSwKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKCkgb3Igd2Vi
a2l0X2NvbnRleHRfbWVudV9pbnNlcnQoKS4KKyAqIFNlZSBhbHNvIHdlYmtpdF9jb250ZXh0X21l
bnVfd2l0aF9pdGVtcygpIHRvIGNyZWF0ZSBhICNXZWJLaXRDb250ZXh0TWVudSB3aXRoCisgKiBh
IGxpc3Qgb2YgaW5pdGlhbCBpdGVtcy4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3bHkgY3JlYXRl
ZCAjV2ViS2l0Q29udGV4dE1lbnUgb2JqZWN0CisgKi8KK1dlYktpdENvbnRleHRNZW51KiB3ZWJr
aXRfY29udGV4dF9tZW51X25ldygpCit7CisgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlUo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVSwgTlVMTCkpOworfQorCisvKioK
KyAqIHdlYmtpdF9jb250ZXh0X21lbnVfd2l0aF9pdGVtczoKKyAqIEBpdGVtczogKGVsZW1lbnQt
dHlwZSBXZWJLaXRDb250ZXh0TWVudUl0ZW0pOiBhICNHTGlzdCBvZiAjV2ViS2l0Q29udGV4dE1l
bnVJdGVtCisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnUgb2JqZWN0IHRv
IGJlIHVzZWQgYXMgYSBzdWJtZW51IG9mIGFuIGV4aXN0aW5nCisgKiAjV2ViS2l0Q29udGV4dE1l
bnUgd2l0aCB0aGUgZ2l2ZW4gaW5pdGlhbCBpdGVtcy4KKyAqIFNlZSBhbHNvIHdlYmtpdF9jb250
ZXh0X21lbnVfbmV3KCkKKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0
Q29udGV4dE1lbnUgb2JqZWN0CisgKi8KK1dlYktpdENvbnRleHRNZW51KiB3ZWJraXRfY29udGV4
dF9tZW51X3dpdGhfaXRlbXMoR0xpc3QqIGl0ZW1zKQoreworICAgIFdlYktpdENvbnRleHRNZW51
KiBtZW51ID0gd2Via2l0X2NvbnRleHRfbWVudV9uZXcoKTsKKyAgICBnX2xpc3RfZm9yZWFjaChp
dGVtcywgcmVpbnRlcnByZXRfY2FzdDxHRnVuYz4oZ19vYmplY3RfcmVmX3NpbmspLCAwKTsKKyAg
ICBtZW51LT5wcml2LT5pdGVtcyA9IGdfbGlzdF9jb3B5KGl0ZW1zKTsKKworICAgIHJldHVybiBt
ZW51OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRDb250ZXh0TWVudUluc2VydChXZWJLaXRDb250
ZXh0TWVudSogbWVudSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtLCBpbnQgcG9zaXRpb24p
Cit7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoaXRlbSk7CisgICAgbWVudS0+cHJpdi0+aXRlbXMg
PSBnX2xpc3RfaW5zZXJ0KG1lbnUtPnByaXYtPml0ZW1zLCBpdGVtLCBwb3NpdGlvbik7Cit9CisK
Ky8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kOgorICogQG1lbnU6IGEgI1dlYktp
dENvbnRleHRNZW51CisgKiBAaXRlbTogdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gdG8gYWRk
CisgKgorICogQWRkcyBAaXRlbSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBAbWVudSBpdGVtIGxp
c3QuCisgKi8KK3ZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKFdlYktpdENvbnRleHRN
ZW51KiBtZW51LCBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICB3ZWJraXRDb250
ZXh0TWVudUluc2VydChtZW51LCBpdGVtLCAwKTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4
dF9tZW51X2FwcGVuZDoKKyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0TWVudQorICogQGl0ZW06
IHRoZSAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIHRvIGFkZAorICoKKyAqIEFkZHMgQGl0ZW0gYXQg
dGhlIGVuZCBvZiB0aGUgQG1lbnUgaXRlbSBsaXN0LgorICovCit2b2lkIHdlYmtpdF9jb250ZXh0
X21lbnVfYXBwZW5kKFdlYktpdENvbnRleHRNZW51KiBtZW51LCBXZWJLaXRDb250ZXh0TWVudUl0
ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
KG1lbnUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRF
TShpdGVtKSk7CisKKyAgICB3ZWJraXRDb250ZXh0TWVudUluc2VydChtZW51LCBpdGVtLCAtMSk7
Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQ6CisgKiBAbWVudTogYSAj
V2ViS2l0Q29udGV4dE1lbnUKKyAqIEBpdGVtOiB0aGUgI1dlYktpdENvbnRleHRNZW51SXRlbSB0
byBhZGQKKyAqIEBwb3NpdGlvbjogdGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgaXRlbQorICoK
KyAqIEluc2VydHMgQGl0ZW0gaW50byB0aGUgQG1lbnUgaXRlbSBsaXN0IGF0IHRoZSBnaXZlbiBw
b3NpdGlvbi4KKyAqIElmIEBwb3NpdGlvbiBpcyBuZWdhdGl2ZSwgb3IgaXMgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBpdGVtcworICogaW4gdGhlICNXZWJLaXRDb250ZXh0TWVudSwgdGhlIGl0
ZW0gaXMgYWRkZWQgb24gdG8gdGhlIGVuZCBvZgorICogdGhlIEBtZW51IGl0ZW0gbGlzdC4gVGhl
IGZpcnN0IHBvc2l0aW9uIGlzIDAuCisgKi8KK3ZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9pbnNl
cnQoV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUsIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSwg
aW50IHBvc2l0aW9uKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRf
TUVOVShtZW51KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
X0lURU0oaXRlbSkpOworCisgICAgd2Via2l0Q29udGV4dE1lbnVJbnNlcnQobWVudSwgaXRlbSwg
cG9zaXRpb24pOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtOgor
ICogQG1lbnU6IGEgI1dlYktpdENvbnRleHRNZW51CisgKiBAaXRlbTogdGhlICNXZWJLaXRDb250
ZXh0TWVudUl0ZW0gdG8gYWRkCisgKiBAcG9zaXRpb246IHRoZSBuZXcgcG9zaXRpb24gdG8gbW92
ZSB0aGUgaXRlbQorICoKKyAqIE1vdmVzIEBpdGVtIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0
aGUgQG1lbnUgaXRlbSBsaXN0LgorICogVGhlIGZpcnN0IHBvc2l0aW9uIGlzIDAuCisgKi8KK3Zv
aWQgd2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUs
IFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSwgaW50IHBvc2l0aW9uKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSkpOworCisgICAgaWYgKCFn
X2xpc3RfZmluZChtZW51LT5wcml2LT5pdGVtcywgaXRlbSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1lbnUtPnByaXYtPml0ZW1zID0gZ19saXN0X3JlbW92ZShtZW51LT5wcml2LT5pdGVtcywg
aXRlbSk7CisgICAgbWVudS0+cHJpdi0+aXRlbXMgPSBnX2xpc3RfaW5zZXJ0KG1lbnUtPnByaXYt
Pml0ZW1zLCBpdGVtLCBwb3NpdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVu
dV9nZXRfaXRlbXM6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisgKiBSZXR1
cm5zIHRoZSBpdGVtIGxpc3Qgb2YgQG1lbnUuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlw
ZSBXZWJLaXRDb250ZXh0TWVudUl0ZW0pICh0cmFuc2ZlciBub25lKTogYSAjR0xpc3Qgb2YKKyAq
ICAgICNXZWJLaXRDb250ZXh0TWVudUl0ZW08IS0tIC0tPnMKKyAqLworR0xpc3QqIHdlYmtpdF9j
b250ZXh0X21lbnVfZ2V0X2l0ZW1zKFdlYktpdENvbnRleHRNZW51KiBtZW51KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlUobWVudSksIDApOworCisg
ICAgcmV0dXJuIG1lbnUtPnByaXYtPml0ZW1zOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0
X21lbnVfZ2V0X25faXRlbXM6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisg
KiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIEBtZW51IGl0ZW0gbGlzdC4KKyAqCisgKiBSZXR1cm5z
OiB0aGUgbnVtYmVyIG9mICNXZWJLaXRDb250ZXh0TWVudUl0ZW08IS0tIC0tPnMgaW4gQG1lbnUK
KyAqLworZ3VpbnQgd2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhXZWJLaXRDb250ZXh0
TWVudSogbWVudSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09OVEVY
VF9NRU5VKG1lbnUpLCAwKTsKKworICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKG1lbnUtPnByaXYt
Pml0ZW1zKTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2ZpcnN0OgorICogQG1l
bnU6IGEgI1dlYktpdENvbnRleHRNZW51CisgKgorICogR2V0cyB0aGUgZmlyc3QgaXRlbSBpbiB0
aGUgQG1lbnUgaXRlbSBsaXN0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhl
IGZpcnN0ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2YgQG1lbnUsCisgKiAgICBvciAlTlVMTCBp
ZiB0aGUgI1dlYktpdENvbnRleHRNZW51IGlzIGVtcHR5LgorICovCitXZWJLaXRDb250ZXh0TWVu
dUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfZmlyc3QoV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51
KSwgMCk7CisKKyAgICByZXR1cm4gbWVudS0+cHJpdi0+aXRlbXMgPyBXRUJLSVRfQ09OVEVYVF9N
RU5VX0lURU0obWVudS0+cHJpdi0+aXRlbXMtPmRhdGEpIDogMDsKK30KKworLyoqCisgKiB3ZWJr
aXRfY29udGV4dF9tZW51X2xhc3Q6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAq
CisgKiBHZXRzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIEBtZW51IGl0ZW0gbGlzdC4KKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBsYXN0ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0g
b2YgQG1lbnUsCisgKiAgICBvciAlTlVMTCBpZiB0aGUgI1dlYktpdENvbnRleHRNZW51IGlzIGVt
cHR5LgorICovCitXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfbGFz
dChXZWJLaXRDb250ZXh0TWVudSogbWVudSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUpLCAwKTsKKworICAgIEdMaXN0KiBsYXN0ID0gZ19s
aXN0X2xhc3QobWVudS0+cHJpdi0+aXRlbXMpOworICAgIHJldHVybiBsYXN0ID8gV0VCS0lUX0NP
TlRFWFRfTUVOVV9JVEVNKGxhc3QtPmRhdGEpIDogMDsKK30KKworLyoqCisgKiB3ZWJraXRfY29u
dGV4dF9tZW51X2dldF9pdGVtX2F0X3Bvc2l0aW9uOgorICogQG1lbnU6IGEgI1dlYktpdENvbnRl
eHRNZW51CisgKiBAcG9zaXRpb246IHRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlbSwgY291bnRpbmcg
ZnJvbSAwCisgKgorICogR2V0cyB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhl
IEBtZW51IGl0ZW0gbGlzdC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAj
V2ViS2l0Q29udGV4dE1lbnVJdGVtIGF0IHBvc2l0aW9uIEBwb3NpdGlvbiBpbiBAbWVudSwKKyAq
ICAgIG9yICVOVUxMIGlmIHRoZSBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgQG1lbnUg
aXRlbSBsaXN0LgorICovCitXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21l
bnVfZ2V0X2l0ZW1fYXRfcG9zaXRpb24oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUsIHVuc2lnbmVk
IHBvc2l0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhU
X01FTlUobWVudSksIDApOworCisgICAgZ3BvaW50ZXIgaXRlbSA9IGdfbGlzdF9udGhfZGF0YSht
ZW51LT5wcml2LT5pdGVtcywgcG9zaXRpb24pOworICAgIHJldHVybiBpdGVtID8gV0VCS0lUX0NP
TlRFWFRfTUVOVV9JVEVNKGl0ZW0pIDogMDsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9t
ZW51X3JlbW92ZToKKyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0TWVudQorICogQGl0ZW06IHRo
ZSAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIHRvIHJlbW92ZQorICoKKyAqIFJlbW92ZXMgQGl0ZW0g
ZnJvbSB0aGUgQG1lbnUgaXRlbSBsaXN0LgorICogU2VlIGFsc28gd2Via2l0X2NvbnRleHRfbWVu
dV9yZW1vdmVfYWxsKCkgdG8gcmVtb3ZlIGFsbCBpdGVtcy4KKyAqLwordm9pZCB3ZWJraXRfY29u
dGV4dF9tZW51X3JlbW92ZShXZWJLaXRDb250ZXh0TWVudSogbWVudSwgV2ViS2l0Q29udGV4dE1l
bnVJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRf
TUVOVShtZW51KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
X0lURU0oaXRlbSkpOworCisgICAgaWYgKCFnX2xpc3RfZmluZChtZW51LT5wcml2LT5pdGVtcywg
aXRlbSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1lbnUtPnByaXYtPml0ZW1zID0gZ19saXN0
X3JlbW92ZShtZW51LT5wcml2LT5pdGVtcywgaXRlbSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRl
bSk7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsOgorICogQG1l
bnU6IGEgI1dlYktpdENvbnRleHRNZW51CisgKgorICogUmVtb3ZlcyBhbGwgaXRlbXMgb2YgdGhl
IEBtZW51IGl0ZW0gbGlzdC4KKyAqLwordm9pZCB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9h
bGwoV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUpKTsKKworICAgIGdfbGlzdF9mcmVlX2Z1bGwobWVudS0+
cHJpdi0+aXRlbXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3Vu
cmVmKSk7CisgICAgbWVudS0+cHJpdi0+aXRlbXMgPSAwOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhMGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmgKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZp
bmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9O
KQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51X2gKKyNkZWZpbmUgV2Vi
S2l0Q29udGV4dE1lbnVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdENvbnRleHRNZW51SXRlbS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQ09OVEVY
VF9NRU5VICAgICAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0NPTlRFWFRfTUVOVShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUsIFdlYktpdENvbnRleHRN
ZW51KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUpKQor
I2RlZmluZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVSwgV2ViS2l0Q29u
dGV4dE1lbnVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19DT05URVhUX01FTlVfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQ09OVEVY
VF9NRU5VKSkKKyNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUs
IFdlYktpdENvbnRleHRNZW51Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4
dE1lbnVDbGFzcyAgIFdlYktpdENvbnRleHRNZW51Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0Q29udGV4dE1lbnVQcml2YXRlIFdlYktpdENvbnRleHRNZW51UHJpdmF0ZTsKKworc3RydWN0
IF9XZWJLaXRDb250ZXh0TWVudSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRD
b250ZXh0TWVudVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfY29udGV4dF9tZW51X2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsK
KworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudSAqCit3ZWJraXRfY29udGV4dF9tZW51X25l
dyAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVu
dSAqCit3ZWJraXRfY29udGV4dF9tZW51X3dpdGhfaXRlbXMgICAgICAgICAgIChHTGlzdCAgICAg
ICAgICAgICAgICAgKml0ZW1zKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29udGV4dF9t
ZW51X3ByZXBlbmQgICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVu
dUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb250ZXh0X21lbnVfYXBw
ZW5kICAgICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSAq
aXRlbSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQgICAg
ICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnUgICAgICptZW51LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtICppdGVtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAg
ICAgICAgICBwb3NpdGlvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2NvbnRleHRfbWVu
dV9tb3ZlX2l0ZW0gICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnUgICAgICptZW51LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJ
dGVtICppdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICAgICAgICAgICAgICBwb3NpdGlvbik7CitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtp
dF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAg
ICAqbWVudSk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25f
aXRlbXMgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK1dFQktJVF9B
UEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfZmlyc3QgICAg
ICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK1dFQktJVF9BUEkg
V2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfbGFzdCAgICAgICAg
ICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK1dFQktJVF9BUEkgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1fYXRfcG9z
aXRpb24gKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgcG9zaXRpb24pOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlICAgICAgICAgICAg
ICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSAqaXRlbSk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsICAgICAgICAgICAoV2Vi
S2l0Q29udGV4dE1lbnUgICAgICptZW51KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVu
dUFjdGlvbnMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVBY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
MWUwNjhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmNwcApAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXZWJLaXRDb250
ZXh0TWVudUFjdGlvbnNQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJp
bmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitib29sIHdlYmtpdENvbnRleHRN
ZW51QWN0aW9uSXNDaGVja2FibGUoV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQorewor
ICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9CT0xEOgorICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDOgorICAg
IGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5ERVJMSU5FOgorICAgIGNhc2UgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTOgorICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1A6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK0NvbnRleHRNZW51QWN0aW9uIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9uVGFn
KFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikg
eworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OOgorICAgICAg
ICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb247CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTks6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0
ZW1UYWdPcGVuTGluazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5f
TElOS19JTl9ORVdfV0lORE9XOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtJbk5ld1dpbmRvdzsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RP
V05MT0FEX0xJTktfVE9fRElTSzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFlfTElOS19UT19DTElQQk9BUkQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdD
b3B5TGlua1RvQ2xpcGJvYXJkOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
T1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVt
VGFnT3BlbkltYWdlSW5OZXdXaW5kb3c7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9ET1dOTE9BRF9JTUFHRV9UT19ESVNLOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJ
dGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gQ29udGV4dE1l
bnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQ6CisgICAgICAgIHJldHVybiBD
b250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDsKKyAgICBjYXNlIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fRlJBTUVfSU5fTkVXX1dJTkRPVzoKKyAgICAgICAg
cmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OworICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSzoKKyAgICAgICAgcmV0dXJuIENvbnRl
eHRNZW51SXRlbVRhZ0dvQmFjazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0dPX0ZPUldBUkQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ7
CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QOgorICAgICAgICByZXR1
cm4gQ29udGV4dE1lbnVJdGVtVGFnU3RvcDsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1JFTE9BRDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDsK
KyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFk6CisgICAgICAgIHJldHVy
biBDb250ZXh0TWVudUl0ZW1UYWdDb3B5OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fQ1VUOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnQ3V0OworICAgIGNh
c2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUEFTVEU6CisgICAgICAgIHJldHVybiBDb250
ZXh0TWVudUl0ZW1UYWdQYXN0ZTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RFTEVURToKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZTsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEw6CisgICAgICAgIHJldHVy
biBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVt
VGFnSW5wdXRNZXRob2RzOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5J
Q09ERToKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU7CisgICAgY2Fz
ZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzoKKyAgICAgICAgcmV0
dXJuIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M7CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9OT19HVUVTU0VTX0ZPVU5EOgorICAgICAgICByZXR1cm4gQ29udGV4
dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQ7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JR05PUkVfU1BFTExJTkc6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZzsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0xF
QVJOX1NQRUxMSU5HOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVs
bGluZzsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9HUkFNTUFS
OgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcjsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0ZPTlRfTUVOVToKKyAgICAgICAgcmV0dXJu
IENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQk9MRDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ7Cisg
ICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM6CisgICAgICAgIHJldHVy
biBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9VTkRFUkxJTkU6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdVbmRl
cmxpbmU7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FOgorICAg
ICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZTsKKyAgICBjYXNlIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVDoKKyAgICAgICAgcmV0dXJuIENvbnRl
eHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lORE9XOgorICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9BVURJT19JTl9ORVdfV0lORE9XOgorICAgICAgICByZXR1cm4g
Q29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c7CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJEOgorICAgIGNh
c2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FS
RDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0NsaXBi
b2FyZDsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9D
T05UUk9MUzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29u
dHJvbHM7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFf
TE9PUDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDsK
KyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JF
RU46CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVl
bjsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVk6CisgICAg
Y2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QQVVTRToKKyAgICAgICAgcmV0
dXJuIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOworICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURToKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51
SXRlbVRhZ01lZGlhTXV0ZTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JB
U0VfQVBQTElDQVRJT046CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGlj
YXRpb25UYWc7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzsKK30K
KworV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JD
b250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSkKK3sKKyAgICBzd2l0Y2gg
KG1lbnVJdGVtLT5hY3Rpb24oKSkgeworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rp
b246CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT047
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSzsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSzsKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1c7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzsKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgICAgICByZXR1cm4g
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQ7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAgICAgICAg
cmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBC
T0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93Ogor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9O
RVdfV0lORE9XOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSzsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0dPX0ZPUldBUkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUDsKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1JFTE9BRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6Cisg
ICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ1VUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAg
IHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURTsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0RlbGV0ZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0RFTEVURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEw7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHM6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX1VOSUNPREU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BFTExJTkdfR1VFU1M7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0
dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9TUEVMTElORzsKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9MRUFSTl9TUEVMTElORzsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0lnbm9yZUdyYW1tYXI6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JR05PUkVfR1JBTU1BUjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRN
ZW51OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9OVF9NRU5V
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKKyAgICAgICAgcmV0dXJuIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJ
dGFsaWM6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkU7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdPdXRsaW5lOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1VUTElORTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50Ogor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5U
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAg
ICAgIHJldHVybiBtZW51SXRlbS0+dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlk
ZW9Jbk5ld1dpbmRvdygpID8KKyAgICAgICAgICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X09QRU5fVklERU9fSU5fTkVXX1dJTkRPVyA6IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09Q
RU5fQVVESU9fSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlN
ZWRpYUxpbmtUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJuIG1lbnVJdGVtLT50aXRsZSgpID09
IGNvbnRleHRNZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpID8KKyAgICAgICAg
ICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9B
UkQgOiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJP
QVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05U
Uk9MUzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAg
IHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVO
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6CisgICAgICAgIHJl
dHVybiBtZW51SXRlbS0+dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSA/
CisgICAgICAgICAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZIDogV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUEFVU0U7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdNZWRpYU11dGU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9NRURJQV9NVVRFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9u
VGFnOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQkFTRV9BUFBM
SUNBVElPTjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQkFTRV9BUFBMSUNB
VElPTjsKK30KKworU3RyaW5nIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFiZWwoV2ViS2l0
Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAg
Y2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTks6CisgICAgICAgIHJldHVy
biBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1c6CisgICAgICAgIHJldHVybiBjb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KCk7CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJU0s6CisgICAgICAgIHJldHVybiBj
b250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKTsKKyAgICBjYXNlIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQ6CisgICAgICAgIHJldHVy
biBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1c6CisgICAgICAg
IHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpOworICAgIGNh
c2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzoKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKTsKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJE
OgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQo
KTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RP
X0NMSVBCT0FSRDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVy
bFRvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVO
X0ZSQU1FX0lOX05FV19XSU5ET1c6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdP
cGVuRnJhbWVJbk5ld1dpbmRvdygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fQkFDSzoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpOwor
ICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRDoKKyAgICAgICAg
cmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpOworICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fU1RPUDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRh
Z1N0b3AoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRDoKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpOworICAgIGNhc2UgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRl
bVRhZ0NvcHkoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVDoKKyAg
ICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpOworICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fUEFTVEU6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1U
YWdQYXN0ZSgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRFOgor
ICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCk7CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMOgorICAgICAgICByZXR1cm4gY29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9JTlBVVF9NRVRIT0RTOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnSW5w
dXRNZXRob2RzKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklDT0RF
OgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZSgpOworICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORDoKKyAgICAgICAgcmV0
dXJuIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCk7CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfU1BFTExJTkc6CisgICAgICAgIHJldHVybiBjb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fTEVBUk5fU1BFTExJTkc6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0
ZW1UYWdMZWFyblNwZWxsaW5nKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9JR05PUkVfR1JBTU1BUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZUdyYW1tYXIoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0ZPTlRfTUVO
VToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCk7CisgICAgY2Fz
ZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9CT0xEOgorICAgICAgICByZXR1cm4gY29udGV4
dE1lbnVJdGVtVGFnQm9sZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
SVRBTElDOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCk7CisgICAg
Y2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkU6CisgICAgICAgIHJldHVy
biBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09VVExJTkU6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdP
dXRsaW5lKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VM
RU1FTlQ6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgp
OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdf
V0lORE9XOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVvSW5OZXdX
aW5kb3coKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVESU9f
SU5fTkVXX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRp
b0luTmV3V2luZG93KCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVt
VGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4g
Y29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFM6CisgICAgICAg
IHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCk7CisgICAgY2Fz
ZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUDoKKyAgICAgICAg
cmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpOworICAgIGNhc2UgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTjoKKyAgICAgICAg
cmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCk7CisgICAgY2Fz
ZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZOgorICAgICAgICByZXR1cm4g
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9NRURJQV9QQVVTRToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRh
Z01lZGlhUGF1c2UoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElB
X01VVEU6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKTsKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTjoKKyAgICBjYXNlIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JBU0VfQVBQTElDQVRJT046CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzoKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5YTA0ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9u
cy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lU
Ml9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBp
bmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lmbmRl
ZiBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNfaAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUFj
dGlvbnNfaAorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogV2ViS2l0Q29udGV4dE1lbnVBY3Rp
b246CisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OOiBObyBhY3Rpb24s
IHVzZWQgYnkgc2VwYXJhdG9yIG1lbnUgaXRlbXMuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9MSU5LOiBPcGVuIGN1cnJlbnQgbGluay4KKyAqIEBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVzogT3BlbiBjdXJyZW50IGxpbmsgaW4g
YSBuZXcgd2luZG93LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJ
TktfVE9fRElTSzogRG93bmxvYWQgbGluayBkZXN0aW5hdGlvbi4KKyAqIEBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEOiBDb3B5IGxpbmsgbG9jYXRpb24g
dG8gdGhlIGNsaXBib2FyZC4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lN
QUdFX0lOX05FV19XSU5ET1c6IE9wZW4gY3VycmVudCBpbWFnZSBpbiBhIG5ldyB3aW5kb3cuCisg
KiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzogRG93
bmxvYWQgY3VycmVudCBpbWFnZS4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X0lNQUdFX1RPX0NMSVBCT0FSRDogQ29weSBjdXJyZW50IGltYWdlIHRvIHRoZSBjbGlwYm9hcmQu
CisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJP
QVJEOiBDb3B5IGN1cmVudCBpbWFnZSBsb2NhdGlvbiB0byB0aGUgY2xpcGJvYXJkLgorICogQFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fRlJBTUVfSU5fTkVXX1dJTkRPVzogT3BlbiBj
dXJyZW50IGZyYW1lIGluIGEgbmV3IHdpbmRvdy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9HT19CQUNLOiBMb2FkIHRoZSBwcmV2aW91cyBoaXN0b3J5IGl0ZW0uCisgKiBAV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRDogTG9hZCB0aGUgbmV4dCBoaXN0b3J5IGl0
ZW0uCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUDogU3RvcCBhbnkgb25nb2lu
ZyBsb2FkaW5nIG9wZXJhdGlvbi4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxP
QUQ6IFJlbG9hZCB0aGUgY29uZW50cyBvZiBjdXJyZW50IHZpZXcuCisgKiBAV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWTogQ29weSBjdXJyZW50IHNlbGVjdGlvbiB0aGUgY2xpcGJvYXJk
LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVDogQ3V0IGN1cnJlbnQgc2VsZWN0
aW9uIHRvIHRoZSBjbGlwYm9hcmQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUEFT
VEU6IFBhc3RlIGNsaXBib2FyZCBjb250ZW50cy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9ERUxFVEU6IERlbGV0ZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAqIEBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMOiBTZWxlY3QgYWxsIHRleHQuCisgKiBAV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUzogSW5wdXQgbWV0aG9kcyBtZW51LgorICog
QFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREU6IFVuaWNvZGUgbWVudS4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzogR3Vlc3Mgc3BlbGxpbmcu
CisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORDogTm8gZ2Vz
c2VzIGZvdW5kLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9TUEVMTElO
RzogSWdub3JlIHNwZWxsaW5nLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0xFQVJO
X1NQRUxMSU5HOiBMZWFybiBzcGVsbGluZy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9JR05PUkVfR1JBTU1BUjogSWdub3JlIGdyYW1tYXIuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fRk9OVF9NRU5VOiBGb250IG1lbnUuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fQk9MRDogQm9sZC4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM6
IEl0YWxpYy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkU6IFVuZGVy
bGluZS4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FOiBPdXRsaW5lLgor
ICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVDogT3BlbiBjdXJy
ZW50IGVsZW1lbnQgaW4gdGhlIGluc3BlY3Rvci4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PUEVOX1ZJREVPX0lOX05FV19XSU5ET1c6IE9wZW4gY3VycmVudCB2aWRlbyBlbGVtZW50
IGluIGEgbmV3IHdpbmRvdy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FV
RElPX0lOX05FV19XSU5ET1c6IE9wZW4gY3VycmVudCBhdWRpbyBlbGVtZW50IGluIGEgbmV3IHdp
bmRvdy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9f
Q0xJUEJPQVJEOiBDb3B5IHZpZGVvIGxpbmsgbG9jYXRpb24gaW4gdG8gdGhlIGNsaXBib2FyZC4K
KyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJP
QVJEOiBDb3B5IGF1ZGlvIGxpbmsgbG9jYXRpb24gaW4gdG8gdGhlIGNsaXBib2FyZC4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFM6IEVuYWJsZSBv
ciBkaXNhYmxlIG1lZGlhIGNvbnRyb2xzLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1RPR0dMRV9NRURJQV9MT09QOiBFbmFibGUgb3IgZGlzYWJsZSBtZWRpYSBsb29wLgorICogQFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU46IFNob3cgY3Vy
cmVudCB2aWRlbyBlbGVtZW50IGluIGZ1bGxzY3JlZW4gbW9kZS4KKyAqIEBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9NRURJQV9QTEFZOiBQbGF5IGN1cnJlbnQgbWVkaWEgZWxlbWVudC4KKyAq
IEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QQVVTRTogUGF1c2UgY3VycmVudCBt
ZWRpYSBlbGVtZW50LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEU6
IE11dGUgY3VycmVudCBtZWRpYSBlbGVtZW50LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0JBU0VfQVBQTElDQVRJT046IEN1c3RvbSBhY3Rpb24gZGVmaW5lZCBieSBhcHBsaWNhdGlv
bnMuCisgKgorICogRW51bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHN0b2NrIGFjdGlvbnMg
Zm9yCisgKiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtPCEtLSAtLT5zCisgKi8KK3R5cGVkZWYgZW51
bSB7CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OID0gMCwKKworICAg
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSywKKyAgICBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywKKyAgICBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJU0ssCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywKKyAgICBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
R09fRk9SV0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLAorICAgIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwKKyAgICBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9ERUxFVEUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FM
TCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTLAorICAgIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fU1BFTExJTkdfR1VFU1MsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Tk9fR1VFU1NFU19GT1VORCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVf
U1BFTExJTkcsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTEVBUk5fU1BFTExJTkcs
CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX0dSQU1NQVIsCisgICAgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9OVF9NRU5VLAorICAgIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0JPTEQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDLAor
ICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOREVSTElORSwKKyAgICBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0lOU1BFQ1RfRUxFTUVOVCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJ
REVPX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9B
VURJT19JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlf
VklERU9fTElOS19UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fVE9HR0xFX01FRElBX0xPT1AsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5U
RVJfVklERU9fRlVMTFNDUkVFTiwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJ
QV9QTEFZLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BBVVNFLAorICAg
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUsCisKKyAgICBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9CQVNFX0FQUExJQ0FUSU9OID0gMTAwMDAKK30gV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb247CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb25zUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTNi
YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51
QWN0aW9uc1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29udGV4dE1lbnVJdGVtLmg+CisKK2Jvb2wgd2Via2l0Q29udGV4dE1lbnVBY3Rpb25J
c0NoZWNrYWJsZShXZWJLaXRDb250ZXh0TWVudUFjdGlvbik7CitXZWJDb3JlOjpDb250ZXh0TWVu
dUFjdGlvbiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEFjdGlvblRhZyhXZWJLaXRDb250ZXh0
TWVudUFjdGlvbik7CitXZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3ZWJraXRDb250ZXh0TWVudUFj
dGlvbkdldEZvckNvbnRleHRNZW51SXRlbShXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qKTsKK1N0
cmluZyB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldExhYmVsKFdlYktpdENvbnRleHRNZW51QWN0
aW9uKTsKKworI2VuZGlmIC8vIFdlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0
ZW0uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1l
bnVJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2FmMmRjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29udGV4dE1lbnVJdGVtLmNwcApAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
Q29udGV4dE1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRl
ICJXZWJDb250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRh
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250
ZXh0TWVudVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUgeworICAgIE93blB0cjxD
b250ZXh0TWVudUl0ZW0+IG1lbnVJdGVtOworICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+
IHN1Yk1lbnU7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdENvbnRleHRNZW51SXRlbSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtLCBHX1RZUEVfSU5JVElBTExZX1VOT1dORUQpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdENvbnRleHRNZW51SXRlbUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0ob2JqZWN0KS0+cHJpdi0+fldlYktpdENvbnRl
eHRNZW51SXRlbVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2luaXQoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBp
dGVtKQoreworICAgIFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUqIHByaXYgPSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUoaXRlbSwgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0s
IFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUpOworICAgIGl0ZW0tPnByaXYgPSBwcml2Owor
ICAgIG5ldyAocHJpdikgV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZSgpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fY2xhc3NfaW5pdChXZWJLaXRDb250ZXh0
TWVudUl0ZW1DbGFzcyogaXRlbUNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MoaXRlbUNsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRDb250ZXh0TWVudUl0ZW1GaW5hbGl6ZTsKKworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShpdGVtQ2xhc3MsIHNpemVvZihXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2
YXRlKSk7Cit9CisKK1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0Q29udGV4dE1lbnVJdGVt
Q3JlYXRlKFdLQ29udGV4dE1lbnVJdGVtUmVmIHdrSXRlbSkKK3sKKyAgICBXZWJLaXRDb250ZXh0
TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7CisgICAgV2ViQ29udGV4dE1lbnVJ
dGVtRGF0YSogaXRlbURhdGEgPSB0b0ltcGwod2tJdGVtKS0+ZGF0YSgpOworICAgIGl0ZW0tPnBy
aXYtPm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKGl0ZW1EYXRh
LT50eXBlKCksIGl0ZW1EYXRhLT5hY3Rpb24oKSwgaXRlbURhdGEtPnRpdGxlKCksIGl0ZW1EYXRh
LT5lbmFibGVkKCksIGl0ZW1EYXRhLT5jaGVja2VkKCkpKTsKKyAgICBjb25zdCBWZWN0b3I8V2Vi
Q29udGV4dE1lbnVJdGVtRGF0YT4mIHN1Yk1lbnUgPSBpdGVtRGF0YS0+c3VibWVudSgpOworICAg
IGlmICghc3ViTWVudS5zaXplKCkpCisgICAgICAgIHJldHVybiBpdGVtOworCisgICAgUmVmUHRy
PE11dGFibGVBcnJheT4gc3ViTWVudUl0ZW1zID0gTXV0YWJsZUFycmF5OjpjcmVhdGUoKTsKKyAg
ICBzdWJNZW51SXRlbXMtPnJlc2VydmVDYXBhY2l0eShzdWJNZW51LnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdWJNZW51LnNpemUoKTsgKytpKQorICAgICAgICBzdWJNZW51
SXRlbXMtPmFwcGVuZChXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShzdWJNZW51W2ldKS5nZXQo
KSk7CisgICAgaXRlbS0+cHJpdi0+c3ViTWVudSA9IGFkb3B0R1JlZih3ZWJraXRDb250ZXh0TWVu
dUNyZWF0ZSh0b0FQSShzdWJNZW51SXRlbXMuZ2V0KCkpKSk7CisKKyAgICByZXR1cm4gaXRlbTsK
K30KKworc3RhdGljIFdlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0Q29udGV4dE1lbnVJdGVt
Q3JlYXRlRm9yR3RrSXRlbShHdGtNZW51SXRlbSogbWVudUl0ZW0pCit7CisgICAgV2ViS2l0Q29u
dGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgTlVMTCkpOworICAgIGl0ZW0tPnByaXYt
Pm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKG1lbnVJdGVtKSk7
CisgICAgd2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudShpdGVtLCBHVEtfTUVOVShndGtf
bWVudV9pdGVtX2dldF9zdWJtZW51KG1lbnVJdGVtKSkpOworCisgICAgcmV0dXJuIGl0ZW07Cit9
CisKK3ZvaWQgd2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudShXZWJLaXRDb250ZXh0TWVu
dUl0ZW0qIGl0ZW0sIEd0a01lbnUqIHN1Yk1lbnUpCit7CisgICAgaWYgKCFzdWJNZW51KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKHN1Yk1lbnUpKSk7CisgICAgaWYgKCFnX2xpc3Rf
bGVuZ3RoKGNoaWxkcmVuLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXRlbS0+cHJp
di0+c3ViTWVudSA9IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKKyAgICBm
b3IgKEdMaXN0KiBsaXN0SXRlbSA9IGNoaWxkcmVuLmdldCgpOyBsaXN0SXRlbTsgbGlzdEl0ZW0g
PSBnX2xpc3RfbmV4dChsaXN0SXRlbSkpIHsKKyAgICAgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IHdp
ZGdldCA9IEdUS19XSURHRVQobGlzdEl0ZW0tPmRhdGEpOworICAgICAgICBpZiAoIUdUS19JU19N
RU5VX0lURU0od2lkZ2V0LmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoc3ViTWVudSksIHdpZGdldC5nZXQo
KSk7CisgICAgICAgIEd0a01lbnVJdGVtKiBtZW51SXRlbSA9IEdUS19NRU5VX0lURU0od2lkZ2V0
LmxlYWtSZWYoKSk7CisgICAgICAgIGdfb2JqZWN0X2ZvcmNlX2Zsb2F0aW5nKEdfT0JKRUNUKG1l
bnVJdGVtKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGl0ZW0tPnByaXYt
PnN1Yk1lbnUuZ2V0KCksIHdlYmtpdENvbnRleHRNZW51SXRlbUNyZWF0ZUZvckd0a0l0ZW0obWVu
dUl0ZW0pKTsKKyAgICB9Cit9CisKK0d0a01lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1S
ZWxlYXNlKFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoaXRlbS0+cHJp
di0+c3ViTWVudSkgeworICAgICAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBzdWJNZW51SXRl
bXM7CisgICAgICAgIHdlYmtpdENvbnRleHRNZW51UG9wdWxhdGUoaXRlbS0+cHJpdi0+c3ViTWVu
dS5nZXQoKSwgc3ViTWVudUl0ZW1zKTsKKyAgICAgICAgQ29udGV4dE1lbnUgc3ViTWVudShwbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbihzdWJNZW51SXRlbXMpKTsKKyAgICAgICAgaXRlbS0+cHJpdi0+
bWVudUl0ZW0tPnNldFN1Yk1lbnUoJnN1Yk1lbnUpOworICAgIH0KKworICAgIHJldHVybiBpdGVt
LT5wcml2LT5tZW51SXRlbS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKK30KKworLyoq
CisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3OgorICogQGFjdGlvbjogYSAjR3RrQWN0
aW9uCisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIGZvciB0aGUg
Z2l2ZW4gQGFjdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0
Q29udGV4dE1lbnVJdGVtIG9iamVjdC4KKyAqLworV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KEd0a0FjdGlvbiogYWN0aW9uKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEdUS19JU19BQ1RJT04oYWN0aW9uKSwgMCk7CisKKyAgICBXZWJLaXRD
b250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7CisgICAgaXRlbS0+cHJp
di0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRyKG5ldyBDb250ZXh0TWVudUl0ZW0oR1RLX01FTlVf
SVRFTShndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKSkpKTsKKyAgICBpdGVtLT5w
cml2LT5tZW51SXRlbS0+c2V0QWN0aW9uKENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRh
Zyk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X2Zyb21fc3RvY2s6CisgKiBAYWN0aW9uOiBhICNXZWJLaXRDb250ZXh0TWVudUFj
dGlvbiBzdG9jayBhY3Rpb24KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVu
dUl0ZW0gZm9yIHRoZSBnaXZlbiBzdG9jayBhY3Rpb24uCisgKiBTdG9jayBhY3Rpb25zIGFyZSBo
YW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgV2ViS2l0IHNvIHRoYXQsIGZvciBleGFtcGxlLAorICog
d2hlbiBhIG1lbnUgaXRlbSBjcmVhdGVkIHdpdGggYSAlV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fU1RPUCBpcworICogYWN0aXZhdGVkIHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB3aWxsIGJlIGhh
bmRsZWQgYnkgV2ViS2l0IGFuZCB0aGUgY3VycmVudAorICogbG9hZCBvcGVyYXRpb24gd2lsbCBi
ZSBzdG9wcGVkLiBZb3UgY2FuIGdldCB0aGUgI0d0a0FjdGlvbiBvZiBhCisgKiAjV2ViS2l0Q29u
dGV4dE1lbnVJdGVtIGNyZWF0ZWQgd2l0aCBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3aXRo
CisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbigpIGFuZCBjb25uZWN0IHRv
ICNHdGtBY3Rpb246OmFjdGl2YXRlIHNpZ25hbAorICogdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUg
aXRlbSBpcyBhY3RpdmF0ZWQuIEJ1dCB5b3UgY2FuJ3QgcHJldmVudCB0aGUgYXNvY2lhdGVkCisg
KiBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXdseSBjcmVh
dGVkICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2JqZWN0LgorICovCitXZWJLaXRDb250ZXh0TWVu
dUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9jayhXZWJLaXRDb250
ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9u
ID4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0JBU0VfQVBQTElDQVRJT04sIDApOworCisgICAgV2ViS2l0
Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgTlVMTCkpOworICAgIENvbnRleHRN
ZW51SXRlbVR5cGUgdHlwZSA9IHdlYmtpdENvbnRleHRNZW51QWN0aW9uSXNDaGVja2FibGUoYWN0
aW9uKSA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlOworICAgIGl0ZW0tPnByaXYt
Pm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKHR5cGUsIHdlYmtp
dENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9uVGFnKGFjdGlvbiksIHdlYmtpdENvbnRleHRNZW51
QWN0aW9uR2V0TGFiZWwoYWN0aW9uKSkpOworCisgICAgcmV0dXJuIGl0ZW07Cit9CisKKy8qKgor
ICogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX3dpdGhfbGFiZWw6Cisg
KiBAYWN0aW9uOiBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9jayBhY3Rpb24KKyAqIEBs
YWJlbDogYSBjdXN0b20gbGFiZWwgdGV4dCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgcHJlZGVmaW5l
ZCBvbmUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIHRo
ZSBnaXZlbiBzdG9jayBhY3Rpb24gdXNpbmcgdGhlIGdpdmVuIEBsYWJlbC4KKyAqIFN0b2NrIGFj
dGlvbnMgaGF2ZSBhIHByZWRlZmluZWQgbGFiZWwsIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRv
IGNyZWF0ZSBhCisgKiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIGZvciBhICNXZWJLaXRDb250ZXh0
TWVudUFjdGlvbiBidXQgdXNpbmcgYSBjdXN0b20gbGFiZWwuCisgKgorICogUmV0dXJuczogdGhl
IG5ld2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51SXRlbSBvYmplY3QuCisgKi8KK1dlYktp
dENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2Nr
X3dpdGhfbGFiZWwoV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBnY2hhciog
bGFiZWwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0JBU0VfQVBQTElDQVRJT04sIDApOworCisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVt
KiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9DT05URVhUX01FTlVfSVRFTSwgTlVMTCkpOworICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlw
ZSA9IHdlYmtpdENvbnRleHRNZW51QWN0aW9uSXNDaGVja2FibGUoYWN0aW9uKSA/IENoZWNrYWJs
ZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gV1RG
OjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKHR5cGUsIHdlYmtpdENvbnRleHRNZW51QWN0
aW9uR2V0QWN0aW9uVGFnKGFjdGlvbiksIFN0cmluZzo6ZnJvbVVURjgobGFiZWwpKSk7CisKKyAg
ICByZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X3dpdGhfc3VibWVudToKKyAqIEBsYWJlbDogdGhlIG1lbnUgaXRlbSBsYWJlbCB0ZXh0CisgKiBA
c3VibWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUgdG8gc2V0CisgKgorICogQ3JlYXRlcyBhIG5l
dyAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIHVzaW5nIHRoZSBnaXZlbiBAbGFiZWwgd2l0aCBhIHN1
Ym1lbnUuCisgKgorICogUmV0dXJuczogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRN
ZW51SXRlbSBvYmplY3QuCisgKi8KK1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoY29uc3QgZ2NoYXIqIGxhYmVsLCBXZWJLaXRD
b250ZXh0TWVudSogc3VibWVudSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsYWJlbCwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShzdWJt
ZW51KSwgMCk7CisKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVN
LCBOVUxMKSk7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRyKG5ldyBD
b250ZXh0TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlv
blRhZywgU3RyaW5nOjpmcm9tVVRGOChsYWJlbCkpKTsKKyAgICBpdGVtLT5wcml2LT5zdWJNZW51
ID0gc3VibWVudTsKKworICAgIHJldHVybiBpdGVtOworfQorCisvKioKKyAqIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yOgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktp
dENvbnRleHRNZW51SXRlbSByZXByZXNlbnRpbmcgYSBzZXBhcmF0b3IuCisgKgorICogUmV0dXJu
czogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51SXRlbSBvYmplY3QuCisgKi8K
K1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBh
cmF0b3Iodm9pZCkKK3sKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9J
VEVNLCBOVUxMKSk7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRyKG5l
dyBDb250ZXh0TWVudUl0ZW0oU2VwYXJhdG9yVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rp
b24sIFN0cmluZygpKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbjoKKyAqIEBpdGVtOiBhICNXZWJLaXRDb250ZXh0
TWVudUl0ZW0KKyAqCisgKiBHZXRzIHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBAaXRlbS4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3RrQWN0aW9uIGFzc29jaWF0ZWQg
dG8gdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0sCisgKiAgICBvciAlTlVMTCBpZiBAaXRlbSBp
cyBhIHNlcGFyYXRvci4KKyAqLworR3RrQWN0aW9uKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
Z2V0X2FjdGlvbihXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0pLCAwKTsKKworICAg
IHJldHVybiBpdGVtLT5wcml2LT5tZW51SXRlbS0+Z3RrQWN0aW9uKCk7Cit9CisKKy8qKgorICog
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb246CisgKiBAaXRlbTogYSAj
V2ViS2l0Q29udGV4dE1lbnVJdGVtCisgKgorICogR2V0cyB0aGUgI1dlYktpdENvbnRleHRNZW51
QWN0aW9uIG9mIEBpdGVtLiBJZiB0aGUgI1dlYktpdENvbnRleHRNZW51SXRlbSB3YXMgbm90Cisg
KiBjcmVhdGVkIGZvciBhIHN0b2NrIGFjdGlvbiAlV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
QkFTRV9BUFBMSUNBVElPTiB3aWxsIGJlCisgKiByZXR1cm5lZC4gSWYgdGhlICNXZWJLaXRDb250
ZXh0TWVudUl0ZW0gaXMgYSBzZXBhcmF0b3IgJVdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05P
X0FDVElPTgorICogd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI1dlYktp
dENvbnRleHRNZW51QWN0aW9uIG9mIEBpdGVtCisgKi8KK1dlYktpdENvbnRleHRNZW51QWN0aW9u
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKFdlYktpdENvbnRleHRN
ZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09O
VEVYVF9NRU5VX0lURU0oaXRlbSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElP
Tik7CisKKyAgICByZXR1cm4gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVu
dUl0ZW0oaXRlbS0+cHJpdi0+bWVudUl0ZW0uZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3I6CisgKiBAaXRlbTogYSAjV2ViS2l0Q29udGV4
dE1lbnVJdGVtCisgKgorICogQ2hlY2tzIHdoZXRoZXIgQGl0ZW0gaXMgYSBzZXBhcmF0b3IuCisg
KgorICogUmV0dXJuczogJVRSVUUgaXMgQGl0ZW0gaXMgYSBzZXBhcmF0b3Igb3IgJUZBTFNFIG90
aGVyd2lzZQorICovCitnYm9vbGVhbiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJh
dG9yKFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSksIEZBTFNFKTsKKworICAgIHJl
dHVybiBpdGVtLT5wcml2LT5tZW51SXRlbS0+dHlwZSgpID09IFNlcGFyYXRvclR5cGU7Cit9CisK
Ky8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51OgorICogQGl0ZW06
IGEgI1dlYktpdENvbnRleHRNZW51SXRlbQorICogQHN1Ym1lbnU6IChhbGxvdy1ub25lKTogYSAj
V2ViS2l0Q29udGV4dE1lbnUKKyAqCisgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBAaXRlbSBzdWJt
ZW51LiBJZiBAc3VibWVudSBpcyAlTlVMTCB0aGUgY3VycmVudAorICogc3VibWVudSBvZiBAaXRl
bSBpcyByZW1vdmVkLgorICovCit2b2lkIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3Vi
bWVudShXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0sIFdlYktpdENvbnRleHRNZW51KiBzdWJt
ZW51KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVN
KGl0ZW0pKTsKKworICAgIGl0ZW0tPnByaXYtPnN1Yk1lbnUgPSBzdWJtZW51OworfQorCisvKioK
KyAqIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudToKKyAqIEBpdGVtOiBhICNX
ZWJLaXRDb250ZXh0TWVudUl0ZW0KKyAqCisgKiBHZXRzIHRoZSBzdWJtZW51IG9mIEBpdGVtLgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRDb250ZXh0TWVudSBy
ZXByZXNlbnRpbmcgdGhlIHN1Ym1lbnUgb2YKKyAqICAgIEBpdGVtIG9yICVOVUxMIGlmIEBpdGVt
IGRvZXNuJ3QgaGF2ZSBhIHN1Ym1lbnUuCisgKi8KK1dlYktpdENvbnRleHRNZW51KiB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVt
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRF
TShpdGVtKSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+cHJpdi0+c3ViTWVudS5nZXQoKTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVJdGVtLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b250ZXh0TWVudUl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjYy
NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29udGV4dE1lbnVJdGVtLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18p
ICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIv
d2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYg
V2ViS2l0Q29udGV4dE1lbnVJdGVtX2gKKyNkZWZpbmUgV2ViS2l0Q29udGV4dE1lbnVJdGVtX2gK
KworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNICAgICAgICAgICAgKHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lU
RU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0sIFdlYktpdENvbnRleHRNZW51SXRlbSkpCisjZGVm
aW5lIFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSkpCisj
ZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfSVRFTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwg
V2ViS2l0Q29udGV4dE1lbnVJdGVtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQ09OVEVYVF9N
RU5VX0lURU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0pKQorI2RlZmluZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0lURU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0sIFdlYktpdENvbnRleHRNZW51SXRlbUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51SXRlbUNsYXNzICAgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1l
bnVJdGVtUHJpdmF0ZSBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlOworCitzdHJ1Y3QgX1dl
YktpdENvbnRleHRNZW51SXRlbSB7CisgICAgR0luaXRpYWxseVVub3duZWQgcGFyZW50OworCisg
ICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2Vi
S2l0Q29udGV4dE1lbnVJdGVtQ2xhc3MgeworICAgIEdJbml0aWFsbHlVbm93bmVkQ2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX2dldF90eXBlICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktp
dENvbnRleHRNZW51SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3ICAgICAgICAg
ICAgICAgICAgICAgICAoR3RrQWN0aW9uICAgICAgICAgICAgICAqYWN0aW9uKTsKKworV0VCS0lU
X0FQSSBXZWJLaXRDb250ZXh0TWVudUl0ZW0gKgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19mcm9tX3N0b2NrICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbik7
CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9uZXdfZnJvbV9zdG9ja193aXRoX2xhYmVsIChXZWJLaXRDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAqbGFiZWwpOworCitXRUJLSVRfQVBJIFdlYktp
dENvbnRleHRNZW51SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3Vi
bWVudSAgICAgICAgICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAqbGFiZWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1l
bnUgICAgICAqc3VibWVudSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoK
K3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yICAgICAgICAgICAgICh2b2lk
KTsKKworV0VCS0lUX0FQSSBHdGtBY3Rpb24gKgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9hY3Rpb24gICAgICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51SXRlbSAgKml0ZW0pOwor
CitXRUJLSVRfQVBJIFdlYktpdENvbnRleHRNZW51QWN0aW9uCit3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbiAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnVJdGVtICAq
aXRlbSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9p
c19zZXBhcmF0b3IgICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudUl0ZW0gICppdGVtKTsK
KworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUg
ICAgICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnVJdGVtICAqaXRlbSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVu
dSAgICAgICpzdWJtZW51KTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudSAqCit3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUgICAgICAgICAgICAgICAoV2ViS2l0Q29u
dGV4dE1lbnVJdGVtICAqaXRlbSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVt
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4
dE1lbnVJdGVtUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5
MmM4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51
SXRlbVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlX2gKKwor
I2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIldlYktpdFByaXZh
dGUuaCIKKworV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVh
dGUoV0tDb250ZXh0TWVudUl0ZW1SZWYpOworR3RrTWVudUl0ZW0qIHdlYmtpdENvbnRleHRNZW51
SXRlbVJlbGVhc2UoV2ViS2l0Q29udGV4dE1lbnVJdGVtKik7Cit2b2lkIHdlYmtpdENvbnRleHRN
ZW51SXRlbVNldFN1Yk1lbnUoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiwgR3RrTWVudSopOworCisj
ZW5kaWYgLy8gV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmMwNmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudVByaXZhdGUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0Q29udGV4dE1lbnVQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51
LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRDb250ZXh0TWVudSogd2Vi
a2l0Q29udGV4dE1lbnVDcmVhdGUoV0tBcnJheVJlZiB3a0l0ZW1zKTsKK3ZvaWQgd2Via2l0Q29u
dGV4dE1lbnVQb3B1bGF0ZShXZWJLaXRDb250ZXh0TWVudSosIFZlY3RvcjxXZWJDb3JlOjpDb250
ZXh0TWVudUl0ZW0+Jik7CisKKyNlbmRpZiAvLyBXZWJLaXRDb250ZXh0TWVudVByaXZhdGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5l
cy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCmlu
ZGV4IDk2YmNiNGUuLjczM2JmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREZWZpbmVzLmgKQEAgLTMyLDkgKzMyLDExIEBACiAKICNpbmNsdWRlIDxn
bGliLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlvbiBXZWJLaXRQcmlu
dE9wZXJhdGlvbjsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciBXZWJLaXRG
aW5kQ29udHJvbGxlcjsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3ICAgICAgICBXZWJL
aXRXZWJWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uICBXZWJLaXRQ
cmludE9wZXJhdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciAgV2Vi
S2l0RmluZENvbnRyb2xsZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyAgICAgICAg
IFdlYktpdFdlYlZpZXc7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnUgICAgIFdl
YktpdENvbnRleHRNZW51OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51SXRlbSBX
ZWJLaXRDb250ZXh0TWVudUl0ZW07CiAKICNpZmRlZiBHX09TX1dJTjMyCiAjICAgIGlmZGVmIEJV
SUxESU5HX1dFQktJVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcAppbmRleCBkYTE3OTFiLi5lZGMwNTZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjEsMTAg
KzIxLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5o
IgogCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkNvbnRl
eHRNZW51SXRlbS5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNs
dWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29u
dGV4dE1lbnVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0RW51bVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNsdWRlICJXZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oIgpAQCAtNjcsNiArNzAsOCBAQCBlbnVtIHsKIAogICAg
IFBSSU5UX1JFUVVFU1RFRCwKIAorICAgIENPTlRFWFRfTUVOVSwKKwogICAgIExBU1RfU0lHTkFM
CiB9OwogCkBAIC02NzAsNiArNjc1LDYyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19j
bGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAogICAgICAgICAgICAgICAg
ICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCiAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQ
RV9QUklOVF9PUEVSQVRJT04pOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y29u
dGV4dC1tZW51OgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBjb250ZXh0X21lbnU6IHRoZSBwcm9wb3Nl
ZCAjV2ViS2l0Q29udGV4dE1lbnUKKyAgICAgKiBAZXZlbnQ6IHRoZSAjR2RrRXZlbnQgdGhhdCB0
cmlnZ2VyZWQgdGhlIGNvbnRleHQgbWVudQorICAgICAqIEBoaXRfdGVzdF9yZXN1bHQ6IGEgI1dl
YktpdEhpdFRlc3RSZXN1bHQKKyAgICAgKgorICAgICAqIEVtbWl0ZWQgd2hlbiBhIGNvbnRleHQg
bWVudSBpcyBhYm91dCB0byBiZSBkaXNwbGF5ZWQgdG8gZ2l2ZSB0aGUgYXBwbGljYXRpb24KKyAg
ICAgKiBhIGNoYW5jZSB0byBjdXN0b21pemUgdGhlIHByb3Bvc2VkIG1lbnUsIHByZXZlbnQgdGhl
IG1lbnUgZnJvbSBiZWluZyBkaXNwbGF5ZWQKKyAgICAgKiBvciBidWlsZCBpdHMgb3duIGNvbnRl
eHQgbWVudS4KKyAgICAgKiA8aXRlbWl6ZWRsaXN0PgorICAgICAqIDxsaXN0aXRlbT48cGFyYT4K
KyAgICAgKiAgVG8gY3VzdG9taXplIHRoZSBwcm9wb3NlZCBtZW51IHlvdSBjYW4gdXNlIHdlYmtp
dF9jb250ZXh0X21lbnVfcHJlcGVuZCgpLAorICAgICAqICB3ZWJraXRfY29udGV4dF9tZW51X2Fw
cGVuZCgpIG9yIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KCkgdG8gYWRkIG5ldworICAgICAq
ICAjV2ViS2l0Q29udGV4dE1lbnVJdGVtPCEtLSAtLT5zIHRvIEBjb250ZXh0X21lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKCkKKyAgICAgKiAgdG8gcmVvcmRlciBleGlzdGluZyBp
dGVtcywgb3Igd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUoKSB0byByZW1vdmUgYW4KKyAgICAg
KiAgZXhpc3RpbmcgaXRlbS4gVGhlIHNpZ25hbCBoYW5kbGVyIHNob3VsZCByZXR1cm4gJUZBTFNF
LCBhbmQgdGhlIG1lbnUgcmVwcmVzZW50ZWQKKyAgICAgKiAgYnkgQGNvbnRleHRfbWVudSB3aWxs
IGJlIHNob3duLgorICAgICAqIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAqIDxsaXN0aXRlbT48
cGFyYT4KKyAgICAgKiAgVG8gcHJldmVudCB0aGUgbWVudSBmcm9tIGJlaW5nIGRpc3BsYXllZCB5
b3UgY2FuIGp1c3QgY29ubmVjdCB0byB0aGlzIHNpZ25hbAorICAgICAqICBhbmQgcmV0dXJuICVU
UlVFIHNvIHRoYSB0aGUgcHJvcG9zZWQgbWVudSB3aWxsIG5vdCBiZSBzaG93bi4KKyAgICAgKiA8
L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgKiA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICogIFRvIGJ1
aWxkIHlvdXIgb3duIG1lbnUsIHlvdSBjYW4gcmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBwcm9w
b3NlZCBtZW51IHdpdGgKKyAgICAgKiAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKCks
IGFkZCB5b3VyIG93biBpdGVtcyBhbmQgcmV0dXJuICVGQUxTRSBzbworICAgICAqICB0aGF0IHRo
ZSBtZW51IHdpbGwgYmUgc2hvd24uIFlvdSBjYW4gYWxzbyBpZ25vcmUgdGhlIHByb3Bvc2VkICNX
ZWJLaXRDb250ZXh0TWVudSwKKyAgICAgKiAgYnVpbGQgeW91ciBvd24gI0d0a01lbnUgYW5kIHJl
dHVybiAlVFJVRSB0byBwcmV2ZW50IHRoZSBwcm9wb3NlZCBtZW51IHRvIGJlIHNob3duLgorICAg
ICAqIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAqIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAg
SWYgeW91IGp1c3Qgd2FudCB0aGUgZGVmYXVsdCBtZW51IHRvIGJlIHNob3duIGFsd2F5cywgc2lt
cGx5IGRvbid0IGNvbm5lY3QgdG8gdGhpcworICAgICAqICBzaWduYWwgYmVjYXVzZSBzaG93aW5n
IHRoZSBwcm9wb3NlZCBjb250ZXh0IG1lbnUgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorICAg
ICAqIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAqIDwvaXRlbWl6ZWRsaXN0PgorICAgICAqCisg
ICAgICogSWYgdGhlIHNpZ25hbCBoYW5kbGVyIHJldHVybnMgJUZBTFNFIHRoZSBjb250ZXh0IG1l
bnUgcmVwcmVzZW50ZWQgYnkgQGNvbnRleHRfbWVudQorICAgICAqIHdpbGwgYmUgc2hvd24sIGlm
IGl0IHJldHVybiAlVFJVRSB0aGUgY29udGV4dCBtZW51IHdpbGwgbm90IGJlIHNob3duLgorICAg
ICAqCisgICAgICogVGhlIHByb3Bvc2VkICNXZWJLaXRDb250ZXh0TWVudSBwYXNzZWQgaW4gQGNv
bnRleHRfbWVudSBhcmd1bWVudCBpcyBvbmx5IHZhbGlkCisgICAgICogZHVyaW5nIHRoZSBzaWdu
YWwgZW1pc3Npb24uCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVy
IGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgICVG
QUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2lnbmFs
c1tDT05URVhUX01FTlVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjb250ZXh0LW1lbnUiLAor
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAg
ICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgY29udGV4dF9tZW51KSwKKyAg
ICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9CT1hF
RF9PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdES19UWVBFX0VWRU5UIHwgR19TSUdOQUxfVFlQRV9TVEFUSUNfU0NPUEUsCisgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ISVRfVEVTVF9SRVNVTFQpOwogfQogCiBzdGF0
aWMgYm9vbCB1cGRhdGVSZXBsYWNlQ29udGVudFN0YXR1cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQpAQCAtODI2LDE0ICs4ODcsNiBAQCB2b2lkIHdl
YmtpdFdlYlZpZXdQcmludEZyYW1lKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLRnJhbWVSZWYg
d2tGcmFtZSkKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaW50T3BlcmF0aW9uLmxlYWtSZWYoKSwg
ImZpbmlzaGVkIiwgR19DQUxMQkFDSyhnX29iamVjdF91bnJlZiksIDApOwogfQogCi1zdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kRGVmYXVsdE1lbnVJdGVtcyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXS0FycmF5UmVmIHdrUHJvcG9zZWRNZW51LCBWZWN0b3I8Q29udGV4
dE1lbnVJdGVtPiYgY29udGV4dE1lbnVJdGVtcykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdLQXJyYXlHZXRTaXplKHdrUHJvcG9zZWRNZW51KTsgKytpKSB7Ci0gICAgICAgIFdLQ29u
dGV4dE1lbnVJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVm
PihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tQcm9wb3NlZE1lbnUsIGkpKTsKLSAgICAgICAgY29u
dGV4dE1lbnVJdGVtcy5hcHBlbmQodG9JbXBsKHdrSXRlbSktPmRhdGEoKS0+Y29yZSgpKTsKLSAg
ICB9Ci19Ci0KIHN0YXRpYyBib29sIHdlYmtpdFdlYlZpZXdTaG91bGRTaG93SW5wdXRNZXRob2Rz
TWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIEd0a1NldHRpbmdzKiBzZXR0aW5n
cyA9IHdlYlZpZXcgPyBndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VUKHdlYlZpZXcp
KSA6IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwpAQCAtODQ1LDcgKzg5OCw3IEBAIHN0YXRp
YyBib29sIHdlYmtpdFdlYlZpZXdTaG91bGRTaG93SW5wdXRNZXRob2RzTWVudShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiBzaG93SW5wdXRNZXRob2RNZW51OwogfQogCi1zdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kSW5wdXRNZXRob2RzTWVudUl0ZW0o
V2ViS2l0V2ViVmlldyogd2ViVmlldywgVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIGNvbnRleHRN
ZW51SXRlbXMpCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kSW5wdXRN
ZXRob2RzTWVudUl0ZW0oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Q29udGV4dE1lbnUq
IGNvbnRleHRNZW51KQogewogICAgIGlmICghd2Via2l0V2ViVmlld1Nob3VsZFNob3dJbnB1dE1l
dGhvZHNNZW51KHdlYlZpZXcpKQogICAgICAgICByZXR1cm47CkBAIC04NTQsMjcgKzkwNyw0OSBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kSW5wdXRNZXRob2RzTWVu
dUl0ZW0oV2ViS2l0V2ViVmlldyogd2ViVgogICAgIGlmICghaW1Db250ZXh0KQogICAgICAgICBy
ZXR1cm47CiAKKyAgICAvLyBBbnkgbmVnYXRpdmUgdmFsdWUgaW5zZXJ0cyBhdCB0aGUgZW5kLgor
ICAgIGdpbnQgcG9zaXRpb24gPSAtMjsKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGxhc3RJ
dGVtID0gd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KTsKKyAgICBpZiAobGFz
dEl0ZW0gJiYgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24obGFzdEl0
ZW0pID09IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCkgeworICAg
ICAgICAvLyBMZWF2ZSBpbnNwZWN0IGVsZW1lbnQgaXRlbSBhdCB0aGUgYm90dG9tLCBzbyBpbnNl
cnQgYmVmb3JlCisgICAgICAgIC8vIHRoZSBpbnNwZWN0IGVsZW1lbnQgaXRlbSBhbmQgaXRzIHNl
cGFyYXRvci4KKyAgICAgICAgcG9zaXRpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0
ZW1zKGNvbnRleHRNZW51KSAtIDI7CisgICAgfQorCiAgICAgR3RrTWVudSogaW1Db250ZXh0TWVu
dSA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKICAgICBndGtfaW1fbXVsdGljb250ZXh0X2Fw
cGVuZF9tZW51aXRlbXMoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCBHVEtfTUVOVV9T
SEVMTChpbUNvbnRleHRNZW51KSk7Ci0gICAgQ29udGV4dE1lbnUgc3ViTWVudShpbUNvbnRleHRN
ZW51KTsKIAotICAgIENvbnRleHRNZW51SXRlbSBzZXBhcmF0b3IoU2VwYXJhdG9yVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIFN0cmluZygpKTsKLSAgICBjb250ZXh0TWVudUl0ZW1z
LmFwcGVuZChzZXBhcmF0b3IpOwotICAgIENvbnRleHRNZW51SXRlbSBtZW51SXRlbShTdWJtZW51
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIF8oIklucHV0IF9NZXRob2RzIiksICZz
dWJNZW51KTsKLSAgICBjb250ZXh0TWVudUl0ZW1zLmFwcGVuZChtZW51SXRlbSk7CisgICAgd2Vi
a2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfc2VwYXJhdG9yKCksIHBvc2l0aW9uKTsKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0
ZW0qIG1lbnVJdGVtID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrKFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMpOworICAgIHdlYmtpdENvbnRl
eHRNZW51SXRlbVNldFN1Yk1lbnUobWVudUl0ZW0sIGltQ29udGV4dE1lbnUpOworICAgIHdlYmtp
dF9jb250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCBtZW51SXRlbSwgcG9zaXRpb24gKyAx
KTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3Q29udGV4dE1lbnUoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV0tBcnJheVJlZiB3a1Byb3Bvc2VkTWVudSwgV0tIaXRUZXN0UmVzdWx0UmVmIHdrSGl0
VGVzdFJlc3VsdCkKIHsKLSAgICBXZWJDb250ZXh0TWVudVByb3h5R3RrKiBjb250ZXh0TWVudSA9
IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWN0aXZlQ29udGV4dE1lbnUoV0VCS0lUX1dFQl9WSUVXX0JB
U0Uod2ViVmlldykpOworICAgIFdlYkNvbnRleHRNZW51UHJveHlHdGsqIGNvbnRleHRNZW51UHJv
eHkgPSB3ZWJraXRXZWJWaWV3QmFzZUdldEFjdGl2ZUNvbnRleHRNZW51KFdFQktJVF9XRUJfVklF
V19CQVNFKHdlYlZpZXcpKTsKICAgICBBU1NFUlQoY29udGV4dE1lbnUpOwogCi0gICAgVmVjdG9y
PENvbnRleHRNZW51SXRlbT4gY29udGV4dE1lbnVJdGVtczsKLSAgICB3ZWJraXRXZWJWaWV3Q3Jl
YXRlQW5kQXBwZW5kRGVmYXVsdE1lbnVJdGVtcyh3ZWJWaWV3LCB3a1Byb3Bvc2VkTWVudSwgY29u
dGV4dE1lbnVJdGVtcyk7CisgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudT4gY29udGV4dE1l
bnUgPSBhZG9wdEdSZWYod2Via2l0Q29udGV4dE1lbnVDcmVhdGUod2tQcm9wb3NlZE1lbnUpKTsK
ICAgICBpZiAoV0tIaXRUZXN0UmVzdWx0SXNDb250ZW50RWRpdGFibGUod2tIaXRUZXN0UmVzdWx0
KSkKLSAgICAgICAgd2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZElucHV0TWV0aG9kc01lbnVJ
dGVtKHdlYlZpZXcsIGNvbnRleHRNZW51SXRlbXMpOworICAgICAgICB3ZWJraXRXZWJWaWV3Q3Jl
YXRlQW5kQXBwZW5kSW5wdXRNZXRob2RzTWVudUl0ZW0od2ViVmlldywgY29udGV4dE1lbnUuZ2V0
KCkpOworCisgICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0g
YWRvcHRHUmVmKHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUod2tIaXRUZXN0UmVzdWx0KSk7CisK
KyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIE5hdGl2ZVdlYk1vdXNlRXZlbnQqIG1vdXNl
RXZlbnQgPSBwYWdlLT5jdXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCgpOworCisgICAg
Z2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxz
W0NPTlRFWFRfTUVOVV0sIDAsIGNvbnRleHRNZW51LmdldCgpLCBtb3VzZUV2ZW50ID8gbW91c2VF
dmVudC0+bmF0aXZlRXZlbnQoKSA6IDAsIGhpdFRlc3RSZXN1bHQuZ2V0KCksICZyZXR1cm5WYWx1
ZSk7CisgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
Q29udGV4dE1lbnVJdGVtPiBjb250ZXh0TWVudUl0ZW1zOworICAgIHdlYmtpdENvbnRleHRNZW51
UG9wdWxhdGUoY29udGV4dE1lbnUuZ2V0KCksIGNvbnRleHRNZW51SXRlbXMpOworICAgIGNvbnRl
eHRNZW51UHJveHktPnBvcHVsYXRlKGNvbnRleHRNZW51SXRlbXMpOwogCi0gICAgY29udGV4dE1l
bnUtPnBvcHVsYXRlKGNvbnRleHRNZW51SXRlbXMpOworICAgIC8vIENsZWFyIHRoZSBtZW51IHRv
IG1ha2Ugc3VyZSBpdCdzIHVzZWxlc3MgYWZ0ZXIgc2lnbmFsIGVtaXNzaW9uLgorICAgIHdlYmtp
dF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudS5nZXQoKSk7CiB9CiAKIC8qKgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmlu
ZGV4IGZiNGM0OGEuLjU2MTg2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTE0Myw2ICsxNDMsMTAgQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBndWludCAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMpOwogICAgIGdib29sZWFuICAg
KCogcHJpbnRfcmVxdWVzdGVkKSAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UHJp
bnRPcGVyYXRpb24gICAgICAqcHJpbnRfb3BlcmF0aW9uKTsKKyAgICBnYm9vbGVhbiAgICgqIGNv
bnRleHRfbWVudSkgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRN
ZW51ICAgICAgICAgKmNvbnRleHRfbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2RrRXZlbnQgICAgICAgICAgICAgICAgICAqZXZlbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgICAgICAg
KmhpdF90ZXN0X3Jlc3VsdCk7CiAKICAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9u
ICovCiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbAppbmRleCA0YTljYzc5Li4xOGJkNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI4
LDYgKzI4LDggQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UHJpbnRPcGVyYXRp
b24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgog
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54bWwiLz4KKyAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Q29udGV4dE1lbnUueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvbnRleHRNZW51SXRlbS54bWwiLz4KICAgPC9jaGFw
dGVyPgogCiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
CmluZGV4IGVhYmNlNTAuLjIzMjQ1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAt
NTAxLDMgKzUwMSw2MyBAQCBXRUJLSVRfRklORF9DT05UUk9MTEVSX0dFVF9DTEFTUwogV2ViS2l0
RmluZENvbnRyb2xsZXJQcml2YXRlCiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlCiA8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0Q29udGV4dE1lbnU8L0ZJTEU+CitX
ZWJLaXRDb250ZXh0TWVudQord2Via2l0X2NvbnRleHRfbWVudV9uZXcKK3dlYmtpdF9jb250ZXh0
X21lbnVfd2l0aF9pdGVtcword2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kCit3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZAord2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQKK3dlYmtpdF9jb250
ZXh0X21lbnVfbW92ZV9pdGVtCit3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcword2Via2l0
X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcword2Via2l0X2NvbnRleHRfbWVudV9maXJzdAord2Vi
a2l0X2NvbnRleHRfbWVudV9sYXN0Cit3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtX2F0X3Bv
c2l0aW9uCit3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZQord2Via2l0X2NvbnRleHRfbWVudV9y
ZW1vdmVfYWxsCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0Q29udGV4dE1lbnVDbGFz
cworV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VCitXRUJLSVRfQ09OVEVYVF9NRU5VCitXRUJLSVRf
SVNfQ09OVEVYVF9NRU5VCitXRUJLSVRfQ09OVEVYVF9NRU5VX0NMQVNTCitXRUJLSVRfSVNfQ09O
VEVYVF9NRU5VX0NMQVNTCitXRUJLSVRfQ09OVEVYVF9NRU5VX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgorV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlCit3ZWJraXRfY29udGV4dF9t
ZW51X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0Q29udGV4
dE1lbnVJdGVtPC9GSUxFPgorV2ViS2l0Q29udGV4dE1lbnVJdGVtCitXZWJLaXRDb250ZXh0TWVu
dUFjdGlvbgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldword2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19mcm9tX3N0b2NrCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21f
c3RvY2tfd2l0aF9sYWJlbAord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1l
bnUKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yCit3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9j
a19hY3Rpb24KK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3IKK3dlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudQord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9zdWJtZW51CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0Q29udGV4dE1lbnVJdGVt
Q2xhc3MKK1dFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNCitXRUJLSVRfQ09OVEVYVF9NRU5V
X0lURU0KK1dFQktJVF9JU19DT05URVhUX01FTlVfSVRFTQorV0VCS0lUX0NPTlRFWFRfTUVOVV9J
VEVNX0NMQVNTCitXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU1fQ0xBU1MKK1dFQktJVF9DT05U
RVhUX01FTlVfSVRFTV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdENv
bnRleHRNZW51SXRlbVByaXZhdGUKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfdHlwZQor
PC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IDhlOGQ3YjEuLjI1NGY5NjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMKQEAgLTExLDMgKzExLDUgQEAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90eXBlCiB3
ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUK
IHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF90eXBlCit3ZWJraXRfY29udGV4dF9tZW51X2dldF90
eXBlCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggNmFk
YjJkNS4uYWNkN2JhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTIsNiArMiw3IEBAIGlmIEVOQUJMRV9XRUJL
SVQyCiAKIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFj
a0ZvcndhcmRMaXN0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdENvbnRleHRNZW51
IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERvd25sb2FkcyBcCiAJUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RMb2FkZXJDbGllbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0UHJpbnRpbmcgXApAQCAtMTM1LDQgKzEzNiwxMCBAQCBQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2NwcAogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxl
cl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQogCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdENvbnRleHRNZW51X1NPVVJDRVMg
PSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RD
b250ZXh0TWVudS5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0Q29udGV4dE1lbnVf
Q1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdENvbnRleHRNZW51X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJv
Z3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9MREZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2xkZmxhZ3MpCisKIGVuZGlmICMgRU5BQkxFX1dFQktJVDIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOThmMGYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29u
dGV4dE1lbnUuY3BwCkBAIC0wLDAgKzEsNjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3Qu
aCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK2NsYXNzIENvbnRleHRNZW51
VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBlbnVtIENvbnRleHRNZW51
SXRlbVN0YXRlRmxhZ3MgeworICAgICAgICBWaXNpYmxlID0gMSA8PCAwLAorICAgICAgICBFbmFi
bGVkID0gMSA8PCAxLAorICAgICAgICBDaGVja2VkID0gMSA8PCAyCisgICAgfTsKKworICAgIHZv
aWQgY2hlY2tDb250ZXh0TWVudUV2ZW50KEdka0V2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT50eXBlLCA9
PSwgR0RLX0JVVFRPTl9QUkVTUyk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0
dG9uLmJ1dHRvbiwgPT0sIDMpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRv
bi54LCA9PSwgbV9tZW51UG9zaXRpb25YKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
LT5idXR0b24ueSwgPT0sIG1fbWVudVBvc2l0aW9uWSk7CisgICAgfQorCisgICAgc3RhdGljIGdi
b29sZWFuIHZpZXdDb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRU
ZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRNZW51KSk7Cisg
ICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QoY29udGV4dE1lbnUpKTsKKyAgICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVudUV2ZW50KGV2
ZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOworCisgICAgICAgIHJldHVybiB0ZXN0LT5j
b250ZXh0TWVudShjb250ZXh0TWVudSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOworICAgIH0KKwor
ICAgIENvbnRleHRNZW51VGVzdCgpCisgICAgICAgIDogbV9tZW51UG9zaXRpb25YKDApCisgICAg
ICAgICwgbV9tZW51UG9zaXRpb25ZKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJBQ0sodmlld0NvbnRleHRNZW51Q2Fs
bGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+Q29udGV4dE1lbnVUZXN0KCkKKyAgICB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSosIEdka0V2ZW50KiwgV2ViS2l0
SGl0VGVzdFJlc3VsdCopID0gMDsKKworICAgIGJvb2wgc2hvdWxkU2hvd0lucHV0TWV0aG9kc01l
bnUoKQorICAgIHsKKyAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3dpZGdldF9n
ZXRfc2V0dGluZ3MoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgaWYgKCFzZXR0aW5n
cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGdib29sZWFuIHNob3dJbnB1
dE1ldGhvZE1lbnU7CisgICAgICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1zaG93LWlu
cHV0LW1ldGhvZC1tZW51IiwgJnNob3dJbnB1dE1ldGhvZE1lbnUsIE5VTEwpOworICAgICAgICBy
ZXR1cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrQWN0aW9u
U3RhdGUoR3RrQWN0aW9uKiBhY3Rpb24sIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAg
aWYgKHN0YXRlICYgVmlzaWJsZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KGd0a19hY3Rpb25fZ2V0
X3Zpc2libGUoYWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFn
dGtfYWN0aW9uX2dldF92aXNpYmxlKGFjdGlvbikpOworCisgICAgICAgIGlmIChzdGF0ZSAmIEVu
YWJsZWQpCisgICAgICAgICAgICBnX2Fzc2VydChndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0
aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dl
dF9zZW5zaXRpdmUoYWN0aW9uKSk7CisKKyAgICAgICAgaWYgKEdUS19JU19UT0dHTEVfQUNUSU9O
KGFjdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAmIENoZWNrZWQpCisgICAgICAgICAg
ICAgICAgZ19hc3NlcnQoZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FD
VElPTihhY3Rpb24pKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ19hc3Nl
cnQoIWd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9u
KSkpOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIFdlYktpdENvbnRleHRNZW51QWN0aW9u
IHN0b2NrQWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0
ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1z
LT5kYXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lU
X0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7CisKKyAgICAgICAgR3RrQWN0
aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsK
KyAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKKworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRl
bSksID09LCBzdG9ja0FjdGlvbik7CisKKyAgICAgICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24s
IHN0YXRlKTsKKworICAgICAgICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOworICAgIH0KKwor
ICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KEdMaXN0
KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9N
RU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0q
IGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOworICAgICAgICBh
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKKwor
ICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
YWN0aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOwor
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0
b2NrX2FjdGlvbihpdGVtKSwgPT0sIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JBU0VfQVBQ
TElDQVRJT04pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwo
YWN0aW9uKSwgPT0sIGxhYmVsKTsKKworICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwg
c3RhdGUpOworCisgICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7CisgICAgfQorCisg
ICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdMaXN0KiBpdGVt
cywgY29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1Yk1lbnVJdGVy
KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJLaXRD
b250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRh
dGEpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKGl0ZW0pKTsKKworICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNU
SU9OKGFjdGlvbikpOworCisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dldF9s
YWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOworICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlv
biwgc3RhdGUpOworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51ID0gd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pOworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VKHN1Yk1lbnUpKTsKKyAgICAgICAgaWYgKHN1Yk1lbnVJdGVy
KQorICAgICAgICAgICAgKnN1Yk1lbnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRl
bXMoc3ViTWVudSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9
CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChHTGlz
dCogaXRlbXMpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAgICAg
IFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShp
dGVtcy0+ZGF0YSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9p
c19zZXBhcmF0b3IoaXRlbSkpOworCisgICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7
CisgICAgfQorCisgICAgdm9pZCBzaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoKGludCB4LCBpbnQgeSkKKyAgICB7CisgICAgICAgIG1fbWVudVBvc2l0aW9uWCA9IHg7
CisgICAgICAgIG1fbWVudVBvc2l0aW9uWSA9IHk7CisgICAgICAgIGNsaWNrTW91c2VCdXR0b24o
eCwgeSwgMyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICB2b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaCgpCisgICAgeworICAg
ICAgICBzaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoKDAsIDApOwor
ICAgIH0KKworICAgIGRvdWJsZSBtX21lbnVQb3NpdGlvblg7CisgICAgZG91YmxlIG1fbWVudVBv
c2l0aW9uWTsKK307CisKK2NsYXNzIENvbnRleHRNZW51RGVmYXVsdFRlc3Q6IHB1YmxpYyBDb250
ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4
dE1lbnVEZWZhdWx0VGVzdCk7CisKKyAgICBlbnVtIERlZmF1bHRNZW51VHlwZSB7CisgICAgICAg
IE5hdmlnYXRpb24sCisgICAgICAgIExpbmssCisgICAgICAgIEltYWdlLAorICAgICAgICBMaW5r
SW1hZ2UsCisgICAgICAgIFZpZGVvLAorICAgICAgICBFZGl0YWJsZQorICAgIH07CisKKyAgICBD
b250ZXh0TWVudURlZmF1bHRUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkTWVudVR5cGUoTmF2
aWdhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250
ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2ViS2l0SGl0VGVzdFJlc3Vs
dCogaGl0VGVzdFJlc3VsdCkKKyAgICB7CisgICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2Nv
bnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAgIHN3aXRjaCAobV9l
eHBlY3RlZE1lbnVUeXBlKSB7CisgICAgICAgIGNhc2UgTmF2aWdhdGlvbjoKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwor
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19l
ZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0JBQ0ssIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9HT19GT1JXQVJELCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fU1RPUCwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JF
TE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTGluazoKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7Cisg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9X
LCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwg
RW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbWFnZToKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Cisg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ss
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNp
YmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rSW1h
Z2U6CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRU
ZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNp
YmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05M
T0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxl
ZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0
TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFH
RV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQ
Qk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaWRlbzoKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVE
SUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNr
ZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9P
UCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNp
YmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5f
VklERU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRWRpdGFibGU6CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVz
dWx0KSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwgVmlzaWJsZSk7
CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFksIFZpc2libGUpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUsIFZpc2libGUpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQo
aXRlcik7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRTaG93SW5wdXRNZXRob2Rz
TWVudSgpKSB7CisgICAgICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFy
YXRvckFuZEdldE5leHQoaXRlcik7CisgICAgICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9JTlBVVF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KG1fd2ViVmlldykpKSB7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2Vw
YXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fSU5TUEVDVF9FTEVNRU5ULCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgIH0KKyAgICAg
ICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRGVmYXVsdE1lbnVUeXBl
IG1fZXhwZWN0ZWRNZW51VHlwZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURl
ZmF1bHRNZW51KENvbnRleHRNZW51RGVmYXVsdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICBjb25z
dCBjaGFyKiBsaW5rc0hUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiIDxh
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3
dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJz
aXRlPC9hPiIKKyAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDox
OyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAg
ICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxp
bWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCisgICAgICAg
ICIgPHZpZGVvIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHdpZHRo
PTEwIGhlaWdodD0xMCBjb250cm9scz0nY29udHJvbHMnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cn
IHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKKyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo1MCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAg
ICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSFRNTCwgImZp
bGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBD
b250ZXh0IG1lbnUgZm9yIGRvY3VtZW50LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9
IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247CisgICAgdGVzdC0+c2hvd0NvbnRl
eHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaCgwLCAwKTsKKworICAgIC8vIENvbnRl
eHQgbWVudSBmb3IgbGluay4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0
TWVudURlZmF1bHRUZXN0OjpMaW5rOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRp
b25BbmRXYWl0VW50aWxGaW5pc2goMSwgMSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGlt
YWdlLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRl
c3Q6OkltYWdlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50
aWxGaW5pc2goMSwgMTApOworCisgICAgLy8gRW5hYmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBz
byB0aGF0IGluc3BlY3RvciBlbGVtZW50CisgICAgLy8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVm
YXVsdCBjb250ZXh0IG1lbnUuCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxv
cGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyks
IFRSVUUpOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZSBsaW5rLgorICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsK
KyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoKDEs
IDIwKTsKKworICAgIC8vIENvbnRleHQgbWVudSBmb3IgaW1hZ2UgdmlkZW8uCisgICAgdGVzdC0+
bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6VmlkZW87CisgICAg
dGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaCgxLCAzMCk7
CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGVkaXRhYmxlLgorICAgIHRlc3QtPm1fZXhwZWN0
ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkVkaXRhYmxlOworICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2goNSwgNTUpOworfQor
CitjbGFzcyBDb250ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21UZXN0
KTsKKworICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCgpCisgICAgICAgIDogbV9pdGVtVG9BY3Rp
dmF0ZUxhYmVsKDApCisgICAgICAgICwgbV9hY3RpdmF0ZWQoZmFsc2UpCisgICAgICAgICwgbV90
b2dnbGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktp
dENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0
KiBoaXRUZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgLy8gQXBwZW5kIG91ciBjdXN0b20gaXRl
bSB0byB0aGUgZGVmYXVsdCBtZW51LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVu
ZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhtX2FjdGlvbi5nZXQo
KSkpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHdGtNZW51KiBnZXRQb3B1cE1lbnUoKQorICAgIHsK
KyAgICAgICAgR093blB0cjxHTGlzdD4gdG9wbGV2ZWxzKGd0a193aW5kb3dfbGlzdF90b3BsZXZl
bHMoKSk7CisgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSB0b3BsZXZlbHMuZ2V0KCk7IGl0ZXI7
IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSkgeworICAgICAgICAgICAgaWYgKCFHVEtfSVNfV0lO
RE9XKGl0ZXItPmRhdGEpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICBHdGtXaWRnZXQqIGNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihpdGVyLT5kYXRh
KSk7CisgICAgICAgICAgICBpZiAoIUdUS19JU19NRU5VKGNoaWxkKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGd0a19tZW51X2dldF9hdHRhY2hfd2lkZ2V0
KEdUS19NRU5VKGNoaWxkKSkgPT0gR1RLX1dJREdFVChtX3dlYlZpZXcpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHVEtfTUVOVShjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgR3RrTWVudUl0
ZW0qIGdldE1lbnVJdGVtKEd0a01lbnUqIG1lbnUsIGNvbnN0IGdjaGFyKiBpdGVtTGFiZWwpCisg
ICAgeworICAgICAgICBHT3duUHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGls
ZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSBp
dGVtcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAgICAgICAg
ICBHdGtNZW51SXRlbSogY2hpbGQgPSBHVEtfTUVOVV9JVEVNKGl0ZXItPmRhdGEpOworICAgICAg
ICAgICAgaWYgKGdfc3RyX2VxdWFsKGl0ZW1MYWJlbCwgZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwo
Y2hpbGQpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgIH0KKyAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgdm9pZCBhY3RpdmF0ZU1lbnVJdGVtKCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1faXRl
bVRvQWN0aXZhdGVMYWJlbCk7CisgICAgICAgIEd0a01lbnUqIG1lbnUgPSBnZXRQb3B1cE1lbnUo
KTsKKyAgICAgICAgR3RrTWVudUl0ZW0qIGl0ZW0gPSBnZXRNZW51SXRlbShtZW51LCBtX2l0ZW1U
b0FjdGl2YXRlTGFiZWwpOworICAgICAgICBndGtfbWVudV9zaGVsbF9hY3RpdmF0ZV9pdGVtKEdU
S19NRU5VX1NIRUxMKG1lbnUpLCBHVEtfV0lER0VUKGl0ZW0pLCBUUlVFKTsKKyAgICAgICAgbV9p
dGVtVG9BY3RpdmF0ZUxhYmVsID0gMDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5M
b29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVD
YWxsYmFjayhncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIENvbnRleHRNZW51Q3Vz
dG9tVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJE
YXRhKTsKKyAgICAgICAgdGVzdC0+YWN0aXZhdGVNZW51SXRlbSgpOworICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVu
dGlsQWN0aXZhdGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsKKyAgICAgICAgbV9h
Y3RpdmF0ZWQgPSBtX3RvZ2dsZWQgPSBmYWxzZTsKKyAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxh
YmVsID0gYWN0aW9uTGFiZWw7CisgICAgICAgIGdfaWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlk
bGVDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICB2b2lkIHRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xl
ZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKKyAgICB7CisgICAgICAgIGFjdGl2YXRlQ3VzdG9t
TWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoYWN0aW9uTGFiZWwpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRN
ZW51Q3VzdG9tVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3Rr
QWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVz
dC0+bV90b2dnbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rp
b24qIGFjdGlvbikKKyAgICB7CisgICAgICAgIG1fYWN0aW9uID0gYWN0aW9uOworICAgICAgICBp
ZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoYWN0aW9uLCAidG9nZ2xlZCIsIEdfQ0FMTEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0
aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhp
cyk7CisgICAgfQorCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IG1fYWN0aW9uOworICAgIGNvbnN0
IGNoYXIqIG1faXRlbVRvQWN0aXZhdGVMYWJlbDsKKyAgICBib29sIG1fYWN0aXZhdGVkOworICAg
IGJvb2wgbV90b2dnbGVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxh
dGVNZW51KENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48
L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVudSBpdGVtLgorICAgIEdSZWZQdHI8R3RrQWN0
aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21B
Y3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAwLCAwKSk7CisgICAgdGVzdC0+c2V0QWN0aW9uKGFj
dGlvbi5nZXQoKSk7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNo
KCk7CisgICAgdGVzdC0+YWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRl
ZChndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX2FjdGl2YXRlZCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdG9nZ2xlZCk7CisKKyAgICAv
LyBDcmVhdGUgYSBjdXN0b20gdG9nZ2xlIG1lbnUgaXRlbS4KKyAgICBHUmVmUHRyPEd0a0FjdGlv
bj4gdG9nZ2xlQWN0aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25f
bmV3KCJXZWJLaXRHVEsrQ3VzdG9tVG9nZ2xlQWN0aW9uIiwgIkN1c3RvbSBfVG9nZ2xlIEFjdGlv
biIsIDAsIDApKSk7CisgICAgdGVzdC0+c2V0QWN0aW9uKHRvZ2dsZUFjdGlvbi5nZXQoKSk7Cisg
ICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoKCk7CisgICAgdGVzdC0+
dG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGd0a19hY3Rpb25fZ2V0X2xh
YmVsKHRvZ2dsZUFjdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2FjdGl2YXRl
ZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90b2dnbGVkKTsKK30KKworY2xhc3MgQ29udGV4dE1l
bnVDdXN0b21GdWxsVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KTsKKworICAg
IGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVu
dCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgcHJvcG9z
ZWQgbWVudSBhbmQgYnVpbGQgb3VyIG93bi4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9y
ZW1vdmVfYWxsKGNvbnRleHRNZW51KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9j
b250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpLCA9PSwgMCk7CisKKyAgICAgICAg
Ly8gQWRkIGFjdGlvbnMgZnJvbSBzdG9jay4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9w
cmVwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3Rv
Y2soV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSykpOworICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld19mcm9tX3N0b2NrKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsK
KyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOworCisgICAgICAgIC8vIEFkZCBj
dXN0b20gYWN0aW9ucy4KKyAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0
R1JlZihndGtfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0Fj
dGlvbiIsIDAsIDApKTsKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbi5n
ZXQoKSwgRkFMU0UpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChjb250ZXh0
TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rpb24uZ2V0KCkpLCAtMSk7Cisg
ICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FD
VElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24i
LCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKKyAgICAgICAgZ3RrX3RvZ2dsZV9h
Y3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dnbGVBY3Rpb24uZ2V0KCkpLCBU
UlVFKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9uLmdldCgpKSk7CisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKworICAgICAgICAvLyBBZGQgYSBzdWJtZW51Lgor
ICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdl
YmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2lu
c2VydChzdWJNZW51LmdldCgpLCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3Rv
Y2tfd2l0aF9sYWJlbChXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCAiU3RvcCBMb2Fk
IiksIDApOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChzdWJNZW51LmdldCgp
LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2soV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fUkVMT0FEKSwgLTEpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2Fw
cGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1l
bnUoIkxvYWQgb3B0aW9ucyIsIHN1Yk1lbnUuZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRl
eHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdf
c2VwYXJhdG9yKCkpOworCisgICAgICAgIC8vIE1vdmUgTG9hZCBzdWJtZW51IGJlZm9yZSBjdXN0
b20gYWN0aW9ucy4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0oY29udGV4
dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSksIDMpOworICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRl
eHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwgMyk7CisKKyAgICAgICAgLy8gSWYgbGFzdCBpdGVt
IGlzIGEgc2VwYXJhdG9yLCByZW1vdmUgaXQuCisgICAgICAgIGlmICh3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1faXNfc2VwYXJhdG9yKHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVu
dSkpKQorICAgICAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkpOworCisgICAgICAgIC8vIENo
ZWNrIHRoZSBtZW51LgorICAgICAgICBHTGlzdCogaXRlciA9IHdlYmtpdF9jb250ZXh0X21lbnVf
Z2V0X2l0ZW1zKGNvbnRleHRNZW51KTsKKworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0dPX0JBQ0ssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9HT19GT1JXQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworCisgICAgICAgIEdMaXN0
KiBzdWJNZW51SXRlciA9IDA7CisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdWJN
ZW51QW5kR2V0TmV4dChpdGVyLCAiTG9hZCBvcHRpb25zIiwgVmlzaWJsZSB8IEVuYWJsZWQsICZz
dWJNZW51SXRlcik7CisgICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9TVE9QLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisKKyAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwg
IkN1c3RvbSBfQWN0aW9uIiwgVmlzaWJsZSk7CisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24i
LCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOworICAgICAgICBnX2Fzc2VydCghaXRlcik7
CisKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21N
ZW51KENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+
PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoKCk7Cit9CisK
K2NsYXNzIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsK
K3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlzYWJsZWRU
ZXN0KTsKKworICAgIGVudW0gRGlzYWJsZU1vZGUgeworICAgICAgICBJZ25vcmVDbGlja3MsCisg
ICAgICAgIElnbm9yZURlZmF1bHRNZW51CisgICAgfTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiB2
aWV3QnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50KiBldmVudCwg
Q29udGV4dE1lbnVEaXNhYmxlZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAoZXZlbnQt
PmJ1dHRvbi5idXR0b24gIT0gMykKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAg
cmV0dXJuIHRlc3QtPnJpZ2h0QnV0dG9uUHJlc3NlZCgpOworICAgIH0KKworICAgIENvbnRleHRN
ZW51RGlzYWJsZWRUZXN0KCkKKyAgICAgICAgOiBtX2Rpc2FibGVNb2RlKElnbm9yZUNsaWNrcykK
KyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYnV0dG9uLXByZXNz
LWV2ZW50IiwgR19DQUxMQkFDSyh2aWV3QnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7
CisgICAgfQorCisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4
dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisgICAgeworICAgICAgICBp
ZiAobV9kaXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlja3MpCisgICAgICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
cmlnaHRCdXR0b25QcmVzc2VkKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Rpc2FibGVNb2RlID09
IElnbm9yZUNsaWNrcykgeworICAgICAgICAgICAgZmluaXNoTWFpbkxvb3BBZnRlckRlbGF5KDEp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIERpc2FibGVNb2RlIG1fZGlzYWJsZU1vZGU7Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNhYmxlTWVudShDb250ZXh0TWVudURpc2FibGVkVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRH
VEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5tX2Rpc2FibGVNb2Rl
ID0gQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6Oklnbm9yZURlZmF1bHRNZW51OworICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaCgpOworCisgICAgdGVzdC0+bV9kaXNh
YmxlTW9kZSA9IENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjpJZ25vcmVDbGlja3M7CisgICAgdGVz
dC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoKCk7Cit9CisKK3ZvaWQgYmVmb3Jl
QWxsKCkKK3sKKyAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiZGVmYXVsdC1tZW51IiwgdGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUpOworICAgIENvbnRl
eHRNZW51Q3VzdG9tVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBvcHVsYXRlLW1lbnUiLCB0
ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUpOworICAgIENvbnRleHRNZW51Q3VzdG9tRnVsbFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tbWVudSIsIHRlc3RDb250ZXh0TWVudUN1
c3RvbU1lbnUpOworICAgIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiZGlzYWJsZS1tZW51IiwgdGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOworfQorCit2
b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0TWFpbi5oCmluZGV4IDM5YTIwMDAuLjViMDIyZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaApAQCAtNDUs
NiArNDUsMTUgQEAgcHVibGljOgogCiAgICAgflRlc3QoKQogICAgIHsKKyAgICAgICAgaWYgKG1f
d2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGdfcHJpbnQoIkxlYWtlZCBvYmplY3RzOiIpOworICAgICAgICBIYXNoU2V0PEdPYmplY3QqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV93YXRjaGVkT2JqZWN0cy5lbmQoKTsKKyAgICAgICAgZm9y
IChIYXNoU2V0PEdPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3dhdGNoZWRPYmplY3Rz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGdfcHJpbnQoIiAlcyglcCki
LCBnX3R5cGVfbmFtZV9mcm9tX2luc3RhbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8R1R5cGVJbnN0YW5j
ZSo+KCppdCkpLCAqaXQpOworICAgICAgICBnX3ByaW50KCJcbiIpOworCiAgICAgICAgIGdfYXNz
ZXJ0KG1fd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAppbmRl
eCAzMWRlNzI5Li5mNDg1NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0xMTYsOSArMTE2LDE0IEBAIHZv
aWQgV2ViVmlld1Rlc3Q6OmdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW0pCiAgICAgd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW0obV93ZWJWaWV3LCBpdGVtKTsKIH0KIAotdm9pZCBXZWJWaWV3VGVzdDo6d2FpdChk
b3VibGUgc2Vjb25kcykKK3ZvaWQgV2ViVmlld1Rlc3Q6OmZpbmlzaE1haW5Mb29wQWZ0ZXJEZWxh
eShkb3VibGUgc2Vjb25kcykKIHsKICAgICBnX3RpbWVvdXRfYWRkX3NlY29uZHMoc2Vjb25kcywg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odGVzdExvYWRUaW1lb3V0RmluaXNoTG9vcCks
IG1fbWFpbkxvb3ApOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRz
KQoreworICAgIGZpbmlzaE1haW5Mb29wQWZ0ZXJEZWxheShzZWNvbmRzKTsKICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAKQEAgLTIwMiwzICsyMDcsMzQgQEAgdm9pZCBXZWJW
aWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2Rp
ZmllcnMpCiAgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCit2b2lkIFdl
YlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1
dHRvbiwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIGRvTW91c2VCdXR0b25F
dmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKKyAg
ICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1v
dXNlTW9kaWZpZXJzKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6ZG9Nb3VzZUJ1dHRvbkV2ZW50
KEdka0V2ZW50VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRv
biwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KG1fcGFyZW50
V2luZG93KTsKKyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lER0VUKG1fd2ViVmll
dyk7CisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQodmlld1dpZGdldCkpOwor
CisgICAgR093blB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpKTsK
KyAgICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lk
Z2V0KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOworCisgICAgZXZl
bnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+YnV0dG9uLngg
PSB4OworICAgIGV2ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZlbnQtPmJ1dHRvbi5heGVzID0g
MDsKKyAgICBldmVudC0+YnV0dG9uLnN0YXRlID0gbW91c2VNb2RpZmllcnM7CisgICAgZXZlbnQt
PmJ1dHRvbi5idXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdk
a19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2Rldmlj
ZV9tYW5hZ2VyKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dpZGdldCkpKTsKKworICAgIGlu
dCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHZpZXdXaWRnZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisgICAgZXZl
bnQtPmJ1dHRvbi54X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IHlS
b290OworICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCmluZGV4
IDAxZjQ2ODUuLjZiYmVmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaApAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBnb0ZvcndhcmQoKTsKICAgICB2b2lkIGdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKIAorICAgIHZvaWQgZmluaXNoTWFpbkxvb3BBZnRl
ckRlbGF5KGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMpOwog
ICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdm9pZCB3YWl0VW50aWxUaXRs
ZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKTsKQEAgLTQ3LDEyICs0OCwxNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKIAog
ICAgIHZvaWQgbW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2Rp
ZmllcnMgPSAwKTsKKyAgICB2b2lkIGNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNp
Z25lZCBpbnQgYnV0dG9uID0gMSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CiAK
ICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgR01haW5Mb29wKiBtX21haW5Mb29w
OwogICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CiAgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRv
dzsKICAgICBDU3RyaW5nIG1fZXhwZWN0ZWRUaXRsZTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRv
TW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVu
c2lnbmVkIGludCk7CiB9OwogCiAjZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDBhODA3YmMuLmE0NDkwNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTI1LDYgKzI1
LDkgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRDb250ZXh0TWVudS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb25zLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudUl0ZW0u
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdERvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFu
ZHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDJtYXJzaGFsLmxpc3QgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0CmluZGV4IDVmNzM1NjAuLmQ1OTg5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAtMSw2ICsx
LDcgQEAKIEJPT0xFQU46Qk9YRUQKIEJPT0xFQU46RU5VTSxTVFJJTkcsUE9JTlRFUgogQk9PTEVB
TjpPQkpFQ1QKK0JPT0xFQU46T0JKRUNULEJPWEVELE9CSkVDVAogQk9PTEVBTjpPQkpFQ1QsRU5V
TQogQk9PTEVBTjpTVFJJTkcKIE9CSkVDVDpWT0lECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAppbmRleCA0YTUwMmFm
Li4xZDYzNGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNv
bnRleHRNZW51UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAgLTkwLDYgKzkwLDcgQEAgdm9pZCBXZWJDb250
ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHBvc2l0aW9uLAogICAgIC8vIERpc3BsYXkgbWVudSBpbml0aWF0ZWQgYnkgcmlnaHQgY2xpY2sg
KG1vdXNlIGJ1dHRvbiBwcmVzc2VkID0gMykuCiAgICAgTmF0aXZlV2ViTW91c2VFdmVudCogbW91
c2VFdmVudCA9IG1fcGFnZS0+Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKTsKICAg
ICBjb25zdCBHZGtFdmVudCogZXZlbnQgPSBtb3VzZUV2ZW50ID8gbW91c2VFdmVudC0+bmF0aXZl
RXZlbnQoKSA6IDA7CisgICAgZ3RrX21lbnVfYXR0YWNoX3RvX3dpZGdldChtX21lbnUucGxhdGZv
cm1EZXNjcmlwdGlvbigpLCBHVEtfV0lER0VUKG1fd2ViVmlldyksIDApOwogICAgIGd0a19tZW51
X3BvcHVwKG1fbWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIDAsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLAogICAg
ICAgICAgICAgICAgICAgIGV2ZW50ID8gZXZlbnQtPmJ1dHRvbi5idXR0b24gOiAzLCBldmVudCA/
IGV2ZW50LT5idXR0b24udGltZSA6IEdES19DVVJSRU5UX1RJTUUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147596</attachid>
            <date>2012-06-14 09:13:26 -0700</date>
            <delta_ts>2012-06-19 05:58:35 -0700</delta_ts>
            <desc>Patch updated to apply on current git master</desc>
            <filename>wk2-context-menu-api2.diff</filename>
            <type>text/plain</type>
            <size>115960</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2MTE1MjkwLi5kZjBlYjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTM1
IEBACiAyMDEyLTA2LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAorICAgICAgICBbR1RLXSBBZGQgQ29udGV4dE1lbnUgQVBJIHRvIFdlYktpdDIgR1RLKyBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMDEx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdl
YktpdFdlYlZpZXc6OmNvbnRleHQtbWVudSBzaWduYWwgYW5kIFdlYktpdENvbnRleHRNZW51IGFu
ZAorICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2JqZWN0cyB0byBjdXN0b21pemUgdGhl
IGRlZmF1bHQgbWVudSBvcgorICAgICAgICBidWlscyBuZXcgbWVudXMuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGRlc3RpbmF0aW9uLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmNwcDogQWRkZWQuCisgICAg
ICAgICh3ZWJraXRDb250ZXh0TWVudUZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9jb250ZXh0
X21lbnVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0Q29udGV4dE1lbnVQb3B1bGF0ZSk6IFBvcHVsYXRlIHRoZSBnaXZlbiB2
ZWN0b3Igb2YKKyAgICAgICAgQ29udGV4dE1lbnVJdGVtcyB3aXRoIHRoZSBXZWJLaXRDb250ZXh0
TWVudSBpdGVtcyByZWxlYXNpbmcgdGhlCisgICAgICAgIGl0ZW1zIGFkZGVkIHRvIHRoZSB2ZWN0
b3IuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUNyZWF0ZSk6IENyZWF0ZSBhIG5ldyBXZWJL
aXRDb250ZXh0TWVudSBmb3IgdGhlCisgICAgICAgIGdpdmVuIFdLQXJyYXlSZWYgb2YgV0tDb250
ZXh0TWVudUl0ZW1SZWYuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X25ldyk6IENyZWF0
ZSBhIG5ldyBXZWJLaXRDb250ZXh0TWVudS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVf
d2l0aF9pdGVtcyk6IENyZWF0ZSBhIG5ldyBXZWJLaXRDb250ZXh0TWVudQorICAgICAgICB1c2lu
ZyB0aGUgZ2l2ZW4gbGlzdCBvZiBXZWJLaXRDb250ZXh0TWVudUl0ZW0uCisgICAgICAgICh3ZWJr
aXRDb250ZXh0TWVudUluc2VydCk6IEhlbHBlciBmdW5jdGlvbiB0byBpbnNlcnQgYQorICAgICAg
ICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gaW50byB0aGUgV2ViS2l0Q29udGV4dE1lbnUuCisgICAg
ICAgICh3ZWJraXRfY29udGV4dF9tZW51X3ByZXBlbmQpOiBBZGQgaXRlbSBhdCB0aGUgYmVnaW5u
aW5nLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQpOiBBZGQgaXRlbSBhdCB0
aGUgZW5kLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQpOiBJbnNlcnQgaXRl
bSBhdCBhIHJhbmRvbSBwb3NpdGlvbi4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfbW92
ZV9pdGVtKTogTW92ZSBhbiBleGlzdGluZyBpdGVtIHRvIGEgbmV3CisgICAgICAgIHBvc2l0aW9u
LgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMpOiBHZXQgdGhlIGxpc3Qg
b2YgaXRlbXMuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKTogR2V0
IHRoZSBudW1iZXIgb2YgaXRlbXMuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2ZpcnN0
KTogR2V0IHRoZSBmaXJzdCBpdGVtLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9sYXN0
KTogR2V0IHRoZSBsYXN0IGl0ZW0uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2dldF9p
dGVtX2F0X3Bvc2l0aW9uKTogR2V0IHRoZSBpdGVtIGF0IHRoZQorICAgICAgICBnaXZlbiBwb3Np
dGlvbi4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlKTogUmVtb3ZlIHRoZSBn
aXZlbiBpdGVtLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKTogUmVt
b3ZlIGFsbCBpdGVtcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudUFjdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdENvbnRleHRNZW51QWN0aW9u
SXNDaGVja2FibGUpOiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RvY2sKKyAgICAgICAgYWN0aW9uIGlz
IGEgdG9nZ2xlIGFjdGlvbi4KKyAgICAgICAgKHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0
aW9uVGFnKTogR2V0IHRoZSBXZWJDb3JlCisgICAgICAgIENvbnRleHRNZW51QWN0aW9uIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGdpdmVuIHN0b2NrIGFjdGlvbi4KKyAgICAgICAgKHdlYmtpdENvbnRl
eHRNZW51QWN0aW9uR2V0Rm9yQ29udGV4dE1lbnVJdGVtKTogR2V0IHRoZSBzdG9jaworICAgICAg
ICBhY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gV2ViQ29yZSBDb250ZXh0TWVudUFj
dGlvbi4KKyAgICAgICAgKHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFiZWwpOiBHZXQgdGhl
IGxhYmVsIHN0cmluZyBvZiB0aGUKKyAgICAgICAgZ2l2ZW4gc3RvY2sgYWN0aW9uLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQcml2
YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRN
ZW51SXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVtRmluYWxp
emUpOgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2luaXQpOgorICAgICAgICAo
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0Q29u
dGV4dE1lbnVJdGVtQ3JlYXRlKTogQ3JlYXRlIGEgbmV3IFdlYktpdENvbnRleHRNZW51SXRlbQor
ICAgICAgICBmb3IgdGhlIGdpdmVuIFdLQ29udGV4dE1lbnVJdGVtUmVmLgorICAgICAgICAod2Vi
a2l0Q29udGV4dE1lbnVJdGVtQ3JlYXRlRm9yR3RrSXRlbSk6IENyZWF0ZSBhIG5ldworICAgICAg
ICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gdXNpbmcgdGhlIGdpdmVuIEd0a01lbnVJdGVtLgorICAg
ICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudSk6IFNldCB0aGUgZ2l2ZW4gR3Rr
TWVudSBhcworICAgICAgICBzdWJtZW51IG9mIHRoZSBpdGVtLiBUaGlzIGlzIHVzZWQgb25seSB0
byBhZGQgSW5wdXQgTWV0aG9kcworICAgICAgICBzdWJtZW51IHRoYXQgaXMgY3JlYXRlZCBieSBH
VEsuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUl0ZW1SZWxlYXNlKTogUmVsZWFzZSB0aGUg
V2ViQ29yZQorICAgICAgICBDb250ZXh0TWVudUl0ZW0gYXNzb2NpYXRlZCB0byB0aGUgaXRlbS4K
KyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcpOiBDcmVhdGUgYSBuZXcgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtCisgICAgICAgIGZvciB0aGUgZ2l2ZW4gR3RrQWN0aW9uLgorICAg
ICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrKTogQ3JlYXRlIGEg
bmV3CisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSBmb3IgYSBzdG9jayBhY3Rpb24uCisg
ICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfd2l0aF9sYWJl
bCk6IENyZWF0ZSBhIG5ldworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIGEgc3Rv
Y2sgYWN0aW9uIHVzaW5nIGEgY3VzdG9tIGxhYmVsLgorICAgICAgICAod2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUpOiBDcmVhdGUgYSBuZXcKKyAgICAgICAgV2ViS2l0
Q29udGV4dE1lbnVJdGVtIHdpdGggYSBzdWJtZW51LgorICAgICAgICAod2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19zZXBhcmF0b3IpOiBDcmVhdGUgYSBuZXcgc2VwYXJhdG9yCisgICAgICAg
IG1lbnUgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9u
KTogR2V0IHRoZSBHdGtBY3Rpb24gb2YgdGhlIGl0ZW0uCisgICAgICAgICh3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbik6IEdldCB0aGUgc3RvY2sgYWN0aW9uCisgICAg
ICAgIG9mIHRoZSBpdGVtLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2lzX3Nl
cGFyYXRvcik6IFdoZXRoZXIgaXRlbSBpcyBhIHNlcGFyYXRvci4KKyAgICAgICAgKHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudSk6IFNldCBvciByZXBsYWNlIHRoZQorICAgICAg
ICBzdWJtZW51IG9mIHRoZSBpdGVtLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9zdWJtZW51KTogR2V0IHRoZSBzdWJtZW51IG9mIHRoZSBpdGVtLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbS5oOiBBZGRlZC4KKyAgICAgICAg
KF9XZWJLaXRDb250ZXh0TWVudUl0ZW0pOgorICAgICAgICAoX1dlYktpdENvbnRleHRNZW51SXRl
bUNsYXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0
ZW1Qcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREZWZpbmVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZCBXZWJLaXRX
ZWJWaWV3Ojpjb250ZXh0LW1lbnUgc2lnbmFsLgorICAgICAgICAoZ2V0VW5pY29kZU1lbnVJdGVt
UG9zaXRpb24pOiBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQorICAgICAgICBwb3Np
dGlvbiBvZiB0aGUgdW5pY29kZSBtZW51IGl0ZW0gaW4gdGhlIHByb3Bvc2VkIGNvbnRleHQgbWVu
dS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51
SXRlbSk6IFVzZQorICAgICAgICBXZWJLaXRDb250ZXh0TWVudSBBUEkgdG8gYWRkIHRoZSBpbnB1
dCBtZXRob2RzIHN1Ym1lbnUgdG8gdGhlCisgICAgICAgIGRlZmF1bHQgY29udGV4dCBtZW51Lgor
ICAgICAgICAod2Via2l0V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUpOiBDcmVhdGUgYSBXZWJL
aXRDb250ZXh0TWVudSBmb3IKKyAgICAgICAgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51IGFuZCBl
bWl0IFdlYktpdFdlYlZpZXc6OmNvbnRleHQtbWVudQorICAgICAgICBzaWduYWwuIFRoZW4gcG9w
dWxhdGUgdGhlIGNvbnRleHQgbWVudSBwcm94eSB3aXRoIHRoZSByZXN1bHRpbmcKKyAgICAgICAg
V2ViS2l0Q29udGV4dE1lbnUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudCk6IEluIGNhc2Ug
b2YgcmlnaHQgY2xpY2sgc2F2ZQorICAgICAgICB0aGUgZXZlbnQgdG8gYmUgdXNlZCBieSBjb250
ZXh0IG1lbnUgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1l
bnVFdmVudCk6IFJldHVybiBhbmQgcmVsZWFzZSB0aGUKKyAgICAgICAgc2F2ZWQgYnV0dG9uIGV2
ZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNn
bWw6IEFkZCBzZWN0aW9ucyBmb3IKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUgYW5kIFdlYktp
dENvbnRleHRNZW51SXRlbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQKKyAgICAgICAgd2Via2l0X2NvbnRl
eHRfbWVudV9nZXRfdHlwZSBhbmQgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF90eXBlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBBZGQgbmV3
IHRlc3QgZm9yIGNvbnRleHQgbWVudS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0Q29udGV4dE1lbnUuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRlc3RDb250ZXh0TWVudURl
ZmF1bHRNZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudSk6CisgICAg
ICAgICh0ZXN0Q29udGV4dE1lbnVDdXN0b21NZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVu
dURpc2FibGVNZW51KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgorICAg
ICAgICAoV2ViVmlld1Rlc3Q6OmZpbmlzaE1haW5Mb29wQWZ0ZXJEZWxheSk6IFN0b3AgdGhlIG1h
aW4gbG9vcCBhZnRlcgorICAgICAgICBhIGdpdmVuIGRlbGF5IGluIHNlY29uZHMuCisgICAgICAg
IChXZWJWaWV3VGVzdDo6d2FpdCk6IFVzZSBmaW5pc2hNYWluTG9vcEFmdGVyRGVsYXkuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEluY2x1ZGUgV2ViS2l0Q29udGV4dE1lbnUuaCwK
KyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtLmggYW5kIFdlYktpdENvbnRleHRNZW51QWN0
aW9ucy5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6c2hvd0NvbnRleHRNZW51KTog
QXR0YWNoIHRoZQorICAgICAgICBwb3B1cCBtZW51IHRvIHRoZSB2aWV3IHdpZGdldCBiZWZvcmUg
c2hvd2luZyBpdC4KKworMjAxMi0wNi0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gQWRkIGlucHV0IG1ldGhvZHMgc3VibWVudSBp
dGVtIHRvIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSBmb3IgZWRpdGFibGUgY29udGVudAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2MDAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMzUyMzkxOC4uMGM4YzlmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC04OCw2ICs4OCw5IEBAIHdlYmtpdDJfaF9hcGkgKz0g
XAogd2Via2l0Mmd0a19oX2FwaSArPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29udGV4dE1lbnUuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmggXApAQCAtNTc1LDggKzU3OCwxNyBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0u
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdFByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29udGV4dE1lbnUuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDb250ZXh0TWVudS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmNwcCBcCisJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmggXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9uc1ByaXZh
dGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1l
bnVDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b250ZXh0TWVudUNsaWVudC5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb250ZXh0TWVudUl0ZW0uY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRl
eHRNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRl
eHRNZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDExM2UxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29udGV4dE1lbnUuY3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250
ZXh0TWVudS5oIgorCisjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51UHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0cnVjdCBfV2ViS2l0Q29udGV4
dE1lbnVQcml2YXRlIHsKKyAgICBHTGlzdCogaXRlbXM7Cit9OworCitHX0RFRklORV9UWVBFKFdl
YktpdENvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51LCBHX1RZUEVfT0JKRUNUKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRDb250ZXh0TWVudUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRDb250ZXh0TWVudSogbWVudSA9IFdFQktJVF9DT05URVhUX01FTlUob2JqZWN0
KTsKKyAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwobWVudSk7CisgICAgbWVudS0+
cHJpdi0+fldlYktpdENvbnRleHRNZW51UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9jb250ZXh0X21lbnVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9pbml0KFdlYktpdENvbnRleHRNZW51KiBt
ZW51KQoreworICAgIFdlYktpdENvbnRleHRNZW51UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShtZW51LCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUsIFdlYktpdENv
bnRleHRNZW51UHJpdmF0ZSk7CisgICAgbWVudS0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2
KSBXZWJLaXRDb250ZXh0TWVudVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Nv
bnRleHRfbWVudV9jbGFzc19pbml0KFdlYktpdENvbnRleHRNZW51Q2xhc3MqIGxpc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGxpc3RD
bGFzcyk7CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdENvbnRleHRNZW51Rmlu
YWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUobGlzdENsYXNzLCBzaXplb2Yo
V2ViS2l0Q29udGV4dE1lbnVQcml2YXRlKSk7Cit9CisKK3ZvaWQgd2Via2l0Q29udGV4dE1lbnVQ
b3B1bGF0ZShXZWJLaXRDb250ZXh0TWVudSogbWVudSwgVmVjdG9yPENvbnRleHRNZW51SXRlbT4m
IGNvbnRleHRNZW51SXRlbXMpCit7CisgICAgZm9yIChHTGlzdCogaXRlbSA9IG1lbnUtPnByaXYt
Pml0ZW1zOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgV2ViS2l0
Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVt
LT5kYXRhKTsKKyAgICAgICAgY29udGV4dE1lbnVJdGVtcy5hcHBlbmQoQ29udGV4dE1lbnVJdGVt
KHdlYmtpdENvbnRleHRNZW51SXRlbVJlbGVhc2UobWVudUl0ZW0pKSk7CisgICAgfQorfQorCitX
ZWJLaXRDb250ZXh0TWVudSogd2Via2l0Q29udGV4dE1lbnVDcmVhdGUoV0tBcnJheVJlZiB3a0l0
ZW1zKQoreworICAgIFdlYktpdENvbnRleHRNZW51KiBtZW51ID0gd2Via2l0X2NvbnRleHRfbWVu
dV9uZXcoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKHdrSXRl
bXMpOyArK2kpIHsKKyAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgd2tJdGVtID0gc3RhdGlj
X2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a0l0ZW1z
LCBpKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZChtZW51LCB3ZWJraXRD
b250ZXh0TWVudUl0ZW1DcmVhdGUod2tJdGVtKSk7CisgICAgfQorICAgIG1lbnUtPnByaXYtPml0
ZW1zID0gZ19saXN0X3JldmVyc2UobWVudS0+cHJpdi0+aXRlbXMpOworCisgICAgcmV0dXJuIG1l
bnU7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9uZXc6CisgKgorICogQ3JlYXRl
cyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnUgb2JqZWN0IHRvIGJlIHVzZWQgYXMgYSBzdWJtZW51
IG9mIGFuIGV4aXN0aW5nCisgKiAjV2ViS2l0Q29udGV4dE1lbnUuIFRoZSBjb250ZXh0IG1lbnUg
b2YgYSAjV2ViS2l0V2ViVmlldyBpcyBjcmVhdGVkIGJ5IHRoZSB2aWV3CisgKiBhbmQgcGFzc2Vk
IGFzIGFuIGFyZ3VtZW50IG9mICNXZWJLaXRXZWJWaWV3Ojpjb250ZXh0LW1lbnUgc2lnbmFsLgor
ICogVG8gYWRkIGl0ZW1zIHRvIHRoZSBtZW51IHVzZSB3ZWJraXRfY29udGV4dF9tZW51X3ByZXBl
bmQoKSwKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKCkgb3Igd2Via2l0X2NvbnRleHRf
bWVudV9pbnNlcnQoKS4KKyAqIFNlZSBhbHNvIHdlYmtpdF9jb250ZXh0X21lbnVfd2l0aF9pdGVt
cygpIHRvIGNyZWF0ZSBhICNXZWJLaXRDb250ZXh0TWVudSB3aXRoCisgKiBhIGxpc3Qgb2YgaW5p
dGlhbCBpdGVtcy4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0Q29u
dGV4dE1lbnUgb2JqZWN0CisgKi8KK1dlYktpdENvbnRleHRNZW51KiB3ZWJraXRfY29udGV4dF9t
ZW51X25ldygpCit7CisgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlUoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVSwgTlVMTCkpOworfQorCisvKioKKyAqIHdlYmtpdF9j
b250ZXh0X21lbnVfd2l0aF9pdGVtczoKKyAqIEBpdGVtczogKGVsZW1lbnQtdHlwZSBXZWJLaXRD
b250ZXh0TWVudUl0ZW0pOiBhICNHTGlzdCBvZiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtCisgKgor
ICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnUgb2JqZWN0IHRvIGJlIHVzZWQgYXMg
YSBzdWJtZW51IG9mIGFuIGV4aXN0aW5nCisgKiAjV2ViS2l0Q29udGV4dE1lbnUgd2l0aCB0aGUg
Z2l2ZW4gaW5pdGlhbCBpdGVtcy4KKyAqIFNlZSBhbHNvIHdlYmtpdF9jb250ZXh0X21lbnVfbmV3
KCkKKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0Q29udGV4dE1lbnUg
b2JqZWN0CisgKi8KK1dlYktpdENvbnRleHRNZW51KiB3ZWJraXRfY29udGV4dF9tZW51X3dpdGhf
aXRlbXMoR0xpc3QqIGl0ZW1zKQoreworICAgIFdlYktpdENvbnRleHRNZW51KiBtZW51ID0gd2Vi
a2l0X2NvbnRleHRfbWVudV9uZXcoKTsKKyAgICBnX2xpc3RfZm9yZWFjaChpdGVtcywgcmVpbnRl
cnByZXRfY2FzdDxHRnVuYz4oZ19vYmplY3RfcmVmX3NpbmspLCAwKTsKKyAgICBtZW51LT5wcml2
LT5pdGVtcyA9IGdfbGlzdF9jb3B5KGl0ZW1zKTsKKworICAgIHJldHVybiBtZW51OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRDb250ZXh0TWVudUluc2VydChXZWJLaXRDb250ZXh0TWVudSogbWVu
dSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtLCBpbnQgcG9zaXRpb24pCit7CisgICAgZ19v
YmplY3RfcmVmX3NpbmsoaXRlbSk7CisgICAgbWVudS0+cHJpdi0+aXRlbXMgPSBnX2xpc3RfaW5z
ZXJ0KG1lbnUtPnByaXYtPml0ZW1zLCBpdGVtLCBwb3NpdGlvbik7Cit9CisKKy8qKgorICogd2Vi
a2l0X2NvbnRleHRfbWVudV9wcmVwZW5kOgorICogQG1lbnU6IGEgI1dlYktpdENvbnRleHRNZW51
CisgKiBAaXRlbTogdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gdG8gYWRkCisgKgorICogQWRk
cyBAaXRlbSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBAbWVudSBpdGVtIGxpc3QuCisgKi8KK3Zv
aWQgd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKFdlYktpdENvbnRleHRNZW51KiBtZW51LCBX
ZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19DT05URVhUX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICB3ZWJraXRDb250ZXh0TWVudUluc2Vy
dChtZW51LCBpdGVtLCAwKTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVu
ZDoKKyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0TWVudQorICogQGl0ZW06IHRoZSAjV2ViS2l0
Q29udGV4dE1lbnVJdGVtIHRvIGFkZAorICoKKyAqIEFkZHMgQGl0ZW0gYXQgdGhlIGVuZCBvZiB0
aGUgQG1lbnUgaXRlbSBsaXN0LgorICovCit2b2lkIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5k
KFdlYktpdENvbnRleHRNZW51KiBtZW51LCBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtKSk7CisK
KyAgICB3ZWJraXRDb250ZXh0TWVudUluc2VydChtZW51LCBpdGVtLCAtMSk7Cit9CisKKy8qKgor
ICogd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQ6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4
dE1lbnUKKyAqIEBpdGVtOiB0aGUgI1dlYktpdENvbnRleHRNZW51SXRlbSB0byBhZGQKKyAqIEBw
b3NpdGlvbjogdGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgaXRlbQorICoKKyAqIEluc2VydHMg
QGl0ZW0gaW50byB0aGUgQG1lbnUgaXRlbSBsaXN0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAq
IElmIEBwb3NpdGlvbiBpcyBuZWdhdGl2ZSwgb3IgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBv
ZiBpdGVtcworICogaW4gdGhlICNXZWJLaXRDb250ZXh0TWVudSwgdGhlIGl0ZW0gaXMgYWRkZWQg
b24gdG8gdGhlIGVuZCBvZgorICogdGhlIEBtZW51IGl0ZW0gbGlzdC4gVGhlIGZpcnN0IHBvc2l0
aW9uIGlzIDAuCisgKi8KK3ZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoV2ViS2l0Q29u
dGV4dE1lbnUqIG1lbnUsIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSwgaW50IHBvc2l0aW9u
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSkp
OworCisgICAgd2Via2l0Q29udGV4dE1lbnVJbnNlcnQobWVudSwgaXRlbSwgcG9zaXRpb24pOwor
fQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtOgorICogQG1lbnU6IGEg
I1dlYktpdENvbnRleHRNZW51CisgKiBAaXRlbTogdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0g
dG8gYWRkCisgKiBAcG9zaXRpb246IHRoZSBuZXcgcG9zaXRpb24gdG8gbW92ZSB0aGUgaXRlbQor
ICoKKyAqIE1vdmVzIEBpdGVtIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgQG1lbnUgaXRl
bSBsaXN0LgorICogVGhlIGZpcnN0IHBvc2l0aW9uIGlzIDAuCisgKi8KK3ZvaWQgd2Via2l0X2Nv
bnRleHRfbWVudV9tb3ZlX2l0ZW0oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUsIFdlYktpdENvbnRl
eHRNZW51SXRlbSogaXRlbSwgaW50IHBvc2l0aW9uKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSkpOworCisgICAgaWYgKCFnX2xpc3RfZmluZCht
ZW51LT5wcml2LT5pdGVtcywgaXRlbSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1lbnUtPnBy
aXYtPml0ZW1zID0gZ19saXN0X3JlbW92ZShtZW51LT5wcml2LT5pdGVtcywgaXRlbSk7CisgICAg
bWVudS0+cHJpdi0+aXRlbXMgPSBnX2xpc3RfaW5zZXJ0KG1lbnUtPnByaXYtPml0ZW1zLCBpdGVt
LCBwb3NpdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXM6
CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisgKiBSZXR1cm5zIHRoZSBpdGVt
IGxpc3Qgb2YgQG1lbnUuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXRDb250
ZXh0TWVudUl0ZW0pICh0cmFuc2ZlciBub25lKTogYSAjR0xpc3Qgb2YKKyAqICAgICNXZWJLaXRD
b250ZXh0TWVudUl0ZW08IS0tIC0tPnMKKyAqLworR0xpc3QqIHdlYmtpdF9jb250ZXh0X21lbnVf
Z2V0X2l0ZW1zKFdlYktpdENvbnRleHRNZW51KiBtZW51KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlUobWVudSksIDApOworCisgICAgcmV0dXJuIG1l
bnUtPnByaXYtPml0ZW1zOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25f
aXRlbXM6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisgKiBHZXRzIHRoZSBs
ZW5ndGggb2YgdGhlIEBtZW51IGl0ZW0gbGlzdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbnVtYmVy
IG9mICNXZWJLaXRDb250ZXh0TWVudUl0ZW08IS0tIC0tPnMgaW4gQG1lbnUKKyAqLworZ3VpbnQg
d2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhXZWJLaXRDb250ZXh0TWVudSogbWVudSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUp
LCAwKTsKKworICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKG1lbnUtPnByaXYtPml0ZW1zKTsKK30K
KworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2ZpcnN0OgorICogQG1lbnU6IGEgI1dlYktp
dENvbnRleHRNZW51CisgKgorICogR2V0cyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgQG1lbnUgaXRl
bSBsaXN0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIGZpcnN0ICNXZWJL
aXRDb250ZXh0TWVudUl0ZW0gb2YgQG1lbnUsCisgKiAgICBvciAlTlVMTCBpZiB0aGUgI1dlYktp
dENvbnRleHRNZW51IGlzIGVtcHR5LgorICovCitXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtp
dF9jb250ZXh0X21lbnVfZmlyc3QoV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSwgMCk7CisKKyAg
ICByZXR1cm4gbWVudS0+cHJpdi0+aXRlbXMgPyBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0obWVu
dS0+cHJpdi0+aXRlbXMtPmRhdGEpIDogMDsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9t
ZW51X2xhc3Q6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisgKiBHZXRzIHRo
ZSBsYXN0IGl0ZW0gaW4gdGhlIEBtZW51IGl0ZW0gbGlzdC4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IHRoZSBsYXN0ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2YgQG1lbnUsCisg
KiAgICBvciAlTlVMTCBpZiB0aGUgI1dlYktpdENvbnRleHRNZW51IGlzIGVtcHR5LgorICovCitX
ZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChXZWJLaXRDb250
ZXh0TWVudSogbWVudSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09O
VEVYVF9NRU5VKG1lbnUpLCAwKTsKKworICAgIEdMaXN0KiBsYXN0ID0gZ19saXN0X2xhc3QobWVu
dS0+cHJpdi0+aXRlbXMpOworICAgIHJldHVybiBsYXN0ID8gV0VCS0lUX0NPTlRFWFRfTUVOVV9J
VEVNKGxhc3QtPmRhdGEpIDogMDsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2dl
dF9pdGVtX2F0X3Bvc2l0aW9uOgorICogQG1lbnU6IGEgI1dlYktpdENvbnRleHRNZW51CisgKiBA
cG9zaXRpb246IHRoZSBwb3NpdGlvbiBvZiB0aGUgaXRlbSwgY291bnRpbmcgZnJvbSAwCisgKgor
ICogR2V0cyB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIEBtZW51IGl0ZW0g
bGlzdC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Q29udGV4
dE1lbnVJdGVtIGF0IHBvc2l0aW9uIEBwb3NpdGlvbiBpbiBAbWVudSwKKyAqICAgIG9yICVOVUxM
IGlmIHRoZSBwb3NpdGlvbiBpcyBvZmYgdGhlIGVuZCBvZiB0aGUgQG1lbnUgaXRlbSBsaXN0Lgor
ICovCitXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1f
YXRfcG9zaXRpb24oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUsIHVuc2lnbmVkIHBvc2l0aW9uKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlUobWVudSks
IDApOworCisgICAgZ3BvaW50ZXIgaXRlbSA9IGdfbGlzdF9udGhfZGF0YShtZW51LT5wcml2LT5p
dGVtcywgcG9zaXRpb24pOworICAgIHJldHVybiBpdGVtID8gV0VCS0lUX0NPTlRFWFRfTUVOVV9J
VEVNKGl0ZW0pIDogMDsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZToK
KyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0TWVudQorICogQGl0ZW06IHRoZSAjV2ViS2l0Q29u
dGV4dE1lbnVJdGVtIHRvIHJlbW92ZQorICoKKyAqIFJlbW92ZXMgQGl0ZW0gZnJvbSB0aGUgQG1l
bnUgaXRlbSBsaXN0LgorICogU2VlIGFsc28gd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxs
KCkgdG8gcmVtb3ZlIGFsbCBpdGVtcy4KKyAqLwordm9pZCB3ZWJraXRfY29udGV4dF9tZW51X3Jl
bW92ZShXZWJLaXRDb250ZXh0TWVudSogbWVudSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVt
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSkp
OworCisgICAgaWYgKCFnX2xpc3RfZmluZChtZW51LT5wcml2LT5pdGVtcywgaXRlbSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1lbnUtPnByaXYtPml0ZW1zID0gZ19saXN0X3JlbW92ZShtZW51
LT5wcml2LT5pdGVtcywgaXRlbSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbSk7Cit9CisKKy8q
KgorICogd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsOgorICogQG1lbnU6IGEgI1dlYktp
dENvbnRleHRNZW51CisgKgorICogUmVtb3ZlcyBhbGwgaXRlbXMgb2YgdGhlIEBtZW51IGl0ZW0g
bGlzdC4KKyAqLwordm9pZCB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoV2ViS2l0Q29u
dGV4dE1lbnUqIG1lbnUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVY
VF9NRU5VKG1lbnUpKTsKKworICAgIGdfbGlzdF9mcmVlX2Z1bGwobWVudS0+cHJpdi0+aXRlbXMs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAg
bWVudS0+cHJpdi0+aXRlbXMgPSAwOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uODRhMGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
Ml9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJP
bmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51X2gKKyNkZWZpbmUgV2ViS2l0Q29udGV4dE1l
bnVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dENvbnRleHRNZW51SXRlbS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VICAgICAg
ICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0NP
TlRFWFRfTUVOVShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUsIFdlYktpdENvbnRleHRNZW51KSkKKyNkZWZp
bmUgV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUpKQorI2RlZmluZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVSwgV2ViS2l0Q29udGV4dE1lbnVDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9JU19DT05URVhUX01FTlVfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VKSkKKyNk
ZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUsIFdlYktpdENvbnRl
eHRNZW51Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnVDbGFzcyAg
IFdlYktpdENvbnRleHRNZW51Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1l
bnVQcml2YXRlIFdlYktpdENvbnRleHRNZW51UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRDb250
ZXh0TWVudSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRDb250ZXh0TWVudVBy
aXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51Q2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfY29udGV4dF9tZW51X2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBXZWJLaXRDb250ZXh0TWVudSAqCit3ZWJraXRfY29udGV4dF9tZW51X25ldyAgICAgICAgICAg
ICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudSAqCit3ZWJraXRf
Y29udGV4dF9tZW51X3dpdGhfaXRlbXMgICAgICAgICAgIChHTGlzdCAgICAgICAgICAgICAgICAg
Kml0ZW1zKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29udGV4dF9tZW51X3ByZXBlbmQg
ICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gKml0ZW0p
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kICAgICAgICAg
ICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSAqaXRlbSk7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQgICAgICAgICAgICAgICAo
V2ViS2l0Q29udGV4dE1lbnUgICAgICptZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtICppdGVtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0g
ICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnUgICAgICptZW51LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtICppdGVtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAg
ICAgICAgICBwb3NpdGlvbik7CitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9jb250ZXh0X21l
bnVfZ2V0X2l0ZW1zICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisK
K1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMgICAgICAg
ICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29u
dGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfZmlyc3QgICAgICAgICAgICAgICAg
KFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4
dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfbGFzdCAgICAgICAgICAgICAgICAgKFdl
YktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1l
bnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1fYXRfcG9zaXRpb24gKFdlYktp
dENvbnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgcG9zaXRpb24pOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlICAgICAgICAgICAgICAgKFdlYktpdENv
bnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSAqaXRlbSk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1l
bnUgICAgICptZW51KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rp
b25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWUwNjhmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVBY3Rpb25zLmNwcApAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
Q29udGV4dE1lbnVBY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUFjdGlv
bnNQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitib29sIHdlYmtpdENvbnRleHRNZW51QWN0aW9uSXND
aGVja2FibGUoV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIHN3aXRjaCAo
YWN0aW9uKSB7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9CT0xEOgorICAg
IGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDOgorICAgIGNhc2UgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5ERVJMSU5FOgorICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTOgorICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1A6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0NvbnRleHRN
ZW51QWN0aW9uIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9uVGFnKFdlYktpdENvbnRl
eHRNZW51QWN0aW9uIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OOgorICAgICAgICByZXR1cm4gQ29u
dGV4dE1lbnVJdGVtVGFnTm9BY3Rpb247CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PUEVOX0xJTks6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlu
azsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdf
V0lORE9XOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdzsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktf
VE9fRElTSzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1Rv
RGlzazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19D
TElQQk9BUkQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xp
cGJvYXJkOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9J
Tl9ORVdfV0lORE9XOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdl
SW5OZXdXaW5kb3c7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9B
RF9JTUFHRV9UT19ESVNLOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRJbWFnZVRvRGlzazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlf
SU1BR0VfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnQ29w
eUltYWdlVG9DbGlwYm9hcmQ7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0
ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX09QRU5fRlJBTUVfSU5fTkVXX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuIENvbnRl
eHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OworICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fR09fQkFDSzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRh
Z0dvQmFjazsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQ6
CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ7CisgICAgY2FzZSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QOgorICAgICAgICByZXR1cm4gQ29udGV4dE1l
bnVJdGVtVGFnU3RvcDsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9B
RDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDsKKyAgICBjYXNlIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFk6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VUOgor
ICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnQ3V0OworICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fUEFTVEU6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1U
YWdQYXN0ZTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURToKKyAg
ICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZTsKKyAgICBjYXNlIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEw6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVu
dUl0ZW1UYWdTZWxlY3RBbGw7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9J
TlBVVF9NRVRIT0RTOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRo
b2RzOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERToKKyAgICAg
ICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU7CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRN
ZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9OT19HVUVTU0VTX0ZPVU5EOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFn
Tm9HdWVzc2VzRm91bmQ7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05P
UkVfU1BFTExJTkc6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVs
bGluZzsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0xFQVJOX1NQRUxMSU5H
OgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9HUkFNTUFSOgorICAgICAgICBy
ZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcjsKKyAgICBjYXNlIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0ZPTlRfTUVOVToKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51
SXRlbVRhZ0ZvbnRNZW51OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQk9M
RDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ7CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVu
dUl0ZW1UYWdJdGFsaWM7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTkRF
UkxJTkU6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU7CisgICAg
Y2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FOgorICAgICAgICByZXR1cm4g
Q29udGV4dE1lbnVJdGVtVGFnT3V0bGluZTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0lOU1BFQ1RfRUxFTUVOVDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRh
Z0luc3BlY3RFbGVtZW50OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BF
Tl9WSURFT19JTl9ORVdfV0lORE9XOgorICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9BVURJT19JTl9ORVdfV0lORE9XOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJ
dGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJEOgorICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRDoKKyAgICAgICAg
cmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0NsaXBib2FyZDsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUzoKKyAg
ICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM7CisgICAg
Y2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUDoKKyAgICAg
ICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDsKKyAgICBjYXNlIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU46CisgICAgICAg
IHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjsKKyAgICBjYXNl
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVk6CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QQVVTRToKKyAgICAgICAgcmV0dXJuIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fTUVESUFfTVVURToKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ01lZGlh
TXV0ZTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JBU0VfQVBQTElDQVRJ
T046CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRpb25UYWc7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
cmV0dXJuIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzsKK30KKworV2ViS2l0Q29u
dGV4dE1lbnVBY3Rpb24gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0
ZW0oQ29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSkKK3sKKyAgICBzd2l0Y2ggKG1lbnVJdGVtLT5h
Y3Rpb24oKSkgeworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb246CisgICAgICAg
IHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT047CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fTElOSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0RPV05MT0FEX0xJTktfVE9fRElTSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1c7CisgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQ7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRDsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgorICAgICAgICByZXR1
cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICByZXR1cm4gV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0dvRm9yd2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dP
X0ZPUldBUkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAgICByZXR1
cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUDsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1JFTE9BRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6CisgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VU
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0RlbGV0ZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVU
RTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEw7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHM6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREU7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgorICAgICAgICByZXR1
cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BFTExJTkdfR1VFU1M7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9TUEVMTElORzsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9MRUFSTl9TUEVMTElORzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZUdyYW1tYXI6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05P
UkVfR1JBTU1BUjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9OVF9NRU5VOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQm9sZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6CisgICAg
ICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9VTkRFUkxJTkU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdXRs
aW5lOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1VUTElORTsK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorICAgICAgICByZXR1
cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5UOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBt
ZW51SXRlbS0+dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dpbmRv
dygpID8KKyAgICAgICAgICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fVklERU9f
SU5fTkVXX1dJTkRPVyA6IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVESU9fSU5f
TkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0Ns
aXBib2FyZDoKKyAgICAgICAgcmV0dXJuIG1lbnVJdGVtLT50aXRsZSgpID09IGNvbnRleHRNZW51
SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpID8KKyAgICAgICAgICAgIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9BUkQgOiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJEOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUzsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QOworICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgIHJldHVybiBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6CisgICAgICAgIHJldHVybiBtZW51SXRl
bS0+dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSA/CisgICAgICAgICAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZIDogV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fTUVESUFfUEFVU0U7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRp
YU11dGU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9N
VVRFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnOgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQkFTRV9BUFBMSUNBVElPTjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQkFTRV9BUFBMSUNBVElPTjsKK30KKwor
U3RyaW5nIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFiZWwoV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb24gYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTks6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuTGluaygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
T1BFTl9MSU5LX0lOX05FV19XSU5ET1c6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1U
YWdPcGVuTGlua0luTmV3V2luZG93KCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJU0s6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0
ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQ6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVu
dUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1c6CisgICAgICAgIHJldHVybiBjb250
ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpOworICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzoKKyAgICAgICAgcmV0dXJu
IGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKTsKKyAgICBjYXNlIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJEOgorICAgICAgICBy
ZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKTsKKyAgICBjYXNl
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRDoK
KyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJk
KCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0ZSQU1FX0lOX05F
V19XSU5ET1c6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5l
d1dpbmRvdygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSzoK
KyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpOworICAgIGNhc2UgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRDoKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fU1RPUDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKTsKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRDoKKyAgICAgICAgcmV0dXJu
IGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ09QWToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKTsK
KyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVDoKKyAgICAgICAgcmV0dXJu
IGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fUEFTVEU6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpOwor
ICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRFOgorICAgICAgICByZXR1
cm4gY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9TRUxFQ1RfQUxMOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFn
U2VsZWN0QWxsKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9N
RVRIT0RTOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzKCk7
CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklDT0RFOgorICAgICAgICBy
ZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZSgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRN
ZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JR05PUkVfU1BFTExJTkc6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
TEVBUk5fU1BFTExJTkc6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNw
ZWxsaW5nKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfR1JB
TU1BUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKTsK
KyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0ZPTlRfTUVOVToKKyAgICAgICAg
cmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCk7CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9CT0xEOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFn
Qm9sZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDOgorICAg
ICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCk7CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkU6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVu
dUl0ZW1UYWdVbmRlcmxpbmUoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X09VVExJTkU6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCk7Cisg
ICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQ6CisgICAg
ICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpOworICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lORE9XOgorICAg
ICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVvSW5OZXdXaW5kb3coKTsKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVESU9fSU5fTkVXX1dJTkRP
VzoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93
KCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktf
VE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVv
TGlua1RvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJ
dGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFM6CisgICAgICAgIHJldHVybiBjb250
ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCk7CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUDoKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTjoKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCk7CisgICAgY2FzZSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJ
dGVtVGFnTWVkaWFQbGF5KCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9N
RURJQV9QQVVTRToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGF1c2Uo
KTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEU6CisgICAg
ICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKTsKKyAgICBjYXNlIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTjoKKyAgICBjYXNlIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0JBU0VfQVBQTElDQVRJT046CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMDk5YTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oCkBAIC0wLDAg
KzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElP
TikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lmbmRlZiBXZWJLaXRDb250
ZXh0TWVudUFjdGlvbnNfaAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNfaAorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogV2ViS2l0Q29udGV4dE1lbnVBY3Rpb246CisgKiBAV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OOiBObyBhY3Rpb24sIHVzZWQgYnkgc2Vw
YXJhdG9yIG1lbnUgaXRlbXMuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9M
SU5LOiBPcGVuIGN1cnJlbnQgbGluay4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9P
UEVOX0xJTktfSU5fTkVXX1dJTkRPVzogT3BlbiBjdXJyZW50IGxpbmsgaW4gYSBuZXcgd2luZG93
LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSzog
RG93bmxvYWQgbGluayBkZXN0aW5hdGlvbi4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEOiBDb3B5IGxpbmsgbG9jYXRpb24gdG8gdGhlIGNsaXBi
b2FyZC4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19X
SU5ET1c6IE9wZW4gY3VycmVudCBpbWFnZSBpbiBhIG5ldyB3aW5kb3cuCisgKiBAV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzogRG93bmxvYWQgY3VycmVu
dCBpbWFnZS4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NM
SVBCT0FSRDogQ29weSBjdXJyZW50IGltYWdlIHRvIHRoZSBjbGlwYm9hcmQuCisgKiBAV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEOiBDb3B5IGN1
cmVudCBpbWFnZSBsb2NhdGlvbiB0byB0aGUgY2xpcGJvYXJkLgorICogQFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fRlJBTUVfSU5fTkVXX1dJTkRPVzogT3BlbiBjdXJyZW50IGZyYW1l
IGluIGEgbmV3IHdpbmRvdy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNL
OiBMb2FkIHRoZSBwcmV2aW91cyBoaXN0b3J5IGl0ZW0uCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fR09fRk9SV0FSRDogTG9hZCB0aGUgbmV4dCBoaXN0b3J5IGl0ZW0uCisgKiBAV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUDogU3RvcCBhbnkgb25nb2luZyBsb2FkaW5nIG9w
ZXJhdGlvbi4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQ6IFJlbG9hZCB0
aGUgY29uZW50cyBvZiBjdXJyZW50IHZpZXcuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQ09QWTogQ29weSBjdXJyZW50IHNlbGVjdGlvbiB0aGUgY2xpcGJvYXJkLgorICogQFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NVVDogQ3V0IGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBj
bGlwYm9hcmQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUEFTVEU6IFBhc3RlIGNs
aXBib2FyZCBjb250ZW50cy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEU6
IERlbGV0ZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9TRUxFQ1RfQUxMOiBTZWxlY3QgYWxsIHRleHQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fSU5QVVRfTUVUSE9EUzogSW5wdXQgbWV0aG9kcyBtZW51LgorICogQFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1VOSUNPREU6IFVuaWNvZGUgbWVudS4KKyAqIEBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVTUzogR3Vlc3Mgc3BlbGxpbmcuCisgKiBAV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORDogTm8gZ2Vzc2VzIGZvdW5kLgor
ICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9TUEVMTElORzogSWdub3JlIHNw
ZWxsaW5nLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0xFQVJOX1NQRUxMSU5HOiBM
ZWFybiBzcGVsbGluZy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfR1JB
TU1BUjogSWdub3JlIGdyYW1tYXIuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9O
VF9NRU5VOiBGb250IG1lbnUuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQk9MRDog
Qm9sZC4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM6IEl0YWxpYy4KKyAq
IEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkU6IFVuZGVybGluZS4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FOiBPdXRsaW5lLgorICogQFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVDogT3BlbiBjdXJyZW50IGVsZW1lbnQg
aW4gdGhlIGluc3BlY3Rvci4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJ
REVPX0lOX05FV19XSU5ET1c6IE9wZW4gY3VycmVudCB2aWRlbyBlbGVtZW50IGluIGEgbmV3IHdp
bmRvdy4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FVRElPX0lOX05FV19X
SU5ET1c6IE9wZW4gY3VycmVudCBhdWRpbyBlbGVtZW50IGluIGEgbmV3IHdpbmRvdy4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJEOiBD
b3B5IHZpZGVvIGxpbmsgbG9jYXRpb24gaW4gdG8gdGhlIGNsaXBib2FyZC4KKyAqIEBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJEOiBDb3B5IGF1
ZGlvIGxpbmsgbG9jYXRpb24gaW4gdG8gdGhlIGNsaXBib2FyZC4KKyAqIEBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFM6IEVuYWJsZSBvciBkaXNhYmxlIG1l
ZGlhIGNvbnRyb2xzLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJ
QV9MT09QOiBFbmFibGUgb3IgZGlzYWJsZSBtZWRpYSBsb29wLgorICogQFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU46IFNob3cgY3VycmVudCB2aWRlbyBl
bGVtZW50IGluIGZ1bGxzY3JlZW4gbW9kZS4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9NRURJQV9QTEFZOiBQbGF5IGN1cnJlbnQgbWVkaWEgZWxlbWVudC4KKyAqIEBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9NRURJQV9QQVVTRTogUGF1c2UgY3VycmVudCBtZWRpYSBlbGVtZW50
LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEU6IE11dGUgY3VycmVu
dCBtZWRpYSBlbGVtZW50LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JBU0VfQVBQ
TElDQVRJT046IEN1c3RvbSBhY3Rpb24gZGVmaW5lZCBieSBhcHBsaWNhdGlvbnMuCisgKgorICog
RW51bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHN0b2NrIGFjdGlvbnMgZm9yCisgKiAjV2Vi
S2l0Q29udGV4dE1lbnVJdGVtPCEtLSAtLT5zCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OID0gMCwKKworICAgIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX09QRU5fTElOSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9ET1dOTE9BRF9MSU5LX1RPX0RJU0ssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9MSU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9P
UEVOX0lNQUdFX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RE9XTkxPQURfSU1BR0VfVE9fRElTSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0JBQ0ssCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCwK
KyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLAorICAgIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1JFTE9BRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
LAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwKKyAgICBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9QQVNURSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxF
VEUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwKKyAgICBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTLAorICAgIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1VOSUNPREUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BF
TExJTkdfR1VFU1MsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19G
T1VORCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfU1BFTExJTkcsCisg
ICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTEVBUk5fU1BFTExJTkcsCisgICAgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX0dSQU1NQVIsCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRk9OVF9NRU5VLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JP
TEQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDLAorICAgIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX1VOREVSTElORSwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PVVRMSU5FLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxF
TUVOVCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVPX0lOX05FV19X
SU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9BVURJT19JTl9ORVdf
V0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfVklERU9fTElOS19U
T19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19M
SU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVf
TUVESUFfQ09OVFJPTFMsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01F
RElBX0xPT1AsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVM
TFNDUkVFTiwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZLAorICAg
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BBVVNFLAorICAgIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUsCisKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9CQVNFX0FQUExJQ0FUSU9OID0gMTAwMDAKK30gV2ViS2l0Q29udGV4dE1lbnVBY3Rpb247
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTNiYjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudUFjdGlvbnNQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51QWN0aW9uc1ByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQcml2YXRlX2gKKworI2luY2x1
ZGUgIldlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4
dE1lbnVJdGVtLmg+CisKK2Jvb2wgd2Via2l0Q29udGV4dE1lbnVBY3Rpb25Jc0NoZWNrYWJsZShX
ZWJLaXRDb250ZXh0TWVudUFjdGlvbik7CitXZWJDb3JlOjpDb250ZXh0TWVudUFjdGlvbiB3ZWJr
aXRDb250ZXh0TWVudUFjdGlvbkdldEFjdGlvblRhZyhXZWJLaXRDb250ZXh0TWVudUFjdGlvbik7
CitXZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEZvckNv
bnRleHRNZW51SXRlbShXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0qKTsKK1N0cmluZyB3ZWJraXRD
b250ZXh0TWVudUFjdGlvbkdldExhYmVsKFdlYktpdENvbnRleHRNZW51QWN0aW9uKTsKKworI2Vu
ZGlmIC8vIFdlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0ZW0uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2FmMmRjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJ
dGVtLmNwcApAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJ
dGVtLmgiCisKKyNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0
TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCisjaW5jbHVk
ZSAiV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENv
bnRleHRNZW51SXRlbVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudVByaXZh
dGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdHJ1Y3Qg
X1dlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUgeworICAgIE93blB0cjxDb250ZXh0TWVudUl0
ZW0+IG1lbnVJdGVtOworICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnU7Cit9
OworCitHX0RFRklORV9UWVBFKFdlYktpdENvbnRleHRNZW51SXRlbSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtLCBHX1RZUEVfSU5JVElBTExZX1VOT1dORUQpCisKK3N0YXRpYyB2b2lkIHdlYmtp
dENvbnRleHRNZW51SXRlbUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRf
Q09OVEVYVF9NRU5VX0lURU0ob2JqZWN0KS0+cHJpdi0+fldlYktpdENvbnRleHRNZW51SXRlbVBy
aXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2luaXQoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtKQoreworICAg
IFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUoaXRlbSwgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0sIFdlYktpdENvbnRl
eHRNZW51SXRlbVByaXZhdGUpOworICAgIGl0ZW0tPnByaXYgPSBwcml2OworICAgIG5ldyAocHJp
dikgV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fY2xhc3NfaW5pdChXZWJLaXRDb250ZXh0TWVudUl0ZW1DbGFz
cyogaXRlbUNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MoaXRlbUNsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRDb250ZXh0TWVudUl0ZW1GaW5hbGl6ZTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShpdGVtQ2xhc3MsIHNpemVvZihXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlKSk7Cit9CisK
K1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0Q29udGV4dE1lbnVJdGVtQ3JlYXRlKFdLQ29u
dGV4dE1lbnVJdGVtUmVmIHdrSXRlbSkKK3sKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0
ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NP
TlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7CisgICAgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSogaXRl
bURhdGEgPSB0b0ltcGwod2tJdGVtKS0+ZGF0YSgpOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVt
ID0gV1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKGl0ZW1EYXRhLT50eXBlKCksIGl0
ZW1EYXRhLT5hY3Rpb24oKSwgaXRlbURhdGEtPnRpdGxlKCksIGl0ZW1EYXRhLT5lbmFibGVkKCks
IGl0ZW1EYXRhLT5jaGVja2VkKCkpKTsKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJ
dGVtRGF0YT4mIHN1Yk1lbnUgPSBpdGVtRGF0YS0+c3VibWVudSgpOworICAgIGlmICghc3ViTWVu
dS5zaXplKCkpCisgICAgICAgIHJldHVybiBpdGVtOworCisgICAgUmVmUHRyPE11dGFibGVBcnJh
eT4gc3ViTWVudUl0ZW1zID0gTXV0YWJsZUFycmF5OjpjcmVhdGUoKTsKKyAgICBzdWJNZW51SXRl
bXMtPnJlc2VydmVDYXBhY2l0eShzdWJNZW51LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdWJNZW51LnNpemUoKTsgKytpKQorICAgICAgICBzdWJNZW51SXRlbXMtPmFwcGVu
ZChXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShzdWJNZW51W2ldKS5nZXQoKSk7CisgICAgaXRl
bS0+cHJpdi0+c3ViTWVudSA9IGFkb3B0R1JlZih3ZWJraXRDb250ZXh0TWVudUNyZWF0ZSh0b0FQ
SShzdWJNZW51SXRlbXMuZ2V0KCkpKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworc3RhdGlj
IFdlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0Q29udGV4dE1lbnVJdGVtQ3JlYXRlRm9yR3Rr
SXRlbShHdGtNZW51SXRlbSogbWVudUl0ZW0pCit7CisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVt
KiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9DT05URVhUX01FTlVfSVRFTSwgTlVMTCkpOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0g
V1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKG1lbnVJdGVtKSk7CisgICAgd2Via2l0
Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudShpdGVtLCBHVEtfTUVOVShndGtfbWVudV9pdGVtX2dl
dF9zdWJtZW51KG1lbnVJdGVtKSkpOworCisgICAgcmV0dXJuIGl0ZW07Cit9CisKK3ZvaWQgd2Vi
a2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudShXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0s
IEd0a01lbnUqIHN1Yk1lbnUpCit7CisgICAgaWYgKCFzdWJNZW51KQorICAgICAgICByZXR1cm47
CisKKyAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJl
bihHVEtfQ09OVEFJTkVSKHN1Yk1lbnUpKSk7CisgICAgaWYgKCFnX2xpc3RfbGVuZ3RoKGNoaWxk
cmVuLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXRlbS0+cHJpdi0+c3ViTWVudSA9
IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKKyAgICBmb3IgKEdMaXN0KiBs
aXN0SXRlbSA9IGNoaWxkcmVuLmdldCgpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBnX2xpc3RfbmV4
dChsaXN0SXRlbSkpIHsKKyAgICAgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IHdpZGdldCA9IEdUS19X
SURHRVQobGlzdEl0ZW0tPmRhdGEpOworICAgICAgICBpZiAoIUdUS19JU19NRU5VX0lURU0od2lk
Z2V0LmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGd0a19jb250YWlu
ZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoc3ViTWVudSksIHdpZGdldC5nZXQoKSk7CisgICAgICAg
IEd0a01lbnVJdGVtKiBtZW51SXRlbSA9IEdUS19NRU5VX0lURU0od2lkZ2V0LmxlYWtSZWYoKSk7
CisgICAgICAgIGdfb2JqZWN0X2ZvcmNlX2Zsb2F0aW5nKEdfT0JKRUNUKG1lbnVJdGVtKSk7Cisg
ICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGl0ZW0tPnByaXYtPnN1Yk1lbnUuZ2V0
KCksIHdlYmtpdENvbnRleHRNZW51SXRlbUNyZWF0ZUZvckd0a0l0ZW0obWVudUl0ZW0pKTsKKyAg
ICB9Cit9CisKK0d0a01lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1SZWxlYXNlKFdlYktp
dENvbnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAgICBpZiAoaXRlbS0+cHJpdi0+c3ViTWVudSkg
eworICAgICAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBzdWJNZW51SXRlbXM7CisgICAgICAg
IHdlYmtpdENvbnRleHRNZW51UG9wdWxhdGUoaXRlbS0+cHJpdi0+c3ViTWVudS5nZXQoKSwgc3Vi
TWVudUl0ZW1zKTsKKyAgICAgICAgQ29udGV4dE1lbnUgc3ViTWVudShwbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbihzdWJNZW51SXRlbXMpKTsKKyAgICAgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0tPnNl
dFN1Yk1lbnUoJnN1Yk1lbnUpOworICAgIH0KKworICAgIHJldHVybiBpdGVtLT5wcml2LT5tZW51
SXRlbS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKK30KKworLyoqCisgKiB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fbmV3OgorICogQGFjdGlvbjogYSAjR3RrQWN0aW9uCisgKgorICog
Q3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIGZvciB0aGUgZ2l2ZW4gQGFjdGlv
bi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0Q29udGV4dE1lbnVJ
dGVtIG9iamVjdC4KKyAqLworV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3KEd0a0FjdGlvbiogYWN0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEdUS19JU19BQ1RJT04oYWN0aW9uKSwgMCk7CisKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0
ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0g
PSBXVEY6OmFkb3B0UHRyKG5ldyBDb250ZXh0TWVudUl0ZW0oR1RLX01FTlVfSVRFTShndGtfYWN0
aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKSkpKTsKKyAgICBpdGVtLT5wcml2LT5tZW51SXRl
bS0+c2V0QWN0aW9uKENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZyk7CisKKyAgICBy
ZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zy
b21fc3RvY2s6CisgKiBAYWN0aW9uOiBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9jayBh
Y3Rpb24KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIHRo
ZSBnaXZlbiBzdG9jayBhY3Rpb24uCisgKiBTdG9jayBhY3Rpb25zIGFyZSBoYW5kbGVkIGF1dG9t
YXRpY2FsbHkgYnkgV2ViS2l0IHNvIHRoYXQsIGZvciBleGFtcGxlLAorICogd2hlbiBhIG1lbnUg
aXRlbSBjcmVhdGVkIHdpdGggYSAlV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCBpcwor
ICogYWN0aXZhdGVkIHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB3aWxsIGJlIGhhbmRsZWQgYnkgV2Vi
S2l0IGFuZCB0aGUgY3VycmVudAorICogbG9hZCBvcGVyYXRpb24gd2lsbCBiZSBzdG9wcGVkLiBZ
b3UgY2FuIGdldCB0aGUgI0d0a0FjdGlvbiBvZiBhCisgKiAjV2ViS2l0Q29udGV4dE1lbnVJdGVt
IGNyZWF0ZWQgd2l0aCBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3aXRoCisgKiB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbigpIGFuZCBjb25uZWN0IHRvICNHdGtBY3Rpb246
OmFjdGl2YXRlIHNpZ25hbAorICogdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgaXRlbSBpcyBhY3Rp
dmF0ZWQuIEJ1dCB5b3UgY2FuJ3QgcHJldmVudCB0aGUgYXNvY2lhdGVkCisgKiBhY3Rpb24gdG8g
YmUgcGVyZm9ybWVkLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXdseSBjcmVhdGVkICNXZWJLaXRD
b250ZXh0TWVudUl0ZW0gb2JqZWN0LgorICovCitXZWJLaXRDb250ZXh0TWVudUl0ZW0qIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9jayhXZWJLaXRDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0JBU0VfQVBQTElDQVRJT04sIDApOworCisgICAgV2ViS2l0Q29udGV4dE1lbnVJ
dGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9DT05URVhUX01FTlVfSVRFTSwgTlVMTCkpOworICAgIENvbnRleHRNZW51SXRlbVR5cGUg
dHlwZSA9IHdlYmtpdENvbnRleHRNZW51QWN0aW9uSXNDaGVja2FibGUoYWN0aW9uKSA/IENoZWNr
YWJsZUFjdGlvblR5cGUgOiBBY3Rpb25UeXBlOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0g
V1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1lbnVJdGVtKHR5cGUsIHdlYmtpdENvbnRleHRNZW51
QWN0aW9uR2V0QWN0aW9uVGFnKGFjdGlvbiksIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFi
ZWwoYWN0aW9uKSkpOworCisgICAgcmV0dXJuIGl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX3dpdGhfbGFiZWw6CisgKiBAYWN0aW9uOiBh
ICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9jayBhY3Rpb24KKyAqIEBsYWJlbDogYSBjdXN0
b20gbGFiZWwgdGV4dCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgcHJlZGVmaW5lZCBvbmUKKyAqCisg
KiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIHRoZSBnaXZlbiBzdG9j
ayBhY3Rpb24gdXNpbmcgdGhlIGdpdmVuIEBsYWJlbC4KKyAqIFN0b2NrIGFjdGlvbnMgaGF2ZSBh
IHByZWRlZmluZWQgbGFiZWwsIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhCisg
KiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIGZvciBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBi
dXQgdXNpbmcgYSBjdXN0b20gbGFiZWwuCisgKgorICogUmV0dXJuczogdGhlIG5ld2x5IGNyZWF0
ZWQgI1dlYktpdENvbnRleHRNZW51SXRlbSBvYmplY3QuCisgKi8KK1dlYktpdENvbnRleHRNZW51
SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX3dpdGhfbGFiZWwo
V2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBnY2hhciogbGFiZWwpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fTk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JBU0Vf
QVBQTElDQVRJT04sIDApOworCisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VC
S0lUX0NPTlRFWFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01F
TlVfSVRFTSwgTlVMTCkpOworICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSA9IHdlYmtpdENv
bnRleHRNZW51QWN0aW9uSXNDaGVja2FibGUoYWN0aW9uKSA/IENoZWNrYWJsZUFjdGlvblR5cGUg
OiBBY3Rpb25UeXBlOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihu
ZXcgQ29udGV4dE1lbnVJdGVtKHR5cGUsIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9u
VGFnKGFjdGlvbiksIFN0cmluZzo6ZnJvbVVURjgobGFiZWwpKSk7CisKKyAgICByZXR1cm4gaXRl
bTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVu
dToKKyAqIEBsYWJlbDogdGhlIG1lbnUgaXRlbSBsYWJlbCB0ZXh0CisgKiBAc3VibWVudTogYSAj
V2ViS2l0Q29udGV4dE1lbnUgdG8gc2V0CisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29u
dGV4dE1lbnVJdGVtIHVzaW5nIHRoZSBnaXZlbiBAbGFiZWwgd2l0aCBhIHN1Ym1lbnUuCisgKgor
ICogUmV0dXJuczogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51SXRlbSBvYmpl
Y3QuCisgKi8KK1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld193aXRoX3N1Ym1lbnUoY29uc3QgZ2NoYXIqIGxhYmVsLCBXZWJLaXRDb250ZXh0TWVudSog
c3VibWVudSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsYWJlbCwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShzdWJtZW51KSwgMCk7CisK
KyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lU
RU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7Cisg
ICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRyKG5ldyBDb250ZXh0TWVudUl0
ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZywgU3RyaW5n
Ojpmcm9tVVRGOChsYWJlbCkpKTsKKyAgICBpdGVtLT5wcml2LT5zdWJNZW51ID0gc3VibWVudTsK
KworICAgIHJldHVybiBpdGVtOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9uZXdfc2VwYXJhdG9yOgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdENvbnRleHRNZW51
SXRlbSByZXByZXNlbnRpbmcgYSBzZXBhcmF0b3IuCisgKgorICogUmV0dXJuczogdGhlIG5ld2x5
IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51SXRlbSBvYmplY3QuCisgKi8KK1dlYktpdENvbnRl
eHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3Iodm9pZCkK
K3sKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7
CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRyKG5ldyBDb250ZXh0TWVu
dUl0ZW0oU2VwYXJhdG9yVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIFN0cmluZygp
KSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X2FjdGlvbjoKKyAqIEBpdGVtOiBhICNXZWJLaXRDb250ZXh0TWVudUl0ZW0KKyAq
CisgKiBHZXRzIHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB0byBAaXRlbS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3RrQWN0aW9uIGFzc29jaWF0ZWQgdG8gdGhlICNXZWJL
aXRDb250ZXh0TWVudUl0ZW0sCisgKiAgICBvciAlTlVMTCBpZiBAaXRlbSBpcyBhIHNlcGFyYXRv
ci4KKyAqLworR3RrQWN0aW9uKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihX
ZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0pLCAwKTsKKworICAgIHJldHVybiBpdGVt
LT5wcml2LT5tZW51SXRlbS0+Z3RrQWN0aW9uKCk7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb246CisgKiBAaXRlbTogYSAjV2ViS2l0Q29udGV4
dE1lbnVJdGVtCisgKgorICogR2V0cyB0aGUgI1dlYktpdENvbnRleHRNZW51QWN0aW9uIG9mIEBp
dGVtLiBJZiB0aGUgI1dlYktpdENvbnRleHRNZW51SXRlbSB3YXMgbm90CisgKiBjcmVhdGVkIGZv
ciBhIHN0b2NrIGFjdGlvbiAlV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQkFTRV9BUFBMSUNB
VElPTiB3aWxsIGJlCisgKiByZXR1cm5lZC4gSWYgdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0g
aXMgYSBzZXBhcmF0b3IgJVdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTgorICog
d2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI1dlYktpdENvbnRleHRNZW51
QWN0aW9uIG9mIEBpdGVtCisgKi8KK1dlYktpdENvbnRleHRNZW51QWN0aW9uIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKFdlYktpdENvbnRleHRNZW51SXRlbSogaXRl
bSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lU
RU0oaXRlbSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7CisKKyAgICBy
ZXR1cm4gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0oaXRlbS0+
cHJpdi0+bWVudUl0ZW0uZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9pc19zZXBhcmF0b3I6CisgKiBAaXRlbTogYSAjV2ViS2l0Q29udGV4dE1lbnVJdGVtCisg
KgorICogQ2hlY2tzIHdoZXRoZXIgQGl0ZW0gaXMgYSBzZXBhcmF0b3IuCisgKgorICogUmV0dXJu
czogJVRSVUUgaXMgQGl0ZW0gaXMgYSBzZXBhcmF0b3Igb3IgJUZBTFNFIG90aGVyd2lzZQorICov
CitnYm9vbGVhbiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKFdlYktpdENv
bnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSksIEZBTFNFKTsKKworICAgIHJldHVybiBpdGVtLT5w
cml2LT5tZW51SXRlbS0+dHlwZSgpID09IFNlcGFyYXRvclR5cGU7Cit9CisKKy8qKgorICogd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51OgorICogQGl0ZW06IGEgI1dlYktpdENv
bnRleHRNZW51SXRlbQorICogQHN1Ym1lbnU6IChhbGxvdy1ub25lKTogYSAjV2ViS2l0Q29udGV4
dE1lbnUKKyAqCisgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBAaXRlbSBzdWJtZW51LiBJZiBAc3Vi
bWVudSBpcyAlTlVMTCB0aGUgY3VycmVudAorICogc3VibWVudSBvZiBAaXRlbSBpcyByZW1vdmVk
LgorICovCit2b2lkIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShXZWJLaXRD
b250ZXh0TWVudUl0ZW0qIGl0ZW0sIFdlYktpdENvbnRleHRNZW51KiBzdWJtZW51KQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0pKTsKKwor
ICAgIGl0ZW0tPnByaXYtPnN1Yk1lbnUgPSBzdWJtZW51OworfQorCisvKioKKyAqIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudToKKyAqIEBpdGVtOiBhICNXZWJLaXRDb250ZXh0
TWVudUl0ZW0KKyAqCisgKiBHZXRzIHRoZSBzdWJtZW51IG9mIEBpdGVtLgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRDb250ZXh0TWVudSByZXByZXNlbnRpbmcg
dGhlIHN1Ym1lbnUgb2YKKyAqICAgIEBpdGVtIG9yICVOVUxMIGlmIEBpdGVtIGRvZXNuJ3QgaGF2
ZSBhIHN1Ym1lbnUuCisgKi8KK1dlYktpdENvbnRleHRNZW51KiB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X3N1Ym1lbnUoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtKSwgMCk7
CisKKyAgICByZXR1cm4gaXRlbS0+cHJpdi0+c3ViTWVudS5nZXQoKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVt
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUl0
ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjYyNDE3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4
dE1lbnVJdGVtLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0Q29udGV4
dE1lbnVJdGVtX2gKKyNkZWZpbmUgV2ViS2l0Q29udGV4dE1lbnVJdGVtX2gKKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRD
b250ZXh0TWVudUFjdGlvbnMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX0NPTlRFWFRfTUVOVV9JVEVNICAgICAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0ob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQ09O
VEVYVF9NRU5VX0lURU0sIFdlYktpdENvbnRleHRNZW51SXRlbSkpCisjZGVmaW5lIFdFQktJVF9J
U19DT05URVhUX01FTlVfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSkpCisjZGVmaW5lIFdFQktJ
VF9DT05URVhUX01FTlVfSVRFTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgV2ViS2l0Q29udGV4
dE1lbnVJdGVtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU1fQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
Q09OVEVYVF9NRU5VX0lURU0pKQorI2RlZmluZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU1fR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZ
UEVfQ09OVEVYVF9NRU5VX0lURU0sIFdlYktpdENvbnRleHRNZW51SXRlbUNsYXNzKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51SXRlbUNsYXNzICAgV2ViS2l0Q29udGV4dE1l
bnVJdGVtQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0
ZSBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdENvbnRleHRN
ZW51SXRlbSB7CisgICAgR0luaXRpYWxseVVub3duZWQgcGFyZW50OworCisgICAgV2ViS2l0Q29u
dGV4dE1lbnVJdGVtUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Q29udGV4dE1l
bnVJdGVtQ2xhc3MgeworICAgIEdJbml0aWFsbHlVbm93bmVkQ2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF90eXBl
ICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdENvbnRleHRNZW51
SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3ICAgICAgICAgICAgICAgICAgICAg
ICAoR3RrQWN0aW9uICAgICAgICAgICAgICAqYWN0aW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXRD
b250ZXh0TWVudUl0ZW0gKgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2Nr
ICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbik7CisKK1dFQktJVF9B
UEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdf
ZnJvbV9zdG9ja193aXRoX2xhYmVsIChXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgICAgICAgICAgICAqbGFiZWwpOworCitXRUJLSVRfQVBJIFdlYktpdENvbnRleHRNZW51
SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSAgICAgICAg
ICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUgICAgICAqc3Vi
bWVudSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lU
X0FQSSBHdGtBY3Rpb24gKgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24gICAg
ICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51SXRlbSAgKml0ZW0pOworCitXRUJLSVRfQVBJ
IFdlYktpdENvbnRleHRNZW51QWN0aW9uCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0
b2NrX2FjdGlvbiAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnVJdGVtICAqaXRlbSk7CisKK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3Ig
ICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudUl0ZW0gICppdGVtKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUgICAgICAgICAgICAg
ICAoV2ViS2l0Q29udGV4dE1lbnVJdGVtICAqaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVudSAgICAgICpzdWJt
ZW51KTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudSAqCit3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X3N1Ym1lbnUgICAgICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnVJdGVt
ICAqaXRlbSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MmM4MTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250
ZXh0TWVudUl0ZW1Qcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlX2gKKworI2luY2x1ZGUgIldl
YktpdENvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2Vi
S2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVhdGUoV0tDb250ZXh0
TWVudUl0ZW1SZWYpOworR3RrTWVudUl0ZW0qIHdlYmtpdENvbnRleHRNZW51SXRlbVJlbGVhc2Uo
V2ViS2l0Q29udGV4dE1lbnVJdGVtKik7Cit2b2lkIHdlYmtpdENvbnRleHRNZW51SXRlbVNldFN1
Yk1lbnUoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiwgR3RrTWVudSopOworCisjZW5kaWYgLy8gV2Vi
S2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51UHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmMwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUu
aApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0Q29udGV4
dE1lbnVQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51LmgiCisjaW5jbHVk
ZSAiV2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRDb250ZXh0TWVudSogd2Via2l0Q29udGV4dE1l
bnVDcmVhdGUoV0tBcnJheVJlZiB3a0l0ZW1zKTsKK3ZvaWQgd2Via2l0Q29udGV4dE1lbnVQb3B1
bGF0ZShXZWJLaXRDb250ZXh0TWVudSosIFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0+
Jik7CisKKyNlbmRpZiAvLyBXZWJLaXRDb250ZXh0TWVudVByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCmluZGV4IDk2YmNiNGUu
LjczM2JmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERlZmluZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZWZpbmVzLmgKQEAgLTMyLDkgKzMyLDExIEBACiAKICNpbmNsdWRlIDxnbGliLmg+CiAKLXR5
cGVkZWYgc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlvbiBXZWJLaXRQcmludE9wZXJhdGlvbjsK
LXR5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciBXZWJLaXRGaW5kQ29udHJvbGxl
cjsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3ICAgICAgICBXZWJLaXRXZWJWaWV3Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uICBXZWJLaXRQcmludE9wZXJhdGlv
bjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciAgV2ViS2l0RmluZENvbnRy
b2xsZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyAgICAgICAgIFdlYktpdFdlYlZp
ZXc7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnUgICAgIFdlYktpdENvbnRleHRN
ZW51OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51SXRlbSBXZWJLaXRDb250ZXh0
TWVudUl0ZW07CiAKICNpZmRlZiBHX09TX1dJTjMyCiAjICAgIGlmZGVmIEJVSUxESU5HX1dFQktJ
VApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCA3ZjU3NjRlLi4xOTQxNjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjEsMTAgKzIxLDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogCisjaW5jbHVk
ZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbS5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJLaXRC
YWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RW51bVR5cGVz
LmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNsdWRlICJXZWJLaXRGdWxsc2NyZWVu
Q2xpZW50LmgiCkBAIC01MCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJh
Z0ljb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgpAQCAtODMsNiArODcsOCBAQCBlbnVtIHsKIAogICAg
IFJVTl9GSUxFX0NIT09TRVIsCiAKKyAgICBDT05URVhUX01FTlUsCisKICAgICBMQVNUX1NJR05B
TAogfTsKIApAQCAtOTMzLDYgKzkzOSw2MiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
Y2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKICAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLwogICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y29udGV4dC1tZW51OgorICAgICAqIEB3ZWJf
dmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqIEBjb250ZXh0X21lbnU6IHRoZSBwcm9wb3NlZCAjV2ViS2l0Q29udGV4dE1lbnUKKyAg
ICAgKiBAZXZlbnQ6IHRoZSAjR2RrRXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRleHQgbWVu
dQorICAgICAqIEBoaXRfdGVzdF9yZXN1bHQ6IGEgI1dlYktpdEhpdFRlc3RSZXN1bHQKKyAgICAg
KgorICAgICAqIEVtbWl0ZWQgd2hlbiBhIGNvbnRleHQgbWVudSBpcyBhYm91dCB0byBiZSBkaXNw
bGF5ZWQgdG8gZ2l2ZSB0aGUgYXBwbGljYXRpb24KKyAgICAgKiBhIGNoYW5jZSB0byBjdXN0b21p
emUgdGhlIHByb3Bvc2VkIG1lbnUsIHByZXZlbnQgdGhlIG1lbnUgZnJvbSBiZWluZyBkaXNwbGF5
ZWQKKyAgICAgKiBvciBidWlsZCBpdHMgb3duIGNvbnRleHQgbWVudS4KKyAgICAgKiA8aXRlbWl6
ZWRsaXN0PgorICAgICAqIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAgVG8gY3VzdG9taXplIHRo
ZSBwcm9wb3NlZCBtZW51IHlvdSBjYW4gdXNlIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZCgp
LAorICAgICAqICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZCgpIG9yIHdlYmtpdF9jb250ZXh0
X21lbnVfaW5zZXJ0KCkgdG8gYWRkIG5ldworICAgICAqICAjV2ViS2l0Q29udGV4dE1lbnVJdGVt
PCEtLSAtLT5zIHRvIEBjb250ZXh0X21lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVt
KCkKKyAgICAgKiAgdG8gcmVvcmRlciBleGlzdGluZyBpdGVtcywgb3Igd2Via2l0X2NvbnRleHRf
bWVudV9yZW1vdmUoKSB0byByZW1vdmUgYW4KKyAgICAgKiAgZXhpc3RpbmcgaXRlbS4gVGhlIHNp
Z25hbCBoYW5kbGVyIHNob3VsZCByZXR1cm4gJUZBTFNFLCBhbmQgdGhlIG1lbnUgcmVwcmVzZW50
ZWQKKyAgICAgKiAgYnkgQGNvbnRleHRfbWVudSB3aWxsIGJlIHNob3duLgorICAgICAqIDwvcGFy
YT48L2xpc3RpdGVtPgorICAgICAqIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAgVG8gcHJldmVu
dCB0aGUgbWVudSBmcm9tIGJlaW5nIGRpc3BsYXllZCB5b3UgY2FuIGp1c3QgY29ubmVjdCB0byB0
aGlzIHNpZ25hbAorICAgICAqICBhbmQgcmV0dXJuICVUUlVFIHNvIHRoYSB0aGUgcHJvcG9zZWQg
bWVudSB3aWxsIG5vdCBiZSBzaG93bi4KKyAgICAgKiA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAg
KiA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICogIFRvIGJ1aWxkIHlvdXIgb3duIG1lbnUsIHlvdSBj
YW4gcmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBwcm9wb3NlZCBtZW51IHdpdGgKKyAgICAgKiAg
d2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKCksIGFkZCB5b3VyIG93biBpdGVtcyBhbmQg
cmV0dXJuICVGQUxTRSBzbworICAgICAqICB0aGF0IHRoZSBtZW51IHdpbGwgYmUgc2hvd24uIFlv
dSBjYW4gYWxzbyBpZ25vcmUgdGhlIHByb3Bvc2VkICNXZWJLaXRDb250ZXh0TWVudSwKKyAgICAg
KiAgYnVpbGQgeW91ciBvd24gI0d0a01lbnUgYW5kIHJldHVybiAlVFJVRSB0byBwcmV2ZW50IHRo
ZSBwcm9wb3NlZCBtZW51IHRvIGJlIHNob3duLgorICAgICAqIDwvcGFyYT48L2xpc3RpdGVtPgor
ICAgICAqIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAgSWYgeW91IGp1c3Qgd2FudCB0aGUgZGVm
YXVsdCBtZW51IHRvIGJlIHNob3duIGFsd2F5cywgc2ltcGx5IGRvbid0IGNvbm5lY3QgdG8gdGhp
cworICAgICAqICBzaWduYWwgYmVjYXVzZSBzaG93aW5nIHRoZSBwcm9wb3NlZCBjb250ZXh0IG1l
bnUgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorICAgICAqIDwvcGFyYT48L2xpc3RpdGVtPgor
ICAgICAqIDwvaXRlbWl6ZWRsaXN0PgorICAgICAqCisgICAgICogSWYgdGhlIHNpZ25hbCBoYW5k
bGVyIHJldHVybnMgJUZBTFNFIHRoZSBjb250ZXh0IG1lbnUgcmVwcmVzZW50ZWQgYnkgQGNvbnRl
eHRfbWVudQorICAgICAqIHdpbGwgYmUgc2hvd24sIGlmIGl0IHJldHVybiAlVFJVRSB0aGUgY29u
dGV4dCBtZW51IHdpbGwgbm90IGJlIHNob3duLgorICAgICAqCisgICAgICogVGhlIHByb3Bvc2Vk
ICNXZWJLaXRDb250ZXh0TWVudSBwYXNzZWQgaW4gQGNvbnRleHRfbWVudSBhcmd1bWVudCBpcyBv
bmx5IHZhbGlkCisgICAgICogZHVyaW5nIHRoZSBzaWduYWwgZW1pc3Npb24uCisgICAgICoKKyAg
ICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52
b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2
ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tDT05URVhUX01FTlVdID0KKyAgICAg
ICAgZ19zaWduYWxfbmV3KCJjb250ZXh0LW1lbnUiLAorICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lH
TkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktp
dFdlYlZpZXdDbGFzcywgY29udGV4dF9tZW51KSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2ln
bmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIHdl
YmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9CT1hFRF9PQkpFQ1QsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX0NPTlRFWFRfTUVOVSwKKyAgICAgICAgICAgICAgICAgICAgIEdES19UWVBFX0VWRU5UIHwg
R19TSUdOQUxfVFlQRV9TVEFUSUNfU0NPUEUsCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
VFlQRV9ISVRfVEVTVF9SRVNVTFQpOwogfQogCiBzdGF0aWMgYm9vbCB1cGRhdGVSZXBsYWNlQ29u
dGVudFN0YXR1cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2
ZW50KQpAQCAtMTE3MiwxNCArMTIzNCw2IEBAIHZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9v
c2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlCiAgICAg
Z19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1
ZXN0LCAmcmV0dXJuVmFsdWUpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRl
QW5kQXBwZW5kRGVmYXVsdE1lbnVJdGVtcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0FycmF5
UmVmIHdrUHJvcG9zZWRNZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgY29udGV4dE1lbnVJ
dGVtcykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKHdrUHJv
cG9zZWRNZW51KTsgKytpKSB7Ci0gICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIHdrSXRlbSA9
IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgo
d2tQcm9wb3NlZE1lbnUsIGkpKTsKLSAgICAgICAgY29udGV4dE1lbnVJdGVtcy5hcHBlbmQodG9J
bXBsKHdrSXRlbSktPmRhdGEoKS0+Y29yZSgpKTsKLSAgICB9Ci19Ci0KIHN0YXRpYyBib29sIHdl
YmtpdFdlYlZpZXdTaG91bGRTaG93SW5wdXRNZXRob2RzTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogewogICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRp
bmdzKEdUS19XSURHRVQod2ViVmlldykpOwpAQCAtMTE5MSwzMyArMTI0NSw2OCBAQCBzdGF0aWMg
Ym9vbCB3ZWJraXRXZWJWaWV3U2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKICAgICByZXR1cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKIH0KIAotc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZElucHV0TWV0aG9kc01lbnVJdGVtKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBjb250ZXh0TWVu
dUl0ZW1zKQorc3RhdGljIGludCBnZXRVbmljb2RlTWVudUl0ZW1Qb3NpdGlvbihXZWJLaXRDb250
ZXh0TWVudSogY29udGV4dE1lbnUpCit7CisgICAgR0xpc3QqIGl0ZW1zID0gd2Via2l0X2NvbnRl
eHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworICAgIGludCB1bmljb2RlTWVudUl0ZW1Q
b3NpdGlvbiA9IC0xOworICAgIEdMaXN0KiBpdGVyOworICAgIGludCBpID0gMDsKKyAgICBmb3Ig
KGl0ZXIgPSBpdGVtcywgaSA9IDA7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSwgKytp
KSB7CisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhU
X01FTlVfSVRFTShpdGVyLT5kYXRhKTsKKworICAgICAgICBpZiAod2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSkgPT0g
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSkgeworICAgICAgICAgICAgdW5pY29k
ZU1lbnVJdGVtUG9zaXRpb24gPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHVuaWNvZGVNZW51SXRlbVBvc2l0aW9uOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kSW5wdXRNZXRob2RzTWVudUl0ZW0oV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51KQogewogICAg
IGlmICghd2Via2l0V2ViVmlld1Nob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KHdlYlZpZXcpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAvLyBQbGFjZSB0aGUgaW0gY29udGV4dCBtZW51IGl0ZW0g
cmlnaHQgYmVmb3JlIHRoZSB1bmljb2RlIG1lbnUgaXRlbQorICAgIC8vIGlmIGl0J3MgcHJlc2Vu
dC4KKyAgICBpbnQgdW5pY29kZU1lbnVJdGVtUG9zaXRpb24gPSBnZXRVbmljb2RlTWVudUl0ZW1Q
b3NpdGlvbihjb250ZXh0TWVudSk7CisgICAgaWYgKHVuaWNvZGVNZW51SXRlbVBvc2l0aW9uID09
IC0xKQorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKICAgICBHdGtJTUNvbnRl
eHQqIGltQ29udGV4dCA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0SU1Db250ZXh0KFdFQktJVF9XRUJf
VklFV19CQVNFKHdlYlZpZXcpKTsKICAgICBHdGtNZW51KiBpbUNvbnRleHRNZW51ID0gR1RLX01F
TlUoZ3RrX21lbnVfbmV3KCkpOwogICAgIGd0a19pbV9tdWx0aWNvbnRleHRfYXBwZW5kX21lbnVp
dGVtcyhHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCksIEdUS19NRU5VX1NIRUxMKGltQ29u
dGV4dE1lbnUpKTsKLSAgICBDb250ZXh0TWVudSBzdWJNZW51KGltQ29udGV4dE1lbnUpOwotCi0g
ICAgQ29udGV4dE1lbnVJdGVtIHNlcGFyYXRvcihTZXBhcmF0b3JUeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotICAgIGNvbnRleHRNZW51SXRlbXMuYXBwZW5kKHNl
cGFyYXRvcik7Ci0gICAgQ29udGV4dE1lbnVJdGVtIG1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgXygiSW5wdXQgX01ldGhvZHMiKSwgJnN1Yk1lbnUpOwot
ICAgIGNvbnRleHRNZW51SXRlbXMuYXBwZW5kKG1lbnVJdGVtKTsKKyAgICBXZWJLaXRDb250ZXh0
TWVudUl0ZW0qIG1lbnVJdGVtID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0
b2NrKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMpOworICAgIHdlYmtp
dENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnUobWVudUl0ZW0sIGltQ29udGV4dE1lbnUpOworICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCBtZW51SXRlbSwgdW5pY29k
ZU1lbnVJdGVtUG9zaXRpb24pOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdQb3B1bGF0ZUNvbnRl
eHRNZW51KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLQXJyYXlSZWYgd2tQcm9wb3NlZE1lbnUs
IFdLSGl0VGVzdFJlc3VsdFJlZiB3a0hpdFRlc3RSZXN1bHQpCiB7Ci0gICAgV2ViQ29udGV4dE1l
bnVQcm94eUd0ayogY29udGV4dE1lbnUgPSB3ZWJraXRXZWJWaWV3QmFzZUdldEFjdGl2ZUNvbnRl
eHRNZW51UHJveHkoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpOwor
ICAgIFdlYkNvbnRleHRNZW51UHJveHlHdGsqIGNvbnRleHRNZW51UHJveHkgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldEFjdGl2ZUNvbnRleHRNZW51UHJveHkod2ViVmlld0Jhc2UpOwogICAgIEFTU0VS
VChjb250ZXh0TWVudSk7CiAKLSAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiBjb250ZXh0TWVu
dUl0ZW1zOwotICAgIHdlYmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmREZWZhdWx0TWVudUl0ZW1z
KHdlYlZpZXcsIHdrUHJvcG9zZWRNZW51LCBjb250ZXh0TWVudUl0ZW1zKTsKKyAgICBHUmVmUHRy
PFdlYktpdENvbnRleHRNZW51PiBjb250ZXh0TWVudSA9IGFkb3B0R1JlZih3ZWJraXRDb250ZXh0
TWVudUNyZWF0ZSh3a1Byb3Bvc2VkTWVudSkpOwogICAgIGlmIChXS0hpdFRlc3RSZXN1bHRJc0Nv
bnRlbnRFZGl0YWJsZSh3a0hpdFRlc3RSZXN1bHQpKQotICAgICAgICB3ZWJraXRXZWJWaWV3Q3Jl
YXRlQW5kQXBwZW5kSW5wdXRNZXRob2RzTWVudUl0ZW0od2ViVmlldywgY29udGV4dE1lbnVJdGVt
cyk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51
SXRlbSh3ZWJWaWV3LCBjb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdEhp
dFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBhZG9wdEdSZWYod2Via2l0SGl0VGVzdFJlc3Vs
dENyZWF0ZSh3a0hpdFRlc3RSZXN1bHQpKTsKKyAgICBHT3duUHRyPEdka0V2ZW50PiBjb250ZXh0
TWVudUV2ZW50KHdlYmtpdFdlYlZpZXdCYXNlVGFrZUNvbnRleHRNZW51RXZlbnQod2ViVmlld0Jh
c2UpKTsKKworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQod2Vi
Vmlldywgc2lnbmFsc1tDT05URVhUX01FTlVdLCAwLCBjb250ZXh0TWVudS5nZXQoKSwgY29udGV4
dE1lbnVFdmVudC5nZXQoKSwgaGl0VGVzdFJlc3VsdC5nZXQoKSwgJnJldHVyblZhbHVlKTsKKyAg
ICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxDb250ZXh0
TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbXM7CisgICAgd2Via2l0Q29udGV4dE1lbnVQb3B1bGF0
ZShjb250ZXh0TWVudS5nZXQoKSwgY29udGV4dE1lbnVJdGVtcyk7CisgICAgY29udGV4dE1lbnVQ
cm94eS0+cG9wdWxhdGUoY29udGV4dE1lbnVJdGVtcyk7CiAKLSAgICBjb250ZXh0TWVudS0+cG9w
dWxhdGUoY29udGV4dE1lbnVJdGVtcyk7CisgICAgLy8gQ2xlYXIgdGhlIG1lbnUgdG8gbWFrZSBz
dXJlIGl0J3MgdXNlbGVzcyBhZnRlciBzaWduYWwgZW1pc3Npb24uCisgICAgd2Via2l0X2NvbnRl
eHRfbWVudV9yZW1vdmVfYWxsKGNvbnRleHRNZW51LmdldCgpKTsKIH0KIAogLyoqCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggNzE2
ZmJiZC4uNDI2Y2Y5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaApAQCAtMTU4LDYgKzE1OCwxMCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKiBsZWF2ZV9mdWxsc2NyZWVuKSAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAgICAgZ2Jvb2xlYW4gICAoKiBydW5f
ZmlsZV9jaG9vc2VyKSAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCAgKnJlcXVlc3QpOworICAgIGdib29sZWFuICAgKCogY29udGV4dF9tZW51KSAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRNZW51ICAgICAgICAg
ICpjb250ZXh0X21lbnUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdka0V2ZW50ICAgICAgICAgICAgICAgICAgICpldmVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCAgICAgICAgKmhpdF90ZXN0
X3Jlc3VsdCk7CiAKICAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCiAgICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggYTJjYzFk
OS4uYjdmZmM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRGF0YU9iamVjdEd0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3Rr
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtDbGlja0NvdW50ZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0d0a0RyYWdBbmREcm9wSGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRp
ZXMuaD4KQEAgLTk0LDYgKzk1LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUg
ewogI2VuZGlmCiAgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3OwogICAgIHVuc2lnbmVkIGlu
c3BlY3RvclZpZXdIZWlnaHQ7CisgICAgR093blB0cjxHZGtFdmVudD4gY29udGV4dE1lbnVFdmVu
dDsKICAgICBXZWJDb250ZXh0TWVudVByb3h5R3RrKiBhY3RpdmVDb250ZXh0TWVudVByb3h5Owog
fTsKIApAQCAtNDQ4LDYgKzQ1MCwxMCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dAogCiAgICAg
aWYgKCFwcml2LT5jbGlja0NvdW50ZXIuc2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KGJ1dHRvbkV2
ZW50KSkKICAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICAvLyBJZiBpdCdzIGEgcmlnaHQgY2xp
Y2sgZXZlbnQgc2F2ZSBpdCBhcyBhIHBvc3NpYmxlIGNvbnRleHQgbWVudSBldmVudC4KKyAgICBp
ZiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAgICBwcml2LT5jb250ZXh0TWVudUV2
ZW50LnNldChnZGtfZXZlbnRfY29weShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oYnV0dG9u
RXZlbnQpKSk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdl
Yk1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
Y2xpY2tDb3VudGVyLmNsaWNrQ291bnRGb3JHZGtCdXR0b25FdmVudCh3aWRnZXQsIGJ1dHRvbkV2
ZW50KSkpOwogICAgIHJldHVybiBUUlVFOwpAQCAtNzg0LDMgKzc5MCw4IEBAIFdlYkNvbnRleHRN
ZW51UHJveHlHdGsqIHdlYmtpdFdlYlZpZXdCYXNlR2V0QWN0aXZlQ29udGV4dE1lbnVQcm94eShX
ZWJLaXRXZWJWaWV3CiB7CiAgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY3Rp
dmVDb250ZXh0TWVudVByb3h5OwogfQorCitHZGtFdmVudCogd2Via2l0V2ViVmlld0Jhc2VUYWtl
Q29udGV4dE1lbnVFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCit7
CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5jb250ZXh0TWVudUV2ZW50LnJl
bGVhc2UoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggNDVmZmJmMi4uNzBjYzcyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTQ5LDUgKzQ5LDYgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUluaXRpYWxpemVGdWxsU2NyZWVuQ2xpZW50KFdlYktpdFdlYlZpZXdCYXNlKiwgY29u
c3QgV0tGdWwKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3SGVpZ2h0KFdl
YktpdFdlYlZpZXdCYXNlKiwgdW5zaWduZWQgaGVpZ2h0KTsKIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VTZXRBY3RpdmVDb250ZXh0TWVudVByb3h5KFdlYktpdFdlYlZpZXdCYXNlKiwgV2ViQ29udGV4
dE1lbnVQcm94eUd0ayopOwogV2ViQ29udGV4dE1lbnVQcm94eUd0ayogd2Via2l0V2ViVmlld0Jh
c2VHZXRBY3RpdmVDb250ZXh0TWVudVByb3h5KFdlYktpdFdlYlZpZXdCYXNlKik7CitHZGtFdmVu
dCogd2Via2l0V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1lbnVFdmVudChXZWJLaXRXZWJWaWV3QmFz
ZSopOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNn
bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9j
cy5zZ21sCmluZGV4IGMyZWViZjMuLjZiNjJkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAt
MzcsNiArMzcsOCBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJJbnNwZWN0
b3IueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFVSSVNjaGVtZVJlcXVl
c3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFZlcnNpb24ueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvbnRleHRNZW51LnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRDb250ZXh0TWVudUl0ZW0ueG1sIi8+CiAgIDwv
Y2hhcHRlcj4KIAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25z
LnR4dAppbmRleCAxYjk3ZGU4Li4yNzE4YzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQK
QEAgLTc0NCwzICs3NDQsNjMgQEAgV0VCS0lUX01JTk9SX1ZFUlNJT04KIFdFQktJVF9NSUNST19W
RVJTSU9OCiBXRUJLSVRfQ0hFQ0tfVkVSU0lPTgogPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdENvbnRleHRNZW51PC9GSUxFPgorV2ViS2l0Q29udGV4dE1lbnUKK3dlYmtpdF9j
b250ZXh0X21lbnVfbmV3Cit3ZWJraXRfY29udGV4dF9tZW51X3dpdGhfaXRlbXMKK3dlYmtpdF9j
b250ZXh0X21lbnVfcHJlcGVuZAord2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQKK3dlYmtpdF9j
b250ZXh0X21lbnVfaW5zZXJ0Cit3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbQord2Via2l0
X2NvbnRleHRfbWVudV9nZXRfaXRlbXMKK3dlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMK
K3dlYmtpdF9jb250ZXh0X21lbnVfZmlyc3QKK3dlYmtpdF9jb250ZXh0X21lbnVfbGFzdAord2Vi
a2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbV9hdF9wb3NpdGlvbgord2Via2l0X2NvbnRleHRfbWVu
dV9yZW1vdmUKK3dlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbAorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdENvbnRleHRNZW51Q2xhc3MKK1dFQktJVF9UWVBFX0NPTlRFWFRfTUVO
VQorV0VCS0lUX0NPTlRFWFRfTUVOVQorV0VCS0lUX0lTX0NPTlRFWFRfTUVOVQorV0VCS0lUX0NP
TlRFWFRfTUVOVV9DTEFTUworV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9DTEFTUworV0VCS0lUX0NP
TlRFWFRfTUVOVV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdENvbnRl
eHRNZW51UHJpdmF0ZQord2Via2l0X2NvbnRleHRfbWVudV9nZXRfdHlwZQorPC9TRUNUSU9OPgor
Cis8U0VDVElPTj4KKzxGSUxFPldlYktpdENvbnRleHRNZW51SXRlbTwvRklMRT4KK1dlYktpdENv
bnRleHRNZW51SXRlbQorV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24KK3dlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9uZXcKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9jaword2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX3dpdGhfbGFiZWwKK3dlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9uZXdfd2l0aF9zdWJtZW51Cit3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fbmV3X3NlcGFyYXRvcgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24KK3dl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uCit3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1faXNfc2VwYXJhdG9yCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1l
bnUKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudQorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdENvbnRleHRNZW51SXRlbUNsYXNzCitXRUJLSVRfVFlQRV9DT05URVhU
X01FTlVfSVRFTQorV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNCitXRUJLSVRfSVNfQ09OVEVYVF9N
RU5VX0lURU0KK1dFQktJVF9DT05URVhUX01FTlVfSVRFTV9DTEFTUworV0VCS0lUX0lTX0NPTlRF
WFRfTUVOVV9JVEVNX0NMQVNTCitXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU1fR0VUX0NMQVNTCisK
KzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlCit3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3R5cGUKKzwvU0VDVElPTj4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwppbmRl
eCBkMTU1OTgyLi40ZDg4NDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBAIC0xOSwzICsxOSw1IEBAIHdlYmtp
dF9wbHVnaW5fZ2V0X3R5cGUKIHdlYmtpdF9taW1lX2luZm9fZ2V0X3R5cGUKIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2dldF90eXBlCiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlCit3
ZWJraXRfY29udGV4dF9tZW51X2dldF90eXBlCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0
X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW0KaW5kZXggN2FkYWU4YS4uMDU4YTYxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTIs
NiArMiw3IEBAIGlmIEVOQUJMRV9XRUJLSVQyCiAKIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1z
L1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwKKwlQcm9ncmFtcy9XZWJLaXQy
QVBJVGVzdHMvVGVzdENvbnRleHRNZW51IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVz
dENvb2tpZU1hbmFnZXIgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRz
IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEluc3BlY3RvciBcCkBAIC0xNjcsNCAr
MTY4LDEwIEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0VmVyc2lvbl9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0V2ViS2l0VmVyc2lvbl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dy
YW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0VmVyc2lvbl9MREZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0Q29udGV4dE1l
bnVfU09VUkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdENvbnRleHRNZW51LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RD
b250ZXh0TWVudV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1dlYktpdDJBUElUZXN0c19UZXN0Q29udGV4dE1lbnVfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNf
bGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0xERkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKwogZW5kaWYgIyBFTkFCTEVfV0VCS0lUMgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvbnRl
eHRNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RD
b250ZXh0TWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNWZi
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RDb250ZXh0TWVudS5jcHAKQEAgLTAsMCArMSw2MTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3Mg
Q29udGV4dE1lbnVUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIGVudW0g
Q29udGV4dE1lbnVJdGVtU3RhdGVGbGFncyB7CisgICAgICAgIFZpc2libGUgPSAxIDw8IDAsCisg
ICAgICAgIEVuYWJsZWQgPSAxIDw8IDEsCisgICAgICAgIENoZWNrZWQgPSAxIDw8IDIKKyAgICB9
OworCisgICAgdm9pZCBjaGVja0NvbnRleHRNZW51RXZlbnQoR2RrRXZlbnQqIGV2ZW50KQorICAg
IHsKKyAgICAgICAgZ19hc3NlcnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnQtPnR5cGUsID09LCBHREtfQlVUVE9OX1BSRVNTKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50LT5idXR0b24uYnV0dG9uLCA9PSwgMyk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudC0+YnV0dG9uLngsID09LCBtX21lbnVQb3NpdGlvblgpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnQtPmJ1dHRvbi55LCA9PSwgbV9tZW51UG9zaXRpb25ZKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gdmlld0NvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCogZXZlbnQs
IFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIENvbnRleHRNZW51VGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUoY29udGV4
dE1lbnUpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChjb250ZXh0TWVudSkpOworICAgICAgICB0ZXN0LT5jaGVja0NvbnRleHRN
ZW51RXZlbnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVT
VUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7CisKKyAgICAgICAgcmV0
dXJuIHRlc3QtPmNvbnRleHRNZW51KGNvbnRleHRNZW51LCBldmVudCwgaGl0VGVzdFJlc3VsdCk7
CisgICAgfQorCisgICAgQ29udGV4dE1lbnVUZXN0KCkKKyAgICAgICAgOiBtX21lbnVQb3NpdGlv
blgoMCkKKyAgICAgICAgLCBtX21lbnVQb3NpdGlvblkoMCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyh2aWV3Q29u
dGV4dE1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5Db250ZXh0TWVudVRlc3Qo
KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1f
d2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiwgR2RrRXZl
bnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikgPSAwOworCisgICAgYm9vbCBzaG91bGRTaG93SW5w
dXRNZXRob2RzTWVudSgpCisgICAgeworICAgICAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBn
dGtfd2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAgICBp
ZiAoIXNldHRpbmdzKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZ2Jvb2xl
YW4gc2hvd0lucHV0TWV0aG9kTWVudTsKKyAgICAgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAi
Z3RrLXNob3ctaW5wdXQtbWV0aG9kLW1lbnUiLCAmc2hvd0lucHV0TWV0aG9kTWVudSwgTlVMTCk7
CisgICAgICAgIHJldHVybiBzaG93SW5wdXRNZXRob2RNZW51OworICAgIH0KKworICAgIHZvaWQg
Y2hlY2tBY3Rpb25TdGF0ZShHdGtBY3Rpb24qIGFjdGlvbiwgdW5zaWduZWQgc3RhdGUpCisgICAg
eworICAgICAgICBpZiAoc3RhdGUgJiBWaXNpYmxlKQorICAgICAgICAgICAgZ19hc3NlcnQoZ3Rr
X2FjdGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Z19hc3NlcnQoIWd0a19hY3Rpb25fZ2V0X3Zpc2libGUoYWN0aW9uKSk7CisKKyAgICAgICAgaWYg
KHN0YXRlICYgRW5hYmxlZCkKKyAgICAgICAgICAgIGdfYXNzZXJ0KGd0a19hY3Rpb25fZ2V0X3Nl
bnNpdGl2ZShhY3Rpb24pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19hc3NlcnQoIWd0
a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pKTsKKworICAgICAgICBpZiAoR1RLX0lTX1RP
R0dMRV9BQ1RJT04oYWN0aW9uKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlICYgQ2hlY2tlZCkK
KyAgICAgICAgICAgICAgICBnX2Fzc2VydChndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdU
S19UT0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBnX2Fzc2VydCghZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FD
VElPTihhY3Rpb24pKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb24gc3RvY2tBY3Rpb24sIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
X0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0
ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOworICAgICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKKworICAg
ICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0
aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOworCisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0b2Nr
X2FjdGlvbihpdGVtKSwgPT0sIHN0b2NrQWN0aW9uKTsKKworICAgICAgICBjaGVja0FjdGlvblN0
YXRlKGFjdGlvbiwgc3RhdGUpOworCisgICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7
CisgICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdl
dE5leHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJlbCwgdW5zaWduZWQgc3RhdGUpCisg
ICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAgICAgIFdlYktpdENvbnRl
eHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7
CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
aXRlbSkpOworCisgICAgICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04o
YWN0aW9uKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQkFTRV9BUFBMSUNBVElPTik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9u
X2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOworCisgICAgICAgIGNoZWNrQWN0aW9uU3Rh
dGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsK
KyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU3ViTWVudUFuZEdldE5leHQo
R0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJlbCwgdW5zaWduZWQgc3RhdGUsIEdMaXN0Kiog
c3ViTWVudUl0ZXIpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAg
ICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRF
TShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAgICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0
KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGd0a19h
Y3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBsYWJlbCk7CisgICAgICAgIGNoZWNrQWN0aW9u
U3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUqIHN1Yk1l
bnUgPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbSk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUoc3ViTWVudSkpOworICAgICAgICBpZiAo
c3ViTWVudUl0ZXIpCisgICAgICAgICAgICAqc3ViTWVudUl0ZXIgPSB3ZWJraXRfY29udGV4dF9t
ZW51X2dldF9pdGVtcyhzdWJNZW51KTsKKworICAgICAgICByZXR1cm4gZ19saXN0X25leHQoaXRl
bXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRH
ZXROZXh0KEdMaXN0KiBpdGVtcykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7
CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRf
TUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9u
ZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICB2b2lkIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25B
bmRXYWl0VW50aWxGaW5pc2goaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgbV9tZW51UG9z
aXRpb25YID0geDsKKyAgICAgICAgbV9tZW51UG9zaXRpb25ZID0geTsKKyAgICAgICAgY2xpY2tN
b3VzZUJ1dHRvbih4LCB5LCAzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoKCkK
KyAgICB7CisgICAgICAgIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5p
c2goMCwgMCk7CisgICAgfQorCisgICAgZG91YmxlIG1fbWVudVBvc2l0aW9uWDsKKyAgICBkb3Vi
bGUgbV9tZW51UG9zaXRpb25ZOworfTsKKworY2xhc3MgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDog
cHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShDb250ZXh0TWVudURlZmF1bHRUZXN0KTsKKworICAgIGVudW0gRGVmYXVsdE1lbnVUeXBl
IHsKKyAgICAgICAgTmF2aWdhdGlvbiwKKyAgICAgICAgTGluaywKKyAgICAgICAgSW1hZ2UsCisg
ICAgICAgIExpbmtJbWFnZSwKKyAgICAgICAgVmlkZW8sCisgICAgICAgIEVkaXRhYmxlCisgICAg
fTsKKworICAgIENvbnRleHRNZW51RGVmYXVsdFRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRN
ZW51VHlwZShOYXZpZ2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51
KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRI
aXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgR0xpc3QqIGl0ZXIg
PSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7CisKKyAgICAgICAg
c3dpdGNoIChtX2V4cGVjdGVkTWVudVR5cGUpIHsKKyAgICAgICAgY2FzZSBOYXZpZ2F0aW9uOgor
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fUkVMT0FELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMaW5rOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVz
dWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lO
X05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7Cisg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQs
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElt
YWdlOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1B
R0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQ
Qk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExpbmtJbWFnZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7
CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19X
SU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2li
bGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBh
cmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJs
ZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lN
QUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpZGVvOgorICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9NRURJQV9QTEFZLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUsIFZpc2libGUpOworICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBFbmFi
bGVkIHwgQ2hlY2tlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dM
RV9NRURJQV9MT09QLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU4sIFZpc2libGUpOworICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Cisg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQ
Qk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFZGl0YWJsZToKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgICAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VU
LCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSwgVmlz
aWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1BBU1RFLCBWaXNpYmxl
IHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURSwg
VmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9y
QW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VM
RUNUX0FMTCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaWYgKHNob3VsZFNob3dJ
bnB1dE1ldGhvZHNNZW51KCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSkpIHsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQsIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBEZWZhdWx0TWVudVR5cGUgbV9leHBlY3RlZE1lbnVUeXBlOworfTsKKworc3RhdGlj
IHZvaWQgdGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUoQ29udGV4dE1lbnVEZWZhdWx0VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKKworICAgIGNvbnN0IGNoYXIqIGxpbmtzSFRNTCA9CisgICAgICAgICI8aHRt
bD48Ym9keT4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7
IHRvcDoxJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsr
IFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01
IGhlaWdodD01PjwvaW1nPiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MTsgdG9wOjIwJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0
bGU9J1dlYktpdEdUSysgTG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0
PTU+PC9pbWc+PC9hPiIKKyAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjE7IHRvcDozMCcgd2lkdGg9MTAgaGVpZ2h0PTEwIGNvbnRyb2xzPSdjb250cm9scyc+
PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgorICAg
ICAgICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwJyBz
aXplPScxMCc+PC9pbnB1dD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+
bG9hZEh0bWwobGlua3NIVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIC8vIENvbnRleHQgbWVudSBmb3IgZG9jdW1lbnQuCisgICAgdGVz
dC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TmF2aWdhdGlv
bjsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNo
KDAsIDApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBsaW5rLgorICAgIHRlc3QtPm1fZXhw
ZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Okxpbms7CisgICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaCgxLCAxKTsKKworICAg
IC8vIENvbnRleHQgbWVudSBmb3IgaW1hZ2UuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBl
ID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6SW1hZ2U7CisgICAgdGVzdC0+c2hvd0NvbnRleHRN
ZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaCgxLCAxMCk7CisKKyAgICAvLyBFbmFibGUg
ZGV2ZWxvcGVyIGV4dHJhcyBub3csIHNvIHRoYXQgaW5zcGVjdG9yIGVsZW1lbnQKKyAgICAvLyB3
aWxsIGJlIHNob3duIGluIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9y
IGltYWdlIGxpbmsuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVE
ZWZhdWx0VGVzdDo6TGlua0ltYWdlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRp
b25BbmRXYWl0VW50aWxGaW5pc2goMSwgMjApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBp
bWFnZSB2aWRlby4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURl
ZmF1bHRUZXN0OjpWaWRlbzsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5k
V2FpdFVudGlsRmluaXNoKDEsIDMwKTsKKworICAgIC8vIENvbnRleHQgbWVudSBmb3IgZWRpdGFi
bGUuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVz
dDo6RWRpdGFibGU7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRV
bnRpbEZpbmlzaCg1LCA1NSk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51Q3VzdG9tVGVzdDogcHVi
bGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShDb250ZXh0TWVudUN1c3RvbVRlc3QpOworCisgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0KCkK
KyAgICAgICAgOiBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwoMCkKKyAgICAgICAgLCBtX2FjdGl2YXRl
ZChmYWxzZSkKKyAgICAgICAgLCBtX3RvZ2dsZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVu
dCosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCisgICAgeworICAgICAgICAv
LyBBcHBlbmQgb3VyIGN1c3RvbSBpdGVtIHRvIHRoZSBkZWZhdWx0IG1lbnUuCisgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3KG1fYWN0aW9uLmdldCgpKSk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9t
YWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEd0a01lbnUq
IGdldFBvcHVwTWVudSgpCisgICAgeworICAgICAgICBHT3duUHRyPEdMaXN0PiB0b3BsZXZlbHMo
Z3RrX3dpbmRvd19saXN0X3RvcGxldmVscygpKTsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlciA9
IHRvcGxldmVscy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAg
ICAgICAgICBpZiAoIUdUS19JU19XSU5ET1coaXRlci0+ZGF0YSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIEd0a1dpZGdldCogY2hpbGQgPSBndGtfYmluX2dldF9j
aGlsZChHVEtfQklOKGl0ZXItPmRhdGEpKTsKKyAgICAgICAgICAgIGlmICghR1RLX0lTX01FTlUo
Y2hpbGQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoZ3Rr
X21lbnVfZ2V0X2F0dGFjaF93aWRnZXQoR1RLX01FTlUoY2hpbGQpKSA9PSBHVEtfV0lER0VUKG1f
d2ViVmlldykpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdUS19NRU5VKGNoaWxkKTsKKyAgICAg
ICAgfQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBHdGtNZW51SXRlbSogZ2V0TWVudUl0ZW0oR3RrTWVudSogbWVudSwgY29u
c3QgZ2NoYXIqIGl0ZW1MYWJlbCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0xpc3Q+IGl0ZW1z
KGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICAg
ICAgZm9yIChHTGlzdCogaXRlciA9IGl0ZW1zLmdldCgpOyBpdGVyOyBpdGVyID0gZ19saXN0X25l
eHQoaXRlcikpIHsKKyAgICAgICAgICAgIEd0a01lbnVJdGVtKiBjaGlsZCA9IEdUS19NRU5VX0lU
RU0oaXRlci0+ZGF0YSk7CisgICAgICAgICAgICBpZiAoZ19zdHJfZXF1YWwoaXRlbUxhYmVsLCBn
dGtfbWVudV9pdGVtX2dldF9sYWJlbChjaGlsZCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBj
aGlsZDsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlTWVudUl0ZW0oKQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQobV9pdGVtVG9BY3RpdmF0ZUxhYmVsKTsKKyAgICAgICAgR3RrTWVu
dSogbWVudSA9IGdldFBvcHVwTWVudSgpOworICAgICAgICBHdGtNZW51SXRlbSogaXRlbSA9IGdl
dE1lbnVJdGVtKG1lbnUsIG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7CisgICAgICAgIGd0a19tZW51
X3NoZWxsX2FjdGl2YXRlX2l0ZW0oR1RLX01FTlVfU0hFTEwobWVudSksIEdUS19XSURHRVQoaXRl
bSksIFRSVUUpOworICAgICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSAwOworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVh
biBhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrKGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsK
KyAgICAgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVDdXN0b21UZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5hY3RpdmF0ZU1lbnVJ
dGVtKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRl
Q3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoY29uc3QgY2hhciogYWN0aW9uTGFi
ZWwpCisgICAgeworICAgICAgICBtX2FjdGl2YXRlZCA9IG1fdG9nZ2xlZCA9IGZhbHNlOworICAg
ICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSBhY3Rpb25MYWJlbDsKKyAgICAgICAgZ19pZGxl
X2FkZChhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgdG9nZ2xlQ3VzdG9tTWVu
dUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsK
KyAgICAgICAgYWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChhY3Rp
b25MYWJlbCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWN0aW9uQWN0aXZhdGVkQ2FsbGJh
Y2soR3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+bV9hY3RpdmF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFj
dGlvblRvZ2dsZWRDYWxsYmFjayhHdGtBY3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RvZ2dsZWQgPSB0cnVlOworICAgIH0KKworICAg
IHZvaWQgc2V0QWN0aW9uKEd0a0FjdGlvbiogYWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hY3Rp
b24gPSBhY3Rpb247CisgICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQor
ICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJ0b2dnbGVkIiwgR19DQUxMQkFD
SyhhY3Rpb25Ub2dnbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soYWN0aW9u
QWN0aXZhdGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEd0a0FjdGlv
bj4gbV9hY3Rpb247CisgICAgY29uc3QgY2hhciogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsOworICAg
IGJvb2wgbV9hY3RpdmF0ZWQ7CisgICAgYm9vbCBtX3RvZ2dsZWQ7Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUoQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29u
dGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBtZW51IGl0
ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9u
X25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsK
KyAgICB0ZXN0LT5zZXRBY3Rpb24oYWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2goKTsKKyAgICB0ZXN0LT5hY3RpdmF0ZUN1c3RvbU1lbnVJ
dGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbi5nZXQo
KSkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fYWN0aXZhdGVkKTsKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV90b2dnbGVkKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSB0b2dnbGUgbWVudSBpdGVt
LgorICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FD
VElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24i
LCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKKyAgICB0ZXN0LT5zZXRBY3Rpb24o
dG9nZ2xlQWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50
aWxGaW5pc2goKTsKKyAgICB0ZXN0LT50b2dnbGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbFRv
Z2dsZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwodG9nZ2xlQWN0aW9uLmdldCgpKSk7CisgICAgZ19h
c3NlcnQoIXRlc3QtPm1fYWN0aXZhdGVkKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RvZ2dsZWQp
OworfQorCitjbGFzcyBDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0OiBwdWJsaWMgQ29udGV4dE1l
bnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51
Q3VzdG9tRnVsbFRlc3QpOworCisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVu
dSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisgICAgewor
ICAgICAgICAvLyBDbGVhciBwcm9wb3NlZCBtZW51IGFuZCBidWlsZCBvdXIgb3duLgorICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVu
dSksID09LCAwKTsKKworICAgICAgICAvLyBBZGQgYWN0aW9ucyBmcm9tIHN0b2NrLgorICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X3ByZXBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9jayhXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19C
QUNLKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2soV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2Vy
dChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSwg
Mik7CisKKyAgICAgICAgLy8gQWRkIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICBHUmVmUHRyPEd0
a0FjdGlvbj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KCJXZWJLaXRHVEsrQ3Vz
dG9tQWN0aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwgMCkpOworICAgICAgICBndGtfYWN0aW9u
X3NldF9zZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBGQUxTRSk7CisgICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
KGFjdGlvbi5nZXQoKSksIC0xKTsKKyAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHRvZ2dsZUFj
dGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldygiV2ViS2l0
R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCAwLCAwKSkp
OworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9O
KHRvZ2dsZUFjdGlvbi5nZXQoKSksIFRSVUUpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51
X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyh0b2dnbGVB
Y3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4
dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworCisgICAg
ICAgIC8vIEFkZCBhIHN1Ym1lbnUuCisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+
IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7CisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja193aXRoX2xhYmVsKFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1NUT1AsICJTdG9wIExvYWQiKSwgMCk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfaW5zZXJ0KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJv
bV9zdG9jayhXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpLCAtMSk7CisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgiTG9hZCBvcHRpb25zIiwgc3ViTWVudS5nZXQoKSkp
OworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKKyAgICAgICAgLy8gTW92ZSBM
b2FkIHN1Ym1lbnUgYmVmb3JlIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICB3ZWJraXRfY29udGV4
dF9tZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNv
bnRleHRNZW51KSwgMyk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNv
bnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKKwor
ICAgICAgICAvLyBJZiBsYXN0IGl0ZW0gaXMgYSBzZXBhcmF0b3IsIHJlbW92ZSBpdC4KKyAgICAg
ICAgaWYgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3Iod2Via2l0X2NvbnRl
eHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSkpCisgICAgICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X3JlbW92ZShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRN
ZW51KSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1lbnUuCisgICAgICAgIEdMaXN0KiBpdGVy
ID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQo
aXRlcik7CisKKyAgICAgICAgR0xpc3QqIHN1Yk1lbnVJdGVyID0gMDsKKyAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KGl0ZXIsICJMb2FkIG9wdGlvbnMi
LCBWaXNpYmxlIHwgRW5hYmxlZCwgJnN1Yk1lbnVJdGVyKTsKKyAgICAgICAgc3ViTWVudUl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
c3ViTWVudUl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5k
R2V0TmV4dChpdGVyKTsKKworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9t
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCAiQ3VzdG9tIF9BY3Rpb24iLCBWaXNpYmxlKTsKKyAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwg
IkN1c3RvbSBfVG9nZ2xlIEFjdGlvbiIsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFp
bkxvb3ApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0YXRpYyB2b2lk
IHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUoQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENv
bnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxGaW5pc2goKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6IHB1
YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QpOworCisgICAgZW51bSBEaXNhYmxlTW9kZSB7Cisg
ICAgICAgIElnbm9yZUNsaWNrcywKKyAgICAgICAgSWdub3JlRGVmYXVsdE1lbnUKKyAgICB9Owor
CisgICAgc3RhdGljIGdib29sZWFuIHZpZXdCdXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lk
Z2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQorICAgICAgICAgICAg
cmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25QcmVzc2VkKCk7
CisgICAgfQorCisgICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QoKQorICAgICAgICA6IG1fZGlz
YWJsZU1vZGUoSWdub3JlQ2xpY2tzKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKHZpZXdCdXR0b25QcmVz
c0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdl
YktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVz
dWx0KikKKyAgICB7CisgICAgICAgIGlmIChtX2Rpc2FibGVNb2RlID09IElnbm9yZUNsaWNrcykK
KyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgYm9vbCByaWdodEJ1dHRvblByZXNzZWQoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKSB7CisgICAgICAgICAgICBmaW5p
c2hNYWluTG9vcEFmdGVyRGVsYXkoMSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRGlzYWJsZU1vZGUgbV9k
aXNhYmxlTW9kZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51
KENvbnRleHRNZW51RGlzYWJsZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRt
bD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3Jl
RGVmYXVsdE1lbnU7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNo
KCk7CisKKyAgICB0ZXN0LT5tX2Rpc2FibGVNb2RlID0gQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6
Oklnbm9yZUNsaWNrczsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5p
c2goKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIENvbnRleHRNZW51RGVmYXVsdFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVE
ZWZhdWx0TWVudSk7CisgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAicG9wdWxhdGUtbWVudSIsIHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudSk7CisgICAg
Q29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1t
ZW51IiwgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudSk7CisgICAgQ29udGV4dE1lbnVEaXNhYmxl
ZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0Q29udGV4dE1l
bnVEaXNhYmxlTWVudSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmlu
ZGV4IGUzNTVmNzguLmFkZjAzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTExMiw5ICsxMTIsMTQgQEAg
dm9pZCBXZWJWaWV3VGVzdDo6Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSogaXRlbSkKICAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJk
X2xpc3RfaXRlbShtX3dlYlZpZXcsIGl0ZW0pOwogfQogCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0
KGRvdWJsZSBzZWNvbmRzKQordm9pZCBXZWJWaWV3VGVzdDo6ZmluaXNoTWFpbkxvb3BBZnRlckRl
bGF5KGRvdWJsZSBzZWNvbmRzKQogewogICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRz
LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih0ZXN0TG9hZFRpbWVvdXRGaW5pc2hMb29w
KSwgbV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXQoZG91YmxlIHNlY29u
ZHMpCit7CisgICAgZmluaXNoTWFpbkxvb3BBZnRlckRlbGF5KHNlY29uZHMpOwogICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKaW5kZXggZmY2YThjNy4uMGY2MDVk
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oCkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdvRm9yd2Fy
ZCgpOwogICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSopOwogCisgICAgdm9pZCBmaW5pc2hNYWluTG9vcEFmdGVyRGVsYXkoZG91YmxlIHNl
Y29uZHMpOwogICAgIHZvaWQgd2FpdChkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCB3YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKICAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0
IGNoYXIqIGV4cGVjdGVkVGl0bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oCmluZGV4IGJmMzdmY2IuLjU4YWMyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTI1LDYgKzI1LDkgQEAKIAogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVu
dS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmg+CisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudUl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdENvb2tpZU1hbmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0IGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAppbmRleCBkZTMw
MzI4Li5lNmM4YTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEsNiArMSw3IEBACiBCT09MRUFOOkJPWEVECiBC
T09MRUFOOkVOVU0sU1RSSU5HLFBPSU5URVIKIEJPT0xFQU46T0JKRUNUCitCT09MRUFOOk9CSkVD
VCxCT1hFRCxPQkpFQ1QKIEJPT0xFQU46T0JKRUNULEVOVU0KIEJPT0xFQU46U1RSSU5HCiBCT09M
RUFOOlZPSUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29u
dGV4dE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNv
bnRleHRNZW51UHJveHlHdGsuY3BwCmluZGV4IGQ4MGYyNGMuLjIzNmZmY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3Rr
LmNwcApAQCAtOTIsNiArOTIsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OnNob3dD
b250ZXh0TWVudShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sCiAgICAgLy8gRGlz
cGxheSBtZW51IGluaXRpYXRlZCBieSByaWdodCBjbGljayAobW91c2UgYnV0dG9uIHByZXNzZWQg
PSAzKS4KICAgICBOYXRpdmVXZWJNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gbV9wYWdlLT5jdXJy
ZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCgpOwogICAgIGNvbnN0IEdka0V2ZW50KiBldmVu
dCA9IG1vdXNlRXZlbnQgPyBtb3VzZUV2ZW50LT5uYXRpdmVFdmVudCgpIDogMDsKKyAgICBndGtf
bWVudV9hdHRhY2hfdG9fd2lkZ2V0KG1fbWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIEdUS19X
SURHRVQobV93ZWJWaWV3KSwgMCk7CiAgICAgZ3RrX21lbnVfcG9wdXAobV9tZW51LnBsYXRmb3Jt
RGVzY3JpcHRpb24oKSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5j
PihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgZXZlbnQg
PyBldmVudC0+YnV0dG9uLmJ1dHRvbiA6IDMsIGV2ZW50ID8gZXZlbnQtPmJ1dHRvbi50aW1lIDog
R0RLX0NVUlJFTlRfVElNRSk7CiB9Cg==
</data>
<flag name="review"
          id="155122"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148319</attachid>
            <date>2012-06-19 05:58:35 -0700</date>
            <delta_ts>2012-06-22 09:03:14 -0700</delta_ts>
            <desc>Updated patch addressing review comments</desc>
            <filename>wk2-context-menu-api3.diff</filename>
            <type>text/plain</type>
            <size>122090</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0NjMzYzcxLi4xNzc2ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ3
IEBACisyMDEyLTA2LTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBBZGQgQ29udGV4dE1lbnUgQVBJIHRvIFdlYktpdDIgR1RLKyBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMDEx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdl
YktpdFdlYlZpZXc6OmNvbnRleHQtbWVudSBzaWduYWwgYW5kIFdlYktpdENvbnRleHRNZW51IGFu
ZAorICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2JqZWN0cyB0byBjdXN0b21pemUgdGhl
IGRlZmF1bHQgbWVudSBvcgorICAgICAgICBidWlscyBuZXcgbWVudXMuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGRlc3RpbmF0aW9uLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmNwcDogQWRkZWQuCisgICAg
ICAgICh3ZWJraXRDb250ZXh0TWVudUZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9jb250ZXh0
X21lbnVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0Q29udGV4dE1lbnVQb3B1bGF0ZSk6IFBvcHVsYXRlIHRoZSBnaXZlbiB2
ZWN0b3Igb2YKKyAgICAgICAgQ29udGV4dE1lbnVJdGVtcyB3aXRoIHRoZSBXZWJLaXRDb250ZXh0
TWVudSBpdGVtcyByZWxlYXNpbmcgdGhlCisgICAgICAgIGl0ZW1zIGFkZGVkIHRvIHRoZSB2ZWN0
b3IuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUNyZWF0ZSk6IENyZWF0ZSBhIG5ldyBXZWJL
aXRDb250ZXh0TWVudSBmb3IgdGhlCisgICAgICAgIGdpdmVuIFdLQXJyYXlSZWYgb2YgV0tDb250
ZXh0TWVudUl0ZW1SZWYuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0p
OiBTZXQgdGhlIHBhcmVudCBtZW51IGl0ZW0gb2YgdGhlCisgICAgICAgIG1lbnUuIFVzZWQgd2hl
biBhIG1lbnUgaXMgYWRkZWQgYXMgYSBzdWJtZW51IG9mIGEgbWVudSBpdGVtLgorICAgICAgICAo
d2Via2l0Q29udGV4dE1lbnVHZXRQYXJlbnRJdGVtKTogUmV0dXJuIHRoZSBwYXJlbnQgbWVudSBp
dGVtIG9mCisgICAgICAgIHRoZSBtZW51LgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9u
ZXcpOiBDcmVhdGUgYSBuZXcgV2ViS2l0Q29udGV4dE1lbnUuCisgICAgICAgICh3ZWJraXRfY29u
dGV4dF9tZW51X25ld193aXRoX2l0ZW1zKTogQ3JlYXRlIGEgbmV3CisgICAgICAgIFdlYktpdENv
bnRleHRNZW51IHVzaW5nIHRoZSBnaXZlbiBsaXN0IG9mIFdlYktpdENvbnRleHRNZW51SXRlbS4K
KyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZCk6IEFkZCBpdGVtIGF0IHRoZSBi
ZWdpbm5pbmcuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZCk6IEFkZCBpdGVt
IGF0IHRoZSBlbmQuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2luc2VydCk6IEluc2Vy
dCBpdGVtIGF0IGEgcmFuZG9tIHBvc2l0aW9uLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVu
dV9tb3ZlX2l0ZW0pOiBNb3ZlIGFuIGV4aXN0aW5nIGl0ZW0gdG8gYSBuZXcKKyAgICAgICAgcG9z
aXRpb24uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyk6IEdldCB0aGUg
bGlzdCBvZiBpdGVtcy4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMp
OiBHZXQgdGhlIG51bWJlciBvZiBpdGVtcy4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVf
Zmlyc3QpOiBHZXQgdGhlIGZpcnN0IGl0ZW0uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51
X2xhc3QpOiBHZXQgdGhlIGxhc3QgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVf
Z2V0X2l0ZW1fYXRfcG9zaXRpb24pOiBHZXQgdGhlIGl0ZW0gYXQgdGhlCisgICAgICAgIGdpdmVu
IHBvc2l0aW9uLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUpOiBSZW1vdmUg
dGhlIGdpdmVuIGl0ZW0uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwp
OiBSZW1vdmUgYWxsIGl0ZW1zLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51QWN0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVB
Y3Rpb25Jc0NoZWNrYWJsZSk6IENoZWNrIGlmIHRoZSBnaXZlbiBzdG9jaworICAgICAgICBhY3Rp
b24gaXMgYSB0b2dnbGUgYWN0aW9uLgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVBY3Rpb25H
ZXRBY3Rpb25UYWcpOiBHZXQgdGhlIFdlYkNvcmUKKyAgICAgICAgQ29udGV4dE1lbnVBY3Rpb24g
Y29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gc3RvY2sgYWN0aW9uLgorICAgICAgICAod2Via2l0
Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0pOiBHZXQgdGhlIHN0b2NrCisg
ICAgICAgIGFjdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBXZWJDb3JlIENvbnRleHRN
ZW51QWN0aW9uLgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRMYWJlbCk6IEdl
dCB0aGUgbGFiZWwgc3RyaW5nIG9mIHRoZQorICAgICAgICBnaXZlbiBzdG9jayBhY3Rpb24uCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9u
c1ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUl0ZW1G
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faW5pdCk6CisgICAg
ICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fY2xhc3NfaW5pdCk6CisgICAgICAgIChjaGVj
a0FuZFdhcm5JZk1lbnVIYXNQYXJlbnRJdGVtKTogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbWVu
dQorICAgICAgICBpcyBhbHJlYWR5IGluc2lkZSBhbm90aGVyIG1lbnUgc2hvd2luZyBhIHdhcm5p
bmcgaW4gc3VjaCBjYXNlLgorICAgICAgICAod2Via2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVu
dSk6IFNldCB0aGUgc3VibWVudSBvZiBhIG1lbnUgaXRlbSwKKyAgICAgICAgY2hlY2tpbmcgdGhh
dCB0aGUgbWVudSBpcyBub3QgcGFydCBvZiBhbm90aGVyIG1lbnUgYW5kIHNldHRpbmcgdGhlCisg
ICAgICAgIGl0ZW0gYXMgdGhlIHBhcmVudCBvZiB0aGUgc3VibWVudS4KKyAgICAgICAgKHdlYmtp
dENvbnRleHRNZW51SXRlbUNyZWF0ZSk6IENyZWF0ZSBhIG5ldyBXZWJLaXRDb250ZXh0TWVudUl0
ZW0KKyAgICAgICAgZm9yIHRoZSBnaXZlbiBXS0NvbnRleHRNZW51SXRlbVJlZi4KKyAgICAgICAg
KHdlYmtpdENvbnRleHRNZW51SXRlbUNyZWF0ZUZvckd0a0l0ZW0pOiBDcmVhdGUgYSBuZXcKKyAg
ICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtIHVzaW5nIHRoZSBnaXZlbiBHdGtNZW51SXRlbS4K
KyAgICAgICAgKHdlYmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnVGcm9tR3RrTWVudSk6IFNl
dCB0aGUgZ2l2ZW4KKyAgICAgICAgR3RrTWVudSBhcyBzdWJtZW51IG9mIHRoZSBpdGVtLiBUaGlz
IGlzIHVzZWQgb25seSB0byBhZGQgSW5wdXQKKyAgICAgICAgTWV0aG9kcyBzdWJtZW51IHRoYXQg
aXMgY3JlYXRlZCBieSBHVEsuCisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUl0ZW1SZWxlYXNl
KTogUmVsZWFzZSB0aGUgV2ViQ29yZQorICAgICAgICBDb250ZXh0TWVudUl0ZW0gYXNzb2NpYXRl
ZCB0byB0aGUgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcpOiBD
cmVhdGUgYSBuZXcgV2ViS2l0Q29udGV4dE1lbnVJdGVtCisgICAgICAgIGZvciB0aGUgZ2l2ZW4g
R3RrQWN0aW9uLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0
b2NrX2FjdGlvbik6IENyZWF0ZSBhIG5ldworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0g
Zm9yIGEgc3RvY2sgYWN0aW9uLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19mcm9tX3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKToKKyAgICAgICAgQ3JlYXRlIGEgbmV3IFdl
YktpdENvbnRleHRNZW51SXRlbSBmb3IgYSBzdG9jayBhY3Rpb24gdXNpbmcgYQorICAgICAgICBj
dXN0b20gbGFiZWwuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhf
c3VibWVudSk6IENyZWF0ZSBhIG5ldworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gd2l0
aCBhIHN1Ym1lbnUuCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFy
YXRvcik6IENyZWF0ZSBhIG5ldyBzZXBhcmF0b3IKKyAgICAgICAgbWVudSBpdGVtLgorICAgICAg
ICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24pOiBHZXQgdGhlIEd0a0FjdGlv
biBvZiB0aGUgaXRlbS4KKyAgICAgICAgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3Rv
Y2tfYWN0aW9uKTogR2V0IHRoZSBzdG9jayBhY3Rpb24KKyAgICAgICAgb2YgdGhlIGl0ZW0uCisg
ICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKTogV2hldGhlciBp
dGVtIGlzIGEgc2VwYXJhdG9yLgorICAgICAgICAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3Nl
dF9zdWJtZW51KTogU2V0IG9yIHJlcGxhY2UgdGhlCisgICAgICAgIHN1Ym1lbnUgb2YgdGhlIGl0
ZW0uCisgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUpOiBHZXQg
dGhlIHN1Ym1lbnUgb2YgdGhlIGl0ZW0uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q29udGV4dE1lbnVJdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFz
c19pbml0KTogQWRkIFdlYktpdFdlYlZpZXc6OmNvbnRleHQtbWVudSBzaWduYWwuCisgICAgICAg
IChnZXRVbmljb2RlTWVudUl0ZW1Qb3NpdGlvbik6IEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVy
bnMgdGhlCisgICAgICAgIHBvc2l0aW9uIG9mIHRoZSB1bmljb2RlIG1lbnUgaXRlbSBpbiB0aGUg
cHJvcG9zZWQgY29udGV4dCBtZW51LgorICAgICAgICAod2Via2l0V2ViVmlld0NyZWF0ZUFuZEFw
cGVuZElucHV0TWV0aG9kc01lbnVJdGVtKTogVXNlCisgICAgICAgIFdlYktpdENvbnRleHRNZW51
IEFQSSB0byBhZGQgdGhlIGlucHV0IG1ldGhvZHMgc3VibWVudSB0byB0aGUKKyAgICAgICAgZGVm
YXVsdCBjb250ZXh0IG1lbnUuCisgICAgICAgICh3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0
TWVudSk6IENyZWF0ZSBhIFdlYktpdENvbnRleHRNZW51IGZvcgorICAgICAgICB0aGUgZGVmYXVs
dCBjb250ZXh0IG1lbnUgYW5kIGVtaXQgV2ViS2l0V2ViVmlldzo6Y29udGV4dC1tZW51CisgICAg
ICAgIHNpZ25hbC4gVGhlbiBwb3B1bGF0ZSB0aGUgY29udGV4dCBtZW51IHByb3h5IHdpdGggdGhl
IHJlc3VsdGluZworICAgICAgICBXZWJLaXRDb250ZXh0TWVudS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25Q
cmVzc0V2ZW50KTogSW4gY2FzZSBvZiByaWdodCBjbGljayBzYXZlCisgICAgICAgIHRoZSBldmVu
dCB0byBiZSB1c2VkIGJ5IGNvbnRleHQgbWVudSBzaWduYWwuCisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZVRha2VDb250ZXh0TWVudUV2ZW50KTogUmV0dXJuIGFuZCByZWxlYXNlIHRoZQorICAg
ICAgICBzYXZlZCBidXR0b24gZXZlbnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkIHNlY3Rpb25zIGZvcgorICAgICAgICBXZWJLaXRD
b250ZXh0TWVudSBhbmQgV2ViS2l0Q29udGV4dE1lbnVJdGVtLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgc3ltYm9scy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6IEFkZAor
ICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2dldF90eXBlIGFuZCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X3R5cGUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05V
bWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdCBmb3IgY29udGV4dCBtZW51LgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHA6IEFkZGVkLgorICAgICAg
ICAodGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51
UG9wdWxhdGVNZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUpOgorICAg
ICAgICAodGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRN
ZW51U3ViTWVudSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmg6CisgICAgICAgIChU
ZXN0OjphZGRMb2dGYXRhbEZsYWcpOiBBZGQgYSBsb2cgbGV2ZWwgZmxhZyB0byB0aGUgbWFzayBv
ZiBmbGFncworICAgICAgICBjYXVzaW5nIHRoZSBwcm9ncmFtIHRvIGFib3J0LgorICAgICAgICAo
VGVzdDo6cmVtb3ZlTG9nRmF0YWxGbGFnKTogUmVtb3ZlIGEgbG9nIGxldmVsIGZsYWcgdG8gdGhl
IG1hc2sgb2YKKyAgICAgICAgZmxhZ3MgY2F1c2luZyB0aGUgcHJvZ3JhbSB0byBhYm9ydC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAg
IChXZWJWaWV3VGVzdDo6cXVpdE1haW5Mb29wKTogRmluaXNoIHRoZSBtYWluIGxvb3AuCisgICAg
ICAgIChXZWJWaWV3VGVzdDo6cXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50
cyk6IEZpbmlzaAorICAgICAgICB0aGUgbWFpbiBsb29wIHdoZW4gYWxsIHBlbmRpbmcgZXZlbnRz
IGhhdmUgYmVlbiBwcm9jZXNzZWQuCisgICAgICAgIChxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViVmlld1Rlc3Q6OndhaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oOiBJbmNsdWRlIFdlYktpdENvbnRleHRNZW51LmgsCisgICAgICAgIFdlYktpdENvbnRl
eHRNZW51SXRlbS5oIGFuZCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0OgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bnRleHRNZW51UHJveHlHdGs6OnNob3dDb250ZXh0TWVudSk6IEF0dGFjaCB0aGUKKyAgICAgICAg
cG9wdXAgbWVudSB0byB0aGUgdmlldyB3aWRnZXQgYmVmb3JlIHNob3dpbmcgaXQuCisKIDIwMTIt
MDYtMTYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBTZXR0aW5n
czo6ZGV2aWNlUGl4ZWxSYXRpbyBkb2Vzbid0IGRvIGFueXRoaW5nIGFuZCBpcyBjb25mdXNpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM1MjM5MTguLjBjOGM5ZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtODgsNiArODgsOSBAQCB3ZWJraXQyX2hfYXBp
ICs9IFwKIHdlYmtpdDJndGtfaF9hcGkgKz0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZC5oIFwKQEAgLTU3NSw4ICs1NzgsMTcgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW0uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQ
cml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRl
eHRNZW51Q2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q29udGV4dE1lbnVDbGllbnQuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b250ZXh0TWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b250ZXh0TWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ZmJm
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENvbnRleHRNZW51LmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
Q29udGV4dE1lbnUuaCIKKworI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdHJ1Y3QgX1dlYktpdENv
bnRleHRNZW51UHJpdmF0ZSB7CisgICAgR0xpc3QqIGl0ZW1zOworICAgIFdlYktpdENvbnRleHRN
ZW51SXRlbSogcGFyZW50SXRlbTsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0Q29udGV4dE1l
bnUsIHdlYmtpdF9jb250ZXh0X21lbnUsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdl
YmtpdENvbnRleHRNZW51RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdENv
bnRleHRNZW51KiBtZW51ID0gV0VCS0lUX0NPTlRFWFRfTUVOVShvYmplY3QpOworICAgIHdlYmtp
dF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChtZW51KTsKKyAgICBtZW51LT5wcml2LT5+V2ViS2l0
Q29udGV4dE1lbnVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2NvbnRleHRf
bWVudV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfY29udGV4dF9tZW51X2luaXQoV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAg
V2ViS2l0Q29udGV4dE1lbnVQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKG1lbnUsIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVSwgV2ViS2l0Q29udGV4dE1lbnVQcml2
YXRlKTsKKyAgICBtZW51LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdENvbnRl
eHRNZW51UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfY29udGV4dF9tZW51X2Ns
YXNzX2luaXQoV2ViS2l0Q29udGV4dE1lbnVDbGFzcyogbGlzdENsYXNzKQoreworICAgIEdPYmpl
Y3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MobGlzdENsYXNzKTsKKyAgICBn
T2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0Q29udGV4dE1lbnVGaW5hbGl6ZTsKKworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShsaXN0Q2xhc3MsIHNpemVvZihXZWJLaXRDb250ZXh0
TWVudVByaXZhdGUpKTsKK30KKwordm9pZCB3ZWJraXRDb250ZXh0TWVudVBvcHVsYXRlKFdlYktp
dENvbnRleHRNZW51KiBtZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgY29udGV4dE1lbnVJ
dGVtcykKK3sKKyAgICBmb3IgKEdMaXN0KiBpdGVtID0gbWVudS0+cHJpdi0+aXRlbXM7IGl0ZW07
IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0
ZW0qIG1lbnVJdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0tPmRhdGEpOworICAg
ICAgICBjb250ZXh0TWVudUl0ZW1zLmFwcGVuZChDb250ZXh0TWVudUl0ZW0od2Via2l0Q29udGV4
dE1lbnVJdGVtUmVsZWFzZShtZW51SXRlbSkpKTsKKyAgICB9Cit9CisKK1dlYktpdENvbnRleHRN
ZW51KiB3ZWJraXRDb250ZXh0TWVudUNyZWF0ZShXS0FycmF5UmVmIHdrSXRlbXMpCit7CisgICAg
V2ViS2l0Q29udGV4dE1lbnUqIG1lbnUgPSB3ZWJraXRfY29udGV4dF9tZW51X25ldygpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0tBcnJheUdldFNpemUod2tJdGVtcyk7ICsraSkgewor
ICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRl
eHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrSXRlbXMsIGkpKTsKKyAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKG1lbnUsIHdlYmtpdENvbnRleHRNZW51SXRl
bUNyZWF0ZSh3a0l0ZW0pKTsKKyAgICB9CisgICAgbWVudS0+cHJpdi0+aXRlbXMgPSBnX2xpc3Rf
cmV2ZXJzZShtZW51LT5wcml2LT5pdGVtcyk7CisKKyAgICByZXR1cm4gbWVudTsKK30KKwordm9p
ZCB3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUs
IFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAgICBtZW51LT5wcml2LT5wYXJlbnRJ
dGVtID0gaXRlbTsKK30KKworV2ViS2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVu
dUdldFBhcmVudEl0ZW0oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgcmV0dXJuIG1l
bnUtPnByaXYtPnBhcmVudEl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9u
ZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnUgb2JqZWN0IHRvIGJl
IHVzZWQgYXMgYSBzdWJtZW51IG9mIGFuIGV4aXN0aW5nCisgKiAjV2ViS2l0Q29udGV4dE1lbnUu
IFRoZSBjb250ZXh0IG1lbnUgb2YgYSAjV2ViS2l0V2ViVmlldyBpcyBjcmVhdGVkIGJ5IHRoZSB2
aWV3CisgKiBhbmQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IG9mICNXZWJLaXRXZWJWaWV3Ojpjb250
ZXh0LW1lbnUgc2lnbmFsLgorICogVG8gYWRkIGl0ZW1zIHRvIHRoZSBtZW51IHVzZSB3ZWJraXRf
Y29udGV4dF9tZW51X3ByZXBlbmQoKSwKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKCkg
b3Igd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoKS4KKyAqIFNlZSBhbHNvIHdlYmtpdF9jb250
ZXh0X21lbnVfbmV3X3dpdGhfaXRlbXMoKSB0byBjcmVhdGUgYSAjV2ViS2l0Q29udGV4dE1lbnUg
d2l0aAorICogYSBsaXN0IG9mIGluaXRpYWwgaXRlbXMuCisgKgorICogUmV0dXJuczogVGhlIG5l
d2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51IG9iamVjdAorICovCitXZWJLaXRDb250ZXh0
TWVudSogd2Via2l0X2NvbnRleHRfbWVudV9uZXcoKQoreworICAgIHJldHVybiBXRUJLSVRfQ09O
VEVYVF9NRU5VKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlUsIE5VTEwpKTsK
K30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X25ld193aXRoX2l0ZW1zOgorICogQGl0
ZW1zOiAoZWxlbWVudC10eXBlIFdlYktpdENvbnRleHRNZW51SXRlbSk6IGEgI0dMaXN0IG9mICNX
ZWJLaXRDb250ZXh0TWVudUl0ZW0KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0
TWVudSBvYmplY3QgdG8gYmUgdXNlZCBhcyBhIHN1Ym1lbnUgb2YgYW4gZXhpc3RpbmcKKyAqICNX
ZWJLaXRDb250ZXh0TWVudSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsIGl0ZW1zLgorICogU2VlIGFs
c28gd2Via2l0X2NvbnRleHRfbWVudV9uZXcoKQorICoKKyAqIFJldHVybnM6IFRoZSBuZXdseSBj
cmVhdGVkICNXZWJLaXRDb250ZXh0TWVudSBvYmplY3QKKyAqLworV2ViS2l0Q29udGV4dE1lbnUq
IHdlYmtpdF9jb250ZXh0X21lbnVfbmV3X3dpdGhfaXRlbXMoR0xpc3QqIGl0ZW1zKQoreworICAg
IFdlYktpdENvbnRleHRNZW51KiBtZW51ID0gd2Via2l0X2NvbnRleHRfbWVudV9uZXcoKTsKKyAg
ICBnX2xpc3RfZm9yZWFjaChpdGVtcywgcmVpbnRlcnByZXRfY2FzdDxHRnVuYz4oZ19vYmplY3Rf
cmVmX3NpbmspLCAwKTsKKyAgICBtZW51LT5wcml2LT5pdGVtcyA9IGdfbGlzdF9jb3B5KGl0ZW1z
KTsKKworICAgIHJldHVybiBtZW51OworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVf
cHJlcGVuZDoKKyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0TWVudQorICogQGl0ZW06IHRoZSAj
V2ViS2l0Q29udGV4dE1lbnVJdGVtIHRvIGFkZAorICoKKyAqIEFkZHMgQGl0ZW0gYXQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgQG1lbnUuCisgKi8KK3ZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9wcmVw
ZW5kKFdlYktpdENvbnRleHRNZW51KiBtZW51LCBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0p
Cit7CisgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQobWVudSwgaXRlbSwgMCk7Cit9CisK
Ky8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQ6CisgKiBAbWVudTogYSAjV2ViS2l0
Q29udGV4dE1lbnUKKyAqIEBpdGVtOiB0aGUgI1dlYktpdENvbnRleHRNZW51SXRlbSB0byBhZGQK
KyAqCisgKiBBZGRzIEBpdGVtIGF0IHRoZSBlbmQgb2YgdGhlIEBtZW51LgorICovCit2b2lkIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKFdlYktpdENvbnRleHRNZW51KiBtZW51LCBXZWJLaXRD
b250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7CisgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQo
bWVudSwgaXRlbSwgLTEpOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0
OgorICogQG1lbnU6IGEgI1dlYktpdENvbnRleHRNZW51CisgKiBAaXRlbTogdGhlICNXZWJLaXRD
b250ZXh0TWVudUl0ZW0gdG8gYWRkCisgKiBAcG9zaXRpb246IHRoZSBwb3NpdGlvbiB0byBpbnNl
cnQgdGhlIGl0ZW0KKyAqCisgKiBJbnNlcnRzIEBpdGVtIGludG8gdGhlIEBtZW51IGF0IHRoZSBn
aXZlbiBwb3NpdGlvbi4KKyAqIElmIEBwb3NpdGlvbiBpcyBuZWdhdGl2ZSwgb3IgaXMgbGFyZ2Vy
IHRoYW4gdGhlIG51bWJlciBvZiBpdGVtcworICogaW4gdGhlICNXZWJLaXRDb250ZXh0TWVudSwg
dGhlIGl0ZW0gaXMgYWRkZWQgb24gdG8gdGhlIGVuZCBvZgorICogdGhlIEBtZW51LiBUaGUgZmly
c3QgcG9zaXRpb24gaXMgMC4KKyAqLwordm9pZCB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChX
ZWJLaXRDb250ZXh0TWVudSogbWVudSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtLCBpbnQg
cG9zaXRpb24pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
KG1lbnUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRF
TShpdGVtKSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayhpdGVtKTsKKyAgICBtZW51LT5wcml2
LT5pdGVtcyA9IGdfbGlzdF9pbnNlcnQobWVudS0+cHJpdi0+aXRlbXMsIGl0ZW0sIHBvc2l0aW9u
KTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbToKKyAqIEBtZW51
OiBhICNXZWJLaXRDb250ZXh0TWVudQorICogQGl0ZW06IHRoZSAjV2ViS2l0Q29udGV4dE1lbnVJ
dGVtIHRvIGFkZAorICogQHBvc2l0aW9uOiB0aGUgbmV3IHBvc2l0aW9uIHRvIG1vdmUgdGhlIGl0
ZW0KKyAqCisgKiBNb3ZlcyBAaXRlbSB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIEBtZW51
LgorICogSWYgQHBvc2l0aW9uIGlzIG5lZ2F0aXZlLCBvciBpcyBsYXJnZXIgdGhhbiB0aGUgbnVt
YmVyIG9mIGl0ZW1zCisgKiBpbiB0aGUgI1dlYktpdENvbnRleHRNZW51LCB0aGUgaXRlbSBpcyBh
ZGRlZCBvbiB0byB0aGUgZW5kIG9mCisgKiB0aGUgQG1lbnUuCisgKiBUaGUgZmlyc3QgcG9zaXRp
b24gaXMgMC4KKyAqLwordm9pZCB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShXZWJLaXRD
b250ZXh0TWVudSogbWVudSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtLCBpbnQgcG9zaXRp
b24pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVt
KSk7CisKKyAgICBpZiAoIWdfbGlzdF9maW5kKG1lbnUtPnByaXYtPml0ZW1zLCBpdGVtKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbWVudS0+cHJpdi0+aXRlbXMgPSBnX2xpc3RfcmVtb3ZlKG1l
bnUtPnByaXYtPml0ZW1zLCBpdGVtKTsKKyAgICBtZW51LT5wcml2LT5pdGVtcyA9IGdfbGlzdF9p
bnNlcnQobWVudS0+cHJpdi0+aXRlbXMsIGl0ZW0sIHBvc2l0aW9uKTsKK30KKworLyoqCisgKiB3
ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtczoKKyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0
TWVudQorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gbGlzdCBvZiBAbWVudS4KKyAqCisgKiBSZXR1
cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdENvbnRleHRNZW51SXRlbSkgKHRyYW5zZmVyIG5vbmUp
OiBhICNHTGlzdCBvZgorICogICAgI1dlYktpdENvbnRleHRNZW51SXRlbTwhLS0gLS0+cworICov
CitHTGlzdCogd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoV2ViS2l0Q29udGV4dE1lbnUq
IG1lbnUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVO
VShtZW51KSwgMCk7CisKKyAgICByZXR1cm4gbWVudS0+cHJpdi0+aXRlbXM7Cit9CisKKy8qKgor
ICogd2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtczoKKyAqIEBtZW51OiBhICNXZWJLaXRD
b250ZXh0TWVudQorICoKKyAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgQG1lbnUuCisgKgorICog
UmV0dXJuczogdGhlIG51bWJlciBvZiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtPCEtLSAtLT5zIGlu
IEBtZW51CisgKi8KK2d1aW50IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoV2ViS2l0
Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X0NPTlRFWFRfTUVOVShtZW51KSwgMCk7CisKKyAgICByZXR1cm4gZ19saXN0X2xlbmd0aChtZW51
LT5wcml2LT5pdGVtcyk7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVudV9maXJzdDoK
KyAqIEBtZW51OiBhICNXZWJLaXRDb250ZXh0TWVudQorICoKKyAqIEdldHMgdGhlIGZpcnN0IGl0
ZW0gaW4gdGhlIEBtZW51LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIGZp
cnN0ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2YgQG1lbnUsCisgKiAgICBvciAlTlVMTCBpZiB0
aGUgI1dlYktpdENvbnRleHRNZW51IGlzIGVtcHR5LgorICovCitXZWJLaXRDb250ZXh0TWVudUl0
ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfZmlyc3QoV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSwg
MCk7CisKKyAgICByZXR1cm4gbWVudS0+cHJpdi0+aXRlbXMgPyBXRUJLSVRfQ09OVEVYVF9NRU5V
X0lURU0obWVudS0+cHJpdi0+aXRlbXMtPmRhdGEpIDogMDsKK30KKworLyoqCisgKiB3ZWJraXRf
Y29udGV4dF9tZW51X2xhc3Q6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisg
KiBHZXRzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIEBtZW51LgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogdGhlIGxhc3QgI1dlYktpdENvbnRleHRNZW51SXRlbSBvZiBAbWVudSwKKyAq
ICAgIG9yICVOVUxMIGlmIHRoZSAjV2ViS2l0Q29udGV4dE1lbnUgaXMgZW1wdHkuCisgKi8KK1dl
YktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KFdlYktpdENvbnRl
eHRNZW51KiBtZW51KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT05U
RVhUX01FTlUobWVudSksIDApOworCisgICAgR0xpc3QqIGxhc3QgPSBnX2xpc3RfbGFzdChtZW51
LT5wcml2LT5pdGVtcyk7CisgICAgcmV0dXJuIGxhc3QgPyBXRUJLSVRfQ09OVEVYVF9NRU5VX0lU
RU0obGFzdC0+ZGF0YSkgOiAwOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0
X2l0ZW1fYXRfcG9zaXRpb246CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqIEBw
b3NpdGlvbjogdGhlIHBvc2l0aW9uIG9mIHRoZSBpdGVtLCBjb3VudGluZyBmcm9tIDAKKyAqCisg
KiBHZXRzIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgQG1lbnUuCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdENvbnRleHRNZW51SXRlbSBh
dCBwb3NpdGlvbiBAcG9zaXRpb24gaW4gQG1lbnUsCisgKiAgICBvciAlTlVMTCBpZiB0aGUgcG9z
aXRpb24gaXMgb2ZmIHRoZSBlbmQgb2YgdGhlIEBtZW51LgorICovCitXZWJLaXRDb250ZXh0TWVu
dUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1fYXRfcG9zaXRpb24oV2ViS2l0Q29u
dGV4dE1lbnUqIG1lbnUsIHVuc2lnbmVkIHBvc2l0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19DT05URVhUX01FTlUobWVudSksIDApOworCisgICAgZ3BvaW50ZXIg
aXRlbSA9IGdfbGlzdF9udGhfZGF0YShtZW51LT5wcml2LT5pdGVtcywgcG9zaXRpb24pOworICAg
IHJldHVybiBpdGVtID8gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0pIDogMDsKK30KKwor
LyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZToKKyAqIEBtZW51OiBhICNXZWJLaXRD
b250ZXh0TWVudQorICogQGl0ZW06IHRoZSAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIHRvIHJlbW92
ZQorICoKKyAqIFJlbW92ZXMgQGl0ZW0gZnJvbSB0aGUgQG1lbnUuCisgKiBTZWUgYWxzbyB3ZWJr
aXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoKSB0byByZW1vdmUgYWxsIGl0ZW1zLgorICovCit2
b2lkIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlKFdlYktpdENvbnRleHRNZW51KiBtZW51LCBX
ZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VKG1lbnUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19DT05URVhUX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICBpZiAoIWdfbGlzdF9maW5kKG1lbnUt
PnByaXYtPml0ZW1zLCBpdGVtKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVudS0+cHJpdi0+
aXRlbXMgPSBnX2xpc3RfcmVtb3ZlKG1lbnUtPnByaXYtPml0ZW1zLCBpdGVtKTsKKyAgICBnX29i
amVjdF91bnJlZihpdGVtKTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92
ZV9hbGw6CisgKiBAbWVudTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAqCisgKiBSZW1vdmVzIGFs
bCBpdGVtcyBvZiB0aGUgQG1lbnUuCisgKi8KK3ZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9yZW1v
dmVfYWxsKFdlYktpdENvbnRleHRNZW51KiBtZW51KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0NPTlRFWFRfTUVOVShtZW51KSk7CisKKyAgICBnX2xpc3RfZnJlZV9mdWxsKG1l
bnUtPnByaXYtPml0ZW1zLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVj
dF91bnJlZikpOworICAgIG1lbnUtPnByaXYtPml0ZW1zID0gMDsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjNmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5oCkBAIC0w
LDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAh
ZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxB
VElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRDb250ZXh0TWVudV9oCisjZGVmaW5l
IFdlYktpdENvbnRleHRNZW51X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0NP
TlRFWFRfTUVOVSAgICAgICAgICAgICh3ZWJraXRfY29udGV4dF9tZW51X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VLCBXZWJLaXRDb250
ZXh0TWVudSkpCisjZGVmaW5lIFdFQktJVF9JU19DT05URVhUX01FTlUob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5V
KSkKKyNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9DT05URVhUX01FTlUsIFdlYktp
dENvbnRleHRNZW51Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0NP
TlRFWFRfTUVOVSkpCisjZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQ09OVEVYVF9N
RU5VLCBXZWJLaXRDb250ZXh0TWVudUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENv
bnRleHRNZW51Q2xhc3MgICBXZWJLaXRDb250ZXh0TWVudUNsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdENvbnRleHRNZW51UHJpdmF0ZSBXZWJLaXRDb250ZXh0TWVudVByaXZhdGU7CisKK3N0
cnVjdCBfV2ViS2l0Q29udGV4dE1lbnUgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2Vi
S2l0Q29udGV4dE1lbnVQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRDb250ZXh0
TWVudUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2NvbnRleHRfbWVudV9nZXRfdHlwZSAgICAgICAgICAgICAodm9p
ZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnUgKgord2Via2l0X2NvbnRleHRfbWVu
dV9uZXcgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4
dE1lbnUgKgord2Via2l0X2NvbnRleHRfbWVudV9uZXdfd2l0aF9pdGVtcyAgICAgICAoR0xpc3Qg
ICAgICAgICAgICAgICAgICppdGVtcyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2NvbnRl
eHRfbWVudV9wcmVwZW5kICAgICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnUgICAgICptZW51
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4
dE1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29udGV4dF9tZW51
X2FwcGVuZCAgICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0
ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0
ICAgICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSAqaXRl
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAg
ICAgICAgICAgICAgcG9zaXRpb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb250ZXh0
X21lbnVfbW92ZV9pdGVtICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbnRleHRN
ZW51SXRlbSAqaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgICAgICAgICAgICAgcG9zaXRpb24pOworV0VCS0lUX0FQSSBHTGlzdCAqCit3
ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVu
dSAgICAgKm1lbnUpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfY29udGV4dF9tZW51X2dl
dF9uX2l0ZW1zICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUpOworCitXRUJL
SVRfQVBJIFdlYktpdENvbnRleHRNZW51SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2ZpcnN0
ICAgICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUpOworCitXRUJLSVRf
QVBJIFdlYktpdENvbnRleHRNZW51SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2xhc3QgICAg
ICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUpOworCitXRUJLSVRfQVBJ
IFdlYktpdENvbnRleHRNZW51SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtX2F0
X3Bvc2l0aW9uIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIHBvc2l0aW9u
KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZSAgICAgICAg
ICAgICAgIChXZWJLaXRDb250ZXh0TWVudSAgICAgKm1lbnUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0gKml0ZW0pOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbCAgICAgICAgICAg
KFdlYktpdENvbnRleHRNZW51ICAgICAqbWVudSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENvbnRleHRNZW51QWN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzc5M2Q3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5jcHAKQEAgLTAsMCArMSwzMTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIgorCisjaW5jbHVkZSAiV2ViS2l0
Q29udGV4dE1lbnVBY3Rpb25zUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworYm9vbCB3ZWJraXRDb250
ZXh0TWVudUFjdGlvbklzQ2hlY2thYmxlKFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikK
K3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fQk9MRDoKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lUQUxJQzoK
KyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOREVSTElORToKKyAgICBjYXNl
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUzoKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitDb250ZXh0TWVudUFjdGlvbiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEFjdGlv
blRhZyhXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgc3dpdGNoIChhY3Rp
b24pIHsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTjoKKyAg
ICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOworICAgIGNhc2UgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LOgorICAgICAgICByZXR1cm4gQ29udGV4dE1l
bnVJdGVtVGFnT3Blbkxpbms7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9P
UEVOX0xJTktfSU5fTkVXX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3c7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9ET1dOTE9BRF9MSU5LX1RPX0RJU0s6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZExpbmtUb0Rpc2s7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVt
VGFnQ29weUxpbmtUb0NsaXBib2FyZDsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51
SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRDoKKyAgICAgICAgcmV0dXJuIENvbnRl
eHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOworICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1
cm4gQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQ7CisgICAgY2FzZSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0ZSQU1FX0lOX05FV19XSU5ET1c6CisgICAg
ICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0s6CisgICAgICAgIHJldHVybiBD
b250ZXh0TWVudUl0ZW1UYWdHb0JhY2s7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9HT19GT1JXQVJEOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3
YXJkOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUDoKKyAgICAgICAg
cmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1N0b3A7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9SRUxPQUQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdSZWxv
YWQ7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZOgorICAgICAgICBy
ZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnQ29weTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0NVVDoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0N1dDsKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1BBU1RFOgorICAgICAgICByZXR1cm4g
Q29udGV4dE1lbnVJdGVtVGFnUGFzdGU7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9ERUxFVEU6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGU7Cisg
ICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMOgorICAgICAgICBy
ZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsOworICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51
SXRlbVRhZ0lucHV0TWV0aG9kczsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1VOSUNPREU6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOworICAg
IGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BFTExJTkdfR1VFU1M6CisgICAgICAg
IHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOworICAgIGNhc2UgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORDoKKyAgICAgICAgcmV0dXJuIENv
bnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fSUdOT1JFX1NQRUxMSU5HOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJ
dGVtVGFnSWdub3JlU3BlbGxpbmc7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9MRUFSTl9TUEVMTElORzoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0xlYXJu
U3BlbGxpbmc7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JR05PUkVfR1JB
TU1BUjoKKyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXI7Cisg
ICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9GT05UX01FTlU6CisgICAgICAgIHJl
dHVybiBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0JPTEQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdCb2xk
OworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSVRBTElDOgorICAgICAgICBy
ZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fVU5ERVJMSU5FOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFn
VW5kZXJsaW5lOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1VUTElORToK
KyAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU7CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQ6CisgICAgICAgIHJldHVybiBD
b250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudDsKKyAgICBjYXNlIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fVklERU9fSU5fTkVXX1dJTkRPVzoKKyAgICBjYXNlIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVESU9fSU5fTkVXX1dJTkRPVzoKKyAgICAgICAgcmV0
dXJuIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OworICAgIGNhc2UgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURFT19MSU5LX1RPX0NMSVBCT0FSRDoKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfQVVESU9fTElOS19UT19DTElQ
Qk9BUkQ6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9D
bGlwYm9hcmQ7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVE
SUFfQ09OVFJPTFM6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUNvbnRyb2xzOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01F
RElBX0xPT1A6CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxv
b3A7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxM
U0NSRUVOOgorICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxz
Y3JlZW47CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZOgor
ICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUEFVU0U6CisgICAgICAg
IHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZTsKKyAgICBjYXNlIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEU6CisgICAgICAgIHJldHVybiBDb250ZXh0
TWVudUl0ZW1UYWdNZWRpYU11dGU7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DVVNUT006CisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRpb25U
YWc7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzsKK30KKworV2Vi
S2l0Q29udGV4dE1lbnVBY3Rpb24gd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0
TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSkKK3sKKyAgICBzd2l0Y2ggKG1lbnVJ
dGVtLT5hY3Rpb24oKSkgeworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb246Cisg
ICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT047CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1c7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSzsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgICAgICByZXR1cm4gV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQ7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRDsK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9ORVdfV0lO
RE9XOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICByZXR1cm4g
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSzsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0ZPUldBUkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUDsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1JFTE9BRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6CisgICAgICAg
IHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQ1VUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURTsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0RlbGV0ZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RFTEVURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAg
cmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEw7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHM6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VO
SUNPREU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BFTExJTkdfR1VFU1M7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lHTk9SRV9TUEVMTElORzsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9MRUFSTl9TUEVMTElORzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0lnbm9yZUdyYW1tYXI6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9JR05PUkVfR1JBTU1BUjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51Ogor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9OVF9NRU5VOworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6
CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JVEFMSUM7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9VTkRFUkxJTkU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdPdXRsaW5lOgorICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1VU
TElORTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5UOworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIHJl
dHVybiBtZW51SXRlbS0+dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5l
d1dpbmRvdygpID8KKyAgICAgICAgICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5f
VklERU9fSU5fTkVXX1dJTkRPVyA6IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVE
SU9fSU5fTkVXX1dJTkRPVzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxp
bmtUb0NsaXBib2FyZDoKKyAgICAgICAgcmV0dXJuIG1lbnVJdGVtLT50aXRsZSgpID09IGNvbnRl
eHRNZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpID8KKyAgICAgICAgICAgIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9BUkQgOiBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJEOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICAgICAg
cmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUzsK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICAgICAgcmV0
dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOOworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6CisgICAgICAgIHJldHVybiBt
ZW51SXRlbS0+dGl0bGUoKSA9PSBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSA/CisgICAg
ICAgICAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZIDogV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUEFVU0U7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdNZWRpYU11dGU6CisgICAgICAgIHJldHVybiBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9N
RURJQV9NVVRFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnOgor
ICAgICAgICByZXR1cm4gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VTVE9NOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVy
biBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT007Cit9CisKK1N0cmluZyB3ZWJraXRD
b250ZXh0TWVudUFjdGlvbkdldExhYmVsKFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikK
K3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9MSU5LOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bmsoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9O
RVdfV0lORE9XOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5l
d1dpbmRvdygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURf
TElOS19UT19ESVNLOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRM
aW5rVG9EaXNrKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJ
TktfVE9fQ0xJUEJPQVJEOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnQ29weUxp
bmtUb0NsaXBib2FyZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BF
Tl9JTUFHRV9JTl9ORVdfV0lORE9XOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFn
T3BlbkltYWdlSW5OZXdXaW5kb3coKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0s6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0
ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQ6CisgICAgICAgIHJldHVy
biBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZCgpOworICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XOgorICAg
ICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKTsKKyAg
ICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0s6CisgICAgICAgIHJldHVy
biBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0dPX0ZPUldBUkQ6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdH
b0ZvcndhcmQoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1A6Cisg
ICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCk7CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQ6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0
ZW1UYWdSZWxvYWQoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFk6
CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCk7CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQ6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0
ZW1UYWdDdXQoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1BBU1RFOgor
ICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKTsKKyAgICBjYXNlIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51
SXRlbVRhZ0RlbGV0ZSgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VM
RUNUX0FMTDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpOwor
ICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUzoKKyAgICAg
ICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kcygpOworICAgIGNhc2UgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRN
ZW51SXRlbVRhZ1VuaWNvZGUoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X05PX0dVRVNTRVNfRk9VTkQ6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdOb0d1
ZXNzZXNGb3VuZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JF
X1NQRUxMSU5HOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxp
bmcoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0xFQVJOX1NQRUxMSU5H
OgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpOworICAg
IGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX0dSQU1NQVI6CisgICAgICAg
IHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCk7CisgICAgY2FzZSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9GT05UX01FTlU6CisgICAgICAgIHJldHVybiBjb250ZXh0
TWVudUl0ZW1UYWdGb250TWVudSgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQk9MRDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKTsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lUQUxJQzoKKyAgICAgICAgcmV0dXJuIGNv
bnRleHRNZW51SXRlbVRhZ0l0YWxpYygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fVU5ERVJMSU5FOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnVW5kZXJs
aW5lKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FOgorICAg
ICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpOworICAgIGNhc2UgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5UOgorICAgICAgICByZXR1cm4gY29u
dGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fVklERU9fSU5fTkVXX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuIGNv
bnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCk7CisgICAgY2FzZSBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FVRElPX0lOX05FV19XSU5ET1c6CisgICAgICAgIHJl
dHVybiBjb250ZXh0TWVudUl0ZW1UYWdPcGVuQXVkaW9Jbk5ld1dpbmRvdygpOworICAgIGNhc2Ug
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURFT19MSU5LX1RPX0NMSVBCT0FSRDoK
KyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2Fy
ZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5L
X1RPX0NMSVBCT0FSRDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlBdWRp
b0xpbmtUb0NsaXBib2FyZCgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
VE9HR0xFX01FRElBX0NPTlRST0xTOgorICAgICAgICByZXR1cm4gY29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFDb250cm9scygpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fVE9HR0xFX01FRElBX0xPT1A6CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdU
b2dnbGVNZWRpYUxvb3AoKTsKKyAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VO
VEVSX1ZJREVPX0ZVTExTQ1JFRU46CisgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdF
bnRlclZpZGVvRnVsbHNjcmVlbigpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fTUVESUFfUExBWToKKyAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxh
eSgpOworICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUEFVU0U6Cisg
ICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCk7CisgICAgY2FzZSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFOgorICAgICAgICByZXR1cm4gY29u
dGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCk7CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9OT19BQ1RJT046CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
VVNUT006CisgICAgY2FzZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19HVUVT
UzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
QWN0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1YmQy
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENvbnRleHRNZW51QWN0aW9ucy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0
Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2luY2x1
ZGUgPGdsaWIuaD4KKworI2lmbmRlZiBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNfaAorI2RlZmlu
ZSBXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNfaAorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICog
V2ViS2l0Q29udGV4dE1lbnVBY3Rpb246CisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Tk9fQUNUSU9OOiBObyBhY3Rpb24sIHVzZWQgYnkgc2VwYXJhdG9yIG1lbnUgaXRlbXMuCisgKiBA
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LOiBPcGVuIGN1cnJlbnQgbGluay4K
KyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVzog
T3BlbiBjdXJyZW50IGxpbmsgaW4gYSBuZXcgd2luZG93LgorICogQFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSzogRG93bmxvYWQgbGluayBkZXN0aW5hdGlv
bi4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJE
OiBDb3B5IGxpbmsgbG9jYXRpb24gdG8gdGhlIGNsaXBib2FyZC4KKyAqIEBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1c6IE9wZW4gY3VycmVudCBpbWFn
ZSBpbiBhIG5ldyB3aW5kb3cuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxP
QURfSU1BR0VfVE9fRElTSzogRG93bmxvYWQgY3VycmVudCBpbWFnZS4KKyAqIEBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRDogQ29weSBjdXJyZW50IGlt
YWdlIHRvIHRoZSBjbGlwYm9hcmQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEOiBDb3B5IGN1cmVudCBpbWFnZSBsb2NhdGlvbiB0byB0
aGUgY2xpcGJvYXJkLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fRlJBTUVf
SU5fTkVXX1dJTkRPVzogT3BlbiBjdXJyZW50IGZyYW1lIGluIGEgbmV3IHdpbmRvdy4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLOiBMb2FkIHRoZSBwcmV2aW91cyBoaXN0
b3J5IGl0ZW0uCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRDogTG9h
ZCB0aGUgbmV4dCBoaXN0b3J5IGl0ZW0uCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
U1RPUDogU3RvcCBhbnkgb25nb2luZyBsb2FkaW5nIG9wZXJhdGlvbi4KKyAqIEBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9SRUxPQUQ6IFJlbG9hZCB0aGUgY29uZW50cyBvZiBjdXJyZW50IHZp
ZXcuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWTogQ29weSBjdXJyZW50IHNl
bGVjdGlvbiB0aGUgY2xpcGJvYXJkLgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NV
VDogQ3V0IGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBjbGlwYm9hcmQuCisgKiBAV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fUEFTVEU6IFBhc3RlIGNsaXBib2FyZCBjb250ZW50cy4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEU6IERlbGV0ZSBjdXJyZW50IHNlbGVjdGlv
bi4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMOiBTZWxlY3QgYWxs
IHRleHQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUzogSW5w
dXQgbWV0aG9kcyBtZW51LgorICogQFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREU6
IFVuaWNvZGUgbWVudS4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TUEVMTElOR19H
VUVTUzogQSBwcm9wb3NlZCByZXBsYWNlbWVudCBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuCisgKiBA
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORDogQW4gaW5kaWNhdG9y
IHRoYXQgc3BlbGxjaGVja2luZyBmb3VuZCBubyBwcm9wb3NlZCByZXBsYWNlbWVudHMuCisgKiBA
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX1NQRUxMSU5HOiBDYXVzZXMgdGhlIHNw
ZWxsY2hlY2tlciB0byBpZ25vcmUgdGhlIHdvcmQgZm9yIHRoaXMgc2Vzc2lvbi4KKyAqIEBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9MRUFSTl9TUEVMTElORzogQ2F1c2VzIHRoZSBzcGVsbGNo
ZWNrZXIgdG8gYWRkIHRoZSB3b3JkIHRvIHRoZSBkaWN0aW9uYXJ5LgorICogQFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0lHTk9SRV9HUkFNTUFSOiBJZ25vcmUgZ3JhbW1hci4KKyAqIEBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9GT05UX01FTlU6IEZvbnQgb3B0aW9ucyBtZW51LgorICog
QFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0JPTEQ6IEJvbGQuCisgKiBAV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fSVRBTElDOiBJdGFsaWMuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fVU5ERVJMSU5FOiBVbmRlcmxpbmUuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1VUTElORTogT3V0bGluZS4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQ
RUNUX0VMRU1FTlQ6IE9wZW4gY3VycmVudCBlbGVtZW50IGluIHRoZSBpbnNwZWN0b3IuCisgKiBA
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lORE9XOiBPcGVu
IGN1cnJlbnQgdmlkZW8gZWxlbWVudCBpbiBhIG5ldyB3aW5kb3cuCisgKiBAV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9BVURJT19JTl9ORVdfV0lORE9XOiBPcGVuIGN1cnJlbnQgYXVk
aW8gZWxlbWVudCBpbiBhIG5ldyB3aW5kb3cuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQ09QWV9WSURFT19MSU5LX1RPX0NMSVBCT0FSRDogQ29weSB2aWRlbyBsaW5rIGxvY2F0aW9u
IGluIHRvIHRoZSBjbGlwYm9hcmQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRDogQ29weSBhdWRpbyBsaW5rIGxvY2F0aW9uIGluIHRv
IHRoZSBjbGlwYm9hcmQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01F
RElBX0NPTlRST0xTOiBFbmFibGUgb3IgZGlzYWJsZSBtZWRpYSBjb250cm9scy4KKyAqIEBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUDogRW5hYmxlIG9yIGRpc2Fi
bGUgbWVkaWEgbG9vcC4KKyAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURF
T19GVUxMU0NSRUVOOiBTaG93IGN1cnJlbnQgdmlkZW8gZWxlbWVudCBpbiBmdWxsc2NyZWVuIG1v
ZGUuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWTogUGxheSBjdXJy
ZW50IG1lZGlhIGVsZW1lbnQuCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFf
UEFVU0U6IFBhdXNlIGN1cnJlbnQgbWVkaWEgZWxlbWVudC4KKyAqIEBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9NRURJQV9NVVRFOiBNdXRlIGN1cnJlbnQgbWVkaWEgZWxlbWVudC4KKyAqIEBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT006IEN1c3RvbSBhY3Rpb24gZGVmaW5lZCBi
eSBhcHBsaWNhdGlvbnMuCisgKgorICogRW51bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHN0
b2NrIGFjdGlvbnMgZm9yCisgKiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtPCEtLSAtLT5zCisgKi8K
K3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9O
ID0gMCwKKworICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSywKKyAgICBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywKKyAgICBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJU0ssCisgICAgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csCisgICAgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywKKyAgICBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsCisgICAg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9GUkFNRV9JTl9ORVdfV0lORE9XLAorICAg
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fR09fRk9SV0FSRCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9T
VE9QLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwKKyAgICBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NVVCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwKKyAgICBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fU0VMRUNUX0FMTCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRI
T0RTLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsCisgICAgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fU1BFTExJTkdfR1VFU1MsCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fTk9fR1VFU1NFU19GT1VORCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9JR05PUkVfU1BFTExJTkcsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTEVB
Uk5fU1BFTExJTkcsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSUdOT1JFX0dSQU1N
QVIsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRk9OVF9NRU5VLAorICAgIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0JPTEQsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fSVRBTElDLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOREVSTElORSwKKyAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PVVRMSU5FLAorICAgIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PUEVOX1ZJREVPX0lOX05FV19XSU5ET1csCisgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9BVURJT19JTl9ORVdfV0lORE9XLAorICAgIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9BUkQsCisgICAgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwKKyAgICBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsCisgICAgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1AsCisgICAgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9NRURJQV9QTEFZLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElB
X1BBVVNFLAorICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUsCisKKyAg
ICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT00gPSAxMDAwMAorfSBXZWJLaXRDb250
ZXh0TWVudUFjdGlvbjsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVu
dUFjdGlvbnNQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1
M2JiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENvbnRleHRNZW51QWN0aW9uc1ByaXZhdGUuaApAQCAtMCwwICsxLDMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q29udGV4dE1l
bnVBY3Rpb25zUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdENvbnRleHRNZW51QWN0aW9uc1ByaXZh
dGVfaAorCisjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KKworYm9vbCB3ZWJraXRDb250ZXh0TWVudUFjdGlv
bklzQ2hlY2thYmxlKFdlYktpdENvbnRleHRNZW51QWN0aW9uKTsKK1dlYkNvcmU6OkNvbnRleHRN
ZW51QWN0aW9uIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9uVGFnKFdlYktpdENvbnRl
eHRNZW51QWN0aW9uKTsKK1dlYktpdENvbnRleHRNZW51QWN0aW9uIHdlYmtpdENvbnRleHRNZW51
QWN0aW9uR2V0Rm9yQ29udGV4dE1lbnVJdGVtKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSopOwor
U3RyaW5nIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFiZWwoV2ViS2l0Q29udGV4dE1lbnVB
Y3Rpb24pOworCisjZW5kaWYgLy8gV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudUl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjIyZmUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDb250ZXh0TWVudUl0ZW0uY3BwCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRDb250ZXh0TWVudUl0ZW0uaCIKKworI2luY2x1ZGUgIk11dGFibGVBcnJheS5oIgorI2luY2x1
ZGUgIldlYkNvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURh
dGEuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUFjdGlvbnNQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENv
bnRleHRNZW51UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51SXRlbS5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK3N0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZSB7CisgICAgT3duUHRy
PENvbnRleHRNZW51SXRlbT4gbWVudUl0ZW07CisgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVu
dT4gc3ViTWVudTsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0Q29udGV4dE1lbnVJdGVtLCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW0sIEdfVFlQRV9JTklUSUFMTFlfVU5PV05FRCkKKworc3Rh
dGljIHZvaWQgd2Via2l0Q29udGV4dE1lbnVJdGVtRmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfQ09OVEVY
VF9NRU5VX0lURU0ob2JqZWN0KS0+cHJpdjsKKyAgICBpZiAocHJpdi0+c3ViTWVudSkKKyAgICAg
ICAgd2Via2l0Q29udGV4dE1lbnVTZXRQYXJlbnRJdGVtKHByaXYtPnN1Yk1lbnUuZ2V0KCksIDAp
OworICAgIHByaXYtPn5XZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlKCk7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pbml0
KFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0
ZW1Qcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGl0ZW0sIFdFQktJ
VF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlKTsK
KyAgICBpdGVtLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdENvbnRleHRNZW51
SXRlbVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2NsYXNzX2luaXQoV2ViS2l0Q29udGV4dE1lbnVJdGVtQ2xhc3MqIGl0ZW1DbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGl0ZW1DbGFzcyk7
CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdENvbnRleHRNZW51SXRlbUZpbmFs
aXplOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShpdGVtQ2xhc3MsIHNpemVvZihXZWJL
aXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrQW5kV2Fy
bklmTWVudUhhc1BhcmVudEl0ZW0oV2ViS2l0Q29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgaWYg
KG1lbnUgJiYgd2Via2l0Q29udGV4dE1lbnVHZXRQYXJlbnRJdGVtKG1lbnUpKSB7CisgICAgICAg
IGdfd2FybmluZygiQXR0ZW1wdGluZyB0byBzZXQgYSBXZWJLaXRDb250ZXh0TWVudSBhcyBzdWJt
ZW51IG9mICIKKyAgICAgICAgICAgICAgICAgICJhIFdlYktpdENvbnRleHRNZW51SXRlbSwgYnV0
IHRoZSBtZW51IGlzIGFscmVhZHkgIgorICAgICAgICAgICAgICAgICAgImEgc3VibWVudSBvZiBh
IFdlYktpdENvbnRleHRNZW51SXRlbSIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdENvbnRleHRNZW51SXRl
bVNldFN1Yk1lbnUoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtLCBHUmVmUHRyPFdlYktpdENv
bnRleHRNZW51PiBzdWJNZW51KQoreworICAgIGlmIChjaGVja0FuZFdhcm5JZk1lbnVIYXNQYXJl
bnRJdGVtKHN1Yk1lbnUuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXRlbS0+
cHJpdi0+c3ViTWVudSkKKyAgICAgICAgd2Via2l0Q29udGV4dE1lbnVTZXRQYXJlbnRJdGVtKGl0
ZW0tPnByaXYtPnN1Yk1lbnUuZ2V0KCksIDApOworICAgIGl0ZW0tPnByaXYtPnN1Yk1lbnUgPSBz
dWJNZW51OworICAgIGlmIChzdWJNZW51KQorICAgICAgICB3ZWJraXRDb250ZXh0TWVudVNldFBh
cmVudEl0ZW0oc3ViTWVudS5nZXQoKSwgaXRlbSk7Cit9CisKK1dlYktpdENvbnRleHRNZW51SXRl
bSogd2Via2l0Q29udGV4dE1lbnVJdGVtQ3JlYXRlKFdLQ29udGV4dE1lbnVJdGVtUmVmIHdrSXRl
bSkKK3sKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxM
KSk7CisgICAgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSogaXRlbURhdGEgPSB0b0ltcGwod2tJdGVt
KS0+ZGF0YSgpOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihuZXcg
Q29udGV4dE1lbnVJdGVtKGl0ZW1EYXRhLT50eXBlKCksIGl0ZW1EYXRhLT5hY3Rpb24oKSwgaXRl
bURhdGEtPnRpdGxlKCksIGl0ZW1EYXRhLT5lbmFibGVkKCksIGl0ZW1EYXRhLT5jaGVja2VkKCkp
KTsKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHN1Yk1lbnUgPSBp
dGVtRGF0YS0+c3VibWVudSgpOworICAgIGlmICghc3ViTWVudS5zaXplKCkpCisgICAgICAgIHJl
dHVybiBpdGVtOworCisgICAgUmVmUHRyPE11dGFibGVBcnJheT4gc3ViTWVudUl0ZW1zID0gTXV0
YWJsZUFycmF5OjpjcmVhdGUoKTsKKyAgICBzdWJNZW51SXRlbXMtPnJlc2VydmVDYXBhY2l0eShz
dWJNZW51LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJNZW51LnNpemUo
KTsgKytpKQorICAgICAgICBzdWJNZW51SXRlbXMtPmFwcGVuZChXZWJDb250ZXh0TWVudUl0ZW06
OmNyZWF0ZShzdWJNZW51W2ldKS5nZXQoKSk7CisgICAgd2Via2l0Q29udGV4dE1lbnVJdGVtU2V0
U3ViTWVudShpdGVtLCBhZG9wdEdSZWYod2Via2l0Q29udGV4dE1lbnVDcmVhdGUodG9BUEkoc3Vi
TWVudUl0ZW1zLmdldCgpKSkpKTsKKworICAgIHJldHVybiBpdGVtOworfQorCitzdGF0aWMgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1DcmVhdGVGb3JHdGtJdGVt
KEd0a01lbnVJdGVtKiBtZW51SXRlbSkKK3sKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0
ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NP
TlRFWFRfTUVOVV9JVEVNLCBOVUxMKSk7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6
OmFkb3B0UHRyKG5ldyBDb250ZXh0TWVudUl0ZW0obWVudUl0ZW0pKTsKKyAgICB3ZWJraXRDb250
ZXh0TWVudUl0ZW1TZXRTdWJNZW51RnJvbUd0a01lbnUoaXRlbSwgR1RLX01FTlUoZ3RrX21lbnVf
aXRlbV9nZXRfc3VibWVudShtZW51SXRlbSkpKTsKKworICAgIHJldHVybiBpdGVtOworfQorCit2
b2lkIHdlYmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnVGcm9tR3RrTWVudShXZWJLaXRDb250
ZXh0TWVudUl0ZW0qIGl0ZW0sIEd0a01lbnUqIHN1Yk1lbnUpCit7CisgICAgaWYgKCFzdWJNZW51
KQorICAgICAgICByZXR1cm47CisKKyAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29u
dGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKHN1Yk1lbnUpKSk7CisgICAgaWYgKCFn
X2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2Vi
a2l0Q29udGV4dE1lbnVJdGVtU2V0U3ViTWVudShpdGVtLCBhZG9wdEdSZWYod2Via2l0X2NvbnRl
eHRfbWVudV9uZXcoKSkpOworICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gY2hpbGRyZW4uZ2V0
KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgeworICAgICAg
ICBHUmVmUHRyPEd0a1dpZGdldD4gd2lkZ2V0ID0gR1RLX1dJREdFVChsaXN0SXRlbS0+ZGF0YSk7
CisgICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQuZ2V0KCkpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5F
UihzdWJNZW51KSwgd2lkZ2V0LmdldCgpKTsKKyAgICAgICAgR3RrTWVudUl0ZW0qIG1lbnVJdGVt
ID0gR1RLX01FTlVfSVRFTSh3aWRnZXQubGVha1JlZigpKTsKKyAgICAgICAgZ19vYmplY3RfZm9y
Y2VfZmxvYXRpbmcoR19PQkpFQ1QobWVudUl0ZW0pKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9hcHBlbmQoaXRlbS0+cHJpdi0+c3ViTWVudS5nZXQoKSwgd2Via2l0Q29udGV4dE1lbnVJ
dGVtQ3JlYXRlRm9yR3RrSXRlbShtZW51SXRlbSkpOworICAgIH0KK30KKworR3RrTWVudUl0ZW0q
IHdlYmtpdENvbnRleHRNZW51SXRlbVJlbGVhc2UoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVt
KQoreworICAgIGlmIChpdGVtLT5wcml2LT5zdWJNZW51KSB7CisgICAgICAgIFZlY3RvcjxDb250
ZXh0TWVudUl0ZW0+IHN1Yk1lbnVJdGVtczsKKyAgICAgICAgd2Via2l0Q29udGV4dE1lbnVQb3B1
bGF0ZShpdGVtLT5wcml2LT5zdWJNZW51LmdldCgpLCBzdWJNZW51SXRlbXMpOworICAgICAgICBD
b250ZXh0TWVudSBzdWJNZW51KHBsYXRmb3JtTWVudURlc2NyaXB0aW9uKHN1Yk1lbnVJdGVtcykp
OworICAgICAgICBpdGVtLT5wcml2LT5tZW51SXRlbS0+c2V0U3ViTWVudSgmc3ViTWVudSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0ZW0tPnByaXYtPm1lbnVJdGVtLT5yZWxlYXNlUGxhdGZvcm1E
ZXNjcmlwdGlvbigpOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXc6
CisgKiBAYWN0aW9uOiBhICNHdGtBY3Rpb24KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRD
b250ZXh0TWVudUl0ZW0gZm9yIHRoZSBnaXZlbiBAYWN0aW9uLgorICoKKyAqIFJldHVybnM6IHRo
ZSBuZXdseSBjcmVhdGVkICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2JqZWN0LgorICovCitXZWJL
aXRDb250ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcoR3RrQWN0aW9u
KiBhY3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR1RLX0lTX0FDVElPTihhY3Rp
b24pLCAwKTsKKworICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05U
RVhUX01FTlVfSVRFTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0s
IE5VTEwpKTsKKyAgICBpdGVtLT5wcml2LT5tZW51SXRlbSA9IFdURjo6YWRvcHRQdHIobmV3IENv
bnRleHRNZW51SXRlbShHVEtfTUVOVV9JVEVNKGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRlbShh
Y3Rpb24pKSkpOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtLT5zZXRBY3Rpb24oQ29udGV4dE1l
bnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnKTsKKworICAgIHJldHVybiBpdGVtOworfQorCisvKioK
KyAqIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb246CisgKiBA
YWN0aW9uOiBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9jayBhY3Rpb24KKyAqCisgKiBD
cmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIHRoZSBnaXZlbiBzdG9jayBh
Y3Rpb24uCisgKiBTdG9jayBhY3Rpb25zIGFyZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgV2Vi
S2l0IHNvIHRoYXQsIGZvciBleGFtcGxlLAorICogd2hlbiBhIG1lbnUgaXRlbSBjcmVhdGVkIHdp
dGggYSAlV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCBpcworICogYWN0aXZhdGVkIHRo
ZSBhY3Rpb24gYXNzb2NpYXRlZCB3aWxsIGJlIGhhbmRsZWQgYnkgV2ViS2l0IGFuZCB0aGUgY3Vy
cmVudAorICogbG9hZCBvcGVyYXRpb24gd2lsbCBiZSBzdG9wcGVkLiBZb3UgY2FuIGdldCB0aGUg
I0d0a0FjdGlvbiBvZiBhCisgKiAjV2ViS2l0Q29udGV4dE1lbnVJdGVtIGNyZWF0ZWQgd2l0aCBh
ICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiB3aXRoCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fZ2V0X2FjdGlvbigpIGFuZCBjb25uZWN0IHRvICNHdGtBY3Rpb246OmFjdGl2YXRlIHNpZ25h
bAorICogdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgaXRlbSBpcyBhY3RpdmF0ZWQuIEJ1dCB5b3Ug
Y2FuJ3QgcHJldmVudCB0aGUgYXNvY2lhdGVkCisgKiBhY3Rpb24gZnJvbSBiZWluZyBwZXJmb3Jt
ZWQuCisgKgorICogUmV0dXJuczogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51
SXRlbSBvYmplY3QuCisgKi8KK1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBh
Y3Rpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYWN0aW9uID4gV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OICYmIGFjdGlvbiA8IFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NVU1RPTSwgMCk7CisKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRf
TUVOVV9JVEVNLCBOVUxMKSk7CisgICAgQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlID0gd2Via2l0
Q29udGV4dE1lbnVBY3Rpb25Jc0NoZWNrYWJsZShhY3Rpb24pID8gQ2hlY2thYmxlQWN0aW9uVHlw
ZSA6IEFjdGlvblR5cGU7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRy
KG5ldyBDb250ZXh0TWVudUl0ZW0odHlwZSwgd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRBY3Rp
b25UYWcoYWN0aW9uKSwgd2Via2l0Q29udGV4dE1lbnVBY3Rpb25HZXRMYWJlbChhY3Rpb24pKSk7
CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uX3dpdGhfbGFiZWw6CisgKiBAYWN0aW9uOiBhICNXZWJL
aXRDb250ZXh0TWVudUFjdGlvbiBzdG9jayBhY3Rpb24KKyAqIEBsYWJlbDogYSBjdXN0b20gbGFi
ZWwgdGV4dCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgcHJlZGVmaW5lZCBvbmUKKyAqCisgKiBDcmVh
dGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gZm9yIHRoZSBnaXZlbiBzdG9jayBhY3Rp
b24gdXNpbmcgdGhlIGdpdmVuIEBsYWJlbC4KKyAqIFN0b2NrIGFjdGlvbnMgaGF2ZSBhIHByZWRl
ZmluZWQgbGFiZWwsIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiAjV2Vi
S2l0Q29udGV4dE1lbnVJdGVtIGZvciBhICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBidXQgdXNp
bmcgYSBjdXN0b20gbGFiZWwuCisgKgorICogUmV0dXJuczogdGhlIG5ld2x5IGNyZWF0ZWQgI1dl
YktpdENvbnRleHRNZW51SXRlbSBvYmplY3QuCisgKi8KK1dlYktpdENvbnRleHRNZW51SXRlbSog
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbl93aXRoX2xhYmVs
KFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgZ2NoYXIqIGxhYmVsKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGFjdGlvbiA+IFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX05PX0FDVElPTiAmJiBhY3Rpb24gPCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNU
T00sIDApOworCisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRF
WFRfTUVOVV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwg
TlVMTCkpOworICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSA9IHdlYmtpdENvbnRleHRNZW51
QWN0aW9uSXNDaGVja2FibGUoYWN0aW9uKSA/IENoZWNrYWJsZUFjdGlvblR5cGUgOiBBY3Rpb25U
eXBlOworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihuZXcgQ29udGV4
dE1lbnVJdGVtKHR5cGUsIHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0QWN0aW9uVGFnKGFjdGlv
biksIFN0cmluZzo6ZnJvbVVURjgobGFiZWwpKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKwor
LyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudToKKyAqIEBs
YWJlbDogdGhlIG1lbnUgaXRlbSBsYWJlbCB0ZXh0CisgKiBAc3VibWVudTogYSAjV2ViS2l0Q29u
dGV4dE1lbnUgdG8gc2V0CisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0Q29udGV4dE1lbnVJ
dGVtIHVzaW5nIHRoZSBnaXZlbiBAbGFiZWwgd2l0aCBhIHN1Ym1lbnUuCisgKgorICogUmV0dXJu
czogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdENvbnRleHRNZW51SXRlbSBvYmplY3QuCisgKi8K
K1dlYktpdENvbnRleHRNZW51SXRlbSogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRo
X3N1Ym1lbnUoY29uc3QgZ2NoYXIqIGxhYmVsLCBXZWJLaXRDb250ZXh0TWVudSogc3VibWVudSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsYWJlbCwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShzdWJtZW51KSwgMCk7CisKKyAgICBpZiAo
Y2hlY2tBbmRXYXJuSWZNZW51SGFzUGFyZW50SXRlbShzdWJtZW51KSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9N
RU5VX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBOVUxM
KSk7CisgICAgaXRlbS0+cHJpdi0+bWVudUl0ZW0gPSBXVEY6OmFkb3B0UHRyKG5ldyBDb250ZXh0
TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZywg
U3RyaW5nOjpmcm9tVVRGOChsYWJlbCkpKTsKKyAgICBpdGVtLT5wcml2LT5zdWJNZW51ID0gc3Vi
bWVudTsKKyAgICB3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0oc3VibWVudSwgaXRlbSk7
CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fbmV3X3NlcGFyYXRvcjoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRDb250ZXh0TWVu
dUl0ZW0gcmVwcmVzZW50aW5nIGEgc2VwYXJhdG9yLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXds
eSBjcmVhdGVkICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gb2JqZWN0LgorICovCitXZWJLaXRDb250
ZXh0TWVudUl0ZW0qIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKHZvaWQp
Cit7CisgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVO
VV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgTlVMTCkp
OworICAgIGl0ZW0tPnByaXYtPm1lbnVJdGVtID0gV1RGOjphZG9wdFB0cihuZXcgQ29udGV4dE1l
bnVJdGVtKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLCBTdHJpbmco
KSkpOworCisgICAgcmV0dXJuIGl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9hY3Rpb246CisgKiBAaXRlbTogYSAjV2ViS2l0Q29udGV4dE1lbnVJdGVtCisg
KgorICogR2V0cyB0aGUgYWN0aW9uIGFzc29jaWF0ZWQgdG8gQGl0ZW0uCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0d0a0FjdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSAjV2Vi
S2l0Q29udGV4dE1lbnVJdGVtLAorICogICAgb3IgJU5VTEwgaWYgQGl0ZW0gaXMgYSBzZXBhcmF0
b3IuCisgKi8KK0d0a0FjdGlvbiogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24o
V2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtKSwgMCk7CisKKyAgICByZXR1cm4gaXRl
bS0+cHJpdi0+bWVudUl0ZW0tPmd0a0FjdGlvbigpOworfQorCisvKioKKyAqIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uOgorICogQGl0ZW06IGEgI1dlYktpdENvbnRl
eHRNZW51SXRlbQorICoKKyAqIEdldHMgdGhlICNXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBvZiBA
aXRlbS4gSWYgdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gd2FzIG5vdAorICogY3JlYXRlZCBm
b3IgYSBzdG9jayBhY3Rpb24gJVdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSB3aWxs
IGJlCisgKiByZXR1cm5lZC4gSWYgdGhlICNXZWJLaXRDb250ZXh0TWVudUl0ZW0gaXMgYSBzZXBh
cmF0b3IgJVdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTgorICogd2lsbCBiZSBy
ZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI1dlYktpdENvbnRleHRNZW51QWN0aW9uIG9m
IEBpdGVtCisgKi8KK1dlYktpdENvbnRleHRNZW51QWN0aW9uIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9nZXRfc3RvY2tfYWN0aW9uKFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbSks
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7CisKKyAgICByZXR1cm4gd2Vi
a2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0oaXRlbS0+cHJpdi0+bWVu
dUl0ZW0uZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19z
ZXBhcmF0b3I6CisgKiBAaXRlbTogYSAjV2ViS2l0Q29udGV4dE1lbnVJdGVtCisgKgorICogQ2hl
Y2tzIHdoZXRoZXIgQGl0ZW0gaXMgYSBzZXBhcmF0b3IuCisgKgorICogUmV0dXJuczogJVRSVUUg
aXMgQGl0ZW0gaXMgYSBzZXBhcmF0b3Igb3IgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVh
biB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKFdlYktpdENvbnRleHRNZW51
SXRlbSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09OVEVY
VF9NRU5VX0lURU0oaXRlbSksIEZBTFNFKTsKKworICAgIHJldHVybiBpdGVtLT5wcml2LT5tZW51
SXRlbS0+dHlwZSgpID09IFNlcGFyYXRvclR5cGU7Cit9CisKKy8qKgorICogd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX3NldF9zdWJtZW51OgorICogQGl0ZW06IGEgI1dlYktpdENvbnRleHRNZW51
SXRlbQorICogQHN1Ym1lbnU6IChhbGxvdy1ub25lKTogYSAjV2ViS2l0Q29udGV4dE1lbnUKKyAq
CisgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBAaXRlbSBzdWJtZW51LiBJZiBAc3VibWVudSBpcyAl
TlVMTCB0aGUgY3VycmVudAorICogc3VibWVudSBvZiBAaXRlbSBpcyByZW1vdmVkLgorICovCit2
b2lkIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShXZWJLaXRDb250ZXh0TWVu
dUl0ZW0qIGl0ZW0sIFdlYktpdENvbnRleHRNZW51KiBzdWJtZW51KQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW0pKTsKKworICAgIGlmIChp
dGVtLT5wcml2LT5zdWJNZW51ID09IHN1Ym1lbnUpCisgICAgICAgIHJldHVybjsKKworICAgIHdl
YmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnUoaXRlbSwgc3VibWVudSk7Cit9CisKKy8qKgor
ICogd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51OgorICogQGl0ZW06IGEgI1dl
YktpdENvbnRleHRNZW51SXRlbQorICoKKyAqIEdldHMgdGhlIHN1Ym1lbnUgb2YgQGl0ZW0uCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdENvbnRleHRNZW51IHJl
cHJlc2VudGluZyB0aGUgc3VibWVudSBvZgorICogICAgQGl0ZW0gb3IgJU5VTEwgaWYgQGl0ZW0g
ZG9lc24ndCBoYXZlIGEgc3VibWVudS4KKyAqLworV2ViS2l0Q29udGV4dE1lbnUqIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0p
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVN
KGl0ZW0pLCAwKTsKKworICAgIHJldHVybiBpdGVtLT5wcml2LT5zdWJNZW51LmdldCgpOworfQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250
ZXh0TWVudUl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDkx
MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb250ZXh0TWVudUl0ZW0uaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93
ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRDb250ZXh0TWVudUl0ZW1faAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUl0ZW1faAor
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnUuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX1RZUEVfQ09OVEVYVF9NRU5VX0lURU0gICAgICAgICAgICAod2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfSVRF
TShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNKSkKKyNk
ZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNLCBX
ZWJLaXRDb250ZXh0TWVudUl0ZW1DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19DT05URVhUX01F
TlVfSVRFTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9DT05URVhUX01F
TlVfSVRFTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfVFlQRV9DT05URVhUX01FTlVfSVRFTSwgV2ViS2l0Q29udGV4dE1lbnVJdGVtQ2xh
c3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnVJdGVtQ2xhc3MgICBXZWJL
aXRDb250ZXh0TWVudUl0ZW1DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRDb250ZXh0TWVu
dUl0ZW1Qcml2YXRlIFdlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGU7CisKK3N0cnVjdCBfV2Vi
S2l0Q29udGV4dE1lbnVJdGVtIHsKKyAgICBHSW5pdGlhbGx5VW5vd25lZCBwYXJlbnQ7CisKKyAg
ICBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRDb250ZXh0TWVudUl0ZW1DbGFzcyB7CisgICAgR0luaXRpYWxseVVub3duZWRDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJ
IFdlYktpdENvbnRleHRNZW51SXRlbSAqCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEd0a0FjdGlvbiAgICAgICAgICAgICAgKmFjdGlv
bik7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24gICAgICAgICAgICAoV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb24gYWN0aW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudUl0ZW0g
Kgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbl93aXRoX2xh
YmVsIChXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAg
ICAgICAgKmxhYmVsKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudUl0ZW0gKgord2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUgICAgICAgICAgICAgICAgIChj
b25zdCBnY2hhciAgICAgICAgICAgICpsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUgICAgICAq
c3VibWVudSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVJdGVtICoKK3dlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yICAgICAgICAgICAgICAgICAgICAodm9pZCk7
CisKK1dFQktJVF9BUEkgR3RrQWN0aW9uICoKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
YWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29udGV4dE1lbnVJdGVtICAqaXRl
bSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24KK3dlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uICAgICAgICAgICAgICAgICAoV2ViS2l0Q29udGV4
dE1lbnVJdGVtICAqaXRlbSk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9pc19zZXBhcmF0b3IgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q29udGV4
dE1lbnVJdGVtICAqaXRlbSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX3NldF9zdWJtZW51ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDb250ZXh0TWVu
dUl0ZW0gICppdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRDb250ZXh0TWVudSAgICAgICpzdWJtZW51KTsKKworV0VC
S0lUX0FQSSBXZWJLaXRDb250ZXh0TWVudSAqCit3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0
X3N1Ym1lbnUgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdENvbnRleHRNZW51SXRlbSAgKml0
ZW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbVByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzg4MDAzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1l
bnVJdGVtUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRD
b250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdENv
bnRleHRNZW51SXRlbSogd2Via2l0Q29udGV4dE1lbnVJdGVtQ3JlYXRlKFdLQ29udGV4dE1lbnVJ
dGVtUmVmKTsKK0d0a01lbnVJdGVtKiB3ZWJraXRDb250ZXh0TWVudUl0ZW1SZWxlYXNlKFdlYktp
dENvbnRleHRNZW51SXRlbSopOwordm9pZCB3ZWJraXRDb250ZXh0TWVudUl0ZW1TZXRTdWJNZW51
RnJvbUd0a01lbnUoV2ViS2l0Q29udGV4dE1lbnVJdGVtKiwgR3RrTWVudSopOworCisjZW5kaWYg
Ly8gV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkM2YxODAxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdENvbnRleHRNZW51UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dENvbnRleHRNZW51UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudS5oIgor
I2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0Q29udGV4dE1lbnUqIHdlYmtpdENv
bnRleHRNZW51Q3JlYXRlKFdLQXJyYXlSZWYgd2tJdGVtcyk7Cit2b2lkIHdlYmtpdENvbnRleHRN
ZW51UG9wdWxhdGUoV2ViS2l0Q29udGV4dE1lbnUqLCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1l
bnVJdGVtPiYpOwordm9pZCB3ZWJraXRDb250ZXh0TWVudVNldFBhcmVudEl0ZW0oV2ViS2l0Q29u
dGV4dE1lbnUqLCBXZWJLaXRDb250ZXh0TWVudUl0ZW0qKTsKK1dlYktpdENvbnRleHRNZW51SXRl
bSogd2Via2l0Q29udGV4dE1lbnVHZXRQYXJlbnRJdGVtKFdlYktpdENvbnRleHRNZW51Kik7CisK
KyNlbmRpZiAvLyBXZWJLaXRDb250ZXh0TWVudVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCmluZGV4IDk2YmNiNGUuLjczM2Jm
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERl
ZmluZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZp
bmVzLmgKQEAgLTMyLDkgKzMyLDExIEBACiAKICNpbmNsdWRlIDxnbGliLmg+CiAKLXR5cGVkZWYg
c3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlvbiBXZWJLaXRQcmludE9wZXJhdGlvbjsKLXR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciBXZWJLaXRGaW5kQ29udHJvbGxlcjsKLXR5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3ICAgICAgICBXZWJLaXRXZWJWaWV3OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFByaW50T3BlcmF0aW9uICBXZWJLaXRQcmludE9wZXJhdGlvbjsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciAgV2ViS2l0RmluZENvbnRyb2xsZXI7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyAgICAgICAgIFdlYktpdFdlYlZpZXc7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q29udGV4dE1lbnUgICAgIFdlYktpdENvbnRleHRNZW51Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENvbnRleHRNZW51SXRlbSBXZWJLaXRDb250ZXh0TWVudUl0
ZW07CiAKICNpZmRlZiBHX09TX1dJTjMyCiAjICAgIGlmZGVmIEJVSUxESU5HX1dFQktJVApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApp
bmRleCA3ZjU3NjRlLi41MjQyOTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUg
IldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExp
c3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q29u
dGV4dE1lbnVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RW51bVR5cGVzLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNsdWRlICJXZWJLaXRGdWxsc2NyZWVuQ2xpZW50LmgiCkBA
IC01MCw2ICs1Miw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0ljb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxp
dGllcy5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgpAQCAtODMsNiArODYsOCBAQCBlbnVtIHsKIAogICAgIFJVTl9GSUxFX0NI
T09TRVIsCiAKKyAgICBDT05URVhUX01FTlUsCisKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAt
OTMzLDYgKzkzOCw2MiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChX
ZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIHdl
YmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKICAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLwogICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpOworCisgICAgLyoqCisgICAg
ICogV2ViS2l0V2ViVmlldzo6Y29udGV4dC1tZW51OgorICAgICAqIEB3ZWJfdmlldzogdGhlICNX
ZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBjb250
ZXh0X21lbnU6IHRoZSBwcm9wb3NlZCAjV2ViS2l0Q29udGV4dE1lbnUKKyAgICAgKiBAZXZlbnQ6
IHRoZSAjR2RrRXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRleHQgbWVudQorICAgICAqIEBo
aXRfdGVzdF9yZXN1bHQ6IGEgI1dlYktpdEhpdFRlc3RSZXN1bHQKKyAgICAgKgorICAgICAqIEVt
bWl0ZWQgd2hlbiBhIGNvbnRleHQgbWVudSBpcyBhYm91dCB0byBiZSBkaXNwbGF5ZWQgdG8gZ2l2
ZSB0aGUgYXBwbGljYXRpb24KKyAgICAgKiBhIGNoYW5jZSB0byBjdXN0b21pemUgdGhlIHByb3Bv
c2VkIG1lbnUsIHByZXZlbnQgdGhlIG1lbnUgZnJvbSBiZWluZyBkaXNwbGF5ZWQKKyAgICAgKiBv
ciBidWlsZCBpdHMgb3duIGNvbnRleHQgbWVudS4KKyAgICAgKiA8aXRlbWl6ZWRsaXN0PgorICAg
ICAqIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAgVG8gY3VzdG9taXplIHRoZSBwcm9wb3NlZCBt
ZW51IHlvdSBjYW4gdXNlIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZCgpLAorICAgICAqICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZCgpIG9yIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0
KCkgdG8gYWRkIG5ldworICAgICAqICAjV2ViS2l0Q29udGV4dE1lbnVJdGVtPCEtLSAtLT5zIHRv
IEBjb250ZXh0X21lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKCkKKyAgICAgKiAg
dG8gcmVvcmRlciBleGlzdGluZyBpdGVtcywgb3Igd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUo
KSB0byByZW1vdmUgYW4KKyAgICAgKiAgZXhpc3RpbmcgaXRlbS4gVGhlIHNpZ25hbCBoYW5kbGVy
IHNob3VsZCByZXR1cm4gJUZBTFNFLCBhbmQgdGhlIG1lbnUgcmVwcmVzZW50ZWQKKyAgICAgKiAg
YnkgQGNvbnRleHRfbWVudSB3aWxsIGJlIHNob3duLgorICAgICAqIDwvcGFyYT48L2xpc3RpdGVt
PgorICAgICAqIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAgVG8gcHJldmVudCB0aGUgbWVudSBm
cm9tIGJlaW5nIGRpc3BsYXllZCB5b3UgY2FuIGp1c3QgY29ubmVjdCB0byB0aGlzIHNpZ25hbAor
ICAgICAqICBhbmQgcmV0dXJuICVUUlVFIHNvIHRoYXQgdGhlIHByb3Bvc2VkIG1lbnUgd2lsbCBu
b3QgYmUgc2hvd24uCisgICAgICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICogPGxpc3RpdGVt
PjxwYXJhPgorICAgICAqICBUbyBidWlsZCB5b3VyIG93biBtZW51LCB5b3UgY2FuIHJlbW92ZSBh
bGwgaXRlbXMgZnJvbSB0aGUgcHJvcG9zZWQgbWVudSB3aXRoCisgICAgICogIHdlYmtpdF9jb250
ZXh0X21lbnVfcmVtb3ZlX2FsbCgpLCBhZGQgeW91ciBvd24gaXRlbXMgYW5kIHJldHVybiAlRkFM
U0Ugc28KKyAgICAgKiAgdGhhdCB0aGUgbWVudSB3aWxsIGJlIHNob3duLiBZb3UgY2FuIGFsc28g
aWdub3JlIHRoZSBwcm9wb3NlZCAjV2ViS2l0Q29udGV4dE1lbnUsCisgICAgICogIGJ1aWxkIHlv
dXIgb3duICNHdGtNZW51IGFuZCByZXR1cm4gJVRSVUUgdG8gcHJldmVudCB0aGUgcHJvcG9zZWQg
bWVudSBmcm9tIGJlaW5nIHNob3duLgorICAgICAqIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAq
IDxsaXN0aXRlbT48cGFyYT4KKyAgICAgKiAgSWYgeW91IGp1c3Qgd2FudCB0aGUgZGVmYXVsdCBt
ZW51IHRvIGJlIHNob3duIGFsd2F5cywgc2ltcGx5IGRvbid0IGNvbm5lY3QgdG8gdGhpcworICAg
ICAqICBzaWduYWwgYmVjYXVzZSBzaG93aW5nIHRoZSBwcm9wb3NlZCBjb250ZXh0IG1lbnUgaXMg
dGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorICAgICAqIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAq
IDwvaXRlbWl6ZWRsaXN0PgorICAgICAqCisgICAgICogSWYgdGhlIHNpZ25hbCBoYW5kbGVyIHJl
dHVybnMgJUZBTFNFIHRoZSBjb250ZXh0IG1lbnUgcmVwcmVzZW50ZWQgYnkgQGNvbnRleHRfbWVu
dQorICAgICAqIHdpbGwgYmUgc2hvd24sIGlmIGl0IHJldHVybiAlVFJVRSB0aGUgY29udGV4dCBt
ZW51IHdpbGwgbm90IGJlIHNob3duLgorICAgICAqCisgICAgICogVGhlIHByb3Bvc2VkICNXZWJL
aXRDb250ZXh0TWVudSBwYXNzZWQgaW4gQGNvbnRleHRfbWVudSBhcmd1bWVudCBpcyBvbmx5IHZh
bGlkCisgICAgICogZHVyaW5nIHRoZSBzaWduYWwgZW1pc3Npb24uCisgICAgICoKKyAgICAgKiBS
ZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBm
b3IgdGhlIGV2ZW50LgorICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1
cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tDT05URVhUX01FTlVdID0KKyAgICAgICAgZ19z
aWduYWxfbmV3KCJjb250ZXh0LW1lbnUiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JV
Tl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgY29udGV4dF9tZW51KSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2Fj
Y3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9t
YXJzaGFsX0JPT0xFQU5fX09CSkVDVF9CT1hFRF9PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0NP
TlRFWFRfTUVOVSwKKyAgICAgICAgICAgICAgICAgICAgIEdES19UWVBFX0VWRU5UIHwgR19TSUdO
QUxfVFlQRV9TVEFUSUNfU0NPUEUsCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9I
SVRfVEVTVF9SRVNVTFQpOwogfQogCiBzdGF0aWMgYm9vbCB1cGRhdGVSZXBsYWNlQ29udGVudFN0
YXR1cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQpA
QCAtMTE3MiwxNCArMTIzMyw2IEBAIHZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVx
dWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlCiAgICAgZ19zaWdu
YWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAm
cmV0dXJuVmFsdWUpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBw
ZW5kRGVmYXVsdE1lbnVJdGVtcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0FycmF5UmVmIHdr
UHJvcG9zZWRNZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgY29udGV4dE1lbnVJdGVtcykK
LXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKHdrUHJvcG9zZWRN
ZW51KTsgKytpKSB7Ci0gICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIHdrSXRlbSA9IHN0YXRp
Y19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tQcm9w
b3NlZE1lbnUsIGkpKTsKLSAgICAgICAgY29udGV4dE1lbnVJdGVtcy5hcHBlbmQodG9JbXBsKHdr
SXRlbSktPmRhdGEoKS0+Y29yZSgpKTsKLSAgICB9Ci19Ci0KIHN0YXRpYyBib29sIHdlYmtpdFdl
YlZpZXdTaG91bGRTaG93SW5wdXRNZXRob2RzTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ewogICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKEdU
S19XSURHRVQod2ViVmlldykpOwpAQCAtMTE5MSwzMyArMTI0NCw2NSBAQCBzdGF0aWMgYm9vbCB3
ZWJraXRXZWJWaWV3U2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKICAgICByZXR1cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKIH0KIAotc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZElucHV0TWV0aG9kc01lbnVJdGVtKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBjb250ZXh0TWVudUl0ZW1z
KQorc3RhdGljIGludCBnZXRVbmljb2RlTWVudUl0ZW1Qb3NpdGlvbihXZWJLaXRDb250ZXh0TWVu
dSogY29udGV4dE1lbnUpCit7CisgICAgR0xpc3QqIGl0ZW1zID0gd2Via2l0X2NvbnRleHRfbWVu
dV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworICAgIEdMaXN0KiBpdGVyOworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKGl0ZXIgPSBpdGVtcywgaSA9IDA7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4
dChpdGVyKSwgKytpKSB7CisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdF
QktJVF9DT05URVhUX01FTlVfSVRFTShpdGVyLT5kYXRhKTsKKworICAgICAgICBpZiAod2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rp
b24oaXRlbSkgPT0gV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSkKKyAgICAgICAg
ICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51SXRlbShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUpCiB7CiAgICAgaWYg
KCF3ZWJraXRXZWJWaWV3U2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUod2ViVmlldykpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIFBsYWNlIHRoZSBpbSBjb250ZXh0IG1lbnUgaXRlbSByaWdo
dCBiZWZvcmUgdGhlIHVuaWNvZGUgbWVudSBpdGVtCisgICAgLy8gaWYgaXQncyBwcmVzZW50Lgor
ICAgIGludCB1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbiA9IGdldFVuaWNvZGVNZW51SXRlbVBvc2l0
aW9uKGNvbnRleHRNZW51KTsKKyAgICBpZiAodW5pY29kZU1lbnVJdGVtUG9zaXRpb24gPT0gLTEp
CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKwogICAgIEd0a0lNQ29udGV4dCog
aW1Db250ZXh0ID0gd2Via2l0V2ViVmlld0Jhc2VHZXRJTUNvbnRleHQoV0VCS0lUX1dFQl9WSUVX
X0JBU0Uod2ViVmlldykpOwogICAgIEd0a01lbnUqIGltQ29udGV4dE1lbnUgPSBHVEtfTUVOVShn
dGtfbWVudV9uZXcoKSk7CiAgICAgZ3RrX2ltX211bHRpY29udGV4dF9hcHBlbmRfbWVudWl0ZW1z
KEdUS19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSwgR1RLX01FTlVfU0hFTEwoaW1Db250ZXh0
TWVudSkpOwotICAgIENvbnRleHRNZW51IHN1Yk1lbnUoaW1Db250ZXh0TWVudSk7Ci0KLSAgICBD
b250ZXh0TWVudUl0ZW0gc2VwYXJhdG9yKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z05vQWN0aW9uLCBTdHJpbmcoKSk7Ci0gICAgY29udGV4dE1lbnVJdGVtcy5hcHBlbmQoc2VwYXJh
dG9yKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ05vQWN0aW9uLCBfKCJJbnB1dCBfTWV0aG9kcyIpLCAmc3ViTWVudSk7Ci0gICAg
Y29udGV4dE1lbnVJdGVtcy5hcHBlbmQobWVudUl0ZW0pOworICAgIFdlYktpdENvbnRleHRNZW51
SXRlbSogbWVudUl0ZW0gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tf
YWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMpOworICAgIHdl
YmtpdENvbnRleHRNZW51SXRlbVNldFN1Yk1lbnVGcm9tR3RrTWVudShtZW51SXRlbSwgaW1Db250
ZXh0TWVudSk7CisgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIG1l
bnVJdGVtLCB1bmljb2RlTWVudUl0ZW1Qb3NpdGlvbik7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmll
d1BvcHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV0tBcnJheVJlZiB3
a1Byb3Bvc2VkTWVudSwgV0tIaXRUZXN0UmVzdWx0UmVmIHdrSGl0VGVzdFJlc3VsdCkKIHsKLSAg
ICBXZWJDb250ZXh0TWVudVByb3h5R3RrKiBjb250ZXh0TWVudSA9IHdlYmtpdFdlYlZpZXdCYXNl
R2V0QWN0aXZlQ29udGV4dE1lbnVQcm94eShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7
CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JB
U0Uod2ViVmlldyk7CisgICAgV2ViQ29udGV4dE1lbnVQcm94eUd0ayogY29udGV4dE1lbnVQcm94
eSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0QWN0aXZlQ29udGV4dE1lbnVQcm94eSh3ZWJWaWV3QmFz
ZSk7CiAgICAgQVNTRVJUKGNvbnRleHRNZW51KTsKIAotICAgIFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0+IGNvbnRleHRNZW51SXRlbXM7Ci0gICAgd2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZERl
ZmF1bHRNZW51SXRlbXMod2ViVmlldywgd2tQcm9wb3NlZE1lbnUsIGNvbnRleHRNZW51SXRlbXMp
OworICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IGNvbnRleHRNZW51ID0gYWRvcHRHUmVm
KHdlYmtpdENvbnRleHRNZW51Q3JlYXRlKHdrUHJvcG9zZWRNZW51KSk7CiAgICAgaWYgKFdLSGl0
VGVzdFJlc3VsdElzQ29udGVudEVkaXRhYmxlKHdrSGl0VGVzdFJlc3VsdCkpCi0gICAgICAgIHdl
YmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51SXRlbSh3ZWJWaWV3LCBj
b250ZXh0TWVudUl0ZW1zKTsKKyAgICAgICAgd2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZElu
cHV0TWV0aG9kc01lbnVJdGVtKHdlYlZpZXcsIGNvbnRleHRNZW51LmdldCgpKTsKKworICAgIEdS
ZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IGFkb3B0R1JlZih3ZWJr
aXRIaXRUZXN0UmVzdWx0Q3JlYXRlKHdrSGl0VGVzdFJlc3VsdCkpOworICAgIEdPd25QdHI8R2Rr
RXZlbnQ+IGNvbnRleHRNZW51RXZlbnQod2Via2l0V2ViVmlld0Jhc2VUYWtlQ29udGV4dE1lbnVF
dmVudCh3ZWJWaWV3QmFzZSkpOworCisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19z
aWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NPTlRFWFRfTUVOVV0sIDAsIGNvbnRleHRNZW51
LmdldCgpLCBjb250ZXh0TWVudUV2ZW50LmdldCgpLCBoaXRUZXN0UmVzdWx0LmdldCgpLCAmcmV0
dXJuVmFsdWUpOworICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
VmVjdG9yPENvbnRleHRNZW51SXRlbT4gY29udGV4dE1lbnVJdGVtczsKKyAgICB3ZWJraXRDb250
ZXh0TWVudVBvcHVsYXRlKGNvbnRleHRNZW51LmdldCgpLCBjb250ZXh0TWVudUl0ZW1zKTsKKyAg
ICBjb250ZXh0TWVudVByb3h5LT5wb3B1bGF0ZShjb250ZXh0TWVudUl0ZW1zKTsKIAotICAgIGNv
bnRleHRNZW51LT5wb3B1bGF0ZShjb250ZXh0TWVudUl0ZW1zKTsKKyAgICAvLyBDbGVhciB0aGUg
bWVudSB0byBtYWtlIHN1cmUgaXQncyB1c2VsZXNzIGFmdGVyIHNpZ25hbCBlbWlzc2lvbi4KKyAg
ICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUuZ2V0KCkpOwogfQog
CiAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaAppbmRleCA3MTZmYmJkLi40MjZjZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0xNTgsNiArMTU4LDEwIEBAIHN0cnVj
dCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBnYm9vbGVhbiAgICgqIGxlYXZlX2Z1bGxzY3Jl
ZW4pICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKICAgICBnYm9v
bGVhbiAgICgqIHJ1bl9maWxlX2Nob29zZXIpICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAg
ICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAqcmVxdWVzdCk7CisgICAgZ2Jvb2xlYW4gICAoKiBj
b250ZXh0X21lbnUpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICp3ZWJfdmll
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q29udGV4
dE1lbnUgICAgICAgICAgKmNvbnRleHRfbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2RrRXZlbnQgICAgICAgICAgICAgICAgICAgKmV2ZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAg
ICAgICAqaGl0X3Rlc3RfcmVzdWx0KTsKIAogICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBh
bnNpb24gKi8KICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cAppbmRleCBhMmNjMWQ5Li5iN2ZmYzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC00Niw2ICs0Niw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
cmFnRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0ljb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0dPd25QdHJHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0d0a0NsaWNrQ291bnRlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0d0a1V0aWxpdGllcy5oPgpAQCAtOTQsNiArOTUsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSB7CiAjZW5kaWYKICAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXc7CiAg
ICAgdW5zaWduZWQgaW5zcGVjdG9yVmlld0hlaWdodDsKKyAgICBHT3duUHRyPEdka0V2ZW50PiBj
b250ZXh0TWVudUV2ZW50OwogICAgIFdlYkNvbnRleHRNZW51UHJveHlHdGsqIGFjdGl2ZUNvbnRl
eHRNZW51UHJveHk7CiB9OwogCkBAIC00NDgsNiArNDUwLDEwIEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRXZWJWaWV3QmFzZUJ1dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2
ZW50QnV0CiAKICAgICBpZiAoIXByaXYtPmNsaWNrQ291bnRlci5zaG91bGRQcm9jZXNzQnV0dG9u
RXZlbnQoYnV0dG9uRXZlbnQpKQogICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIC8vIElmIGl0
J3MgYSByaWdodCBjbGljayBldmVudCBzYXZlIGl0IGFzIGEgcG9zc2libGUgY29udGV4dCBtZW51
IGV2ZW50LgorICAgIGlmIChidXR0b25FdmVudC0+YnV0dG9uID09IDMpCisgICAgICAgIHByaXYt
PmNvbnRleHRNZW51RXZlbnQuc2V0KGdka19ldmVudF9jb3B5KHJlaW50ZXJwcmV0X2Nhc3Q8R2Rr
RXZlbnQqPihidXR0b25FdmVudCkpKTsKICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZU1vdXNl
RXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oYnV0
dG9uRXZlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5jbGlja0NvdW50ZXIuY2xpY2tDb3VudEZvckdka0J1dHRvbkV2ZW50KHdp
ZGdldCwgYnV0dG9uRXZlbnQpKSk7CiAgICAgcmV0dXJuIFRSVUU7CkBAIC03ODQsMyArNzkwLDgg
QEAgV2ViQ29udGV4dE1lbnVQcm94eUd0ayogd2Via2l0V2ViVmlld0Jhc2VHZXRBY3RpdmVDb250
ZXh0TWVudVByb3h5KFdlYktpdFdlYlZpZXcKIHsKICAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jh
c2UtPnByaXYtPmFjdGl2ZUNvbnRleHRNZW51UHJveHk7CiB9CisKK0dka0V2ZW50KiB3ZWJraXRX
ZWJWaWV3QmFzZVRha2VDb250ZXh0TWVudUV2ZW50KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRX
ZWJWaWV3QmFzZSkKK3sKKyAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmNvbnRl
eHRNZW51RXZlbnQucmVsZWFzZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCA0NWZm
YmYyLi43MGNjNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAtNDksNSArNDksNiBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlSW5pdGlhbGl6ZUZ1bGxTY3JlZW5DbGllbnQoV2ViS2l0V2Vi
Vmlld0Jhc2UqLCBjb25zdCBXS0Z1bAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3Rv
clZpZXdIZWlnaHQoV2ViS2l0V2ViVmlld0Jhc2UqLCB1bnNpZ25lZCBoZWlnaHQpOwogdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZVNldEFjdGl2ZUNvbnRleHRNZW51UHJveHkoV2ViS2l0V2ViVmlld0Jh
c2UqLCBXZWJDb250ZXh0TWVudVByb3h5R3RrKik7CiBXZWJDb250ZXh0TWVudVByb3h5R3RrKiB3
ZWJraXRXZWJWaWV3QmFzZUdldEFjdGl2ZUNvbnRleHRNZW51UHJveHkoV2ViS2l0V2ViVmlld0Jh
c2UqKTsKK0dka0V2ZW50KiB3ZWJraXRXZWJWaWV3QmFzZVRha2VDb250ZXh0TWVudUV2ZW50KFdl
YktpdFdlYlZpZXdCYXNlKik7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggYzJlZWJmMy4uNmI2MmQ2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sCkBAIC0zNyw2ICszNyw4IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdFdlYkluc3BlY3Rvci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
VmVyc2lvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Q29udGV4dE1l
bnUueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvbnRleHRNZW51SXRl
bS54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1z
ZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0CmluZGV4IDFiOTdkZTguLjUxZTZiMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50
eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LXNlY3Rpb25zLnR4dApAQCAtNzQ0LDMgKzc0NCw2MyBAQCBXRUJLSVRfTUlOT1JfVkVSU0lPTgog
V0VCS0lUX01JQ1JPX1ZFUlNJT04KIFdFQktJVF9DSEVDS19WRVJTSU9OCiA8L1NFQ1RJT04+CisK
KzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0Q29udGV4dE1lbnU8L0ZJTEU+CitXZWJLaXRDb250ZXh0
TWVudQord2Via2l0X2NvbnRleHRfbWVudV9uZXcKK3dlYmtpdF9jb250ZXh0X21lbnVfbmV3X3dp
dGhfaXRlbXMKK3dlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZAord2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQKK3dlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0Cit3ZWJraXRfY29udGV4dF9tZW51
X21vdmVfaXRlbQord2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMKK3dlYmtpdF9jb250ZXh0
X21lbnVfZ2V0X25faXRlbXMKK3dlYmtpdF9jb250ZXh0X21lbnVfZmlyc3QKK3dlYmtpdF9jb250
ZXh0X21lbnVfbGFzdAord2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbV9hdF9wb3NpdGlvbgor
d2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUKK3dlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2Fs
bAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdENvbnRleHRNZW51Q2xhc3MKK1dFQktJ
VF9UWVBFX0NPTlRFWFRfTUVOVQorV0VCS0lUX0NPTlRFWFRfTUVOVQorV0VCS0lUX0lTX0NPTlRF
WFRfTUVOVQorV0VCS0lUX0NPTlRFWFRfTUVOVV9DTEFTUworV0VCS0lUX0lTX0NPTlRFWFRfTUVO
VV9DTEFTUworV0VCS0lUX0NPTlRFWFRfTUVOVV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJp
dmF0ZT4KK1dlYktpdENvbnRleHRNZW51UHJpdmF0ZQord2Via2l0X2NvbnRleHRfbWVudV9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdENvbnRleHRNZW51SXRl
bTwvRklMRT4KK1dlYktpdENvbnRleHRNZW51SXRlbQorV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24K
K3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfZnJvbV9zdG9ja19hY3Rpb24KK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9z
dG9ja19hY3Rpb25fd2l0aF9sYWJlbAord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRo
X3N1Ym1lbnUKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yCit3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbgord2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9zdG9ja19hY3Rpb24KK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3IKK3dl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudQord2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX2dldF9zdWJtZW51CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0Q29udGV4dE1l
bnVJdGVtQ2xhc3MKK1dFQktJVF9UWVBFX0NPTlRFWFRfTUVOVV9JVEVNCitXRUJLSVRfQ09OVEVY
VF9NRU5VX0lURU0KK1dFQktJVF9JU19DT05URVhUX01FTlVfSVRFTQorV0VCS0lUX0NPTlRFWFRf
TUVOVV9JVEVNX0NMQVNTCitXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU1fQ0xBU1MKK1dFQktJ
VF9DT05URVhUX01FTlVfSVRFTV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dl
YktpdENvbnRleHRNZW51SXRlbVByaXZhdGUKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
dHlwZQorPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IGQxNTU5ODIuLjRkODg0M2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50
eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGsudHlwZXMKQEAgLTE5LDMgKzE5LDUgQEAgd2Via2l0X3BsdWdpbl9nZXRfdHlwZQogd2Via2l0
X21pbWVfaW5mb19nZXRfdHlwZQogd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3R5cGUKIHdlYmtp
dF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3R5cGUKK3dlYmtpdF9jb250ZXh0X21lbnVfZ2V0X3R5
cGUKK3dlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCA3YWRh
ZThhLi4wNThhNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtMiw2ICsyLDcgQEAgaWYgRU5BQkxFX1dFQktJ
VDIKIAogVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNr
Rm9yd2FyZExpc3QgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0Q29udGV4dE1lbnUg
XAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0Q29va2llTWFuYWdlciBcCiAJUHJvZ3Jh
bXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3REb3dubG9hZHMgXAogCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0SW5zcGVjdG9yIFwKQEAgLTE2Nyw0ICsxNjgsMTAgQEAgUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2Nw
cGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX0xEQURE
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRWZXJzaW9uX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAorUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9TT1VSQ0VTID0gXAorICAgICAgICBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3Bw
CitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0NQUEZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RDb250
ZXh0TWVudV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQorCiBlbmRpZiAjIEVOQUJMRV9XRUJLSVQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvbnRleHRNZW51LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjAzMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvbnRleHRNZW51LmNwcApA
QCAtMCwwICsxLDY3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBDb250ZXh0TWVudVRlc3Q6IHB1YmxpYyBX
ZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgZW51bSBDb250ZXh0TWVudUl0ZW1TdGF0ZUZsYWdz
IHsKKyAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwKKyAgICAgICAgRW5hYmxlZCA9IDEgPDwgMSwK
KyAgICAgICAgQ2hlY2tlZCA9IDEgPDwgMgorICAgIH07CisKKyAgICB2b2lkIGNoZWNrQ29udGV4
dE1lbnVFdmVudChHZGtFdmVudCogZXZlbnQpCisgICAgeworICAgICAgICBnX2Fzc2VydChldmVu
dCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+dHlwZSwgPT0sIEdES19CVVRUT05f
UFJFU1MpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi5idXR0b24sID09
LCAzKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueCwgPT0sIG1fbWVu
dVBvc2l0aW9uWCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLnksID09
LCBtX21lbnVQb3NpdGlvblkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0
TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBj
b250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRNZW51KSk7CisgICAgICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoY29udGV4dE1lbnUpKTsK
KyAgICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAgICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0
VGVzdFJlc3VsdCkpOworCisgICAgICAgIHJldHVybiB0ZXN0LT5jb250ZXh0TWVudShjb250ZXh0
TWVudSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOworICAgIH0KKworICAgIENvbnRleHRNZW51VGVz
dCgpCisgICAgICAgIDogbV9tZW51UG9zaXRpb25YKDApCisgICAgICAgICwgbV9tZW51UG9zaXRp
b25ZKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNvbnRl
eHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIH0K
KworICAgIH5Db250ZXh0TWVudVRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwg
MCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNvbnRleHRNZW51KFdl
YktpdENvbnRleHRNZW51KiwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikgPSAwOwor
CisgICAgYm9vbCBzaG91bGRTaG93SW5wdXRNZXRob2RzTWVudSgpCisgICAgeworICAgICAgICBH
dGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VU
KG1fd2ViVmlldykpOworICAgICAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgZ2Jvb2xlYW4gc2hvd0lucHV0TWV0aG9kTWVudTsKKyAgICAgICAg
Z19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLXNob3ctaW5wdXQtbWV0aG9kLW1lbnUiLCAmc2hv
d0lucHV0TWV0aG9kTWVudSwgTlVMTCk7CisgICAgICAgIHJldHVybiBzaG93SW5wdXRNZXRob2RN
ZW51OworICAgIH0KKworICAgIHZvaWQgY2hlY2tBY3Rpb25TdGF0ZShHdGtBY3Rpb24qIGFjdGlv
biwgdW5zaWduZWQgc3RhdGUpCisgICAgeworICAgICAgICBpZiAoc3RhdGUgJiBWaXNpYmxlKQor
ICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZ19hc3NlcnQoIWd0a19hY3Rpb25fZ2V0X3Zpc2libGUo
YWN0aW9uKSk7CisKKyAgICAgICAgaWYgKHN0YXRlICYgRW5hYmxlZCkKKyAgICAgICAgICAgIGdf
YXNzZXJ0KGd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ19hc3NlcnQoIWd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pKTsK
KworICAgICAgICBpZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkgeworICAgICAgICAg
ICAgaWYgKHN0YXRlICYgQ2hlY2tlZCkKKyAgICAgICAgICAgICAgICBnX2Fzc2VydChndGtfdG9n
Z2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnX2Fzc2VydCghZ3RrX3RvZ2dsZV9hY3Rpb25f
Z2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KEdM
aXN0KiBpdGVtcywgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gc3RvY2tBY3Rpb24sIHVuc2lnbmVk
IHN0YXRlKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAgICBX
ZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRl
bXMtPmRhdGEpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKGl0ZW0pKTsKKworICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtf
SVNfQUNUSU9OKGFjdGlvbikpOworCisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbihpdGVtKSwgPT0sIHN0b2NrQWN0aW9uKTsK
KworICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOworCisgICAgICAgIHJl
dHVybiBnX2xpc3RfbmV4dChpdGVtcyk7CisgICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVu
dEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBs
YWJlbCwgdW5zaWduZWQgc3RhdGUpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7Cisg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkp
OworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhU
X01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAgICAgIEd0a0FjdGlvbiogYWN0
aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAg
IGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VTVE9NKTsKKyAgICAgICAgZ19hc3NlcnRfY21w
c3RyKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBsYWJlbCk7CisKKyAgICAgICAg
Y2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKKworICAgICAgICByZXR1cm4gZ19saXN0
X25leHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTdWJN
ZW51QW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBz
dGF0ZSwgR0xpc3QqKiBzdWJNZW51SXRlcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1z
KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5k
YXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NP
TlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7CisKKyAgICAgICAgR3RrQWN0aW9u
KiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKKyAg
ICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKKworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsKKyAgICAg
ICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKKworICAgICAgICBXZWJLaXRDb250
ZXh0TWVudSogc3ViTWVudSA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShp
dGVtKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShzdWJNZW51KSk7
CisgICAgICAgIGlmIChzdWJNZW51SXRlcikKKyAgICAgICAgICAgICpzdWJNZW51SXRlciA9IHdl
YmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKHN1Yk1lbnUpOworCisgICAgICAgIHJldHVybiBn
X2xpc3RfbmV4dChpdGVtcyk7CisgICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1J
c1NlcGFyYXRvckFuZEdldE5leHQoR0xpc3QqIGl0ZW1zKQorICAgIHsKKyAgICAgICAgZ19hc3Nl
cnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0o
aXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOworICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKGl0ZW0pKTsKKworICAgICAgICBy
ZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBk
b1JpZ2h0Q2xpY2tJZGxlQ2FsbGJhY2soQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX21lbnVQb3NpdGlvblgsIHRlc3Qt
Pm1fbWVudVBvc2l0aW9uWSwgMyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAg
ICB2b2lkIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZChpbnQg
eCwgaW50IHkpCisgICAgeworICAgICAgICBtX21lbnVQb3NpdGlvblggPSB4OworICAgICAgICBt
X21lbnVQb3NpdGlvblkgPSB5OworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KGRvUmlnaHRDbGlja0lkbGVDYWxsYmFjayksIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBzaG93Q29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICBzaG93Q29udGV4dE1l
bnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMCwgMCk7CisgICAgfQorCisgICAgZG91
YmxlIG1fbWVudVBvc2l0aW9uWDsKKyAgICBkb3VibGUgbV9tZW51UG9zaXRpb25ZOworfTsKKwor
Y2xhc3MgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudURlZmF1bHRUZXN0
KTsKKworICAgIGVudW0gRGVmYXVsdE1lbnVUeXBlIHsKKyAgICAgICAgTmF2aWdhdGlvbiwKKyAg
ICAgICAgTGluaywKKyAgICAgICAgSW1hZ2UsCisgICAgICAgIExpbmtJbWFnZSwKKyAgICAgICAg
VmlkZW8sCisgICAgICAgIEVkaXRhYmxlCisgICAgfTsKKworICAgIENvbnRleHRNZW51RGVmYXVs
dFRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRNZW51VHlwZShOYXZpZ2F0aW9uKQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0
TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0
KQorICAgIHsKKyAgICAgICAgR0xpc3QqIGl0ZXIgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9p
dGVtcyhjb250ZXh0TWVudSk7CisKKyAgICAgICAgc3dpdGNoIChtX2V4cGVjdGVkTWVudVR5cGUp
IHsKKyAgICAgICAgY2FzZSBOYXZpZ2F0aW9uOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2Uo
aGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlz
aWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZp
c2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxl
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FELCBWaXNpYmxlIHwg
RW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rOgorICAgICAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0
VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19U
T19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEltYWdlOgorICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19p
bWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0
VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lN
QUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJs
ZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NM
SVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtJbWFnZToKKyAgICAgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRp
dGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNL
LCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1cs
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdF
X1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZpZGVvOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVz
dFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZLCBWaXNpYmxl
IHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01V
VEUsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVf
TUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QLCBWaXNpYmxlIHwgRW5h
YmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZV
TExTQ1JFRU4sIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lO
RE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFZGl0YWJsZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VULCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1BBU1RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICAgICAgaWYgKHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkpIHsKKyAgICAg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChp
dGVyKTsKKyAgICAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhP
RFMsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93
ZWJWaWV3KSkpIHsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0
b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9J
TlNQRUNUX0VMRU1FTlQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgfQorICAgICAgICBn
X2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgRGVmYXVsdE1lbnVUeXBlIG1fZXhwZWN0ZWRNZW51VHlw
ZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KENvbnRleHRN
ZW51RGVmYXVsdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0lu
V2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICBjb25zdCBjaGFyKiBsaW5rc0hUTUwg
PQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0
aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKKyAgICAgICAg
IiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhk
ZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRn
dGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVm
JyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCisgICAgICAgICIgPHZpZGVvIHN0eWxlPSdw
b3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHdpZHRoPTEwIGhlaWdodD0xMCBjb250
cm9scz0nY29udHJvbHMnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycg
Lz48L3ZpZGVvPiIKKyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjE7IHRvcDo1MCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiPC9ib2R5PjwvaHRt
bD4iOworICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSFRNTCwgImZpbGU6Ly8vIik7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGRv
Y3VtZW50LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVs
dFRlc3Q6Ok5hdmlnYXRpb247CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFu
ZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBsaW5r
LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6
Okxpbms7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZp
bmlzaGVkKDEsIDEpOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZS4KKyAgICB0ZXN0
LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpJbWFnZTsKKyAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwg
MTApOworCisgICAgLy8gRW5hYmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBzbyB0aGF0IGluc3Bl
Y3RvciBlbGVtZW50CisgICAgLy8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVmYXVsdCBjb250ZXh0
IG1lbnUuCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworCisg
ICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZSBsaW5rLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRN
ZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsKKyAgICB0ZXN0LT5z
aG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMjApOworCisg
ICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZSB2aWRlby4KKyAgICB0ZXN0LT5tX2V4cGVjdGVk
TWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpWaWRlbzsKKyAgICB0ZXN0LT5zaG93
Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMzApOworCisgICAg
Ly8gQ29udGV4dCBtZW51IGZvciBlZGl0YWJsZS4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0YWJsZTsKKyAgICB0ZXN0LT5zaG93Q29u
dGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoNSwgNTUpOworfQorCitjbGFz
cyBDb250ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21UZXN0KTsKKwor
ICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCgpCisgICAgICAgIDogbV9pdGVtVG9BY3RpdmF0ZUxh
YmVsKDApCisgICAgICAgICwgbV9hY3RpdmF0ZWQoZmFsc2UpCisgICAgICAgICwgbV90b2dnbGVk
KGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRl
eHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRU
ZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgLy8gQXBwZW5kIG91ciBjdXN0b20gaXRlbSB0byB0
aGUgZGVmYXVsdCBtZW51LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhtX2FjdGlvbi5nZXQoKSkpOwor
ICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgR3RrTWVudSogZ2V0UG9wdXBNZW51KCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0xp
c3Q+IHRvcGxldmVscyhndGtfd2luZG93X2xpc3RfdG9wbGV2ZWxzKCkpOworICAgICAgICBmb3Ig
KEdMaXN0KiBpdGVyID0gdG9wbGV2ZWxzLmdldCgpOyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQo
aXRlcikpIHsKKyAgICAgICAgICAgIGlmICghR1RLX0lTX1dJTkRPVyhpdGVyLT5kYXRhKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgR3RrV2lkZ2V0KiBjaGlsZCA9
IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgaWYg
KCFHVEtfSVNfTUVOVShjaGlsZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGlmIChndGtfbWVudV9nZXRfYXR0YWNoX3dpZGdldChHVEtfTUVOVShjaGlsZCkpID09
IEdUS19XSURHRVQobV93ZWJWaWV3KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR1RLX01FTlUo
Y2hpbGQpOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIEd0a01lbnVJdGVtKiBnZXRNZW51SXRlbShHdGtN
ZW51KiBtZW51LCBjb25zdCBnY2hhciogaXRlbUxhYmVsKQorICAgIHsKKyAgICAgICAgR093blB0
cjxHTGlzdD4gaXRlbXMoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUiht
ZW51KSkpOworICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gaXRlbXMuZ2V0KCk7IGl0ZXI7IGl0
ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSkgeworICAgICAgICAgICAgR3RrTWVudUl0ZW0qIGNoaWxk
ID0gR1RLX01FTlVfSVRFTShpdGVyLT5kYXRhKTsKKyAgICAgICAgICAgIGlmIChnX3N0cl9lcXVh
bChpdGVtTGFiZWwsIGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKGNoaWxkKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgYWN0aXZhdGVNZW51
SXRlbSgpCisgICAgeworICAgICAgICBnX2Fzc2VydChtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwor
ICAgICAgICBHdGtNZW51KiBtZW51ID0gZ2V0UG9wdXBNZW51KCk7CisgICAgICAgIEd0a01lbnVJ
dGVtKiBpdGVtID0gZ2V0TWVudUl0ZW0obWVudSwgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsKTsKKyAg
ICAgICAgZ3RrX21lbnVfc2hlbGxfYWN0aXZhdGVfaXRlbShHVEtfTUVOVV9TSEVMTChtZW51KSwg
R1RLX1dJREdFVChpdGVtKSwgVFJVRSk7CisgICAgICAgIG1faXRlbVRvQWN0aXZhdGVMYWJlbCA9
IDA7CisgICAgICAgIHF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVh
biBhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrKGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsK
KyAgICAgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVDdXN0b21UZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5hY3RpdmF0ZU1lbnVJ
dGVtKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRl
Q3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoY29uc3QgY2hhciogYWN0aW9uTGFi
ZWwpCisgICAgeworICAgICAgICBtX2FjdGl2YXRlZCA9IG1fdG9nZ2xlZCA9IGZhbHNlOworICAg
ICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSBhY3Rpb25MYWJlbDsKKyAgICAgICAgZ19pZGxl
X2FkZChhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgdG9nZ2xlQ3VzdG9tTWVu
dUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsK
KyAgICAgICAgYWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChhY3Rp
b25MYWJlbCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWN0aW9uQWN0aXZhdGVkQ2FsbGJh
Y2soR3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+bV9hY3RpdmF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFj
dGlvblRvZ2dsZWRDYWxsYmFjayhHdGtBY3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RvZ2dsZWQgPSB0cnVlOworICAgIH0KKworICAg
IHZvaWQgc2V0QWN0aW9uKEd0a0FjdGlvbiogYWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hY3Rp
b24gPSBhY3Rpb247CisgICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQor
ICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJ0b2dnbGVkIiwgR19DQUxMQkFD
SyhhY3Rpb25Ub2dnbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soYWN0aW9u
QWN0aXZhdGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEd0a0FjdGlv
bj4gbV9hY3Rpb247CisgICAgY29uc3QgY2hhciogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsOworICAg
IGJvb2wgbV9hY3RpdmF0ZWQ7CisgICAgYm9vbCBtX3RvZ2dsZWQ7Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUoQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29u
dGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBtZW51IGl0
ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9u
X25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsK
KyAgICB0ZXN0LT5zZXRBY3Rpb24oYWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIHRlc3QtPmFjdGl2YXRlQ3VzdG9tTWVu
dUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uLmdl
dCgpKSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9hY3RpdmF0ZWQpOworICAgIGdfYXNzZXJ0KCF0
ZXN0LT5tX3RvZ2dsZWQpOworCisgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIHRvZ2dsZSBtZW51IGl0
ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtf
QUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlv
biIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCAwLCAwKSkpOworICAgIHRlc3QtPnNldEFjdGlv
bih0b2dnbGVBY3Rpb24uZ2V0KCkpOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRV
bnRpbEZpbmlzaGVkKCk7CisgICAgdGVzdC0+dG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50
aWxUb2dnbGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKHRvZ2dsZUFjdGlvbi5nZXQoKSkpOworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5tX2FjdGl2YXRlZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90b2dn
bGVkKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDogcHVibGljIENvbnRl
eHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0
TWVudUN1c3RvbUZ1bGxUZXN0KTsKKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4
dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAg
IHsKKyAgICAgICAgLy8gQ2xlYXIgcHJvcG9zZWQgbWVudSBhbmQgYnVpbGQgb3VyIG93bi4KKyAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKGNvbnRleHRNZW51KTsKKyAgICAg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4
dE1lbnUpLCA9PSwgMCk7CisKKyAgICAgICAgLy8gQWRkIGFjdGlvbnMgZnJvbSBzdG9jay4KKyAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0dPX0JBQ0spKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29u
dGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24o
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld19zZXBhcmF0b3IoKSwgMik7CisKKyAgICAgICAgLy8gQWRkIGN1c3RvbSBhY3Rpb25zLgor
ICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25f
bmV3KCJXZWJLaXRHVEsrQ3VzdG9tQWN0aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwgMCkpOwor
ICAgICAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBGQUxTRSk7Cisg
ICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fbmV3KGFjdGlvbi5nZXQoKSksIC0xKTsKKyAgICAgICAgR1JlZlB0cjxH
dGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVf
YWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1RvZ2ds
ZSBBY3Rpb24iLCAwLCAwKSkpOworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZl
KEdUS19UT0dHTEVfQUNUSU9OKHRvZ2dsZUFjdGlvbi5nZXQoKSksIFRSVUUpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ldyh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2Vw
YXJhdG9yKCkpOworCisgICAgICAgIC8vIEFkZCBhIHN1Ym1lbnUuCisgICAgICAgIEdSZWZQdHI8
V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVu
dV9uZXcoKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1Qoc3ViTWVudS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2lu
c2VydChzdWJNZW51LmdldCgpLCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3Rv
Y2tfYWN0aW9uX3dpdGhfbGFiZWwoV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgIlN0
b3AgTG9hZCIpLCAwKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVu
dS5nZXQoKSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpLCAtMSk7CisgICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X3dpdGhfc3VibWVudSgiTG9hZCBvcHRpb25zIiwgc3ViTWVudS5nZXQoKSkpOworICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKKyAgICAgICAgLy8gTW92ZSBMb2FkIHN1Ym1l
bnUgYmVmb3JlIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21v
dmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51
KSwgMyk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNvbnRleHRNZW51
LCB3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKKworICAgICAgICAv
LyBJZiBsYXN0IGl0ZW0gaXMgYSBzZXBhcmF0b3IsIHJlbW92ZSBpdC4KKyAgICAgICAgaWYgKHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3Iod2Via2l0X2NvbnRleHRfbWVudV9s
YXN0KGNvbnRleHRNZW51KSkpCisgICAgICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92
ZShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSk7CisK
KyAgICAgICAgLy8gQ2hlY2sgdGhlIG1lbnUuCisgICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0
X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisK
KyAgICAgICAgR0xpc3QqIHN1Yk1lbnVJdGVyID0gMDsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KGl0ZXIsICJMb2FkIG9wdGlvbnMiLCBWaXNpYmxl
IHwgRW5hYmxlZCwgJnN1Yk1lbnVJdGVyKTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1NUT1AsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgc3ViTWVu
dUl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChp
dGVyKTsKKworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCAiQ3VzdG9tIF9BY3Rpb24iLCBWaXNpYmxlKTsKKyAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBf
VG9nZ2xlIEFjdGlvbiIsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgIGdf
YXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21N
ZW51KENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+
PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30K
KworY2xhc3MgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3Qg
eworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEaXNhYmxl
ZFRlc3QpOworCisgICAgZW51bSBEaXNhYmxlTW9kZSB7CisgICAgICAgIElnbm9yZUNsaWNrcywK
KyAgICAgICAgSWdub3JlRGVmYXVsdE1lbnUKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFu
IHZpZXdCdXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50
LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGlmIChldmVu
dC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAg
ICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25QcmVzc2VkKCk7CisgICAgfQorCisgICAgQ29udGV4
dE1lbnVEaXNhYmxlZFRlc3QoKQorICAgICAgICA6IG1fZGlzYWJsZU1vZGUoSWdub3JlQ2xpY2tz
KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJidXR0b24tcHJl
c3MtZXZlbnQiLCBHX0NBTExCQUNLKHZpZXdCdXR0b25QcmVzc0V2ZW50Q2FsbGJhY2spLCB0aGlz
KTsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250
ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKKyAgICB7CisgICAgICAg
IGlmIChtX2Rpc2FibGVNb2RlID09IElnbm9yZUNsaWNrcykKKyAgICAgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHF1aXRNYWluTG9vcCgp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgcmlnaHRCdXR0b25Q
cmVzc2VkKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Rpc2FibGVNb2RlID09IElnbm9yZUNsaWNr
cykgeworICAgICAgICAgICAgcXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50
cygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIERpc2FibGVNb2RlIG1fZGlzYWJsZU1vZGU7Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNhYmxlTWVudShDb250ZXh0TWVudURpc2FibGVk
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJL
aXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5tX2Rpc2FibGVN
b2RlID0gQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6Oklnbm9yZURlZmF1bHRNZW51OworICAgIHRl
c3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5t
X2Rpc2FibGVNb2RlID0gQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6Oklnbm9yZUNsaWNrczsKKyAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworfQorCitjbGFz
cyBDb250ZXh0TWVudVN1Ym1lbnVUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1Ymxp
YzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51U3VibWVudVRlc3QpOwor
CisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdk
a0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisgICAgeworICAgICAgICBzaXplX3QgbWVu
dVNpemUgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KTsKKyAg
ICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudT4gc3ViTWVudSA9IGFkb3B0R1JlZih3ZWJr
aXRfY29udGV4dF9tZW51X25ldygpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfd2l0aF9zdWJtZW51
KCJTdWJNZW51SXRlbSIsIHN1Yk1lbnUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWlu
dCh3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KSwgPT0sIG1lbnVT
aXplICsgMSk7CisKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudT4gc3ViTWVudTIg
PSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7CisgICAgICAgIEdSZWZQdHI8
V2ViS2l0Q29udGV4dE1lbnVJdGVtPiBpdGVtID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTksp
OworCisgICAgICAgIC8vIEFkZCBzdWJtZW51IHRvIG5ld2x5IGNyZWF0ZWQgaXRlbS4KKyAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdl
dCgpKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVt
LmdldCgpLCBzdWJNZW51Mi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSA9PSBzdWJNZW51Mi5nZXQoKSk7CisK
KyAgICAgICAgLy8gUmVwbGFjZSB0aGUgc3VibWVudS4KKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKKworICAg
ICAgICAvLyBUcnkgdG8gYWRkIGEgc3VibWVudSBhbHJlYWR5IGFkZGVkIHRvIGFub3RoZXIgaXRl
bS4KKyAgICAgICAgcmVtb3ZlTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOworICAg
ICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3Vi
TWVudS5nZXQoKSk7CisgICAgICAgIGFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5H
KTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVu
dShpdGVtLmdldCgpKSk7CisKKyAgICAgICAgLy8gQSByZW1vdmVkIHN1Ym1lbnUgc2hvdWxkbid0
IGhhdmUgYSBwYXJlbnQuCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3Vi
bWVudShpdGVtLmdldCgpLCBzdWJNZW51Mi5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSA9PSBzdWJNZW51Mi5n
ZXQoKSk7CisKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51U3ViTWVudShDb250ZXh0
TWVudVN1Ym1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Pjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmls
ZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgYmVmb3Jl
QWxsKCkKK3sKKyAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiZGVmYXVsdC1tZW51IiwgdGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUpOworICAgIENvbnRl
eHRNZW51Q3VzdG9tVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBvcHVsYXRlLW1lbnUiLCB0
ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUpOworICAgIENvbnRleHRNZW51Q3VzdG9tRnVsbFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tbWVudSIsIHRlc3RDb250ZXh0TWVudUN1
c3RvbU1lbnUpOworICAgIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiZGlzYWJsZS1tZW51IiwgdGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOworICAgIENv
bnRleHRNZW51U3VibWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdWJtZW51IiwgdGVz
dENvbnRleHRNZW51U3ViTWVudSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKaW5kZXgg
MjE5Y2I0NC4uNjkyOWMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdE1haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0TWFpbi5oCkBAIC03NSw2ICs3NSwyMCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7CiAgICAgfQogCisgICAgdm9pZCBhZGRMb2dGYXRh
bEZsYWcodW5zaWduZWQgZmxhZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZhdGFsTWFzayA9
IGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KEdfTE9H
X0ZBVEFMX01BU0spKTsKKyAgICAgICAgZmF0YWxNYXNrIHw9IGZsYWc7CisgICAgICAgIGdfbG9n
X3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykp
OworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTG9nRmF0YWxGbGFnKHVuc2lnbmVkIGZsYWcpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFs
KHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRBTF9NQVNLKSk7CisgICAgICAg
IGZhdGFsTWFzayAmPSB+ZmxhZzsKKyAgICAgICAgZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0
aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxNYXNrKSk7CisgICAgfQorCiAgICAgSGFzaFNl
dDxHT2JqZWN0Kj4gbV93YXRjaGVkT2JqZWN0czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAppbmRleCBlMzU1
Zjc4Li42NjVlZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC00MywxMiArNDMsNiBAQCBXZWJWaWV3VGVz
dDo6fldlYlZpZXdUZXN0KCkKICAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKIH0K
IAotc3RhdGljIGdib29sZWFuIHRlc3RMb2FkVGltZW91dEZpbmlzaExvb3AoR01haW5Mb29wKiBs
b29wKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwot
fQotCiB2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKIHsKICAgICBt
X2FjdGl2ZVVSSSA9IHVyaTsKQEAgLTExMiw5ICsxMDYsMjcgQEAgdm9pZCBXZWJWaWV3VGVzdDo6
Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkK
ICAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbShtX3dlYlZp
ZXcsIGl0ZW0pOwogfQogCit2b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3AoKQoreworICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OnF1
aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQoreworICAgIHdoaWxlIChn
dGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7CisgICAg
cXVpdE1haW5Mb29wKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BJZGxlQ2Fs
bGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Cisg
ICAgcmV0dXJuIEZBTFNFOworfQorCiB2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNv
bmRzKQogewotICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih0ZXN0TG9hZFRpbWVvdXRGaW5pc2hMb29wKSwgbV9tYWluTG9vcCk7
CisgICAgZ190aW1lb3V0X2FkZF9zZWNvbmRzKHNlY29uZHMsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHF1aXRNYWluTG9vcElkbGVDYWxsYmFjayksIG1fbWFpbkxvb3ApOwogICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKaW5kZXggZmY2YThjNy4uOGU0
NjlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5oCkBAIC00MCw2ICs0MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGdvRm9y
d2FyZCgpOwogICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSopOwogCisgICAgdm9pZCBxdWl0TWFpbkxvb3AoKTsKKyAgICB2b2lkIHF1aXRN
YWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKICAgICB2b2lkIHdhaXQoZG91
YmxlIHNlY29uZHMpOwogICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdm9p
ZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBiZjM3ZmNiLi41
OGFjMmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBA
IC0yNSw2ICsyNSw5IEBACiAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlz
dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnUuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdENvbnRleHRNZW51QWN0aW9ucy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4
dE1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXREb3dubG9hZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXggZGUzMDMyOC4uZTZjOGExMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBA
IC0xLDYgKzEsNyBAQAogQk9PTEVBTjpCT1hFRAogQk9PTEVBTjpFTlVNLFNUUklORyxQT0lOVEVS
CiBCT09MRUFOOk9CSkVDVAorQk9PTEVBTjpPQkpFQ1QsQk9YRUQsT0JKRUNUCiBCT09MRUFOOk9C
SkVDVCxFTlVNCiBCT09MRUFOOlNUUklORwogQk9PTEVBTjpWT0lECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAppbmRl
eCBkODBmMjRjLi4yMzZmZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAgLTkyLDYgKzkyLDcgQEAgdm9p
ZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvc2l0aW9uLAogICAgIC8vIERpc3BsYXkgbWVudSBpbml0aWF0ZWQgYnkgcmln
aHQgY2xpY2sgKG1vdXNlIGJ1dHRvbiBwcmVzc2VkID0gMykuCiAgICAgTmF0aXZlV2ViTW91c2VF
dmVudCogbW91c2VFdmVudCA9IG1fcGFnZS0+Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZl
bnQoKTsKICAgICBjb25zdCBHZGtFdmVudCogZXZlbnQgPSBtb3VzZUV2ZW50ID8gbW91c2VFdmVu
dC0+bmF0aXZlRXZlbnQoKSA6IDA7CisgICAgZ3RrX21lbnVfYXR0YWNoX3RvX3dpZGdldChtX21l
bnUucGxhdGZvcm1EZXNjcmlwdGlvbigpLCBHVEtfV0lER0VUKG1fd2ViVmlldyksIDApOwogICAg
IGd0a19tZW51X3BvcHVwKG1fbWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIDAsIDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0
aGlzLAogICAgICAgICAgICAgICAgICAgIGV2ZW50ID8gZXZlbnQtPmJ1dHRvbi5idXR0b24gOiAz
LCBldmVudCA/IGV2ZW50LT5idXR0b24udGltZSA6IEdES19DVVJSRU5UX1RJTUUpOwogfQo=
</data>
<flag name="review"
          id="156009"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>