<?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>96476</bug_id>
          
          <creation_ts>2012-09-12 00:47:06 -0700</creation_ts>
          <short_desc>[WK2][GTK] Implement new Favicons API</short_desc>
          <delta_ts>2012-09-29 08:29:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>63945</dependson>
          <blocked>96477</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>718010</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-12 00:47:06 -0700</bug_when>
    <thetext>We need a way to interact with the IconDatabase from WebKit2GTK based applications, and so we need to have a favicons API available as in the case of WebKit1

I&apos;ve been working a bit on this already, will attach a first iteration of a candidate patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718242</commentid>
    <comment_count>1</comment_count>
      <attachid>163600</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-12 05:30:34 -0700</bug_when>
    <thetext>Created attachment 163600
Patch proposal (NO Unit tests yet)

Attaching a patch proposal for this issue, based on some work I&apos;ve been already doing locally and some comments/discussions with Carlos as well.

Not asking for a formal review yet because my intention with this attachment is to provide an easy way to review this initial version and to start iterating from it. In case everything kind of makes sense, I will start working on unit tests for this new API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718247</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 05:33:02 -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>718250</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 05:33:20 -0700</bug_when>
    <thetext>Attachment 163600 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:398:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h&quot;
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718301</commentid>
    <comment_count>4</comment_count>
      <attachid>163600</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-12 06:34:45 -0700</bug_when>
    <thetext>Comment on attachment 163600
Patch proposal (NO Unit tests yet)

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

The new public header WebKitFaviconDatabase.h should be added to the main header file webkit2.h. And all new symbols should be added to the webkit2gtk-section.txt file.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:39
&gt; +static void webkitFaviconDatabaseProcessPendingIconsForURI(WebKitFaviconDatabase*, const String&amp;);
&gt; +static void webkitFaviconDatabaseGetIconSurfaceCancelled(GCancellable*, GSimpleAsyncResult*);

I think these were needed in wk1 because they were used by the PendingRequest class. Now we can just move the functions before they are used and avoid the prototypes.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:85
&gt; +static void webkit_favicon_database_class_init(WebKitFaviconDatabaseClass* findClass)

findClass?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:93
&gt; +      * @page_url: the URI of the Web page containing the icon.

Use page_uri instead of page_url

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:97
&gt; +      * Note that this signal carries the URI of the frame that loads
&gt; +      * the icon, while #WebKitWebView::icon-ready provides the URI
&gt; +      * of the favicon.

I guess this is copied from wk1, there&apos;s not icon-ready signal in WebKitWebView for wk2. Here you should explain that this is emitted when the icon has been loaded from the network or imported from the database.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:102
&gt; +                     (GSignalFlags)G_SIGNAL_RUN_LAST,

The cast is not needed, I think.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:178
&gt; +struct GetFaviconSurfaceAsyncData {
&gt; +    GRefPtr&lt;WebKitFaviconDatabase&gt; faviconDatabase;
&gt; +    String pageURL;
&gt; +    RefPtr&lt;cairo_surface_t&gt; icon;
&gt; +    GRefPtr&lt;GCancellable&gt; cancellable;
&gt; +    gulong cancelledId;
&gt; +};

You need to provide a destructor to disconnect the cancellable signal, something like:

struct GetFaviconSurfaceAsyncData {
    ~GetFaviconSurfaceAsyncData()
    {
        if (cancelledID)
            g_cancellable_disconnect(cancellable.get(), cancelledId);
    }
.....
};

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:186
&gt; +    if (data &amp;&amp; data-&gt;cancelledId &gt; 0)

data can&apos;t be NULL, add an ASSERT if you want to be extra sure.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:187
&gt; +        g_cancellable_disconnect(data-&gt;cancellable.get(), data-&gt;cancelledId);

This should be done by the struct destructor.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:200
&gt; +    completePendingIconRequest(result);

You can call g_simple_async_result_complete(result); directly here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:245
&gt; + * @page_url: URL of the page containing the icon

Use page_uri

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:273
&gt; +    data-&gt;cancelledId = cancellable
&gt; +        ? g_cancellable_connect(cancellable, G_CALLBACK(webkitFaviconDatabaseGetIconSurfaceCancelled), result.get(), 0)
&gt; +        : 0;

The struct is initialize to 0 when allocated, so in thsi case maybe it&apos;s clearer to use an if:

if (cancellable)
    data-&gt;cancelledId = g_cancellable_connect(cancellable, G_CALLBACK(webkitFaviconDatabaseGetIconSurfaceCancelled), result.get(), 0);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:326
&gt; + * Returns: (transfer full): a new reference to a #cairo_surface_t, or %NULL.

or %NULL in case of error

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:338
&gt; +    // The following statement should always return valid data.
&gt; +    GetFaviconSurfaceAsyncData* data = static_cast&lt;GetFaviconSurfaceAsyncData*&gt;(g_simple_async_result_get_op_res_gpointer(simpleResult));
&gt; +    ASSERT(data);

I think the ASSERT already gives the idea that data shouldn&apos;t be NULL, so the comment looks redundant.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:342
&gt; +    // Ensure we disconnect any cancellable that might have been set.
&gt; +    if (data &amp;&amp; data-&gt;cancelledId &gt; 0)
&gt; +        g_cancellable_disconnect(data-&gt;cancellable.get(), data-&gt;cancelledId);

This will be done by the destructor, and the async result will be released when the operation si completed.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:346
&gt; +    // Return the icon is we can get it already.
&gt; +    if (data-&gt;icon)
&gt; +        return static_cast&lt;cairo_surface_t*&gt;(data-&gt;icon.release().leakRef());

Instead of leaking the ref, simple return a new ref, the one in AsyncData struct will be released by the destructor.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:363
&gt; +        // If the icon URL is known it obviously means that the icon data
&gt; +        // hasn&apos;t been retrieved yet, so report that it&apos;s &apos;unavailable&apos;.

&apos;unknown&apos; instead of &apos;unavailable&apos; no?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:383
&gt; +        completePendingIconRequest(result);

g_simple_async_result_complete()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:394
&gt; + * Obtains the URI for the favicon for the given page URI.
&gt; + * See also webkit_web_view_get_icon_uri().

I guess this has been copied from wk1 too.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:396
&gt; + * Returns: a newly allocated URI for the favicon, or %NULL

or %NULL if the database doesn&apos;t have a favicon for @page_uri

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:77
&gt; +webkit_favicon_database_get_favicon               (WebKitFaviconDatabase* database,

WebKitFaviconDatabase* database -&gt; WebKitFaviconDatabase *database

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:78
&gt; +                                                   const gchar*           page_url,

page_uri, or uri

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:82
&gt; +WEBKIT_API cairo_surface_t*

cairo_surface_t* -&gt; cairo_surface_t *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:90
&gt; +webkit_favicon_database_get_favicon_finish        (WebKitFaviconDatabase* database,
&gt; +                                                   GAsyncResult*          result,
&gt; +                                                   GError**               error);
&gt; +WEBKIT_API gchar*
&gt; +webkit_favicon_database_get_favicon_uri           (WebKitFaviconDatabase* database,
&gt; +                                                   const gchar* pageURL);
&gt; +WEBKIT_API void
&gt; +webkit_favicon_database_clear                     (WebKitFaviconDatabase* database);

Ok, all * are incorrectly placed.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:26
&gt; +#include &lt;wtf/text/CString.h&gt;

Why do you need this here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:46
&gt; +#include &lt;wtf/text/StringBuilder.h&gt;

I don&apos;t think you need this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:331
&gt; + * webkit_web_context_set_favicon_database_path:

I&apos;ve never known why this method expects a directory and doesn&apos;t allow to set a full path, but in case we really want it and use our own filename for the database, I would call this set_favicon_database_directory() to make clearer that the path must be a directory.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:337
&gt; + * for @context on disk. Passing NULL as @path means using the default

%NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:342
&gt; + * Use this before webkit_web_context_get_favicon_database() only if
&gt; + * you want WebKitGTK+ to use a directory different than the default
&gt; + * one for the platform.

If you want to use a different path for the favicon database, this method must be called before the database is created by webkit_web_context_get_favicon_database(). Note that a #WebKitWebView could use the favicon database, so this should also be called before loading any web page. 

Or something similar, but these cases should be clear.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:357
&gt; +    context-&gt;priv-&gt;iconDatabasePath = WebCore::filenameToString(path).utf8();

Are you sure that if path is NULL iconDatabasePath will be null too? I would check the case in the early return:

if (context-&gt;priv-&gt;iconDatabase || !path)
    return;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:360
&gt; +const gchar* webkit_web_context_get_favicon_database_path(WebKitWebContext *context)

This method is undocumented.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:395
&gt; +    StringBuilder builder;

This is unused, no?

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:398
&gt;&gt; +    GOwnPtr&lt;gchar&gt; iconDatabasePath(g_build_filename(webkit_web_context_get_favicon_database_path(context), &quot;/&quot;,
&gt;&gt; +                                                     WebCore::IconDatabase::defaultDatabaseFilename().utf8().data(),
&gt;&gt; +                                                     NULL));
&gt; 
&gt; Use 0 instead of NULL.  [readability/null] [5]

Don&apos;t add &quot;/&quot;, g_build_filename already adds dir separators

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h:123
&gt; +WEBKIT_API const gchar*

const gchar* -&gt; const gchar *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727479</commentid>
    <comment_count>5</comment_count>
      <attachid>165573</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-25 03:46:51 -0700</bug_when>
    <thetext>Created attachment 165573
Patch proposal + Unit test

New patch proposal, addressing the issues pointed out by Carlos and adding new unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727485</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-25 03:52:01 -0700</bug_when>
    <thetext>Attachment 165573 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:413:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728316</commentid>
    <comment_count>7</comment_count>
      <attachid>165573</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-26 01:49:49 -0700</bug_when>
    <thetext>Comment on attachment 165573
Patch proposal + Unit test

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

Looks great in general, there are some minor details, and I think we should try to test as much as possible in the unit tests, when possible because this is not easy to test.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:88
&gt; +      * WebKitFaviconDatabase::icon-ready:

Since we are using favicon everywhere, maybe this should be called favicon-ready

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:92
&gt; +      * This signal gets emitted when the icon&apos;s data is ready to be

We could be a bit more explicit about what icon we are referring. Someting like 

This signal gets emitted when the favicon of @page_uri is ready. This means that the favicon&apos;s data ....

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:114
&gt; +    gulong cancelledId;

Use unsigned long instead.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:168
&gt; +    toImpl(wkIconDatabase)-&gt;retainIconForPageURL(pageURLString);

You can avoid the toImpl cast by using database-&gt;priv-&gt;iconDatabase-&gt;retainIconForPageURL(pageURLString); directly.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:185
&gt; +    iconDatabase-&gt;initializeIconDatabaseClient(&amp;wkIconDatabaseClient);

We are using the C API in this particular case in other files, because we are passing a C API struct client after all.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:255
&gt; + * @page_uri: URI of the page containing the icon

We don&apos;t know if the page contains an icon or not. Maybe we should say this is the page for which we want to get the favicon

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:269
&gt; +void webkit_favicon_database_get_favicon(WebKitFaviconDatabase* database, const gchar* pageURL, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)

Use pageURI instead of pageURL, to know this is what we get from the api user.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:279
&gt; +    data-&gt;pageURL = pageURL;

This should be String::fromUTF8(pageURI);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:284
&gt; +    if (cancellable) {
&gt; +        data-&gt;cancelledId =
&gt; +            g_cancellable_connect(cancellable, G_CALLBACK(getIconSurfaceCancelledCallback), result.get(), 0);
&gt; +    }

You also need to call g_simple_async_result_set_check_cancellable(), so that when the operation is cancelled and completed in getIconSurfaceCancelled(), g_simple_async_result_propagate_error() fills the error with Operation was cancelled error.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:294
&gt; +    String pageURLString = String::fromUTF8(pageURL);

You already have the pageURLString in data-&gt;pageURL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:372
&gt; +        // If the icon URL is known it obviously means that the icon data
&gt; +        // hasn&apos;t been retrieved yet, so report that it&apos;s &apos;unknown&apos;.
&gt; +        g_set_error_literal(error, WEBKIT_FAVICON_DATABASE_ERROR,
&gt; +                            WEBKIT_FAVICON_DATABASE_ERROR_ICON_UNKNOWN,
&gt; +                            _(&quot;Unknown favicon for page&quot;));

Here we an include the page uri in the error message. Favicon for page %s is unknown or something like that

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:383
&gt; + * Obtains the URI for the favicon for the given page URI.

Maybe the URI of the favicon for the given page URI or even for @page_uri

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:68
&gt; +/**
&gt; + * WebKitFaviconDatabaseError:
&gt; + * @WEBKIT_FAVICON_DATABASE_ERROR_NOT_INITIALIZED: The #WebKitFaviconDatabase has not been initialized yet
&gt; + * @WEBKIT_FAVICON_DATABASE_ERROR_ICON_NOT_FOUND: There is not an icon available for the requested URL
&gt; + * @WEBKIT_FAVICON_DATABASE_ERROR_ICON_UNKNOWN: There might be an icon for the requested URL, but its data is unknown at the moment
&gt; + *
&gt; + * Enum values used to denote the various errors related to the #WebKitFaviconDatabase.
&gt; + **/
&gt; +typedef enum {
&gt; +    WEBKIT_FAVICON_DATABASE_ERROR_NOT_INITIALIZED,
&gt; +    WEBKIT_FAVICON_DATABASE_ERROR_ICON_NOT_FOUND,
&gt; +    WEBKIT_FAVICON_DATABASE_ERROR_ICON_UNKNOWN
&gt; +} WebKitFaviconDatabaseError;

I think we should probably use FAVICON everywhere

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:26
&gt; +WebKitFaviconDatabase* webkitFaviconDatabaseCreate(WebKit::WebIconDatabase*);

You can add using namespace WebKit; here and remove it from the .cpp as we are doing in other files.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:24
&gt; +#include &quot;WebIconDatabase.h&quot;

This is already included by WebKitFaviconDatabasePrivate.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:102
&gt; +    GRefPtr&lt;WebKitFaviconDatabase&gt; iconDatabase;

faviconDatabase?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:339
&gt; + * default directory for the platform.

You should mention what this means, just by pointing to g_get_user_data_dir() docs.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:358
&gt; +    // Do nothing if the database is already initialized, since in WK2
&gt; +    // it&apos;s not allowed to change this path once the database is open.
&gt; +    if (context-&gt;priv-&gt;iconDatabase || !path)
&gt; +        return;

Maybe we could turn this into a g_return_if_fail() since it&apos;s a programmer error to call this method twice.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am:74
&gt; +	Source/WebKit2/UIProcess/API/gtk/tests/resources/blank.ico

No need to include this, you can use the icon directly from wk1 dir, like we currently do in other tests.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:39
&gt; +        , m_mainLoop(g_main_loop_new(0, TRUE))
&gt; +        , m_webView(WEBKIT_WEB_VIEW(webkit_web_view_new()))

If you need a web view and a main loop you probably want to inherit from WebViewTest instead of Test

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:40
&gt; +        , m_baseURI(soup_uri_to_string(kServer-&gt;baseURI(), FALSE))

Do you really need to cache this? you can use WebKitTestServer::getURIForPath() when you need the base uri

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:56
&gt; +    const char* baseURI()
&gt; +    {
&gt; +        return m_baseURI.get();
&gt; +    }

Do you really need a method for this? :-)

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:166
&gt; +        CString resourcesDir = Test::getResourcesDir();
&gt; +        GOwnPtr&lt;char&gt; pathToFavicon(g_build_filename(resourcesDir.data(), &quot;blank.ico&quot;, NULL));

You can use Test::getWebKit1TestResoucesDir() instead and use the icon from the wk1 dir

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:170
&gt; +        GError* error = 0;
&gt; +        g_file_get_contents(pathToFavicon.get(), &amp;contents, &amp;length, &amp;error);
&gt; +        g_assert(!error);

g_file_get_contents returns a boolean, if you are no interested in the error, use the result. It&apos;s very unlikely that this fail, so I don&apos;t think it&apos;s worth it checking anyway.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:206
&gt; +    test-&gt;m_iconReadySignalReceived = false;
&gt; +    test-&gt;askForIconAndWaitForIconReadySignal();
&gt; +    g_assert(test-&gt;m_iconReadySignalReceived);
&gt; +
&gt; +    test-&gt;m_iconIsValid = false;
&gt; +    test-&gt;askAndWaitForValidFavicon();
&gt; +    g_assert(test-&gt;m_iconIsValid);
&gt; +
&gt; +    test-&gt;askAndWaitForInvalidFavicon();
&gt; +    g_assert(!test-&gt;m_iconIsValid);

Maybe we should move some of the logic from the fixture here, I&apos;m not sure, but I think we want to test all possible errors (if possible).

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:215
&gt; +    GOwnPtr&lt;char&gt; expectedURI(g_strdup_printf(&quot;%sfavicon.ico&quot;, baseURI));

You can use kServer-&gt;getURIForPath(/favicon.ico)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729371</commentid>
    <comment_count>8</comment_count>
      <attachid>165573</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-27 03:09:36 -0700</bug_when>
    <thetext>Comment on attachment 165573
Patch proposal + Unit test

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

Thanks Carlos for the awesome, thoroughful and incredibly helpful review. I&apos;ll work on a follow up patch for this right away.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:88
&gt;&gt; +      * WebKitFaviconDatabase::icon-ready:
&gt; 
&gt; Since we are using favicon everywhere, maybe this should be called favicon-ready

Ok.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:92
&gt;&gt; +      * This signal gets emitted when the icon&apos;s data is ready to be
&gt; 
&gt; We could be a bit more explicit about what icon we are referring. Someting like 
&gt; 
&gt; This signal gets emitted when the favicon of @page_uri is ready. This means that the favicon&apos;s data ....

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:114
&gt;&gt; +    gulong cancelledId;
&gt; 
&gt; Use unsigned long instead.

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:168
&gt;&gt; +    toImpl(wkIconDatabase)-&gt;retainIconForPageURL(pageURLString);
&gt; 
&gt; You can avoid the toImpl cast by using database-&gt;priv-&gt;iconDatabase-&gt;retainIconForPageURL(pageURLString); directly.

Right. Thanks for pointing this out

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:185
&gt;&gt; +    iconDatabase-&gt;initializeIconDatabaseClient(&amp;wkIconDatabaseClient);
&gt; 
&gt; We are using the C API in this particular case in other files, because we are passing a C API struct client after all.

I just changed it because it would mean doing a toAPI(iconDatabase) here to again have toImpl(wkIconDatabaseRef) called in the implementation of WKIconDatabaseSetIconDatabaseClient().

But yeah, I see your point and I think it&apos;s just a matter of coherence here, while not meaning any big problem anyway... so, changed!

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:255
&gt;&gt; + * @page_uri: URI of the page containing the icon
&gt; 
&gt; We don&apos;t know if the page contains an icon or not. Maybe we should say this is the page for which we want to get the favicon

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:269
&gt;&gt; +void webkit_favicon_database_get_favicon(WebKitFaviconDatabase* database, const gchar* pageURL, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)
&gt; 
&gt; Use pageURI instead of pageURL, to know this is what we get from the api user.

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:279
&gt;&gt; +    data-&gt;pageURL = pageURL;
&gt; 
&gt; This should be String::fromUTF8(pageURI);

Right

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:284
&gt;&gt; +    }
&gt; 
&gt; You also need to call g_simple_async_result_set_check_cancellable(), so that when the operation is cancelled and completed in getIconSurfaceCancelled(), g_simple_async_result_propagate_error() fills the error with Operation was cancelled error.

Oops! Fixed!

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:294
&gt;&gt; +    String pageURLString = String::fromUTF8(pageURL);
&gt; 
&gt; You already have the pageURLString in data-&gt;pageURL

That&apos;s right. Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:372
&gt;&gt; +                            _(&quot;Unknown favicon for page&quot;));
&gt; 
&gt; Here we an include the page uri in the error message. Favicon for page %s is unknown or something like that

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:383
&gt;&gt; + * Obtains the URI for the favicon for the given page URI.
&gt; 
&gt; Maybe the URI of the favicon for the given page URI or even for @page_uri

Fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:68
&gt;&gt; +} WebKitFaviconDatabaseError;
&gt; 
&gt; I think we should probably use FAVICON everywhere

Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:26
&gt;&gt; +WebKitFaviconDatabase* webkitFaviconDatabaseCreate(WebKit::WebIconDatabase*);
&gt; 
&gt; You can add using namespace WebKit; here and remove it from the .cpp as we are doing in other files.

For some reason I liked it more this way, but I&apos;m fine adding the using directive.

Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:24
&gt;&gt; +#include &quot;WebIconDatabase.h&quot;
&gt; 
&gt; This is already included by WebKitFaviconDatabasePrivate.h

&quot;That is true, hacker, that is true&quot; (http://en.wikipedia.org/wiki/Free_Software_Song)

Removed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:102
&gt;&gt; +    GRefPtr&lt;WebKitFaviconDatabase&gt; iconDatabase;
&gt; 
&gt; faviconDatabase?

Why not? Fixed!

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:339
&gt;&gt; + * default directory for the platform.
&gt; 
&gt; You should mention what this means, just by pointing to g_get_user_data_dir() docs.

Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:358
&gt;&gt; +        return;
&gt; 
&gt; Maybe we could turn this into a g_return_if_fail() since it&apos;s a programmer error to call this method twice.

Makes sense to me

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:413
&gt;&gt; +                                                     NULL));
&gt; 
&gt; Use 0 instead of NULL.  [readability/null] [5]

I&apos;d like to but I can&apos;t, since it&apos;s a sentinel for g_build_filename() and using NULL here will spit a warning out while compiling.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am:74
&gt;&gt; +	Source/WebKit2/UIProcess/API/gtk/tests/resources/blank.ico
&gt; 
&gt; No need to include this, you can use the icon directly from wk1 dir, like we currently do in other tests.

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:39
&gt;&gt; +        , m_webView(WEBKIT_WEB_VIEW(webkit_web_view_new()))
&gt; 
&gt; If you need a web view and a main loop you probably want to inherit from WebViewTest instead of Test

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:40
&gt;&gt; +        , m_baseURI(soup_uri_to_string(kServer-&gt;baseURI(), FALSE))
&gt; 
&gt; Do you really need to cache this? you can use WebKitTestServer::getURIForPath() when you need the base uri

You&apos;re probably right.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:56
&gt;&gt; +    }
&gt; 
&gt; Do you really need a method for this? :-)

Probably not :)

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:166
&gt;&gt; +        GOwnPtr&lt;char&gt; pathToFavicon(g_build_filename(resourcesDir.data(), &quot;blank.ico&quot;, NULL));
&gt; 
&gt; You can use Test::getWebKit1TestResoucesDir() instead and use the icon from the wk1 dir

Ok.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:170
&gt;&gt; +        g_assert(!error);
&gt; 
&gt; g_file_get_contents returns a boolean, if you are no interested in the error, use the result. It&apos;s very unlikely that this fail, so I don&apos;t think it&apos;s worth it checking anyway.

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:206
&gt;&gt; +    g_assert(!test-&gt;m_iconIsValid);
&gt; 
&gt; Maybe we should move some of the logic from the fixture here, I&apos;m not sure, but I think we want to test all possible errors (if possible).

You mean moving the assertions to the functions in FaviconDatabaseTest and leaving here just the test-&gt;ask*() calls?

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:215
&gt;&gt; +    GOwnPtr&lt;char&gt; expectedURI(g_strdup_printf(&quot;%sfavicon.ico&quot;, baseURI));
&gt; 
&gt; You can use kServer-&gt;getURIForPath(/favicon.ico)

Ok. I&apos;ll do</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729503</commentid>
    <comment_count>9</comment_count>
      <attachid>165994</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-27 07:12:00 -0700</bug_when>
    <thetext>Created attachment 165994
Patch proposal + Unit test

New patch addressing the issues pointed out by Carlos</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729505</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-27 07:14:57 -0700</bug_when>
    <thetext>Attachment 165994 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:410:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:411:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:102:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:103:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:104:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:363:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:368:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 10 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729564</commentid>
    <comment_count>11</comment_count>
      <attachid>165994</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-27 08:50:02 -0700</bug_when>
    <thetext>Comment on attachment 165994
Patch proposal + Unit test

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

Patch looks good, only unit tests need to be improved a bit, sorry for not replying to your question about unit tests before you posted the new patch. Also the style issues related to spaces.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:23
&gt; +#include &quot;WebIconDatabase.h&quot;

This is already included by WebKitFaviconDatabasePrivate.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:26
&gt; +#include &quot;WebKitWebContext.h&quot;

Do we need this here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:33
&gt; +#include &lt;wtf/gobject/GOwnPtr.h&gt;

I think we are not using GOwnPtr here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:77
&gt; +    priv-&gt;~WebKitFaviconDatabasePrivate();

priv is only used here so we could probably use database-&gt;priv directly.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:106
&gt; +

What happened here with the spaces?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:133
&gt; +    WebCore::NativeImagePtr icon = priv-&gt;iconDatabase-&gt;nativeImageForPageURL(pageURL, WebCore::IntSize(1, 1));

Same here, priv is only used here so maybe we can just use database-&gt;priv directly

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:130
&gt; +        webkit_favicon_database_get_favicon(database, &quot;http://www.webkitgtk.org/&quot;, 0, getInvalidFaviconCallback, this);

We should avoid depending on internet connection for unit tests.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:191
&gt; +    test-&gt;m_iconReadySignalReceived = false;
&gt; +    test-&gt;askForIconAndWaitForIconReadySignal();
&gt; +    g_assert(test-&gt;m_iconReadySignalReceived);
&gt; +
&gt; +    test-&gt;m_iconIsValid = false;
&gt; +    test-&gt;askAndWaitForValidFavicon();
&gt; +    g_assert(test-&gt;m_iconIsValid);
&gt; +
&gt; +    test-&gt;askAndWaitForInvalidFavicon();
&gt; +    g_assert(!test-&gt;m_iconIsValid);

Ok, what I meant is that there&apos;s too much logic in the fixture. This could be something like:

// Check that icon-ready is emitted when a page with a favicon is loaded.
test-&gt;loadURI();
test-&gt;waitUntilIconReady();
g_assert(test-&gt;m_iconReadySignalReceived);

cairo_surface_t* icon = test-&gt;getFavicon(kServer-&gt;getURIForPath(&quot;/&quot;).data())
check icon is not null and even it&apos;s == blank.ico or at least has the same size

We need to figure out a way to not return a favicon from soup server callback in this case
icon =  test-&gt;getFavicon(kServer-&gt;getURIForPath(&quot;/foo&quot;).data());
check icon is NULL

See the Downloads tests for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730320</commentid>
    <comment_count>12</comment_count>
      <attachid>165994</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-28 00:44:33 -0700</bug_when>
    <thetext>Comment on attachment 165994
Patch proposal + Unit test

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

Again thanks for the review. I&apos;m already working on fixing these issues and will incorporate them in a follow up patch

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:23
&gt;&gt; +#include &quot;WebIconDatabase.h&quot;
&gt; 
&gt; This is already included by WebKitFaviconDatabasePrivate.h

Removed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:26
&gt;&gt; +#include &quot;WebKitWebContext.h&quot;
&gt; 
&gt; Do we need this here?

Removed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:33
&gt;&gt; +#include &lt;wtf/gobject/GOwnPtr.h&gt;
&gt; 
&gt; I think we are not using GOwnPtr here

True. Removed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:77
&gt;&gt; +    priv-&gt;~WebKitFaviconDatabasePrivate();
&gt; 
&gt; priv is only used here so we could probably use database-&gt;priv directly.

Replaced with database-&gt;priv

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:106
&gt;&gt; +
&gt; 
&gt; What happened here with the spaces?

They changed how the check-webkit-style thing works in r129690, and it seems there&apos;s a bug related to multiline statements, that should be aligned with the opening bracket.

See https://bugs.webkit.org/show_bug.cgi?id=97602#c9

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:133
&gt;&gt; +    WebCore::NativeImagePtr icon = priv-&gt;iconDatabase-&gt;nativeImageForPageURL(pageURL, WebCore::IntSize(1, 1));
&gt; 
&gt; Same here, priv is only used here so maybe we can just use database-&gt;priv directly

Fixed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:130
&gt;&gt; +        webkit_favicon_database_get_favicon(database, &quot;http://www.webkitgtk.org/&quot;, 0, getInvalidFaviconCallback, this);
&gt; 
&gt; We should avoid depending on internet connection for unit tests.

I was taking the idea of WK1 tests, but sure I can redo this to avoid this external connection.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:191
&gt;&gt; +    g_assert(!test-&gt;m_iconIsValid);
&gt; 
&gt; Ok, what I meant is that there&apos;s too much logic in the fixture. This could be something like:
&gt; 
&gt; // Check that icon-ready is emitted when a page with a favicon is loaded.
&gt; test-&gt;loadURI();
&gt; test-&gt;waitUntilIconReady();
&gt; g_assert(test-&gt;m_iconReadySignalReceived);
&gt; 
&gt; cairo_surface_t* icon = test-&gt;getFavicon(kServer-&gt;getURIForPath(&quot;/&quot;).data())
&gt; check icon is not null and even it&apos;s == blank.ico or at least has the same size
&gt; 
&gt; We need to figure out a way to not return a favicon from soup server callback in this case
&gt; icon =  test-&gt;getFavicon(kServer-&gt;getURIForPath(&quot;/foo&quot;).data());
&gt; check icon is NULL
&gt; 
&gt; See the Downloads tests for an example.

Ok, I&apos;ll try to change that then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730606</commentid>
    <comment_count>13</comment_count>
      <attachid>166241</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-28 06:45:07 -0700</bug_when>
    <thetext>Created attachment 166241
Patch proposal + Unit test

Here comes a new patch. I think (and hope) I have addressed all the remaining issues.

Eager to get some feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730613</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-28 06:48:57 -0700</bug_when>
    <thetext>Attachment 166241 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:410:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:411:  Use 0 instead of NULL.  [readability/null] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:96:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:97:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:98:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:99:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:357:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:362:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 10 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730624</commentid>
    <comment_count>15</comment_count>
      <attachid>166241</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-28 07:03:59 -0700</bug_when>
    <thetext>Comment on attachment 166241
Patch proposal + Unit test

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

Great!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:344
&gt; +    // Return the icon is we can get it already.

is -&gt; if maybe the whole comment is a bit obvious.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.h:83
&gt; +WEBKIT_API cairo_surface_t *
&gt; +webkit_favicon_database_get_favicon_finish        (WebKitFaviconDatabase *database,

extra spaces between function name and (, this is the longer function so one space is enough

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:353
&gt; +

Extra new line here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:379
&gt; +    WebKitWebContextPrivate* priv = context-&gt;priv;
&gt; +

Extra line here too.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:405
&gt; +    WebKitWebContextPrivate* priv = context-&gt;priv;
&gt; +
&gt; +    if (priv-&gt;faviconDatabase)

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:58
&gt; +        FaviconDatabaseTest* test = static_cast&lt;FaviconDatabaseTest*&gt;(data);
&gt; +        test-&gt;m_getFaviconResult = result;
&gt; +        g_main_loop_quit(test-&gt;m_mainLoop);

Call webkit_favicon_database_get_favicon_finish here and save the cairo surface in the fixture instead of the async result.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:69
&gt; +        g_signal_handlers_disconnect_matched(m_webView, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this);

You are not connecting to any web view signal here, what do you want to disconnect?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:157
&gt; +    GError* error = 0;
&gt; +    favicon = webkit_favicon_database_get_favicon_finish(WEBKIT_FAVICON_DATABASE(database), test-&gt;m_getFaviconResult.get(), &amp;error);
&gt; +    g_assert(!favicon);
&gt; +    g_assert(error &amp;&amp; WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_NOT_FOUND);

You could save the error in the fixture and check it here, it&apos;s a bit weird that the fixtures starts the operation and the test finishes it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730721</commentid>
    <comment_count>16</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-28 09:07:13 -0700</bug_when>
    <thetext>Thanks Carlos. I&apos;m now pushing the patch with all those last comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730722</commentid>
    <comment_count>17</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-28 09:09:06 -0700</bug_when>
    <thetext>Committed r129906: &lt;http://trac.webkit.org/changeset/129906&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731210</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-29 08:29:10 -0700</bug_when>
    <thetext>I have spotted some issues after landing this patch in debug builds, so I filed a new bug to keep track of the fix for that: bug 97966</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163600</attachid>
            <date>2012-09-12 05:30:34 -0700</date>
            <delta_ts>2012-09-25 03:46:51 -0700</delta_ts>
            <desc>Patch proposal (NO Unit tests yet)</desc>
            <filename>0002-2012-09-12-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>44311</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlZTIxOTVlOWFiM2E5NThiZjI3ZDBkNWFkNTU0YWM0NDczMDRhOTJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDYgU2VwIDIwMTIgMTk6MzU6MjMgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvM10gMjAxMi0wOS0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5j
b20+CgogICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IG5ldyBGYXZpY29ucyBBUEkKICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0NzYKCiAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIE5ldyBvYmplY3Qgd3JhcHBpbmcg
dGhlIGludGVybmFsIEljb25EYXRhYmFzZSBmcm9tIFdlYkNvcmUsCiAgICAgICAgcHJvdmlkaW5n
IGEgc2ltcGxlIGFzeW5jaHJvbm91cyBBUEkgdG8gcmV0cmlldmUgdGhlIGZhdmljb24KICAgICAg
ICBhc3NvY2lhdGVkIHRvIGEgcGFnZSBVUkwsIGFuZCB0d28gbW9yZSBmdW5jdGlvbnMgdG8gc2lt
cGxlIHF1ZXJ5CiAgICAgICAgdGhlIGludGVybmFsIGRhdGFiYXNlIGZvciB0aGUgVVJJIG9mIHRo
ZSBpY29uIGFzc29jaWF0ZWQgdG8gYQogICAgICAgIHBhZ2UsIGlmIGFueSwgYW5kIHRvIGNsZWFy
IHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwgZGF0YWJhc2UuCgogICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCiAgICAgICAgKF9XZWJL
aXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKToKICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfaW5pdCk6CiAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplKToKICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6CiAgICAgICAgKGljb25EYXRh
UmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2spOiBDYWxsZWQgZnJvbSBXZWJJY29uRGF0YWJhc2UKICAg
ICAgICB3aGVuIG5ldyBkYXRhIGlzIHJlYWR5IGZvciBhIGZhdmljb24uCiAgICAgICAgKGdldElj
b25TdXJmYWNlU3luY2hyb25vdXNseSk6IFN5bmNocm9ub3VzbHkgcmV0dXJucyBhIHBvaW50ZXIg
dG8KICAgICAgICB0aGUgY2Fpcm9fc3VyZmFjZSB3aXRoIHRoZSBpY29uJ3MgZGF0YSwgaWYgYXZh
aWxhYmxlLgogICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUpOiBDcmVhdGUgdGhl
IFdlYktpdEZhdmljb25EYXRhYmFzZQogICAgICAgIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgdGhl
IEFQSSBjbGllbnQgZm9yIFdLSWNvbkRhdGFiYXNlQ2xpZW50LgogICAgICAgICh3ZWJraXRGYXZp
Y29uRGF0YWJhc2VHZXRPckNyZWF0ZVJlcXVlc3RzKTogUmV0dXJucyAoaWYgYXZhaWxhYmxlKQog
ICAgICAgIG9yIGNyZWF0ZXMgYSBuZXcgaWNvbiByZXF1ZXN0LCB0byBiZSBhcHBlbmRlZCB0byB0
aGUgbGlzdCBvZgogICAgICAgIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBwYWdlIFVSTC4KICAgICAg
ICAod2Via2l0ZmF2aWNvbmRhdGFiYXNlRGVsZXRlUmVxdWVzdHMpOiBSZW1vdmVzIHRoZSBmdWxs
IGxpc3Qgb2YKICAgICAgICBpY29uIHJlcXVlc3RzIGZvciBhIHBhZ2UgVVJMLgogICAgICAgIChH
ZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSk6IE5ldyBzdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGRh
dGEKICAgICAgICBhY3Jvc3MgdGhlIGFzeW5jaHJvbm91cyBpbXBsZW1lbnRhdGlvbiBvZiBnZXRf
ZmF2aWNvbigpLgogICAgICAgIChjb21wbGV0ZVBlbmRpbmdJY29uUmVxdWVzdCk6IFRha2VzIGNh
cmUgb2YgY29tcGxldGluZyB0aGUKICAgICAgICBhc3luY2hyb25vdXMgcmVzdWx0LCBkaXNjb25u
ZWN0aW5nIHRoZSBjYW5jZWxsYWJsZSwgaWYgYW55LgogICAgICAgIChnZXRJY29uU3VyZmFjZUNh
bmNlbGxlZCk6IEhhbmRsZSB0aGUgY2FzZSBvZiBhIHJlcXVlc3QgYmVpbmcKICAgICAgICBjYW5j
ZWxsZWQuIE11c3QgaGFwcGVuIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICAgICAod2Via2l0RmF2
aWNvbkRhdGFiYXNlR2V0SWNvblN1cmZhY2VDYW5jZWxsZWQpOiBDYWxsYmFjayB1c2VkIHdpdGgK
ICAgICAgICBnX2NhbmNlbGxhYmxlX2Nvbm5lY3QoKSwgd2hpY2ggZW5zdXJlIGdldEljb25TdXJm
YWNlQ2FuY2VsbGVkKCkgaXMKICAgICAgICBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAg
ICAgICAgKHNldEVycm9yRm9yQXN5bmNSZXN1bHQpOiBIZWxwZXIgdG8gc2V0IGVycm9ycyBpbiB0
aGUgcmVzdWx0LgogICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJvcl9xdWFyayk6
IE5ldyBmdW5jdGlvbiwgcHJvdmlkaW50IHRoZQogICAgICAgIG5ldyBlcnJvciBkb21haW4gZm9y
IGVycm9ycyBvZiB0eXBlIFdlYktpdEZhdmljb25EYXRhYmFzZUVycm9yLgogICAgICAgICh3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbik6IE5ldyBBUEkgZnVuY3Rpb24sIHByb3Zp
ZGluZwogICAgICAgIGFuIGFzeW5jaHJvbm91cyBtZWNoYW5pc20gdG8gcXVlcnkgdGhlIGZhdmlj
b24gZm9yIGEgcGFnZSBVUkwuCiAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9m
YXZpY29uX2ZpbmlzaCk6IE5ldyBBUEkgZnVuY3Rpb24gdG8KICAgICAgICBmaW5pc2ggdGhlIGFz
eW5jcmhvbm91cyByZXF1ZXN0IHN0YXJ0ZWQgd2l0aCBnZXRfZmF2aWNvbigpLgogICAgICAgICh3
ZWJraXRGYXZpY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKToKICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTogTmV3IEFQSSBmdW5jdGlv
bgogICAgICAgIHRvIGVhc2lseSByZXRyaWV2ZSwgaWYgYXZhaWxhYmxlLCB0aGUgVVJJIG9mIGEg
ZmF2aWNvbi4KICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIpOiBOZXcgQVBJ
IGZ1bmN0aW9uIHRvIGNsZWFyIHRoZQogICAgICAgIHN0YXRlIG9mIHRoZSBpbnRlcm5hbCBpY29u
IGRhdGFiYXNlLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLmg6IEFkZGVkLgogICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlKToKICAgICAgICAo
X1dlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKToKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaDogQWRkZWQgdG8KICAgICAgICBpbnRlcm5h
bGx5IGV4cG9zZSB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoKSB0byBXZWJLaXRXZWJDb250
ZXh0LgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oOiBJbXBvcnQg
V2ViS2l0Mi9XS0ljb25EYXRhYmFzZS5oLgogICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTog
QWRkZWQgbmV3IGZpbGVzLgoKICAgICAgICBBZGQgYSBuZXcgZ2V0dGVyIGluIFdlYkljb25EYXRh
YmFzZSBmb3IgbV91cmxJbXBvcnRDb21wbGV0ZWQuCgogICAgICAgICogVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5jcHA6CiAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjppc1VybElt
cG9ydENvbXBsZXRlZCk6IEFkZGVkIHRoaXMgc2ltcGxlCiAgICAgICAgZ2V0dGVyIHRvIGFsbG93
IGtub3dpbmcgZnJvbSBXZWJLaXRGYXZpY29uRGF0YWJhc2Ugd2hldGhlciB0aGUKICAgICAgICBp
bml0aWFsIGltcG9ydCBoYXMgZmluaXNoZWQsIG5lZWRlZCBmb3IgbWFraW5nIHNvbWUgZGVjaXNp
b25zLgogICAgICAgIChXZWJLaXQpOgogICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFz
ZS5oOgogICAgICAgIChXZWJJY29uRGF0YWJhc2UpOgoKICAgICAgICBOZXcgQVBJIGluIFdlYktp
dFdlYkNvbnRleHQgdG8gYWxsb3cgb2J0YWluaW5nIGEgdmFsaWQgaW5zdGFuY2Ugb2YKICAgICAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgYW5kIHRvIHNldC9nZXQgdGhlIGxvY2FsIHBhdGggdG8g
YmUgdXNlZC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cDoKICAgICAgICAoX1dlYktpdFdlYkNvbnRleHRQcml2YXRlKToKICAgICAgICAod2Via2l0X3dl
Yl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX3BhdGgpOiBOZXcgQVBJIHRvIGFsbG93CiAg
ICAgICAgc2V0dGluZyBhIHBhdGggZm9yIHRoZSBpY29uIGRhdGFiYXNlLCBvdGhlciB0aGFuIHRo
ZSBkZWZhdWx0IG9uZS4KICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2Rh
dGFiYXNlX3BhdGgpOiBOZXcgQVBJIHRvCiAgICAgICAgcmV0cmlldmUgdGhlIHBhdGggZm9yIHRo
ZSBpY29uIGRhdGFiYXNlIGN1cnJlbnRseSBpbiB1c2UuCiAgICAgICAgKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSk6IE5ldyBBUEkgdG8gZ2V0IGEgdmFsaWQKICAgICAg
ICBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW5zdGFuY2Ugb2YgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgoKICAg
ICAgICBNYWtlIHN1cmUgd2UgaGF2ZSBhIGRlZmF1bHQgcGF0aCBzZXQgZm9yIHRoZSBpY29uIGRh
dGFiYXNlLgoKICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHA6CiAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCk6
IFJldHVybiB0aGUKICAgICAgICBkZWZhdWx0IHBhdGggdG8gYmUgdXNlZCBmb3IgdGhlIGljb24g
ZGF0YWJhc2UuCi0tLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgODcgKysrKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0g
ICAgICAgICAgICAgICAgIHwgICA0ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2UuY3BwICAgIHwgNDIzICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oICAgICAgfCAgOTQgKysrKysKIC4u
Li9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCAgICAgICAgIHwgIDMwICsr
CiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggICB8ICAg
MSArCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCB8
ICA4NSArKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5oICAgfCAgMTAgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5j
cHAgICAgICAgfCAgIDUgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFz
ZS5oICAgICAgICAgfCAgIDEgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250
ZXh0R3RrLmNwcCAgICAgfCAgIDQgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDc0MiBpbnNlcnRpb25z
KCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJh
c2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZjMxOGE0Li4w
MzVlYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTItMDktMTIgIE1hcmlvIFNh
bmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdW0dUS10g
SW1wbGVtZW50IG5ldyBGYXZpY29ucyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk2NDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTmV3IG9iamVjdCB3cmFwcGluZyB0aGUgaW50ZXJuYWwgSWNvbkRh
dGFiYXNlIGZyb20gV2ViQ29yZSwKKyAgICAgICAgcHJvdmlkaW5nIGEgc2ltcGxlIGFzeW5jaHJv
bm91cyBBUEkgdG8gcmV0cmlldmUgdGhlIGZhdmljb24KKyAgICAgICAgYXNzb2NpYXRlZCB0byBh
IHBhZ2UgVVJMLCBhbmQgdHdvIG1vcmUgZnVuY3Rpb25zIHRvIHNpbXBsZSBxdWVyeQorICAgICAg
ICB0aGUgaW50ZXJuYWwgZGF0YWJhc2UgZm9yIHRoZSBVUkkgb2YgdGhlIGljb24gYXNzb2NpYXRl
ZCB0byBhCisgICAgICAgIHBhZ2UsIGlmIGFueSwgYW5kIHRvIGNsZWFyIHRoZSBzdGF0ZSBvZiB0
aGUgaW50ZXJuYWwgZGF0YWJhc2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGYXZpY29uRGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGYXZpY29uRGF0
YWJhc2VQcml2YXRlKToKKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2luaXQpOgor
ICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemUpOgorICAgICAgICAod2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6CisgICAgICAgIChpY29uRGF0YVJlYWR5Rm9y
UGFnZVVSTENhbGxiYWNrKTogQ2FsbGVkIGZyb20gV2ViSWNvbkRhdGFiYXNlCisgICAgICAgIHdo
ZW4gbmV3IGRhdGEgaXMgcmVhZHkgZm9yIGEgZmF2aWNvbi4KKyAgICAgICAgKGdldEljb25TdXJm
YWNlU3luY2hyb25vdXNseSk6IFN5bmNocm9ub3VzbHkgcmV0dXJucyBhIHBvaW50ZXIgdG8KKyAg
ICAgICAgdGhlIGNhaXJvX3N1cmZhY2Ugd2l0aCB0aGUgaWNvbidzIGRhdGEsIGlmIGF2YWlsYWJs
ZS4KKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUNyZWF0ZSk6IENyZWF0ZSB0aGUgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlCisgICAgICAgIG9iamVjdCBhbmQgaW5pdGlhbGl6ZXMgdGhlIEFQ
SSBjbGllbnQgZm9yIFdLSWNvbkRhdGFiYXNlQ2xpZW50LgorICAgICAgICAod2Via2l0RmF2aWNv
bkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1ZXN0cyk6IFJldHVybnMgKGlmIGF2YWlsYWJsZSkKKyAg
ICAgICAgb3IgY3JlYXRlcyBhIG5ldyBpY29uIHJlcXVlc3QsIHRvIGJlIGFwcGVuZGVkIHRvIHRo
ZSBsaXN0IG9mCisgICAgICAgIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBwYWdlIFVSTC4KKyAgICAg
ICAgKHdlYmtpdGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKTogUmVtb3ZlcyB0aGUgZnVs
bCBsaXN0IG9mCisgICAgICAgIGljb24gcmVxdWVzdHMgZm9yIGEgcGFnZSBVUkwuCisgICAgICAg
IChHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSk6IE5ldyBzdHJ1Y3R1cmUgdXNlZCB0byBwYXNz
IGRhdGEKKyAgICAgICAgYWNyb3NzIHRoZSBhc3luY2hyb25vdXMgaW1wbGVtZW50YXRpb24gb2Yg
Z2V0X2Zhdmljb24oKS4KKyAgICAgICAgKGNvbXBsZXRlUGVuZGluZ0ljb25SZXF1ZXN0KTogVGFr
ZXMgY2FyZSBvZiBjb21wbGV0aW5nIHRoZQorICAgICAgICBhc3luY2hyb25vdXMgcmVzdWx0LCBk
aXNjb25uZWN0aW5nIHRoZSBjYW5jZWxsYWJsZSwgaWYgYW55LgorICAgICAgICAoZ2V0SWNvblN1
cmZhY2VDYW5jZWxsZWQpOiBIYW5kbGUgdGhlIGNhc2Ugb2YgYSByZXF1ZXN0IGJlaW5nCisgICAg
ICAgIGNhbmNlbGxlZC4gTXVzdCBoYXBwZW4gb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAo
d2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0SWNvblN1cmZhY2VDYW5jZWxsZWQpOiBDYWxsYmFjayB1
c2VkIHdpdGgKKyAgICAgICAgZ19jYW5jZWxsYWJsZV9jb25uZWN0KCksIHdoaWNoIGVuc3VyZSBn
ZXRJY29uU3VyZmFjZUNhbmNlbGxlZCgpIGlzCisgICAgICAgIGNhbGxlZCBmcm9tIHRoZSBtYWlu
IHRocmVhZC4KKyAgICAgICAgKHNldEVycm9yRm9yQXN5bmNSZXN1bHQpOiBIZWxwZXIgdG8gc2V0
IGVycm9ycyBpbiB0aGUgcmVzdWx0LgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
ZXJyb3JfcXVhcmspOiBOZXcgZnVuY3Rpb24sIHByb3ZpZGludCB0aGUKKyAgICAgICAgbmV3IGVy
cm9yIGRvbWFpbiBmb3IgZXJyb3JzIG9mIHR5cGUgV2ViS2l0RmF2aWNvbkRhdGFiYXNlRXJyb3Iu
CisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbik6IE5ldyBBUEkg
ZnVuY3Rpb24sIHByb3ZpZGluZworICAgICAgICBhbiBhc3luY2hyb25vdXMgbWVjaGFuaXNtIHRv
IHF1ZXJ5IHRoZSBmYXZpY29uIGZvciBhIHBhZ2UgVVJMLgorICAgICAgICAod2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKTogTmV3IEFQSSBmdW5jdGlvbiB0bworICAg
ICAgICBmaW5pc2ggdGhlIGFzeW5jcmhvbm91cyByZXF1ZXN0IHN0YXJ0ZWQgd2l0aCBnZXRfZmF2
aWNvbigpLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJY29u
c0ZvclVSSSk6CisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91
cmkpOiBOZXcgQVBJIGZ1bmN0aW9uCisgICAgICAgIHRvIGVhc2lseSByZXRyaWV2ZSwgaWYgYXZh
aWxhYmxlLCB0aGUgVVJJIG9mIGEgZmF2aWNvbi4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2NsZWFyKTogTmV3IEFQSSBmdW5jdGlvbiB0byBjbGVhciB0aGUKKyAgICAgICAgc3Rh
dGUgb2YgdGhlIGludGVybmFsIGljb24gZGF0YWJhc2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZh
dmljb25EYXRhYmFzZSk6CisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUu
aDogQWRkZWQgdG8KKyAgICAgICAgaW50ZXJuYWxseSBleHBvc2Ugd2Via2l0RmF2aWNvbkRhdGFi
YXNlQ3JlYXRlKCkgdG8gV2ViS2l0V2ViQ29udGV4dC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmg6IEltcG9ydCBXZWJLaXQyL1dLSWNvbkRhdGFiYXNlLmguCisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGVzLgorCisgICAgICAg
IEFkZCBhIG5ldyBnZXR0ZXIgaW4gV2ViSWNvbkRhdGFiYXNlIGZvciBtX3VybEltcG9ydENvbXBs
ZXRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmlzVXJsSW1wb3J0Q29tcGxldGVkKTogQWRkZWQg
dGhpcyBzaW1wbGUKKyAgICAgICAgZ2V0dGVyIHRvIGFsbG93IGtub3dpbmcgZnJvbSBXZWJLaXRG
YXZpY29uRGF0YWJhc2Ugd2hldGhlciB0aGUKKyAgICAgICAgaW5pdGlhbCBpbXBvcnQgaGFzIGZp
bmlzaGVkLCBuZWVkZWQgZm9yIG1ha2luZyBzb21lIGRlY2lzaW9ucy4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oOgorICAgICAgICAoV2Vi
SWNvbkRhdGFiYXNlKToKKworICAgICAgICBOZXcgQVBJIGluIFdlYktpdFdlYkNvbnRleHQgdG8g
YWxsb3cgb2J0YWluaW5nIGEgdmFsaWQgaW5zdGFuY2Ugb2YKKyAgICAgICAgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlIGFuZCB0byBzZXQvZ2V0IHRoZSBsb2NhbCBwYXRoIHRvIGJlIHVzZWQuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAg
KF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X2Zhdmljb25fZGF0YWJhc2VfcGF0aCk6IE5ldyBBUEkgdG8gYWxsb3cKKyAgICAgICAgc2V0
dGluZyBhIHBhdGggZm9yIHRoZSBpY29uIGRhdGFiYXNlLCBvdGhlciB0aGFuIHRoZSBkZWZhdWx0
IG9uZS4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9w
YXRoKTogTmV3IEFQSSB0bworICAgICAgICByZXRyaWV2ZSB0aGUgcGF0aCBmb3IgdGhlIGljb24g
ZGF0YWJhc2UgY3VycmVudGx5IGluIHVzZS4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZmF2aWNvbl9kYXRhYmFzZSk6IE5ldyBBUEkgdG8gZ2V0IGEgdmFsaWQKKyAgICAgICAgYW5k
IHByb3Blcmx5IGluaXRpYWxpemVkIGluc3RhbmNlIG9mIFdlYktpdEZhdmljb25EYXRhYmFzZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CisKKyAgICAg
ICAgTWFrZSBzdXJlIHdlIGhhdmUgYSBkZWZhdWx0IHBhdGggc2V0IGZvciB0aGUgaWNvbiBkYXRh
YmFzZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgp
OiBSZXR1cm4gdGhlCisgICAgICAgIGRlZmF1bHQgcGF0aCB0byBiZSB1c2VkIGZvciB0aGUgaWNv
biBkYXRhYmFzZS4KKwogMjAxMi0wOS0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dLMl0gSWNvbkRhdGFiYXNlOiBBZGQgYSB3YXkgdG8g
bm90aWZ5IHdoZW4gaWNvbiBkYXRhIGlzIGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggZDQxN2I1Zi4uYWE0NjE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC0xMDMsNiArMTAzLDcgQEAgd2Via2l0Mmd0a19oX2FwaSArPSBcCiAJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QuaCBcCkBAIC02MzgsNiArNjM5LDkgQEAg
d2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RXJyb3IuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZhdmljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNkNGM2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsNDIzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJXZWJJY29u
RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNp
emUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CisjaW5jbHVkZSA8Z2xpYi9n
aTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitz
dGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJ
KFdlYktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IFN0cmluZyYpOworc3RhdGljIHZvaWQgd2Vi
a2l0RmF2aWNvbkRhdGFiYXNlR2V0SWNvblN1cmZhY2VDYW5jZWxsZWQoR0NhbmNlbGxhYmxlKiwg
R1NpbXBsZUFzeW5jUmVzdWx0Kik7CisKK2VudW0geworICAgIElDT05fUkVBRFksCisKKyAgICBM
QVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OworCit0eXBlZGVmIFZlY3RvcjxHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gPiBQZW5k
aW5nSWNvblJlcXVlc3RWZWN0b3I7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQZW5kaW5nSWNv
blJlcXVlc3RWZWN0b3IqPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CisKK3N0cnVjdCBfV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tJY29uRGF0YWJhc2VS
ZWY+IHdrSWNvbkRhdGFiYXNlOworICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBwZW5kaW5nSWNv
blJlcXVlc3RzOworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRGYXZpY29uRGF0YWJhc2UsIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRGYXZpY29uRGF0YWJhc2VDbG9zZUlmTmVlZGVkKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0
YWJhc2UpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IGRhdGFi
YXNlLT5wcml2OworICAgIGlmICh0b0ltcGwocHJpdi0+d2tJY29uRGF0YWJhc2UuZ2V0KCkpLT5p
c09wZW4oKSkKKyAgICAgICAgV0tJY29uRGF0YWJhc2VDbG9zZShwcml2LT53a0ljb25EYXRhYmFz
ZS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2luaXQo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBtYW5hZ2VyKQoreworICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUobWFuYWdlciwg
V0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZSk7CisgICAgbWFuYWdlci0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRGYXZp
Y29uRGF0YWJhc2VQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRh
YmFzZUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UqIGRhdGFiYXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqZWN0KTsKKyAgICBXZWJL
aXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJhc2UtPnByaXY7CisKKyAgICB3
ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZUlmTmVlZGVkKGRhdGFiYXNlKTsKKyAgICBXS0ljb25E
YXRhYmFzZVNldEljb25EYXRhYmFzZUNsaWVudChwcml2LT53a0ljb25EYXRhYmFzZS5nZXQoKSwg
MCk7CisgICAgcHJpdi0+fldlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Ns
YXNzX2luaXQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MqIGZpbmRDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7Cisg
ICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXpl
OworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tcmVhZHk6
CisgICAgICAqIEBkYXRhYmFzZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVt
aXR0ZWQKKyAgICAgICogQHBhZ2VfdXJsOiB0aGUgVVJJIG9mIHRoZSBXZWIgcGFnZSBjb250YWlu
aW5nIHRoZSBpY29uLgorICAgICAgKgorICAgICAgKiBOb3RlIHRoYXQgdGhpcyBzaWduYWwgY2Fy
cmllcyB0aGUgVVJJIG9mIHRoZSBmcmFtZSB0aGF0IGxvYWRzCisgICAgICAqIHRoZSBpY29uLCB3
aGlsZSAjV2ViS2l0V2ViVmlldzo6aWNvbi1yZWFkeSBwcm92aWRlcyB0aGUgVVJJCisgICAgICAq
IG9mIHRoZSBmYXZpY29uLgorICAgICAgKi8KKyAgICBzaWduYWxzW0lDT05fUkVBRFldID0KKyAg
ICAgICAgZ19zaWduYWxfbmV3KCJpY29uLXJlYWR5IiwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKGZpbmRDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19TVFJJTkcsCisg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgICAgICAgICAg
IEdfVFlQRV9TVFJJTkcpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGZpbmRDbGFz
cywgc2l6ZW9mKFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZv
aWQgaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjayhXS0ljb25EYXRhYmFzZVJlZiB3a0lj
b25EYXRhYmFzZSwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSA9IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKGNsaWVudEluZm8pOworICAgIFN0
cmluZyBwYWdlVVJMU3RyaW5nID0gdG9JbXBsKHBhZ2VVUkwpLT5zdHJpbmcoKTsKKworICAgIFdL
SWNvbkRhdGFiYXNlUmV0YWluSWNvbkZvclVSTCh3a0ljb25EYXRhYmFzZSwgcGFnZVVSTCk7Cisg
ICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlUHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShkYXRhYmFz
ZSwgcGFnZVVSTFN0cmluZyk7CisgICAgZ19zaWduYWxfZW1pdChkYXRhYmFzZSwgc2lnbmFsc1tJ
Q09OX1JFQURZXSwgMCwgcGFnZVVSTFN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGlj
IGNhaXJvX3N1cmZhY2VfdCogZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSog
cHJpdiA9IGRhdGFiYXNlLT5wcml2OworCisgICAgLy8gVGhlIGV4YWN0IHNpemUgd2UgcGFzcyBp
cyBpcnJlbGV2YW50IHRvIHRoZSBpY29uRGF0YWJhc2UgY29kZS4KKyAgICAvLyBXZSBtdXN0IHBh
c3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAweDAgdG8gZ2V0IGFuIGljb24uCisgICAgV2ViQ29y
ZTo6TmF0aXZlSW1hZ2VQdHIgaWNvbiA9IHRvSW1wbChwcml2LT53a0ljb25EYXRhYmFzZS5nZXQo
KSktPm5hdGl2ZUltYWdlRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDEsIDEp
KTsKKyAgICBpZiAoIWljb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGljb24g
PyBpY29uLT5zdXJmYWNlKCkgOiAwOworfQorCitXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtp
dEZhdmljb25EYXRhYmFzZUNyZWF0ZShXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSkK
K3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSA9IFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNF
LCBOVUxMKSk7CisgICAgZmF2aWNvbkRhdGFiYXNlLT5wcml2LT53a0ljb25EYXRhYmFzZSA9IHdr
SWNvbkRhdGFiYXNlOworCisgICAgV0tJY29uRGF0YWJhc2VDbGllbnQgd2tJY29uRGF0YWJhc2VD
bGllbnQgPSB7CisgICAgICAgIGtXS0ljb25EYXRhYmFzZUNsaWVudEN1cnJlbnRWZXJzaW9uLAor
ICAgICAgICBmYXZpY29uRGF0YWJhc2UsIC8vIGNsaWVudEluZm8KKyAgICAgICAgMCwgLy8gZGlk
Q2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjaworICAgICAgICAwLCAvLyBkaWRSZW1vdmVBbGxJ
Y29uc0NhbGxiYWNrCisgICAgICAgIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2ssCisg
ICAgfTsKKyAgICBXS0ljb25EYXRhYmFzZVNldEljb25EYXRhYmFzZUNsaWVudCh3a0ljb25EYXRh
YmFzZSwgJndrSWNvbkRhdGFiYXNlQ2xpZW50KTsKKworICAgIHJldHVybiBmYXZpY29uRGF0YWJh
c2U7Cit9CisKK3N0YXRpYyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIHdlYmtpdEZhdmljb25E
YXRhYmFzZUdldE9yQ3JlYXRlUmVxdWVzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3Rv
ciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVS
TCk7CisgICAgaWYgKCFpY29ucykgeworICAgICAgICBpY29ucyA9IG5ldyBQZW5kaW5nSWNvblJl
cXVlc3RWZWN0b3I7CisgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3Rz
LnNldChwYWdlVVJMLCBpY29ucyk7CisgICAgfQorCisgICAgcmV0dXJuIGljb25zOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRmYXZpY29uZGF0YWJhc2VEZWxldGVSZXF1ZXN0cyhXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIHJlcXVlc3Rz
LCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJ
Y29uUmVxdWVzdHMucmVtb3ZlKHBhZ2VVUkwpOworICAgIGRlbGV0ZSByZXF1ZXN0czsKK30KKwor
c3RydWN0IEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhIHsKKyAgICBHUmVmUHRyPFdlYktpdEZh
dmljb25EYXRhYmFzZT4gZmF2aWNvbkRhdGFiYXNlOworICAgIFN0cmluZyBwYWdlVVJMOworICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGljb247CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+
IGNhbmNlbGxhYmxlOworICAgIGd1bG9uZyBjYW5jZWxsZWRJZDsKK307CitXRUJLSVRfREVGSU5F
X0FTWU5DX0RBVEFfU1RSVUNUKEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKQorCitzdGF0aWMg
dm9pZCBjb21wbGV0ZVBlbmRpbmdJY29uUmVxdWVzdChHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3Vs
dCkKK3sKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIEdldEZhdmljb25TdXJmYWNlQXN5bmNE
YXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEqPihnX3Np
bXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQpKTsKKyAgICBpZiAo
ZGF0YSAmJiBkYXRhLT5jYW5jZWxsZWRJZCA+IDApCisgICAgICAgIGdfY2FuY2VsbGFibGVfZGlz
Y29ubmVjdChkYXRhLT5jYW5jZWxsYWJsZS5nZXQoKSwgZGF0YS0+Y2FuY2VsbGVkSWQpOworCisg
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2
b2lkIGdldEljb25TdXJmYWNlQ2FuY2VsbGVkKHZvaWQqIHVzZXJEYXRhKQoreworICAgIEdTaW1w
bGVBc3luY1Jlc3VsdCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8R1NpbXBsZUFzeW5jUmVzdWx0Kj4o
dXNlckRhdGEpOworCisgICAgLy8gR2V0IHRoZSBkYXRhIHdlIG1pZ2h0IG5lZWQgYW5kIGNvbXBs
ZXRlIHRoZSByZXF1ZXN0LgorICAgIEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKiBkYXRhID0g
c3RhdGljX2Nhc3Q8R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEqPihnX3NpbXBsZV9hc3luY19y
ZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQpKTsKKyAgICBXZWJLaXRGYXZpY29uRGF0
YWJhc2UqIGRhdGFiYXNlID0gZGF0YS0+ZmF2aWNvbkRhdGFiYXNlOworICAgIFN0cmluZyBwYWdl
VVJMID0gZGF0YS0+cGFnZVVSTDsKKyAgICBjb21wbGV0ZVBlbmRpbmdJY29uUmVxdWVzdChyZXN1
bHQpOworCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFiYXNlLT5w
cml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAoIWljb25zKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgaXRlbUluZGV4ID0gaWNvbnMtPmZpbmQocmVz
dWx0KTsKKyAgICBpZiAoaXRlbUluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBpY29ucy0+cmVt
b3ZlKGl0ZW1JbmRleCk7CisgICAgaWYgKGljb25zLT5pc0VtcHR5KCkpCisgICAgICAgIHdlYmtp
dGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEljb25TdXJmYWNlQ2Fu
Y2VsbGVkKEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVz
dWx0KQoreworICAgIC8vIEhhbmRsZSBjYW5jZWxsZWQgaW4gYSBpbiBpZGxlIHNpbmNlIGl0IG1p
Z2h0IGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgICAgY2FsbE9uTWFpblRocmVhZChnZXRJ
Y29uU3VyZmFjZUNhbmNlbGxlZCwgcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgc2V0RXJyb3JG
b3JBc3luY1Jlc3VsdChHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlRXJyb3IgZXJyb3IsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCA9IFN0cmluZygpKQorewor
ICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgV0VC
S0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVEOgorICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9yKHJlc3VsdCwgV0VCS0lUX0ZBVklDT05fREFUQUJB
U0VfRVJST1IsIGVycm9yLCBfKCJGYXZpY29ucyBkYXRhYmFzZSBub3QgaW5pdGlhbGl6ZWQgeWV0
IikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV0VCS0lUX0ZBVklDT05fREFUQUJBU0Vf
RVJST1JfSUNPTl9OT1RfRk9VTkQ6CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRf
ZXJyb3IocmVzdWx0LCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUiwgZXJyb3IsIF8oIlBh
Z2UgJXMgZG9lcyBub3QgaGF2ZSBhIGZhdmljb24iKSwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK0dRdWFyayB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJvcl9x
dWFyayh2b2lkKQoreworICAgIHJldHVybiBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygiV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlRXJyb3IiKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbjoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0RmF2aWNvbkRhdGFi
YXNlCisgKiBAcGFnZV91cmw6IFVSTCBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisg
KiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogQSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMLgor
ICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBBICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNh
bGwgd2hlbiB0aGUgcmVxdWVzdCBpcworICogICAgICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwg
aWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlc3VsdC4KKyAqIEB1c2VyX2RhdGE6IChjbG9z
dXJlKTogVGhlIGRhdGEgdG8gcGFzcyB0byBAY2FsbGJhY2suCisgKgorICogQXN5bmNocm9ub3Vz
bHkgb2J0YWlucyBhICNjYWlyb19zdXJmYWNlX3Qgb2YgdGhlIGZhdmljb24gZm9yIHRoZQorICog
Z2l2ZW4gcGFnZSBVUkwuIEl0IHJldHVybnMgdGhlIGNhY2hlZCBpY29uIGlmIGl0J3MgaW4gdGhl
IGRhdGFiYXNlCisgKiBhc3luY2hyb25vdXNseSB3YWl0aW5nIGZvciB0aGUgaWNvbiB0byBiZSBy
ZWFkIGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1l
dGhvZC4gV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxsYmFjayB3aWxsCisgKiBi
ZSBpbnZva2VkLiBZb3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
ZmF2aWNvbl9maW5pc2goKQorICogdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4K
KyAqLwordm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSTCwgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFT
RShkYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFnZVVSTCk7CisKKyAgICBHUmVm
UHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRhdGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX2dldF9mYXZpY29uKSkpOworICAgIEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRh
KiBkYXRhID0gY3JlYXRlR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEoKTsKKyAgICBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQuZ2V0KCksIGRhdGEsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lHZXRGYXZpY29uU3VyZmFjZUFz
eW5jRGF0YSkpOworICAgIGRhdGEtPmZhdmljb25EYXRhYmFzZSA9IGRhdGFiYXNlOworICAgIGRh
dGEtPnBhZ2VVUkwgPSBwYWdlVVJMOworICAgIGRhdGEtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFi
bGU7CisgICAgZGF0YS0+Y2FuY2VsbGVkSWQgPSBjYW5jZWxsYWJsZQorICAgICAgICA/IGdfY2Fu
Y2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRGYXZpY29uRGF0
YWJhc2VHZXRJY29uU3VyZmFjZUNhbmNlbGxlZCksIHJlc3VsdC5nZXQoKSwgMCkKKyAgICAgICAg
OiAwOworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IGRhdGFiYXNl
LT5wcml2OworICAgIFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlSW1wbCA9IHRvSW1wbChw
cml2LT53a0ljb25EYXRhYmFzZS5nZXQoKSk7CisgICAgaWYgKCFpY29uRGF0YWJhc2VJbXBsLT5p
c09wZW4oKSkgeworICAgICAgICBzZXRFcnJvckZvckFzeW5jUmVzdWx0KHJlc3VsdC5nZXQoKSwg
V0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVEKTsKKyAgICAgICAg
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBwYWdlVVJMU3RyaW5nID0gU3RyaW5n
Ojpmcm9tVVRGOChwYWdlVVJMKTsKKyAgICBpZiAocGFnZVVSTFN0cmluZy5pc0VtcHR5KCkgfHwg
cGFnZVVSTFN0cmluZy5zdGFydHNXaXRoKCJhYm91dDoiKSkgeworICAgICAgICBzZXRFcnJvckZv
ckFzeW5jUmVzdWx0KHJlc3VsdC5nZXQoKSwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1Jf
SUNPTl9OT1RfRk9VTkQsIHBhZ2VVUkxTdHJpbmcpOworICAgICAgICBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gV2UgYXNrIGZvciB0aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9uJ3Qg
Z2V0IHRoZSBpY29uIGRhdGEgbm93LAorICAgIC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVyIChl
dmVuIGlmIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBpbXBvcnRpbmcgaWNvbnMpLgorICAgIGRhdGEt
Pmljb24gPSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkxTdHJp
bmcpOworCisgICAgLy8gSWYgdGhlcmUncyBub3QgYSB2YWxpZCBpY29uLCBidXQgdGhlcmUncyBh
biBpY29uVVJMIHJlZ2lzdGVyZWQsCisgICAgLy8gb3IgaXQncyBzdGlsbCBub3QgcmVnaXN0ZXJl
ZCBidXQgdGhlIGltcG9ydCBwcm9jZXNzIGhhc24ndAorICAgIC8vIGZpbmlzaGVkIHlldCwgd2Ug
bmVlZCB0byB3YWl0IGZvciBpY29uRGF0YVJlYWR5Rm9yUGFnZSB0byBiZQorICAgIC8vIGNhbGxl
ZCBiZWZvcmUgbWFraW5nIGFuZCBpbmZvcm1lZCBkZWNpc2lvbi4KKyAgICBTdHJpbmcgaWNvblVS
TEZvclBhZ2VVUkw7CisgICAgaWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uVVJMRm9y
UGFnZVVSTChwYWdlVVJMU3RyaW5nLCBpY29uVVJMRm9yUGFnZVVSTCk7CisgICAgaWYgKCFkYXRh
LT5pY29uICYmICghaWNvblVSTEZvclBhZ2VVUkwuaXNFbXB0eSgpIHx8ICFpY29uRGF0YWJhc2VJ
bXBsLT5pc1VybEltcG9ydENvbXBsZXRlZCgpKSkgeworICAgICAgICBQZW5kaW5nSWNvblJlcXVl
c3RWZWN0b3IqIGljb25zID0gd2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0T3JDcmVhdGVSZXF1ZXN0
cyhkYXRhYmFzZSwgcGFnZVVSTFN0cmluZyk7CisgICAgICAgIEFTU0VSVChpY29ucyk7CisgICAg
ICAgIGljb25zLT5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCB3aXRob3V0IGEgdmFsaWQgaWNvbiwgd2hpY2gg
bWVhbnMgdGhhdAorICAgIC8vIHRoZXJlJ3Mgbm8gaWNvblVSTCByZWdpc3RlcmVkIGZvciB0aGlz
IHBhZ2VVUkwgYW5kIHRoZQorICAgIC8vIHVybEltcG9ydCBwcm9jZXNzIGhhcyBhbHJlYWR5IGZp
bmlzaGVkLCBvciBkbyBoYXZlIGEgdmFsaWQgaWNvbgorICAgIC8vIGJ1dCBpdCdzIGFuIGVtcHR5
IGltYWdlLCB0aGF0IG1lYW5zIHRoZXJlJ3Mgbm8gZmF2aWNvbi4KKyAgICBpZiAoIWRhdGEtPmlj
b24gfHwgIWNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoZGF0YS0+aWNvbi5nZXQoKSkpCisg
ICAgICAgIHNldEVycm9yRm9yQXN5bmNSZXN1bHQocmVzdWx0LmdldCgpLCBXRUJLSVRfRkFWSUNP
Tl9EQVRBQkFTRV9FUlJPUl9JQ09OX05PVF9GT1VORCwgcGFnZVVSTFN0cmluZyk7CisKKyAgICAv
LyBDb21wbGV0ZSB0aGUgYXN5bmNocm9ub3VzIHByb2Nlc3M7CisgICAgZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0LmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2g6CisgKiBAZGF0YWJhc2U6IGEg
I1dlYktpdEZhdmljb25EYXRhYmFzZQorICogQHJlc3VsdDogQSAjR0FzeW5jUmVzdWx0IG9idGFp
bmVkIGZyb20gdGhlICNHQXN5bmNSZWFkeUNhbGxiYWNrIHBhc3NlZCB0byB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbigpCisgKiBAZXJyb3I6IChhbGxvdy1ub25lKTogUmV0dXJu
IGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTC4KKyAqCisgKiBGaW5pc2hlcyBhbiBvcGVyYXRp
b24gc3RhcnRlZCB3aXRoIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKCkuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjY2Fp
cm9fc3VyZmFjZV90LCBvciAlTlVMTC4KKyAqLworY2Fpcm9fc3VyZmFjZV90KiB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdT
aW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJl
c3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3Vy
Y2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b24pOworCisgICAgaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3Ioc2lt
cGxlUmVzdWx0LCBlcnJvcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGhlIGZvbGxv
d2luZyBzdGF0ZW1lbnQgc2hvdWxkIGFsd2F5cyByZXR1cm4gdmFsaWQgZGF0YS4KKyAgICBHZXRG
YXZpY29uU3VyZmFjZUFzeW5jRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEdldEZhdmljb25TdXJm
YWNlQXN5bmNEYXRhKj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIo
c2ltcGxlUmVzdWx0KSk7CisgICAgQVNTRVJUKGRhdGEpOworCisgICAgLy8gRW5zdXJlIHdlIGRp
c2Nvbm5lY3QgYW55IGNhbmNlbGxhYmxlIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIHNldC4KKyAgICBp
ZiAoZGF0YSAmJiBkYXRhLT5jYW5jZWxsZWRJZCA+IDApCisgICAgICAgIGdfY2FuY2VsbGFibGVf
ZGlzY29ubmVjdChkYXRhLT5jYW5jZWxsYWJsZS5nZXQoKSwgZGF0YS0+Y2FuY2VsbGVkSWQpOwor
CisgICAgLy8gUmV0dXJuIHRoZSBpY29uIGlzIHdlIGNhbiBnZXQgaXQgYWxyZWFkeS4KKyAgICBp
ZiAoZGF0YS0+aWNvbikKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNhaXJvX3N1cmZhY2Vf
dCo+KGRhdGEtPmljb24ucmVsZWFzZSgpLmxlYWtSZWYoKSk7CisKKyAgICAvLyBJZiB0aGUgaWNv
biBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgc3RhZ2UsIGludmVzdGlnYXRlIHdoeQorICAgIC8v
IGFuZCBjb21lIHVwIHdpdGggYSBkZXNjcmlwdGl2ZSwgYW5kIGhvcGVmdWxseSBoZWxwZnVsLCBl
cnJvci4KKyAgICBXZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZUltcGwgPSB0b0ltcGwoZGF0
YWJhc2UtPnByaXYtPndrSWNvbkRhdGFiYXNlLmdldCgpKTsKKyAgICBTdHJpbmcgaWNvblVSTEZv
clBhZ2VVUkw7CisgICAgaWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFn
ZVVSTChkYXRhLT5wYWdlVVJMLCBpY29uVVJMRm9yUGFnZVVSTCk7CisKKyAgICBpZiAoaWNvblVS
TEZvclBhZ2VVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gaWNvbiBV
UkwgaW4gdGhlIGRhdGFiYXNlIGF0IHRoaXMgcG9pbnQsIHdlIGNhbgorICAgICAgICAvLyBjb25j
bHVkZSB0aGVyZSdzIG5vIGZhdmljb24gYXQgYWxsIGZvciB0aGUgcmVxdWVzdGVkIHBhZ2UgVVJM
LgorICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJS
T1IsCisgICAgICAgICAgICAgICAgICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0lD
T05fTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAgICBfKCJQYWdlICVzIGRvZXMgbm90IGhh
dmUgYSBmYXZpY29uIiksCisgICAgICAgICAgICAgICAgICAgIGRhdGEtPnBhZ2VVUkwudXRmOCgp
LmRhdGEoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGljb24gVVJMIGlzIGtu
b3duIGl0IG9idmlvdXNseSBtZWFucyB0aGF0IHRoZSBpY29uIGRhdGEKKyAgICAgICAgLy8gaGFz
bid0IGJlZW4gcmV0cmlldmVkIHlldCwgc28gcmVwb3J0IHRoYXQgaXQncyAndW5hdmFpbGFibGUn
LgorICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBXRUJLSVRfRkFWSUNPTl9EQVRB
QkFTRV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRV9FUlJPUl9JQ09OX1VOS05PV04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiVW5rbm93biBmYXZpY29uIGZvciBwYWdlIikpOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VQcm9jZXNzUGVuZGluZ0ljb25z
Rm9yVVJJKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFn
ZVVSTCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2Ut
PnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICghaWNvbnMp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNvbnMtPnNp
emUoKTsgKytpKSB7CisgICAgICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0gaWNvbnMt
PmF0KGkpLmdldCgpOworICAgICAgICBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSogZGF0YSA9
IHN0YXRpY19jYXN0PEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKj4oZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0KSk7CisgICAgICAgIGRhdGEtPmljb24g
PSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwpOworCisgICAg
ICAgIGNvbXBsZXRlUGVuZGluZ0ljb25SZXF1ZXN0KHJlc3VsdCk7CisgICAgfQorICAgIHdlYmtp
dGZhdmljb25kYXRhYmFzZURlbGV0ZVJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7
Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpOgor
ICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJ
IG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkg
Zm9yIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKiBTZWUgYWxzbyB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkuCisgKgorICogUmV0dXJuczogYSBuZXdseSBhbGxv
Y2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwKKyAqLworZ2NoYXIqIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRh
dGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVSTCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHBhZ2VVUkwsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBTdHJpbmcgaWNvblVSTEZvclBhZ2VVUkw7CisgICAgdG9JbXBsKGRhdGFiYXNlLT5wcml2
LT53a0ljb25EYXRhYmFzZS5nZXQoKSktPnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3Ry
aW5nOjpmcm9tVVRGOChwYWdlVVJMKSwgaWNvblVSTEZvclBhZ2VVUkwpOworICAgIGlmIChpY29u
VVJMRm9yUGFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGdfc3RyZHVwKGljb25VUkxGb3JQYWdlVVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCisvKioKKyAq
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRG
YXZpY29uRGF0YWJhc2UKKyAqCisgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNl
LgorICovCit2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFW
SUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgV0tJY29uRGF0YWJhc2VSZW1vdmVBbGxJ
Y29ucyhkYXRhYmFzZS0+cHJpdi0+d2tJY29uRGF0YWJhc2UuZ2V0KCkpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJh
c2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTcyZDM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNv
bkRhdGFiYXNlLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5l
ZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4g
Y2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdEZhdmlj
b25EYXRhYmFzZV9oCisjZGVmaW5lIFdlYktpdEZhdmljb25EYXRhYmFzZV9oCisKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSAgICAgICAgICAgICh3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRkFWSUNPTl9EQVRB
QkFTRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFLCBXZWJLaXRGYXZpY29uRGF0YWJhc2UpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFKSkKKyNk
ZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRkFWSUNPTl9EQVRB
QkFTRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJB
U0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUiAgICAgICAgICAgKHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2Vycm9yX3F1YXJrKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRG
YXZpY29uRGF0YWJhc2UgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZTsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzcyAgIFdlYktpdEZhdmljb25EYXRhYmFzZUNs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2Ug
eworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCisvKioKKyAqIFdlYktpdEZhdmljb25E
YXRhYmFzZUVycm9yOgorICogQFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX05PVF9JTklU
SUFMSVpFRDogVGhlICNXZWJLaXRGYXZpY29uRGF0YWJhc2UgaGFzIG5vdCBiZWVuIGluaXRpYWxp
emVkIHlldAorICogQFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0lDT05fTk9UX0ZPVU5E
OiBUaGVyZSBpcyBub3QgYW4gaWNvbiBhdmFpbGFibGUgZm9yIHRoZSByZXF1ZXN0ZWQgVVJMCisg
KiBAV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfSUNPTl9VTktOT1dOOiBUaGVyZSBtaWdo
dCBiZSBhbiBpY29uIGZvciB0aGUgcmVxdWVzdGVkIFVSTCwgYnV0IGl0cyBkYXRhIGlzIHVua25v
d24gYXQgdGhlIG1vbWVudAorICoKKyAqIEVudW0gdmFsdWVzIHVzZWQgdG8gZGVub3RlIHRoZSB2
YXJpb3VzIGVycm9ycyByZWxhdGVkIHRvIHRoZSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlLgorICoq
LwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1Rf
SU5JVElBTElaRUQsCisgICAgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfSUNPTl9OT1Rf
Rk9VTkQsCisgICAgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfSUNPTl9VTktOT1dOCit9
IFdlYktpdEZhdmljb25EYXRhYmFzZUVycm9yOworCitXRUJLSVRfQVBJIEdRdWFyaword2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZXJyb3JfcXVhcmsgICAgICAgICAgICAgICAodm9pZCk7CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF90eXBlICAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uICAgICAgICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0
YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciogICAgICAgICAgIHBhZ2VfdXJsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlKiAgICAgICAgICBjYW5j
ZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgIHVz
ZXJfZGF0YSk7CitXRUJLSVRfQVBJIGNhaXJvX3N1cmZhY2VfdCoKK3dlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaCAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSog
ZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQXN5bmNSZXN1bHQqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvcioqICAgICAgICAgICAgICAgZXJy
b3IpOworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZp
Y29uX3VyaSAgICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciogcGFnZVVSTCk7CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Ns
ZWFyICAgICAgICAgICAgICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Up
OworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQ2YzBiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRGYXZp
Y29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNv
bkRhdGFiYXNlQ3JlYXRlKFdLSWNvbkRhdGFiYXNlUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpdmF0ZS5oCmluZGV4IDhmZWRlODIuLjljZWFmZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLR2VvbG9jYXRpb25NYW5hZ2VyLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLR2VvbG9jYXRpb25Qb3NpdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tJ
Y29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLSW5zcGVjdG9yLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0luc3BlY3RvckNsaWVudEd0ay5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tS
ZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZTkyMzFlNC4uN2JiOGIyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAK
QEAgLTIxLDkgKzIxLDExIEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dC5oIgogCiAjaW5j
bHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxv
YWRDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0R2VvbG9j
YXRpb25Qcm92aWRlci5oIgogI2luY2x1ZGUgIldlYktpdFBsdWdpblByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRQcml2YXRlLmgiCkBAIC0zMiw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSWNvbkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDAsNiArNDMs
NyBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApA
QCAtOTUsNiArOTksOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQ7CiAKICAgICBHUmVmUHRyPFdlYktpdENv
b2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CisgICAgR1JlZlB0cjxXZWJLaXRGYXZpY29uRGF0
YWJhc2U+IGljb25EYXRhYmFzZTsKKyAgICBDU3RyaW5nIGljb25EYXRhYmFzZVBhdGg7CiAgICAg
V0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwogICAg
IFVSSVNjaGVtZUhhbmRsZXJNYXAgdXJpU2NoZW1lSGFuZGxlcnM7CiAgICAgVVJJU2NoZW1lUmVx
dWVzdE1hcCB1cmlTY2hlbWVSZXF1ZXN0czsKQEAgLTMyMiw2ICszMjgsODUgQEAgV2ViS2l0Q29v
a2llTWFuYWdlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcihXZWJLaXRX
ZWJDb250ZXh0KiBjb24KIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmlj
b25fZGF0YWJhc2VfcGF0aDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBA
cGF0aDogKGFsbG93LW5vbmUpOiBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBpY29uIGRhdGFiYXNl
IGZvbGRlcgorICogb3IgJU5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0cworICoKKyAqIFNldCB0aGUg
ZGlyZWN0b3J5IHBhdGggdG8gYmUgdXNlZCB0byBzdG9yZSB0aGUgZmF2aWNvbnMgZGF0YWJhc2UK
KyAqIGZvciBAY29udGV4dCBvbiBkaXNrLiBQYXNzaW5nIE5VTEwgYXMgQHBhdGggbWVhbnMgdXNp
bmcgdGhlIGRlZmF1bHQKKyAqIHBhdGggZm9yIHRoZSBwbGF0Zm9ybSAoJFhER19EQVRBX0hPTUUv
d2Via2l0Z3RrL2ljb25kYXRhYmFzZSkuCisgKgorICogVXNlIHRoaXMgYmVmb3JlIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpIG9ubHkgaWYKKyAqIHlvdSB3YW50IFdl
YktpdEdUSysgdG8gdXNlIGEgZGlyZWN0b3J5IGRpZmZlcmVudCB0aGFuIHRoZSBkZWZhdWx0Cisg
KiBvbmUgZm9yIHRoZSBwbGF0Zm9ybS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVk
IHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UsIGZ1cnRoZXIgY2FsbHMgZm9yCisgKiB0aGUgc2FtZSBp
bnN0YW5jZSBvZiAjV2ViS2l0V2ViQ29udGV4dCBhZnRlciBjYWxsaW5nCisgKiB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSB3b24ndCBjYXVzZSBhbnkgZWZmZWN0Lgor
ICovCit2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9wYXRoKFdl
YktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBwYXRoKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKKworICAgIC8vIERv
IG5vdGhpbmcgaWYgdGhlIGRhdGFiYXNlIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIHNpbmNlIGlu
IFdLMgorICAgIC8vIGl0J3Mgbm90IGFsbG93ZWQgdG8gY2hhbmdlIGl0cyBwYXRoIG9uY2UgdGhl
IGRhdGFiYXNlIGlzIG9wZW4uCisgICAgaWYgKGNvbnRleHQtPnByaXYtPmljb25EYXRhYmFzZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+cHJpdi0+aWNvbkRhdGFiYXNlUGF0aCA9
IFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcocGF0aCkudXRmOCgpOworfQorCitjb25zdCBnY2hh
ciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX3BhdGgoV2ViS2l0V2Vi
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0NPTlRFWFQoY29udGV4dCksIDApOworCisgICAgV2ViS2l0V2ViQ29udGV4dFByaXZhdGUq
IHByaXYgPSBjb250ZXh0LT5wcml2OworCisgICAgLy8gVXNlIGRlZmF1bHQgaWYgYSBkaWZmZXJl
bnQgcGF0aCBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBzZXQuCisgICAgaWYgKHByaXYtPmljb25E
YXRhYmFzZVBhdGguaXNOdWxsKCkpCisgICAgICAgIHByaXYtPmljb25EYXRhYmFzZVBhdGggPSB0
b0ltcGwocHJpdi0+Y29udGV4dC5nZXQoKSktPmljb25EYXRhYmFzZVBhdGgoKS51dGY4KCk7CisK
KyAgICByZXR1cm4gcHJpdi0+aWNvbkRhdGFiYXNlUGF0aC5kYXRhKCk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlOgorICogQGNvbnRleHQ6IGEg
I1dlYktpdFdlYkNvbnRleHQKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRGYXZpY29uRGF0YWJhc2Ug
YXNzb2NpYXRlZCB3aXRoIEBjb250ZXh0LiBJZiB5b3UKKyAqIHdhbnQgdGhlIGRhdGFiYXNlIHRv
IGJlIHN0b3JlZCBpbiBhIHBhdGggb3RoZXIgdGhhbiB0aGUgZGVmYXVsdAorICogb25lLCB5b3Ug
bmVlZCB0byBjYWxsCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2Vf
cGF0aCgpIGJlZm9yZSB0aGUgZmlyc3QKKyAqIHRpbWUgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRGYXZpY29uRGF0YWJh
c2Ugb2YgQGNvbnRleHQuCisgKi8KK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0X3dlYl9j
b250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQp
LCAwKTsKKworICAgIFdlYktpdFdlYkNvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJp
djsKKworICAgIGlmIChwcml2LT5pY29uRGF0YWJhc2UpCisgICAgICAgIHJldHVybiBwcml2LT5p
Y29uRGF0YWJhc2UuZ2V0KCk7CisKKyAgICAvLyBCdWlsZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBp
Y29uIGRhdGFiYXNlIGZpbGUgb24gZGlzay4KKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgR093blB0cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9wYXRoKGNvbnRleHQpLCAiLyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNv
cmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKS51dGY4KCkuZGF0YSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMKSk7CisKKyAgICAvLyBDYWxsaW5nIHRoZSBzZXR0ZXIgaW4gV2ViQ29udGV4dCB3aWxsIGNh
dXNlIHRoZSBpY29uIGRhdGFiYXNlIHRvIGJlIG9wZW5lZC4KKyAgICBXZWJDb250ZXh0KiB3ZWJD
b250ZXh0ID0gdG9JbXBsKHByaXYtPmNvbnRleHQuZ2V0KCkpOworICAgIHdlYkNvbnRleHQtPnNl
dEljb25EYXRhYmFzZVBhdGgoV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhpY29uRGF0YWJhc2VQ
YXRoLmdldCgpKSk7CisKKyAgICBXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSA9IFdL
Q29udGV4dEdldEljb25EYXRhYmFzZShwcml2LT5jb250ZXh0LmdldCgpKTsKKyAgICBwcml2LT5p
Y29uRGF0YWJhc2UgPSBhZG9wdEdSZWYod2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKHdrSWNv
bkRhdGFiYXNlKSk7CisgICAgcmV0dXJuIHByaXYtPmljb25EYXRhYmFzZS5nZXQoKTsKK30KKwor
LyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rv
cnk6CiAgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAogICogQGRpcmVjdG9yeTogdGhl
IGRpcmVjdG9yeSB0byBhZGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHQuaAppbmRleCBhMmJmNTczLi4zODVkZmMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXREb3dubG9hZC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmF2aWNvbkRhdGFiYXNl
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Lmg+CiAKIEdfQkVH
SU5fREVDTFMKQEAgLTExMyw2ICsxMTQsMTUgQEAgd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2Fk
X3VyaSAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0CiBXRUJLSVRfQVBJIFdl
YktpdENvb2tpZU1hbmFnZXIgKgogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdl
ciAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7
CiAKK1dFQktJVF9BUEkgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICoKK3dlYmtpdF93ZWJfY29udGV4
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAg
ICAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29udGV4
dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9wYXRoICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAg
ICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICpwYXRoKTsKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0
YWJhc2VfcGF0aCAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0
KTsKKwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxf
cGx1Z2luc19kaXJlY3RvcnkgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAgICAgICAgICAgICAgICAgICAqZGlyZWN0b3J5KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKaW5kZXggNzQxNzA0Ni4uZmY0YmRiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKQEAgLTIw
OCw2ICsyMDgsMTEgQEAgYm9vbCBXZWJJY29uRGF0YWJhc2U6OmlzT3BlbigpCiAgICAgcmV0dXJu
IG1faWNvbkRhdGFiYXNlSW1wbCAmJiBtX2ljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpOwogfQog
Citib29sIFdlYkljb25EYXRhYmFzZTo6aXNVcmxJbXBvcnRDb21wbGV0ZWQoKQoreworICAgIHJl
dHVybiBtX3VybEltcG9ydENvbXBsZXRlZDsKK30KKwogdm9pZCBXZWJJY29uRGF0YWJhc2U6OnJl
bW92ZUFsbEljb25zKCkKIHsKICAgICBtX2ljb25EYXRhYmFzZUltcGwtPnJlbW92ZUFsbEljb25z
KCk7ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFi
YXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKaW5kZXgg
ZGRlYjMwOS4uYjcyNTQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
Ykljb25EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0
YWJhc2UuaApAQCAtODIsNiArODIsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW1hZ2UqIGlt
YWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpY29u
U2l6ZSA9IFdlYkNvcmU6OkludFNpemUoMzIsIDMyKSk7CiAgICAgV2ViQ29yZTo6TmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGljb25TaXplID0gV2ViQ29yZTo6SW50U2l6ZSgzMiwgMzIpKTsKICAgICBib29s
IGlzT3BlbigpOworICAgIGJvb2wgaXNVcmxJbXBvcnRDb21wbGV0ZWQoKTsKIAogICAgIHZvaWQg
cmVtb3ZlQWxsSWNvbnMoKTsKICAgICB2b2lkIGNoZWNrSW50ZWdyaXR5QmVmb3JlT3BlbmluZygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKaW5k
ZXggNzFjN2JiZS4uZDM1YWVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJDb250ZXh0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYkNvbnRleHRHdGsuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFN0cmluZyBXZWJDb250ZXh0Ojpw
bGF0Zm9ybURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiAKIFN0cmluZyBXZWJDb250
ZXh0OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgotICAgIHJldHVybiBXVEY6OlN0cmluZygpOworICAgIEdPd25QdHI8
Z2NoYXI+IGRhdGFiYXNlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRh
X2RpcigpLCAid2Via2l0Z3RrIiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKKyAgICByZXR1cm4g
V2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhkYXRhYmFzZURpcmVjdG9yeS5nZXQoKSk7CiB9CiAK
IFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
KSBjb25zdAotLSAKMS43LjExLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165573</attachid>
            <date>2012-09-25 03:46:51 -0700</date>
            <delta_ts>2012-09-27 07:12:00 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0002-2012-09-12-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>61340</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA2NDAzYWQ3ZjUzNDZlZGFiMTk1OGExNmMyYjFkNGJiNjZmNzNkYWU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDYgU2VwIDIwMTIgMTk6MzU6MjMgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvM10gMjAxMi0wOS0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5j
b20+CgogICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50IG5ldyBGYXZpY29ucyBBUEkKICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0NzYKCiAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIE5ldyBvYmplY3Qgd3JhcHBpbmcg
dGhlIGludGVybmFsIEljb25EYXRhYmFzZSBmcm9tIFdlYkNvcmUsCiAgICAgICAgcHJvdmlkaW5n
IGEgc2ltcGxlIGFzeW5jaHJvbm91cyBBUEkgdG8gcmV0cmlldmUgdGhlIGZhdmljb24KICAgICAg
ICBhc3NvY2lhdGVkIHRvIGEgcGFnZSBVUkwsIGFuZCB0d28gbW9yZSBmdW5jdGlvbnMgdG8gc2lt
cGxlIHF1ZXJ5CiAgICAgICAgdGhlIGludGVybmFsIGRhdGFiYXNlIGZvciB0aGUgVVJJIG9mIHRo
ZSBpY29uIGFzc29jaWF0ZWQgdG8gYQogICAgICAgIHBhZ2UsIGlmIGFueSwgYW5kIHRvIGNsZWFy
IHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwgZGF0YWJhc2UuCgogICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCiAgICAgICAgKF9XZWJL
aXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKToKICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfaW5pdCk6CiAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplKToKICAgICAg
ICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdCk6CiAgICAgICAgKEdldEZhdmlj
b25TdXJmYWNlQXN5bmNEYXRhKTogTmV3IHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgZGF0YQogICAg
ICAgIGFjcm9zcyB0aGUgYXN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIG9mIGdldF9mYXZpY29u
KCkuCiAgICAgICAgKEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhOjp+R2V0RmF2aWNvblN1cmZh
Y2VBc3luY0RhdGEpOgogICAgICAgIERpc2Nvbm5lY3RzIHRoZSBjYW5jZWxsYWJsZSBpZiBuZWVk
ZWQuCiAgICAgICAgKGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseSk6IFN5bmNocm9ub3VzbHkg
cmV0dXJucyBhIHBvaW50ZXIgdG8KICAgICAgICB0aGUgY2Fpcm9fc3VyZmFjZSB3aXRoIHRoZSBp
Y29uJ3MgZGF0YSwgaWYgYXZhaWxhYmxlLgogICAgICAgIChkZWxldGVQZW5kaW5nSWNvblJlcXVl
c3RzKTogUmVtb3ZlcyB0aGUgZnVsbCBsaXN0IG9mCiAgICAgICAgaWNvbiByZXF1ZXN0cyBmb3Ig
YSBwYWdlIFVSTC4KICAgICAgICAocHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSSk6IFByb2Nlc3Mg
YW55IGljb24gcmVxdWVzdCB0aGF0CiAgICAgICAgbWlnaHQgYmUgc3RpbGwgcGVuZGluZy4KICAg
ICAgICAoaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjayk6IENhbGxlZCBmcm9tIFdlYklj
b25EYXRhYmFzZQogICAgICAgIHdoZW4gbmV3IGRhdGEgaXMgcmVhZHkgZm9yIGEgZmF2aWNvbi4K
ICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKTogQ3JlYXRlIHRoZSBXZWJLaXRG
YXZpY29uRGF0YWJhc2UKICAgICAgICBvYmplY3QgYW5kIGluaXRpYWxpemVzIHRoZSBBUEkgY2xp
ZW50IGZvciBXS0ljb25EYXRhYmFzZUNsaWVudC4KICAgICAgICAoZ2V0T3JDcmVhdGVQZW5kaW5n
SWNvblJlcXVlc3RzKTogUmV0dXJucyAoaWYgYXZhaWxhYmxlKSBvcgogICAgICAgIGNyZWF0ZXMg
YSBuZXcgaWNvbiByZXF1ZXN0LCB0byBiZSBhcHBlbmRlZCB0byB0aGUgbGlzdCBvZiByZXF1ZXN0
cwogICAgICAgIGZvciB0aGUgc2FtZSBwYWdlIFVSTC4KICAgICAgICAoZ2V0SWNvblN1cmZhY2VD
YW5jZWxsZWQpOiBIYW5kbGUgdGhlIGNhc2Ugb2YgYSByZXF1ZXN0IGJlaW5nCiAgICAgICAgY2Fu
Y2VsbGVkLiBNdXN0IGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICAgKGdldEljb25T
dXJmYWNlQ2FuY2VsbGVkQ2FsbGJhY2spOiBDYWxsYmFjayB1c2VkIHdpdGgKICAgICAgICBnX2Nh
bmNlbGxhYmxlX2Nvbm5lY3QoKSwgd2hpY2ggZW5zdXJlIGdldEljb25TdXJmYWNlQ2FuY2VsbGVk
KCkgaXMKICAgICAgICBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICAgKHNldEVy
cm9yRm9yQXN5bmNSZXN1bHQpOiBIZWxwZXIgdG8gc2V0IGVycm9ycyBpbiB0aGUgcmVzdWx0Lgog
ICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJvcl9xdWFyayk6IE5ldyBmdW5jdGlv
biwgcHJvdmlkaW50IHRoZQogICAgICAgIG5ldyBlcnJvciBkb21haW4gZm9yIGVycm9ycyBvZiB0
eXBlIFdlYktpdEZhdmljb25EYXRhYmFzZUVycm9yLgogICAgICAgICh3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbik6IE5ldyBBUEkgZnVuY3Rpb24sIHByb3ZpZGluZwogICAgICAg
IGFuIGFzeW5jaHJvbm91cyBtZWNoYW5pc20gdG8gcXVlcnkgdGhlIGZhdmljb24gZm9yIGEgcGFn
ZSBVUkwuCiAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2Zpbmlz
aCk6IE5ldyBBUEkgZnVuY3Rpb24gdG8KICAgICAgICBmaW5pc2ggdGhlIGFzeW5jcmhvbm91cyBy
ZXF1ZXN0IHN0YXJ0ZWQgd2l0aCBnZXRfZmF2aWNvbigpLgogICAgICAgICh3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkpOiBOZXcgQVBJIGZ1bmN0aW9uCiAgICAgICAgdG8g
ZWFzaWx5IHJldHJpZXZlLCBpZiBhdmFpbGFibGUsIHRoZSBVUkkgb2YgYSBmYXZpY29uLgogICAg
ICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcik6IE5ldyBBUEkgZnVuY3Rpb24gdG8g
Y2xlYXIgdGhlCiAgICAgICAgc3RhdGUgb2YgdGhlIGludGVybmFsIGljb24gZGF0YWJhc2UuCiAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuaDogQWRkZWQu
CiAgICAgICAgKF9XZWJLaXRGYXZpY29uRGF0YWJhc2UpOgogICAgICAgIChfV2ViS2l0RmF2aWNv
bkRhdGFiYXNlQ2xhc3MpOgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNv
bkRhdGFiYXNlUHJpdmF0ZS5oOiBBZGRlZCB0bwogICAgICAgIGludGVybmFsbHkgZXhwb3NlIHdl
YmtpdEZhdmljb25EYXRhYmFzZUNyZWF0ZSgpIHRvIFdlYktpdFdlYkNvbnRleHQuCiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6IEltcG9ydCBXZWJLaXQyL1dLSWNv
bkRhdGFiYXNlLmguCiAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCBuZXcgZmls
ZXMuCgogICAgICAgIEFkZCBhIG5ldyBnZXR0ZXIgaW4gV2ViSWNvbkRhdGFiYXNlIGZvciBtX3Vy
bEltcG9ydENvbXBsZXRlZC4KCiAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNw
cDoKICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmlzVXJsSW1wb3J0Q29tcGxldGVk
KTogQWRkZWQgdGhpcyBzaW1wbGUKICAgICAgICBnZXR0ZXIgdG8gYWxsb3cga25vd2luZyBmcm9t
IFdlYktpdEZhdmljb25EYXRhYmFzZSB3aGV0aGVyIHRoZQogICAgICAgIGluaXRpYWwgaW1wb3J0
IGhhcyBmaW5pc2hlZCwgbmVlZGVkIGZvciBtYWtpbmcgc29tZSBkZWNpc2lvbnMuCiAgICAgICAg
KFdlYktpdCk6CiAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6CiAgICAgICAg
KFdlYkljb25EYXRhYmFzZSk6CgogICAgICAgIE5ldyBBUEkgaW4gV2ViS2l0V2ViQ29udGV4dCB0
byBhbGxvdyBvYnRhaW5pbmcgYSB2YWxpZCBpbnN0YW5jZSBvZgogICAgICAgIFdlYktpdEZhdmlj
b25EYXRhYmFzZSBhbmQgdG8gc2V0L2dldCB0aGUgbG9jYWwgcGF0aCB0byBiZSB1c2VkLgoKICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgogICAgICAgIChf
V2ViS2l0V2ViQ29udGV4dFByaXZhdGUpOgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X2Zhdmljb25fZGF0YWJhc2VfcGF0aCk6IE5ldyBBUEkgdG8gYWxsb3cKICAgICAgICBzZXR0aW5n
IGEgcGF0aCBmb3IgdGhlIGljb24gZGF0YWJhc2UsIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25l
LgogICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfcGF0aCk6
IE5ldyBBUEkgdG8KICAgICAgICByZXRyaWV2ZSB0aGUgcGF0aCBmb3IgdGhlIGljb24gZGF0YWJh
c2UgY3VycmVudGx5IGluIHVzZS4KICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKTogTmV3IEFQSSB0byBnZXQgYSB2YWxpZAogICAgICAgIGFuZCBwcm9wZXJs
eSBpbml0aWFsaXplZCBpbnN0YW5jZSBvZiBXZWJLaXRGYXZpY29uRGF0YWJhc2UuCiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CgogICAgICAgIE1ha2Ugc3Vy
ZSB3ZSBoYXZlIGEgZGVmYXVsdCBwYXRoIHNldCBmb3IgdGhlIGljb24gZGF0YWJhc2UuCgogICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcDoKICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKTogUmV0dXJuIHRoZQog
ICAgICAgIGRlZmF1bHQgcGF0aCB0byBiZSB1c2VkIGZvciB0aGUgaWNvbiBkYXRhYmFzZS4KCiAg
ICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIGNoZWNraW5nIHRoaXMgbmV3IEFQSS4KCiAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDog
QWRkZWQuCiAgICAgICAgKHNlcnZlckNhbGxiYWNrKTogQ2FsbGJhY2sgZm9yIHRoZSB0ZXN0IHNl
cnZlci4KICAgICAgICAodGVzdFNldERpcmVjdG9yeSk6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0
aGUgYWJpbGl0eSB0byBzZXQgYW5kCiAgICAgICAgZ2V0IGEgc3BlY2lmaWMgZGlyZWN0b3J5IHBh
dGggZm9yIHRoZSBpY29uIGRhdGFiYXNlLgogICAgICAgICh0ZXN0Q2xlYXJEYXRhYmFzZSk6IE5l
dyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byBjbGVhcgogICAgICAgIHRoZSBkYXRh
IGluIHRoZSBpY29uIGRhdGFiYXNlLgogICAgICAgICh0ZXN0R2V0RmF2aWNvbik6IE5ldyB1bml0
IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byBnZXQgYQogICAgICAgIGZhdmljb24gZnJvbSB0
aGUgaWNvbiBkYXRhYmFzZSBpbiBkaWZmZXJlbnQgc2l0dWF0aW9ucy4KICAgICAgICAodGVzdEdl
dEZhdmljb25VUkkpOiBOZXcgdW5pdCB0ZXN0LCBjaGVja3MgdGhlIGFiaWxpdHkgdG8gcmV0cmll
dmUKICAgICAgICB0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiwgaWYgYW55LCBhc3NvY2lhdGVkIHRv
IGEgd2ViIHBhZ2UuCiAgICAgICAgKGRlbGV0ZURhdGFiYXNlRmlsZXMpOiBIZWxwZXIgZnVuY3Rp
b24gdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcy4KICAgICAgICAoYmVmb3JlQWxsKTogSW5pdGlh
bGl6ZSB0aGUgdGVzdCBzZXJ2ZXIgYW5kIGFkZCB0aGUgdW5pdCB0ZXN0cy4KICAgICAgICAoYWZ0
ZXJBbGwpOiBEZWxldGUgdGhlIHRlc3Qgc2VydmVyIGFuZCBjbGVhbiB1cC4KICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY286IEFkZGVkLgogICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06IEFkZGVkIG5ldyBmaWxl
cy4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IDEwNiArKysrKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAg
ICAgICAgICAgIHwgICA0ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0
YWJhc2UuY3BwICAgIHwgNDEzICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oICAgICAgfCAgOTQgKysrKysKIC4uLi9BUEkv
Z3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCAgICAgICAgIHwgIDI4ICsrCiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggICB8ICAgMSArCiAu
Li4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCB8ICA5NyAr
KysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oICAg
fCAgMTAgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwg
ICAgfCAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9u
cy50eHQgfCAgMjggKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1h
a2VmaWxlLmFtIHwgIDEwICstCiAuLi4vQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlLmNwcCAgICB8IDI1MyArKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljbyAgICB8IEJpbiAwIC0+IDE5OCBieXRlcwogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oICAgICAgICAgfCAgIDEgKwogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAgICAgICAgfCAgIDUgKwog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oICAgICAgICAgfCAgIDEg
KwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcCAgICAgfCAg
IDQgKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDEwNTMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0
YWJhc2VQcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNl
cy9ibGFuay5pY28KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmY1MzhlYS4uZWRiNWNiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEwOSBAQAorMjAxMi0wOS0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5j
aGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dLMl1bR1RLXSBJbXBsZW1lbnQgbmV3IEZhdmlj
b25zIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTY0NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
ZXcgb2JqZWN0IHdyYXBwaW5nIHRoZSBpbnRlcm5hbCBJY29uRGF0YWJhc2UgZnJvbSBXZWJDb3Jl
LAorICAgICAgICBwcm92aWRpbmcgYSBzaW1wbGUgYXN5bmNocm9ub3VzIEFQSSB0byByZXRyaWV2
ZSB0aGUgZmF2aWNvbgorICAgICAgICBhc3NvY2lhdGVkIHRvIGEgcGFnZSBVUkwsIGFuZCB0d28g
bW9yZSBmdW5jdGlvbnMgdG8gc2ltcGxlIHF1ZXJ5CisgICAgICAgIHRoZSBpbnRlcm5hbCBkYXRh
YmFzZSBmb3IgdGhlIFVSSSBvZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHRvIGEKKyAgICAgICAgcGFn
ZSwgaWYgYW55LCBhbmQgdG8gY2xlYXIgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcm5hbCBkYXRhYmFz
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5j
cHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUpOgorICAg
ICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfaW5pdCk6CisgICAgICAgICh3ZWJraXRGYXZp
Y29uRGF0YWJhc2VGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9j
bGFzc19pbml0KToKKyAgICAgICAgKEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKTogTmV3IHN0
cnVjdHVyZSB1c2VkIHRvIHBhc3MgZGF0YQorICAgICAgICBhY3Jvc3MgdGhlIGFzeW5jaHJvbm91
cyBpbXBsZW1lbnRhdGlvbiBvZiBnZXRfZmF2aWNvbigpLgorICAgICAgICAoR2V0RmF2aWNvblN1
cmZhY2VBc3luY0RhdGE6On5HZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSk6CisgICAgICAgIERp
c2Nvbm5lY3RzIHRoZSBjYW5jZWxsYWJsZSBpZiBuZWVkZWQuCisgICAgICAgIChnZXRJY29uU3Vy
ZmFjZVN5bmNocm9ub3VzbHkpOiBTeW5jaHJvbm91c2x5IHJldHVybnMgYSBwb2ludGVyIHRvCisg
ICAgICAgIHRoZSBjYWlyb19zdXJmYWNlIHdpdGggdGhlIGljb24ncyBkYXRhLCBpZiBhdmFpbGFi
bGUuCisgICAgICAgIChkZWxldGVQZW5kaW5nSWNvblJlcXVlc3RzKTogUmVtb3ZlcyB0aGUgZnVs
bCBsaXN0IG9mCisgICAgICAgIGljb24gcmVxdWVzdHMgZm9yIGEgcGFnZSBVUkwuCisgICAgICAg
IChwcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKTogUHJvY2VzcyBhbnkgaWNvbiByZXF1ZXN0IHRo
YXQKKyAgICAgICAgbWlnaHQgYmUgc3RpbGwgcGVuZGluZy4KKyAgICAgICAgKGljb25EYXRhUmVh
ZHlGb3JQYWdlVVJMQ2FsbGJhY2spOiBDYWxsZWQgZnJvbSBXZWJJY29uRGF0YWJhc2UKKyAgICAg
ICAgd2hlbiBuZXcgZGF0YSBpcyByZWFkeSBmb3IgYSBmYXZpY29uLgorICAgICAgICAod2Via2l0
RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKTogQ3JlYXRlIHRoZSBXZWJLaXRGYXZpY29uRGF0YWJhc2UK
KyAgICAgICAgb2JqZWN0IGFuZCBpbml0aWFsaXplcyB0aGUgQVBJIGNsaWVudCBmb3IgV0tJY29u
RGF0YWJhc2VDbGllbnQuCisgICAgICAgIChnZXRPckNyZWF0ZVBlbmRpbmdJY29uUmVxdWVzdHMp
OiBSZXR1cm5zIChpZiBhdmFpbGFibGUpIG9yCisgICAgICAgIGNyZWF0ZXMgYSBuZXcgaWNvbiBy
ZXF1ZXN0LCB0byBiZSBhcHBlbmRlZCB0byB0aGUgbGlzdCBvZiByZXF1ZXN0cworICAgICAgICBm
b3IgdGhlIHNhbWUgcGFnZSBVUkwuCisgICAgICAgIChnZXRJY29uU3VyZmFjZUNhbmNlbGxlZCk6
IEhhbmRsZSB0aGUgY2FzZSBvZiBhIHJlcXVlc3QgYmVpbmcKKyAgICAgICAgY2FuY2VsbGVkLiBN
dXN0IGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIChnZXRJY29uU3VyZmFjZUNh
bmNlbGxlZENhbGxiYWNrKTogQ2FsbGJhY2sgdXNlZCB3aXRoCisgICAgICAgIGdfY2FuY2VsbGFi
bGVfY29ubmVjdCgpLCB3aGljaCBlbnN1cmUgZ2V0SWNvblN1cmZhY2VDYW5jZWxsZWQoKSBpcwor
ICAgICAgICBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIChzZXRFcnJvckZv
ckFzeW5jUmVzdWx0KTogSGVscGVyIHRvIHNldCBlcnJvcnMgaW4gdGhlIHJlc3VsdC4KKyAgICAg
ICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Vycm9yX3F1YXJrKTogTmV3IGZ1bmN0aW9uLCBw
cm92aWRpbnQgdGhlCisgICAgICAgIG5ldyBlcnJvciBkb21haW4gZm9yIGVycm9ycyBvZiB0eXBl
IFdlYktpdEZhdmljb25EYXRhYmFzZUVycm9yLgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb24pOiBOZXcgQVBJIGZ1bmN0aW9uLCBwcm92aWRpbmcKKyAgICAgICAg
YW4gYXN5bmNocm9ub3VzIG1lY2hhbmlzbSB0byBxdWVyeSB0aGUgZmF2aWNvbiBmb3IgYSBwYWdl
IFVSTC4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2Zpbmlz
aCk6IE5ldyBBUEkgZnVuY3Rpb24gdG8KKyAgICAgICAgZmluaXNoIHRoZSBhc3luY3Job25vdXMg
cmVxdWVzdCBzdGFydGVkIHdpdGggZ2V0X2Zhdmljb24oKS4KKyAgICAgICAgKHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSk6IE5ldyBBUEkgZnVuY3Rpb24KKyAgICAgICAg
dG8gZWFzaWx5IHJldHJpZXZlLCBpZiBhdmFpbGFibGUsIHRoZSBVUkkgb2YgYSBmYXZpY29uLgor
ICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIpOiBOZXcgQVBJIGZ1bmN0aW9u
IHRvIGNsZWFyIHRoZQorICAgICAgICBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwgaWNvbiBkYXRhYmFz
ZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuaDog
QWRkZWQuCisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlKToKKyAgICAgICAgKF9XZWJL
aXRGYXZpY29uRGF0YWJhc2VDbGFzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOiBBZGRlZCB0bworICAgICAgICBpbnRlcm5hbGx5
IGV4cG9zZSB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoKSB0byBXZWJLaXRXZWJDb250ZXh0
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDogSW1wb3J0IFdl
YktpdDIvV0tJY29uRGF0YWJhc2UuaC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBB
ZGRlZCBuZXcgZmlsZXMuCisKKyAgICAgICAgQWRkIGEgbmV3IGdldHRlciBpbiBXZWJJY29uRGF0
YWJhc2UgZm9yIG1fdXJsSW1wb3J0Q29tcGxldGVkLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
Ykljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6aXNV
cmxJbXBvcnRDb21wbGV0ZWQpOiBBZGRlZCB0aGlzIHNpbXBsZQorICAgICAgICBnZXR0ZXIgdG8g
YWxsb3cga25vd2luZyBmcm9tIFdlYktpdEZhdmljb25EYXRhYmFzZSB3aGV0aGVyIHRoZQorICAg
ICAgICBpbml0aWFsIGltcG9ydCBoYXMgZmluaXNoZWQsIG5lZWRlZCBmb3IgbWFraW5nIHNvbWUg
ZGVjaXNpb25zLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJJY29uRGF0YWJhc2UpOgorCisgICAgICAgIE5ldyBB
UEkgaW4gV2ViS2l0V2ViQ29udGV4dCB0byBhbGxvdyBvYnRhaW5pbmcgYSB2YWxpZCBpbnN0YW5j
ZSBvZgorICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgYW5kIHRvIHNldC9nZXQgdGhlIGxv
Y2FsIHBhdGggdG8gYmUgdXNlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHQuY3BwOgorICAgICAgICAoX1dlYktpdFdlYkNvbnRleHRQcml2YXRlKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9wYXRoKTogTmV3
IEFQSSB0byBhbGxvdworICAgICAgICBzZXR0aW5nIGEgcGF0aCBmb3IgdGhlIGljb24gZGF0YWJh
c2UsIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lLgorICAgICAgICAod2Via2l0X3dlYl9jb250
ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX3BhdGgpOiBOZXcgQVBJIHRvCisgICAgICAgIHJldHJp
ZXZlIHRoZSBwYXRoIGZvciB0aGUgaWNvbiBkYXRhYmFzZSBjdXJyZW50bHkgaW4gdXNlLgorICAg
ICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKTogTmV3IEFQSSB0
byBnZXQgYSB2YWxpZAorICAgICAgICBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW5zdGFuY2Ug
b2YgV2ViS2l0RmF2aWNvbkRhdGFiYXNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYkNvbnRleHQuaDoKKworICAgICAgICBNYWtlIHN1cmUgd2UgaGF2ZSBhIGRlZmF1bHQg
cGF0aCBzZXQgZm9yIHRoZSBpY29uIGRhdGFiYXNlLgorCisgICAgICAgICogVUlQcm9jZXNzL2d0
ay9XZWJDb250ZXh0R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZv
cm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCk6IFJldHVybiB0aGUKKyAgICAgICAgZGVmYXVsdCBw
YXRoIHRvIGJlIHVzZWQgZm9yIHRoZSBpY29uIGRhdGFiYXNlLgorCisgICAgICAgIEFkZCB1bml0
IHRlc3RzIGZvciBjaGVja2luZyB0aGlzIG5ldyBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChzZXJ2ZXJDYWxsYmFjayk6IENhbGxiYWNrIGZvciB0aGUgdGVzdCBzZXJ2ZXIuCisgICAg
ICAgICh0ZXN0U2V0RGlyZWN0b3J5KTogTmV3IHVuaXQgdGVzdCwgY2hlY2tzIHRoZSBhYmlsaXR5
IHRvIHNldCBhbmQKKyAgICAgICAgZ2V0IGEgc3BlY2lmaWMgZGlyZWN0b3J5IHBhdGggZm9yIHRo
ZSBpY29uIGRhdGFiYXNlLgorICAgICAgICAodGVzdENsZWFyRGF0YWJhc2UpOiBOZXcgdW5pdCB0
ZXN0LCBjaGVja3MgdGhlIGFiaWxpdHkgdG8gY2xlYXIKKyAgICAgICAgdGhlIGRhdGEgaW4gdGhl
IGljb24gZGF0YWJhc2UuCisgICAgICAgICh0ZXN0R2V0RmF2aWNvbik6IE5ldyB1bml0IHRlc3Qs
IGNoZWNrcyB0aGUgYWJpbGl0eSB0byBnZXQgYQorICAgICAgICBmYXZpY29uIGZyb20gdGhlIGlj
b24gZGF0YWJhc2UgaW4gZGlmZmVyZW50IHNpdHVhdGlvbnMuCisgICAgICAgICh0ZXN0R2V0RmF2
aWNvblVSSSk6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZQor
ICAgICAgICB0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiwgaWYgYW55LCBhc3NvY2lhdGVkIHRvIGEg
d2ViIHBhZ2UuCisgICAgICAgIChkZWxldGVEYXRhYmFzZUZpbGVzKTogSGVscGVyIGZ1bmN0aW9u
IHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMuCisgICAgICAgIChiZWZvcmVBbGwpOiBJbml0aWFs
aXplIHRoZSB0ZXN0IHNlcnZlciBhbmQgYWRkIHRoZSB1bml0IHRlc3RzLgorICAgICAgICAoYWZ0
ZXJBbGwpOiBEZWxldGUgdGhlIHRlc3Qgc2VydmVyIGFuZCBjbGVhbiB1cC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvYmxhbmsuaWNvOiBBZGRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IGZp
bGVzLgorCiAyMDEyLTA5LTEwICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbV0syXSBJY29uRGF0YWJhc2U6IEFkZCBhIHdheSB0byBub3RpZnkg
d2hlbiBpY29uIGRhdGEgaXMgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA0MWQzMTFkLi5mZDQ5YjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTEwNCw2ICsxMDQsNyBAQCB3ZWJraXQyZ3RrX2hfYXBpICs9IFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RXJyb3IuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGYXZpY29uRGF0YWJhc2UuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5oIFwKQEAgLTY0Miw2ICs2NDMsOSBAQCB3ZWJraXQy
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVk
aXRpbmdDb21tYW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25E
YXRhYmFzZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2UuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2
aWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NGUwM2NhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw0MTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRGYXZpY29uRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIldlYkljb25EYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIldlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dC5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJv
Lmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsKKyAgICBJQ09OX1JFQURZLAorCisgICAgTEFTVF9T
SUdOQUwKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsK
KwordHlwZWRlZiBWZWN0b3I8R1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+ID4gUGVuZGluZ0lj
b25SZXF1ZXN0VmVjdG9yOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGVuZGluZ0ljb25SZXF1
ZXN0VmVjdG9yKj4gUGVuZGluZ0ljb25SZXF1ZXN0TWFwOworCitzdHJ1Y3QgX1dlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJJY29uRGF0YWJhc2U+IGljb25EYXRh
YmFzZTsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXAgcGVuZGluZ0ljb25SZXF1ZXN0czsKK307
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RmF2aWNvbkRhdGFiYXNlLCB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZSwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgY2xvc2VJY29uRGF0YWJhc2VJ
Zk5lZWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIFdlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGUqIHByaXYgPSBkYXRhYmFzZS0+cHJpdjsKKyAgICBpZiAocHJp
di0+aWNvbkRhdGFiYXNlLT5pc09wZW4oKSkKKyAgICAgICAgcHJpdi0+aWNvbkRhdGFiYXNlLT5j
bG9zZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9pbml0KFdl
YktpdEZhdmljb25EYXRhYmFzZSogbWFuYWdlcikKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2VQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG1hbmFnZXIsIFdF
QktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUp
OworICAgIG1hbmFnZXItPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJh
c2VGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSA9IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKG9iamVjdCk7CisgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IGRhdGFiYXNlLT5wcml2OworCisgICAgY2xv
c2VJY29uRGF0YWJhc2VJZk5lZWRlZChkYXRhYmFzZSk7CisgICAgcHJpdi0+fldlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0RmF2aWNvbkRhdGFi
YXNlQ2xhc3MqIGZhdmljb25EYXRhYmFzZUNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZmF2aWNvbkRhdGFiYXNlQ2xhc3MpOworICAgIGdP
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5hbGl6ZTsKKwor
ICAgICAvKioKKyAgICAgICogV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjppY29uLXJlYWR5OgorICAg
ICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CisgICAgICAqIEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0aGUgV2ViIHBhZ2UgY29udGFpbmluZyB0
aGUgaWNvbi4KKyAgICAgICoKKyAgICAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIHdoZW4g
dGhlIGljb24ncyBkYXRhIGlzIHJlYWR5IHRvIGJlCisgICAgICAqIHVzZWQgYnkgdGhlIGFwcGxp
Y2F0aW9uLCBlaXRoZXIgYmVjYXVzZSBpdCBoYXMgYmVlbiBsb2FkZWQKKyAgICAgICogZnJvbSB0
aGUgbmV0d29yaywgaWYgaXQncyB0aGUgZmlyc3QgdGltZSBpdCBnZXRzIHJldHJpZXZlZCwgb3IK
KyAgICAgICogYmVjYXVzZSBpdCBoYXMgYmVlbiBhbHJlYWR5IGltcG9ydGVkIGZyb20gdGhlIGlj
b24gZGF0YWJhc2UuCisgICAgICAqLworICAgIHNpZ25hbHNbSUNPTl9SRUFEWV0gPQorICAgICAg
ICBnX3NpZ25hbF9uZXcoImljb24tcmVhZHkiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1MoZmF2aWNvbkRhdGFiYXNlQ2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAg
R19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBF
X1NUUklORyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZmF2aWNvbkRhdGFiYXNl
Q2xhc3MsIHNpemVvZihXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0cnVj
dCBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSB7CisgICAgR1JlZlB0cjxXZWJLaXRGYXZpY29u
RGF0YWJhc2U+IGZhdmljb25EYXRhYmFzZTsKKyAgICBTdHJpbmcgcGFnZVVSTDsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpY29uOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5j
ZWxsYWJsZTsKKyAgICBndWxvbmcgY2FuY2VsbGVkSWQ7CisKKyAgICB+R2V0RmF2aWNvblN1cmZh
Y2VBc3luY0RhdGEoKQorICAgIHsKKyAgICAgICAgaWYgKGNhbmNlbGxlZElkKQorICAgICAgICAg
ICAgZ19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KGNhbmNlbGxhYmxlLmdldCgpLCBjYW5jZWxsZWRJ
ZCk7CisgICAgfQorfTsKK1dFQktJVF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoR2V0RmF2aWNv
blN1cmZhY2VBc3luY0RhdGEpCisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGdldEljb25TdXJm
YWNlU3luY2hyb25vdXNseShXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIHBhZ2VVUkwpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFdl
YktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUqIHByaXYgPSBkYXRhYmFzZS0+cHJpdjsKKworICAg
IC8vIFRoZSBleGFjdCBzaXplIHdlIHBhc3MgaXMgaXJyZWxldmFudCB0byB0aGUgaWNvbkRhdGFi
YXNlIGNvZGUuCisgICAgLy8gV2UgbXVzdCBwYXNzIHNvbWV0aGluZyBncmVhdGVyIHRoYW4gMHgw
IHRvIGdldCBhbiBpY29uLgorICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGljb24gPSBwcml2
LT5pY29uRGF0YWJhc2UtPm5hdGl2ZUltYWdlRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJ
bnRTaXplKDEsIDEpKTsKKyAgICBpZiAoIWljb24pCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGljb24gPyBpY29uLT5zdXJmYWNlKCkgOiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxl
dGVQZW5kaW5nSWNvblJlcXVlc3RzKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIFBl
bmRpbmdJY29uUmVxdWVzdFZlY3RvciogcmVxdWVzdHMsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkK
K3sKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5yZW1vdmUocGFnZVVS
TCk7CisgICAgZGVsZXRlIHJlcXVlc3RzOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzUGVuZGlu
Z0ljb25zRm9yVVJJKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTCkKK3sKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0
YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOworICAgIGlmICgh
aWNvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWNv
bnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0g
aWNvbnMtPmF0KGkpLmdldCgpOworICAgICAgICBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSog
ZGF0YSA9IHN0YXRpY19jYXN0PEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKj4oZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0KSk7CisgICAgICAgIGRhdGEt
Pmljb24gPSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIHBhZ2VVUkwpOwor
CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQpOworICAgIH0K
KyAgICBkZWxldGVQZW5kaW5nSWNvblJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7
Cit9CisKK3N0YXRpYyB2b2lkIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2soV0tJY29u
RGF0YWJhc2VSZWYgd2tJY29uRGF0YWJhc2UsIFdLVVJMUmVmIHdrUGFnZVVSTCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKGNs
aWVudEluZm8pOworICAgIFN0cmluZyBwYWdlVVJMU3RyaW5nID0gdG9JbXBsKHdrUGFnZVVSTCkt
PnN0cmluZygpOworCisgICAgdG9JbXBsKHdrSWNvbkRhdGFiYXNlKS0+cmV0YWluSWNvbkZvclBh
Z2VVUkwocGFnZVVSTFN0cmluZyk7CisgICAgcHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShkYXRh
YmFzZSwgcGFnZVVSTFN0cmluZyk7CisgICAgZ19zaWduYWxfZW1pdChkYXRhYmFzZSwgc2lnbmFs
c1tJQ09OX1JFQURZXSwgMCwgcGFnZVVSTFN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KKworV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRh
dGFiYXNlKiBpY29uRGF0YWJhc2UpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBmYXZp
Y29uRGF0YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgTlVMTCkpOworICAgIGZhdmljb25EYXRhYmFzZS0+cHJp
di0+aWNvbkRhdGFiYXNlID0gaWNvbkRhdGFiYXNlOworCisgICAgV0tJY29uRGF0YWJhc2VDbGll
bnQgd2tJY29uRGF0YWJhc2VDbGllbnQgPSB7CisgICAgICAgIGtXS0ljb25EYXRhYmFzZUNsaWVu
dEN1cnJlbnRWZXJzaW9uLAorICAgICAgICBmYXZpY29uRGF0YWJhc2UsIC8vIGNsaWVudEluZm8K
KyAgICAgICAgMCwgLy8gZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjaworICAgICAgICAw
LCAvLyBkaWRSZW1vdmVBbGxJY29uc0NhbGxiYWNrCisgICAgICAgIGljb25EYXRhUmVhZHlGb3JQ
YWdlVVJMQ2FsbGJhY2ssCisgICAgfTsKKyAgICBpY29uRGF0YWJhc2UtPmluaXRpYWxpemVJY29u
RGF0YWJhc2VDbGllbnQoJndrSWNvbkRhdGFiYXNlQ2xpZW50KTsKKworICAgIHJldHVybiBmYXZp
Y29uRGF0YWJhc2U7Cit9CisKK3N0YXRpYyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGdldE9y
Q3JlYXRlUGVuZGluZ0ljb25SZXF1ZXN0cyhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
LCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9y
KiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJM
KTsKKyAgICBpZiAoIWljb25zKSB7CisgICAgICAgIGljb25zID0gbmV3IFBlbmRpbmdJY29uUmVx
dWVzdFZlY3RvcjsKKyAgICAgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMu
c2V0KHBhZ2VVUkwsIGljb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gaWNvbnM7Cit9CisKK3N0
YXRpYyB2b2lkIGdldEljb25TdXJmYWNlQ2FuY2VsbGVkKHZvaWQqIHVzZXJEYXRhKQoreworICAg
IEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8R1NpbXBsZUFzeW5jUmVz
dWx0Kj4odXNlckRhdGEpOworCisgICAgLy8gR2V0IHRoZSBkYXRhIHdlIG1pZ2h0IG5lZWQgYW5k
IGNvbXBsZXRlIHRoZSByZXF1ZXN0LgorICAgIEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKiBk
YXRhID0gc3RhdGljX2Nhc3Q8R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEqPihnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQpKTsKKyAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gZGF0YS0+ZmF2aWNvbkRhdGFiYXNlLmdldCgpOworICAg
IFN0cmluZyBwYWdlVVJMID0gZGF0YS0+cGFnZVVSTDsKKworICAgIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9jb21wbGV0ZShyZXN1bHQpOworCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBp
Y29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsK
KyAgICBpZiAoIWljb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgaXRlbUluZGV4
ID0gaWNvbnMtPmZpbmQocmVzdWx0KTsKKyAgICBpZiAoaXRlbUluZGV4ICE9IG5vdEZvdW5kKQor
ICAgICAgICBpY29ucy0+cmVtb3ZlKGl0ZW1JbmRleCk7CisgICAgaWYgKGljb25zLT5pc0VtcHR5
KCkpCisgICAgICAgIGRlbGV0ZVBlbmRpbmdJY29uUmVxdWVzdHMoZGF0YWJhc2UsIGljb25zLCBw
YWdlVVJMKTsKK30KKworc3RhdGljIHZvaWQgZ2V0SWNvblN1cmZhY2VDYW5jZWxsZWRDYWxsYmFj
ayhHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCkK
K3sKKyAgICAvLyBIYW5kbGUgY2FuY2VsbGVkIGluIGEgaW4gaWRsZSBzaW5jZSBpdCBtaWdodCBi
ZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgIGNhbGxPbk1haW5UaHJlYWQoZ2V0SWNvblN1
cmZhY2VDYW5jZWxsZWQsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEVycm9yRm9yQXN5
bmNSZXN1bHQoR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIFdlYktpdEZhdmljb25EYXRhYmFz
ZUVycm9yIGVycm9yLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwgPSBTdHJpbmcoKSkKK3sKKyAgICBB
U1NFUlQocmVzdWx0KTsKKworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFX0VSUk9SX05PVF9JTklUSUFMSVpFRDoKKyAgICAgICAgZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3NldF9lcnJvcihyZXN1bHQsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VS
Uk9SLCBlcnJvciwgXygiRmF2aWNvbnMgZGF0YWJhc2Ugbm90IGluaXRpYWxpemVkIHlldCIpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9S
X0lDT05fTk9UX0ZPVU5EOgorICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Vycm9y
KHJlc3VsdCwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IsIGVycm9yLCBfKCJQYWdlICVz
IGRvZXMgbm90IGhhdmUgYSBmYXZpY29uIiksIHBhZ2VVUkwudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCitHUXVhcmsgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZXJyb3JfcXVhcmso
dm9pZCkKK3sKKyAgICByZXR1cm4gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoIldlYktpdEZh
dmljb25EYXRhYmFzZUVycm9yIik7Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfZ2V0X2Zhdmljb246CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEZhdmljb25EYXRhYmFzZQor
ICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICogQGNh
bmNlbGxhYmxlOiAoYWxsb3ctbm9uZSk6IEEgI0dDYW5jZWxsYWJsZSBvciAlTlVMTC4KKyAqIEBj
YWxsYmFjazogKHNjb3BlIGFzeW5jKTogQSAjR0FzeW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdo
ZW4gdGhlIHJlcXVlc3QgaXMKKyAqICAgICAgICAgICAgc2F0aXNmaWVkIG9yICVOVUxMIGlmIHlv
dSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQuCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6
IFRoZSBkYXRhIHRvIHBhc3MgdG8gQGNhbGxiYWNrLgorICoKKyAqIEFzeW5jaHJvbm91c2x5IG9i
dGFpbnMgYSAjY2Fpcm9fc3VyZmFjZV90IG9mIHRoZSBmYXZpY29uIGZvciB0aGUKKyAqIGdpdmVu
IHBhZ2UgVVJJLiBJdCByZXR1cm5zIHRoZSBjYWNoZWQgaWNvbiBpZiBpdCdzIGluIHRoZSBkYXRh
YmFzZQorICogYXN5bmNocm9ub3VzbHkgd2FpdGluZyBmb3IgdGhlIGljb24gdG8gYmUgcmVhZCBm
cm9tIHRoZSBkYXRhYmFzZS4KKyAqCisgKiBUaGlzIGlzIGFuIGFzeW5jaHJvbm91cyBtZXRob2Qu
IFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgY2FsbGJhY2sgd2lsbAorICogYmUgaW52
b2tlZC4gWW91IGNhbiB0aGVuIGNhbGwgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b25fZmluaXNoKCkKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8K
K3ZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkwsIEdDYW5jZWxsYWJsZSogY2Fu
Y2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0
YWJhc2UpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhZ2VVUkwpOworCisgICAgR1JlZlB0cjxH
U2ltcGxlQXN5bmNSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1
bHRfbmV3KEdfT0JKRUNUKGRhdGFiYXNlKSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbikpKTsKKyAgICBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSogZGF0
YSA9IGNyZWF0ZUdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKCk7CisgICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0LmdldCgpLCBkYXRhLCByZWludGVy
cHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95R2V0RmF2aWNvblN1cmZhY2VBc3luY0Rh
dGEpKTsKKyAgICBkYXRhLT5mYXZpY29uRGF0YWJhc2UgPSBkYXRhYmFzZTsKKyAgICBkYXRhLT5w
YWdlVVJMID0gcGFnZVVSTDsKKyAgICBkYXRhLT5jYW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOwor
ICAgIGlmIChjYW5jZWxsYWJsZSkgeworICAgICAgICBkYXRhLT5jYW5jZWxsZWRJZCA9CisgICAg
ICAgICAgICBnX2NhbmNlbGxhYmxlX2Nvbm5lY3QoY2FuY2VsbGFibGUsIEdfQ0FMTEJBQ0soZ2V0
SWNvblN1cmZhY2VDYW5jZWxsZWRDYWxsYmFjayksIHJlc3VsdC5nZXQoKSwgMCk7CisgICAgfQor
CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IGRhdGFiYXNlLT5wcml2
OworICAgIFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlSW1wbCA9IHByaXYtPmljb25EYXRh
YmFzZS5nZXQoKTsKKyAgICBpZiAoIWljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpKSB7CisgICAg
ICAgIHNldEVycm9yRm9yQXN5bmNSZXN1bHQocmVzdWx0LmdldCgpLCBXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOworICAgICAgICBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VV
UkwpOworICAgIGlmIChwYWdlVVJMU3RyaW5nLmlzRW1wdHkoKSB8fCBwYWdlVVJMU3RyaW5nLnN0
YXJ0c1dpdGgoImFib3V0OiIpKSB7CisgICAgICAgIHNldEVycm9yRm9yQXN5bmNSZXN1bHQocmVz
dWx0LmdldCgpLCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9JQ09OX05PVF9GT1VORCwg
cGFnZVVSTFN0cmluZyk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9p
bl9pZGxlKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBX
ZSBhc2sgZm9yIHRoZSBpY29uIGRpcmVjdGx5LiBJZiB3ZSBkb24ndCBnZXQgdGhlIGljb24gZGF0
YSBub3csCisgICAgLy8gd2UnbGwgYmUgbm90aWZpZWQgbGF0ZXIgKGV2ZW4gaWYgdGhlIGRhdGFi
YXNlIGlzIHN0aWxsIGltcG9ydGluZyBpY29ucykuCisgICAgZGF0YS0+aWNvbiA9IGdldEljb25T
dXJmYWNlU3luY2hyb25vdXNseShkYXRhYmFzZSwgcGFnZVVSTFN0cmluZyk7CisKKyAgICAvLyBJ
ZiB0aGVyZSdzIG5vdCBhIHZhbGlkIGljb24sIGJ1dCB0aGVyZSdzIGFuIGljb25VUkwgcmVnaXN0
ZXJlZCwKKyAgICAvLyBvciBpdCdzIHN0aWxsIG5vdCByZWdpc3RlcmVkIGJ1dCB0aGUgaW1wb3J0
IHByb2Nlc3MgaGFzbid0CisgICAgLy8gZmluaXNoZWQgeWV0LCB3ZSBuZWVkIHRvIHdhaXQgZm9y
IGljb25EYXRhUmVhZHlGb3JQYWdlIHRvIGJlCisgICAgLy8gY2FsbGVkIGJlZm9yZSBtYWtpbmcg
YW5kIGluZm9ybWVkIGRlY2lzaW9uLgorICAgIFN0cmluZyBpY29uVVJMRm9yUGFnZVVSTDsKKyAg
ICBpY29uRGF0YWJhc2VJbXBsLT5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkxT
dHJpbmcsIGljb25VUkxGb3JQYWdlVVJMKTsKKyAgICBpZiAoIWRhdGEtPmljb24gJiYgKCFpY29u
VVJMRm9yUGFnZVVSTC5pc0VtcHR5KCkgfHwgIWljb25EYXRhYmFzZUltcGwtPmlzVXJsSW1wb3J0
Q29tcGxldGVkKCkpKSB7CisgICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMg
PSBnZXRPckNyZWF0ZVBlbmRpbmdJY29uUmVxdWVzdHMoZGF0YWJhc2UsIHBhZ2VVUkxTdHJpbmcp
OworICAgICAgICBBU1NFUlQoaWNvbnMpOworICAgICAgICBpY29ucy0+YXBwZW5kKHJlc3VsdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSByZWFjaGVkIHRoaXMgcG9p
bnQgd2l0aG91dCBhIHZhbGlkIGljb24sIHdoaWNoIG1lYW5zIHRoYXQKKyAgICAvLyB0aGVyZSdz
IG5vIGljb25VUkwgcmVnaXN0ZXJlZCBmb3IgdGhpcyBwYWdlVVJMIGFuZCB0aGUKKyAgICAvLyB1
cmxJbXBvcnQgcHJvY2VzcyBoYXMgYWxyZWFkeSBmaW5pc2hlZCwgb3IgZG8gaGF2ZSBhIHZhbGlk
IGljb24KKyAgICAvLyBidXQgaXQncyBhbiBlbXB0eSBpbWFnZSwgdGhhdCBtZWFucyB0aGVyZSdz
IG5vIGZhdmljb24uCisgICAgaWYgKCFkYXRhLT5pY29uIHx8ICFjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKGRhdGEtPmljb24uZ2V0KCkpKQorICAgICAgICBzZXRFcnJvckZvckFzeW5jUmVz
dWx0KHJlc3VsdC5nZXQoKSwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfSUNPTl9OT1Rf
Rk9VTkQsIHBhZ2VVUkxTdHJpbmcpOworCisgICAgLy8gQ29tcGxldGUgdGhlIGFzeW5jaHJvbm91
cyBwcm9jZXNzOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJl
c3VsdC5nZXQoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fZmluaXNoOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAq
IEByZXN1bHQ6IEEgI0dBc3luY1Jlc3VsdCBvYnRhaW5lZCBmcm9tIHRoZSAjR0FzeW5jUmVhZHlD
YWxsYmFjayBwYXNzZWQgdG8gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oKQor
ICogQGVycm9yOiAoYWxsb3ctbm9uZSk6IFJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5V
TEwuCisgKgorICogRmluaXNoZXMgYW4gb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbigpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI2NhaXJvX3N1cmZhY2VfdCwgb3IKKyAqICVOVUxM
IGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK2NhaXJvX3N1cmZhY2VfdCogd2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHU2ltcGxl
QXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQp
OworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3Rh
ZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKTsK
KworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJl
c3VsdCwgZXJyb3IpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdldEZhdmljb25TdXJmYWNl
QXN5bmNEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEq
PihnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihzaW1wbGVSZXN1bHQp
KTsKKyAgICBBU1NFUlQoZGF0YSk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGljb24gaXMgd2UgY2Fu
IGdldCBpdCBhbHJlYWR5LgorICAgIGlmIChkYXRhLT5pY29uKQorICAgICAgICByZXR1cm4gY2Fp
cm9fc3VyZmFjZV9yZWZlcmVuY2UoZGF0YS0+aWNvbi5nZXQoKSk7CisKKyAgICAvLyBJZiB0aGUg
aWNvbiBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgc3RhZ2UsIGludmVzdGlnYXRlIHdoeQorICAg
IC8vIGFuZCBjb21lIHVwIHdpdGggYSBkZXNjcmlwdGl2ZSwgYW5kIGhvcGVmdWxseSBoZWxwZnVs
LCBlcnJvci4KKyAgICBTdHJpbmcgaWNvblVSTEZvclBhZ2VVUkw7CisgICAgZGF0YWJhc2UtPnBy
aXYtPmljb25EYXRhYmFzZS0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChkYXRhLT5wYWdl
VVJMLCBpY29uVVJMRm9yUGFnZVVSTCk7CisKKyAgICBpZiAoaWNvblVSTEZvclBhZ2VVUkwuaXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gaWNvbiBVUkwgaW4gdGhlIGRhdGFi
YXNlIGF0IHRoaXMgcG9pbnQsIHdlIGNhbgorICAgICAgICAvLyBjb25jbHVkZSB0aGVyZSdzIG5v
IGZhdmljb24gYXQgYWxsIGZvciB0aGUgcmVxdWVzdGVkIHBhZ2UgVVJMLgorICAgICAgICBnX3Nl
dF9lcnJvcihlcnJvciwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IsCisgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0lDT05fTk9UX0ZPVU5ELAor
ICAgICAgICAgICAgICAgICAgICBfKCJQYWdlICVzIGRvZXMgbm90IGhhdmUgYSBmYXZpY29uIiks
CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPnBhZ2VVUkwudXRmOCgpLmRhdGEoKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGljb24gVVJMIGlzIGtub3duIGl0IG9idmlvdXNs
eSBtZWFucyB0aGF0IHRoZSBpY29uIGRhdGEKKyAgICAgICAgLy8gaGFzbid0IGJlZW4gcmV0cmll
dmVkIHlldCwgc28gcmVwb3J0IHRoYXQgaXQncyAndW5rbm93bicuCisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0lDT05f
VU5LTk9XTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJVbmtub3duIGZhdmljb24g
Zm9yIHBhZ2UiKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogd2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpOgorICogQGRhdGFiYXNlOiBhICNXZWJL
aXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5p
bmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0
aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKgorICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJ
IGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwgaWYgdGhlCisgKiBkYXRhYmFzZSBkb2Vzbid0IGhh
dmUgYSBmYXZpY29uIGZvciBAcGFnZV91cmkuCisgKi8KK2djaGFyKiB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIHBhZ2VVUkwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChwYWdlVVJMLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3Ry
aW5nIGljb25VUkxGb3JQYWdlVVJMOworICAgIGRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2Ut
PnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJMKSwg
aWNvblVSTEZvclBhZ2VVUkwpOworICAgIGlmIChpY29uVVJMRm9yUGFnZVVSTC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfc3RyZHVwKGljb25VUkxGb3JQYWdl
VVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2NsZWFyOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqCisgKiBD
bGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgorICovCit2b2lkIHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkp
OworCisgICAgZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVtb3ZlQWxsSWNvbnMoKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmF2aWNvbkRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0
YzU3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0
Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRGYXZpY29uRGF0YWJhc2VfaAorI2RlZmluZSBXZWJLaXRGYXZpY29uRGF0YWJhc2Vf
aAorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UgICAgICAg
ICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0ZBVklDT05fREFUQUJBU0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0Uob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9E
QVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZBVklDT05f
REFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0ZBVklDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRh
YmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IgICAgICAg
ICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJvcl9xdWFyaygpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2U7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VQ
cml2YXRlIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RmF2
aWNvbkRhdGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdEZhdmljb25E
YXRhYmFzZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZhdmljb25EYXRhYmFz
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworLyoqCisgKiBX
ZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvcjoKKyAqIEBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9F
UlJPUl9OT1RfSU5JVElBTElaRUQ6IFRoZSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlIGhhcyBub3Qg
YmVlbiBpbml0aWFsaXplZCB5ZXQKKyAqIEBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9J
Q09OX05PVF9GT1VORDogVGhlcmUgaXMgbm90IGFuIGljb24gYXZhaWxhYmxlIGZvciB0aGUgcmVx
dWVzdGVkIFVSTAorICogQFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0lDT05fVU5LTk9X
TjogVGhlcmUgbWlnaHQgYmUgYW4gaWNvbiBmb3IgdGhlIHJlcXVlc3RlZCBVUkwsIGJ1dCBpdHMg
ZGF0YSBpcyB1bmtub3duIGF0IHRoZSBtb21lbnQKKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRv
IGRlbm90ZSB0aGUgdmFyaW91cyBlcnJvcnMgcmVsYXRlZCB0byB0aGUgI1dlYktpdEZhdmljb25E
YXRhYmFzZS4KKyAqKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0ZBVklDT05fREFUQUJB
U0VfRVJST1JfTk9UX0lOSVRJQUxJWkVELAorICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VS
Uk9SX0lDT05fTk9UX0ZPVU5ELAorICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0lD
T05fVU5LTk9XTgorfSBXZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvcjsKKworV0VCS0lUX0FQSSBH
UXVhcmsKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Vycm9yX3F1YXJrICAgICAgICAgICAgICAg
KHZvaWQpOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
dHlwZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbiAgICAgICAgICAgICAgIChXZWJLaXRGYXZpY29u
RGF0YWJhc2UgKmRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpwYWdlX3VyaSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAg
ICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgIGNhbGxiYWNrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAg
ICAgICAgICAgICB1c2VyX2RhdGEpOworV0VCS0lUX0FQSSBjYWlyb19zdXJmYWNlX3QgKgord2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoICAgICAgICAoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlICpkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAqcmVzdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAg
ICAgICAgICAgKiplcnJvcik7CitXRUJLSVRfQVBJIGdjaGFyICoKK3dlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX3VyaSAgICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSAq
ZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnBhZ2VfdXJpKTsKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRh
dGFiYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBhOTkzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgKQEAgLTAsMCArMSwyOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldlYktpdEZhdmlj
b25EYXRhYmFzZS5oIgorCitXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtpdEZhdmljb25EYXRh
YmFzZUNyZWF0ZShXZWJLaXQ6OldlYkljb25EYXRhYmFzZSopOworCisjZW5kaWYgLy8gV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggOGZlZGU4Mi4uOWNlYWZlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tHZW9sb2NhdGlvbk1hbmFnZXIuaD4KICNp
bmNsdWRlIDxXZWJLaXQyL1dLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oPgogI2luY2x1
ZGUgPFdlYktpdDIvV0tHZW9sb2NhdGlvblBvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S0ljb25EYXRhYmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tJbnNwZWN0b3IuaD4KICNpbmNs
dWRlIDxXZWJLaXQyL1dLSW5zcGVjdG9yQ2xpZW50R3RrLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCA1YjJjMjY2Li5iM2ZjODk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cApAQCAtMjEsOSArMjEsMTEgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0LmgiCiAKICNp
bmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXREb3du
bG9hZENsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdERvd25sb2FkUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRHZW9s
b2NhdGlvblByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0UGx1Z2luUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKQEAgLTMzLDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQ
cml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xhbmd1YWdlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC05Niw2ICs5
OSw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogICAgIFdLUmV0YWluUHRy
PFdLQ29udGV4dFJlZj4gY29udGV4dDsKIAogICAgIEdSZWZQdHI8V2ViS2l0Q29va2llTWFuYWdl
cj4gY29va2llTWFuYWdlcjsKKyAgICBHUmVmUHRyPFdlYktpdEZhdmljb25EYXRhYmFzZT4gaWNv
bkRhdGFiYXNlOwogICAgIEdSZWZQdHI8V2ViS2l0U2VjdXJpdHlNYW5hZ2VyPiBzZWN1cml0eU1h
bmFnZXI7CiAgICAgV0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RN
YW5hZ2VyOwogICAgIFVSSVNjaGVtZUhhbmRsZXJNYXAgdXJpU2NoZW1lSGFuZGxlcnM7CkBAIC0x
MDYsNiArMTEwLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCiAgICAgT3duUHRyPFdlYktpdFRleHRDaGVja2VyPiB0ZXh0Q2hlY2tl
cjsKICNlbmRpZgorICAgIENTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aDsKIH07CiAKIHN0YXRpYyBn
dWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKQEAgLTMyNCw2ICszMjksOTggQEAg
V2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdl
cihXZWJLaXRXZWJDb250ZXh0KiBjb24KIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5OgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdl
YkNvbnRleHQKKyAqIEBwYXRoOiAoYWxsb3ctbm9uZSk6IGFuIGFic29sdXRlIHBhdGggdG8gdGhl
IGljb24gZGF0YWJhc2UKKyAqIGRpcmVjdG9yeSBvciAlTlVMTCB0byB1c2UgdGhlIGRlZmF1bHRz
CisgKgorICogU2V0IHRoZSBkaXJlY3RvcnkgcGF0aCB0byBiZSB1c2VkIHRvIHN0b3JlIHRoZSBm
YXZpY29ucyBkYXRhYmFzZQorICogZm9yIEBjb250ZXh0IG9uIGRpc2suIFBhc3NpbmcgJU5VTEwg
YXMgQHBhdGggbWVhbnMgdXNpbmcgdGhlCisgKiBkZWZhdWx0IGRpcmVjdG9yeSBmb3IgdGhlIHBs
YXRmb3JtLgorICoKKyAqIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBwYXRoIGZvciB0
aGUgZmF2aWNvbiBkYXRhYmFzZSwgdGhpcworICogbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9y
ZSB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBieQorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKCkuIE5vdGUgdGhhdCBhCisgKiAjV2ViS2l0V2ViVmlldyBjb3VsZCB1
c2UgdGhlIGZhdmljb24gZGF0YWJhc2UsIHNvIHRoaXMgc2hvdWxkIGFsc28KKyAqIGJlIGNhbGxl
ZCBiZWZvcmUgbG9hZGluZyBhbnkgd2ViIHBhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBl
eHBlY3RlZCB0byBiZSBjYWxsZWQgb25seSBvbmNlLCBmdXJ0aGVyIGNhbGxzIGZvcgorICogdGhl
IHNhbWUgaW5zdGFuY2Ugb2YgI1dlYktpdFdlYkNvbnRleHQgYWZ0ZXIgY2FsbGluZworICogd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKCkgd29uJ3QgY2F1c2UgYW55IGVm
ZmVjdC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2Vf
ZGlyZWN0b3J5KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBwYXRoKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsK
KworICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIGRhdGFiYXNlIGlzIGFscmVhZHkgaW5pdGlhbGl6
ZWQsIHNpbmNlIGluIFdLMgorICAgIC8vIGl0J3Mgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMg
cGF0aCBvbmNlIHRoZSBkYXRhYmFzZSBpcyBvcGVuLgorICAgIGlmIChjb250ZXh0LT5wcml2LT5p
Y29uRGF0YWJhc2UgfHwgIXBhdGgpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnBy
aXYtPmljb25EYXRhYmFzZVBhdGggPSBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHBhdGgpLnV0
ZjgoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJh
c2VfcGF0aDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKgorICogR2V0IHRo
ZSBkaXJlY3RvcnkgcGF0aCBiZWluZyB1c2VkIHRvIHN0b3JlIHRoZSBmYXZpY29ucyBkYXRhYmFz
ZQorICogZm9yIEBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiB0aGUg
c2FtZSBwYXRoIGFmdGVyCisgKiBoYXZpbmcgY2FsbGVkIHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZmF2aWNvbl9kYXRhYmFzZSgpIGZvciB0aGUKKyAqIGZpcnN0IHRpbWUuIFNlZSB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KCkKKyAqIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGF0aCBvZiB0aGUg
ZGlyZWN0b3J5IG9mIHRoZSBmYXZpY29ucworICogZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoIEBj
b250ZXh0LgorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29u
X2RhdGFiYXNlX2RpcmVjdG9yeShXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7CisK
KyAgICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisKKyAg
ICAvLyBVc2UgZGVmYXVsdCBpZiBhIGRpZmZlcmVudCBwYXRoIGhhcyBub3QgYmVlbiBwcmV2aW91
c2x5IHNldC4KKyAgICBpZiAocHJpdi0+aWNvbkRhdGFiYXNlUGF0aC5pc051bGwoKSkKKyAgICAg
ICAgcHJpdi0+aWNvbkRhdGFiYXNlUGF0aCA9IHRvSW1wbChwcml2LT5jb250ZXh0LmdldCgpKS0+
aWNvbkRhdGFiYXNlUGF0aCgpLnV0ZjgoKTsKKworICAgIHJldHVybiBwcml2LT5pY29uRGF0YWJh
c2VQYXRoLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmlj
b25fZGF0YWJhc2U6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdl
dCB0aGUgI1dlYktpdEZhdmljb25EYXRhYmFzZSBhc3NvY2lhdGVkIHdpdGggQGNvbnRleHQuIElm
IHlvdQorICogd2FudCB0aGUgZGF0YWJhc2UgdG8gYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5IG90
aGVyIHRoYW4gdGhlIGRlZmF1bHQKKyAqIG9uZSwgeW91IG5lZWQgdG8gY2FsbAorICogd2Via2l0
X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSgpIGJlZm9yZSB0aGUg
Zmlyc3QKKyAqIHRpbWUgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRGYXZpY29uRGF0YWJhc2Ugb2YgQGNvbnRleHQuCisg
Ki8KK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29u
X2RhdGFiYXNlKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpLCAwKTsKKworICAgIFdlYktp
dFdlYkNvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKworICAgIGlmIChwcml2
LT5pY29uRGF0YWJhc2UpCisgICAgICAgIHJldHVybiBwcml2LT5pY29uRGF0YWJhc2UuZ2V0KCk7
CisKKyAgICAvLyBCdWlsZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpY29uIGRhdGFiYXNlIGZpbGUg
b24gZGlzay4KKyAgICBHT3duUHRyPGdjaGFyPiBpY29uRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmls
ZW5hbWUod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeShj
b250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpLnV0
ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpKTsKKworICAgIC8vIENhbGxpbmcgdGhlIHNldHRlciBpbiBXZWJDb250
ZXh0IHdpbGwgY2F1c2UgdGhlIGljb24gZGF0YWJhc2UgdG8gYmUgb3BlbmVkLgorICAgIFdlYkNv
bnRleHQqIHdlYkNvbnRleHQgPSB0b0ltcGwocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgd2Vi
Q29udGV4dC0+c2V0SWNvbkRhdGFiYXNlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGlj
b25EYXRhYmFzZVBhdGguZ2V0KCkpKTsKKyAgICBwcml2LT5pY29uRGF0YWJhc2UgPSBhZG9wdEdS
ZWYod2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKHdlYkNvbnRleHQtPmljb25EYXRhYmFzZSgp
KSk7CisKKyAgICByZXR1cm4gcHJpdi0+aWNvbkRhdGFiYXNlLmdldCgpOworfQorCisvKioKICAq
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFuYWdlcjoKICAqIEBjb250ZXh0OiBh
ICNXZWJLaXRXZWJDb250ZXh0CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IGY3NzA4NmYuLmFlNzliZWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvb2tpZU1hbmFn
ZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdERvd25sb2FkLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGYXZpY29uRGF0
YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNlY3VyaXR5TWFuYWdlci5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oPgogCkBAIC0xMTQsNiArMTE1
LDE1IEBAIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViQ29udGV4dAogV0VCS0lUX0FQSSBXZWJLaXRDb29raWVNYW5hZ2VyICoKIHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIgICAgICAgICAgICAgICAoV2ViS2l0
V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwogCitXRUJLSVRfQVBJIFdlYktpdEZh
dmljb25EYXRhYmFzZSAqCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Ug
ICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2Vf
ZGlyZWN0b3J5ICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAgICAgICAgICAgICAgICAgICAqcGF0aCk7CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoK
K3dlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkgICAoV2Vi
S2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworCiBXRUJLSVRfQVBJIFdlYktp
dFNlY3VyaXR5TWFuYWdlciAqCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NlY3VyaXR5X21hbmFn
ZXIgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggYTdmMzRlNi4uODYyM2FmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sCkBAIC0zMCw2ICszMCw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdFByaW50T3BlcmF0aW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRXZWJSZXNvdXJjZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJy
b3IueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZhdmljb25EYXRhYmFz
ZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxl
ci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Q29va2llTWFuYWdlci54
bWwiLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDczZGVmZTQuLmFiNmYyYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMzAsNiArMzAsOSBAQCB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfY2xlYXJfY2FjaGUKIHdl
YmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29v
a2llX21hbmFnZXIKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZQord2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeQord2Via2l0X3dl
Yl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeQogd2Via2l0X3dlYl9jb250
ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2VyCiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9u
YWxfcGx1Z2luc19kaXJlY3RvcnkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucwpAQCAt
NTk4LDYgKzYwMSwzMSBAQCB3ZWJraXRfamF2YXNjcmlwdF9lcnJvcl9xdWFyawogPC9TRUNUSU9O
PgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEZhdmljb25EYXRhYmFzZTwvRklMRT4KK1dlYktp
dEZhdmljb25EYXRhYmFzZQorV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IKK1dlYktpdEZh
dmljb25EYXRhYmFzZUVycm9yCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbgor
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoCit3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFy
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MKK1dF
QktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UKK1dFQktJVF9GQVZJQ09OX0RBVEFCQVNFCitXRUJL
SVRfSVNfRkFWSUNPTl9EQVRBQkFTRQorV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfQ0xBU1MKK1dF
QktJVF9JU19GQVZJQ09OX0RBVEFCQVNFX0NMQVNTCitXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEZhdmljb25EYXRhYmFzZVBy
aXZhdGUKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF90eXBlCit3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9lcnJvcl9xdWFyaworPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdDwvRklMRT4KIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAogd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNm
YWRmNDAuLjkyZGI0ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0xMSw2ICsxMSw3IEBAIFRFU1RfUFJPR1Mg
Kz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0UmVzb3VyY2VzIFwKIAlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFNTTCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3RXZWJLaXRWZXJzaW9uIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRGaW5k
Q29udHJvbGxlciBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRQb2xpY3lD
bGllbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXApA
QCAtNjksNyArNzAsOCBAQCBMaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogCiBFWFRSQV9ESVNUICs9IFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBl
bSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rl
c3Qta2V5LnBlbQorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291
cmNlcy90ZXN0LWtleS5wZW0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL3Jlc291cmNlcy9ibGFuay5pY28KIAogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJDb250ZXh0X1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0xNDEsNiArMTQzLDEyIEBA
IFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0UHJpbnRpbmdfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpICQoR1RLCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFBy
aW50aW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKSAkKEdUS19VTklYX1BSSU5USU5H
X0xJQlMpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFByaW50aW5nX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2VfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAorUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfQ1BQRkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1z
X1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKKwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlcl9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKIFByb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjJjZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2
aWNvbkRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1h
aW4uaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7CitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK2NsYXNzIEZh
dmljb25EYXRhYmFzZVRlc3Q6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKEZhdmljb25EYXRhYmFzZVRlc3QpOworCisgICAgRmF2aWNvbkRhdGFiYXNl
VGVzdCgpCisgICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpKQorICAgICAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQor
ICAgICAgICAsIG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KSkKKyAgICAgICAgLCBtX2Jhc2VVUkkoc291cF91cmlfdG9fc3RyaW5nKGtTZXJ2ZXItPmJhc2VV
UkkoKSwgRkFMU0UpKQorICAgICAgICAsIG1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQoZmFsc2Up
CisgICAgICAgICwgbV9pY29uSXNWYWxpZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgfkZh
dmljb25EYXRhYmFzZVRlc3QoKQorICAgIHsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dl
YkNvbnRleHQpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
ZGF0YWJhc2UsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAg
ICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFy
KiBiYXNlVVJJKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jhc2VVUkkuZ2V0KCk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgaWNvblJlYWR5Q2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSSSwgRmF2aWNvbkRhdGFiYXNlVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3VyaSh0ZXN0LT5tX3dlYlZpZXcuZ2V0KCkpLCA9PSwgcGFnZVVSSSk7CisgICAgICAgIHRlc3Qt
Pm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGdldEZhdmljb25DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgRmF2aWNvbkRhdGFiYXNlVGVz
dCogdGVzdCA9IHN0YXRpY19jYXN0PEZhdmljb25EYXRhYmFzZVRlc3QqPihkYXRhKTsKKyAgICAg
ICAgY2Fpcm9fc3VyZmFjZV90KiBmYXZpY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X2Zhdmljb25fZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJl
c3VsdCwgMCk7CisgICAgICAgIGlmIChmYXZpY29uKQorICAgICAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KGZhdmljb24pOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFza0Zvckljb25BZnRlckxvYWQoRmF2
aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
dGVzdC0+bV93ZWJDb250ZXh0KTsKKyAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X2Zhdmljb24oZGF0YWJhc2UsIHRlc3QtPm1fYmFzZVVSSS5nZXQoKSwgMCwgZ2V0RmF2aWNvbkNh
bGxiYWNrLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFzZSwgImljb24t
cmVhZHkiLCBHX0NBTExCQUNLKGljb25SZWFkeUNhbGxiYWNrKSwgdGVzdCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0
TG9hZEV2ZW50IGxvYWRFdmVudCwgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgICAg
ICBhc2tGb3JJY29uQWZ0ZXJMb2FkKHRlc3QpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxv
YWRGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50LCBjb25zdCBj
aGFyKiwgR0Vycm9yKiwgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGFza0Zvckljb25BZnRlckxvYWQodGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhc2tGb3JJY29u
QW5kV2FpdEZvckljb25SZWFkeVNpZ25hbCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldy5nZXQoKSwgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldy5n
ZXQoKSwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlz
KTsKKworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJWaWV3LmdldCgpLCBt
X2Jhc2VVUkkuZ2V0KCkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldy5n
ZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZ2V0VmFsaWRGYXZpY29uQ2FsbGJhY2soR09iamVjdCogc291cmNlT2Jq
ZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIEZh
dmljb25EYXRhYmFzZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VUZXN0
Kj4oZGF0YSk7CisKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgICAgIGNhaXJvX3N1
cmZhY2VfdCogZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2Zp
bmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJv
cik7CisgICAgICAgIGdfYXNzZXJ0KGZhdmljb24pOworICAgICAgICBnX2Fzc2VydCghZXJyb3Ip
OworCisgICAgICAgIHRlc3QtPm1faWNvbklzVmFsaWQgPSB0cnVlOworICAgICAgICBjYWlyb19z
dXJmYWNlX2Rlc3Ryb3koZmF2aWNvbik7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRJbnZhbGlkRmF2aWNv
bkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZv
aWQqIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3Rh
dGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworCisgICAgICAgIEdFcnJvciog
ZXJyb3IgPSAwOworICAgICAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24gPSB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uo
c291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZmF2aWNv
bik7CisgICAgICAgIGdfYXNzZXJ0KGVycm9yICYmIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VS
Uk9SX0lDT05fTk9UX0ZPVU5EKTsKKworICAgICAgICB0ZXN0LT5tX2ljb25Jc1ZhbGlkID0gZmFs
c2U7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgdm9pZCBhc2tBbmRXYWl0Rm9yVmFsaWRGYXZpY29uKCkKKyAgICB7CisgICAgICAgIFdl
YktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zh
dmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb24oZGF0YWJhc2UsIG1fYmFzZVVSSS5nZXQoKSwgMCwgZ2V0VmFsaWRG
YXZpY29uQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgdm9pZCBhc2tBbmRXYWl0Rm9ySW52YWxpZEZhdmljb24oKQorICAg
IHsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOworICAgICAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRhYmFzZSwgImh0dHA6Ly93d3cud2Vi
a2l0Z3RrLm9yZy8iLCAwLCBnZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrLCB0aGlzKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdFdlYkNv
bnRleHQqIG1fd2ViQ29udGV4dDsKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJWaWV3PiBtX3dlYlZpZXc7CisgICAgR093blB0cjxjaGFyPiBtX2Jhc2VV
Ukk7CisgICAgYm9vbCBtX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkOworICAgIGJvb2wgbV9pY29u
SXNWYWxpZDsKK307CisKK3N0YXRpYyB2b2lkCitzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxl
KiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIHZvaWQqIGRhdGEpCit7CisgICAg
aWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXpl
IGxlbmd0aDsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Cisg
ICAgICAgIENTdHJpbmcgcmVzb3VyY2VzRGlyID0gVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCk7Cisg
ICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmF2aWNvbihnX2J1aWxkX2ZpbGVuYW1lKHJlc291
cmNlc0Rpci5kYXRhKCksICJibGFuay5pY28iLCBOVUxMKSk7CisKKyAgICAgICAgR0Vycm9yKiBl
cnJvciA9IDA7CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMocGF0aFRvRmF2aWNvbi5nZXQo
KSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3Ip
OworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5
PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMp
OworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFNldERpcmVjdG9yeShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9k
aXJlY3RvcnkodGVzdC0+bV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9yeSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKGtUZW1wRGlyZWN0b3J5LCA9PSwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQpKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdENsZWFyRGF0YWJhc2UoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Cisg
ICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2UpOworCisgICAgR093blB0
cjxjaGFyPiBpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShk
YXRhYmFzZSwgdGVzdC0+bV9iYXNlVVJJLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIWljb25VUkkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2
ZWQgPSBmYWxzZTsKKyAgICB0ZXN0LT5hc2tGb3JJY29uQW5kV2FpdEZvckljb25SZWFkeVNpZ25h
bCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOworCisg
ICAgdGVzdC0+bV9pY29uSXNWYWxpZCA9IGZhbHNlOworICAgIHRlc3QtPmFza0FuZFdhaXRGb3JW
YWxpZEZhdmljb24oKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2ljb25Jc1ZhbGlkKTsKKworICAg
IHRlc3QtPmFza0FuZFdhaXRGb3JJbnZhbGlkRmF2aWNvbigpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2ljb25Jc1ZhbGlkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb25VUkkoRmF2
aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7CisKKyAgICBjb25zdCBjaGFyKiBiYXNlVVJJID0g
dGVzdC0+bV9iYXNlVVJJLmdldCgpOworICAgIEdPd25QdHI8Y2hhcj4gaWNvblVSSSh3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGJhc2VVUkkpKTsKKyAg
ICBHT3duUHRyPGNoYXI+IGV4cGVjdGVkVVJJKGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmlj
byIsIGJhc2VVUkkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoaWNvblVSSS5nZXQoKSwgPT0sIGV4
cGVjdGVkVVJJLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlcygp
Cit7CisgICAgaWYgKCFnX2ZpbGVfdGVzdChrVGVtcERpcmVjdG9yeSwgR19GSUxFX1RFU1RfSVNf
RElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxjaGFyPiBmaWxlbmFtZShnX2J1
aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCkpOwor
ICAgIGdfdW5saW5rKGZpbGVuYW1lLmdldCgpKTsKKworICAgIGZpbGVuYW1lLnNldChnX2J1aWxk
X2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiV2VicGFnZUljb25zLmRiLWpvdXJuYWwiLCBOVUxM
KSk7CisgICAgZ191bmxpbmsoZmlsZW5hbWUuZ2V0KCkpOworCisgICAgZ19ybWRpcihrVGVtcERp
cmVjdG9yeSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICAvLyBTdGFydCBhIHNvdXAg
c2VydmVyIGZvciB0ZXN0aW5nLgorICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9y
eSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3Nl
cnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgLy8gQWRkIHRlc3RzIHRvIHRoZSBzdWl0ZS4KKyAg
ICBGYXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJzZXQt
ZGlyZWN0b3J5IiwgdGVzdFNldERpcmVjdG9yeSk7CisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6
YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZ2V0LWZhdmljb24iLCB0ZXN0R2V0RmF2aWNv
bik7CisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2Ui
LCAiZ2V0LWZhdmljb24tdXJpIiwgdGVzdEdldEZhdmljb25VUkkpOworICAgIEZhdmljb25EYXRh
YmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImNsZWFyLWRhdGFiYXNlIiwg
dGVzdENsZWFyRGF0YWJhc2UpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUg
a1NlcnZlcjsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvYmxhbmsuaWNvIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmlj
bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lYTg0OGI5OTE2ZTU5MDg0NDEzZmMxZTdhMDkwZGViZjVmNDkxNGRiCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxOTgKcGNtWlF6VTw1KHwwVlhpTGZxe1dSNDJVJj1TT0FD
PmZFWGw/MztoNThBRDB3ZSNRfVJZMVZqSjsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBlMWYzYmEwLi4xYjRm
YTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZhdmljb25EYXRhYmFzZS5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJY29uRGF0YWJhc2UuY3BwCmluZGV4IDE0YWZkYWQuLjBmZTYzNjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0yMDgsNiArMjA4LDExIEBA
IGJvb2wgV2ViSWNvbkRhdGFiYXNlOjppc09wZW4oKQogICAgIHJldHVybiBtX2ljb25EYXRhYmFz
ZUltcGwgJiYgbV9pY29uRGF0YWJhc2VJbXBsLT5pc09wZW4oKTsKIH0KIAorYm9vbCBXZWJJY29u
RGF0YWJhc2U6OmlzVXJsSW1wb3J0Q29tcGxldGVkKCkKK3sKKyAgICByZXR1cm4gbV91cmxJbXBv
cnRDb21wbGV0ZWQ7Cit9CisKIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpyZW1vdmVBbGxJY29ucygp
CiB7CiAgICAgbV9pY29uRGF0YWJhc2VJbXBsLT5yZW1vdmVBbGxJY29ucygpOyAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCmluZGV4IGRkZWIzMDkuLmI3MjU0
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKQEAgLTgy
LDYgKzgyLDcgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkltYWdlKiBpbWFnZUZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaWNvblNpemUgPSBXZWJDb3Jl
OjpJbnRTaXplKDMyLCAzMikpOwogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpY29u
U2l6ZSA9IFdlYkNvcmU6OkludFNpemUoMzIsIDMyKSk7CiAgICAgYm9vbCBpc09wZW4oKTsKKyAg
ICBib29sIGlzVXJsSW1wb3J0Q29tcGxldGVkKCk7CiAKICAgICB2b2lkIHJlbW92ZUFsbEljb25z
KCk7CiAgICAgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwCmluZGV4IDcxYzdiYmUuLmQz
NWFlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4
dEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3Rr
LmNwcApAQCAtNTMsOCArNTMsOCBAQCBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0
RGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdAogCiBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1E
ZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KLSAgICByZXR1cm4gV1RGOjpTdHJpbmcoKTsKKyAgICBHT3duUHRyPGdjaGFyPiBkYXRhYmFz
ZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtp
dGd0ayIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmZpbGVu
YW1lVG9TdHJpbmcoZGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCkpOwogfQogCiBTdHJpbmcgV2ViQ29u
dGV4dDo6cGxhdGZvcm1EZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKLS0gCjEu
Ny4xMS40Cgo=
</data>
<flag name="review"
          id="177652"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165994</attachid>
            <date>2012-09-27 07:12:00 -0700</date>
            <delta_ts>2012-09-28 06:45:07 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-WK2-GTK-Implement-new-Favicons-API.patch</filename>
            <type>text/plain</type>
            <size>58806</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBkMTY5MjQ0NjQ1ZDYxNWE2YjI1MWQ5ZDMxN2YxOWNjZTRlZTRmZDY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUaHUsIDI3IFNlcCAyMDEyIDExOjM4OjExICswMjAwClN1YmplY3Q6IFtQQVRD
SCAxLzNdIFtXSzJdW0dUS10gSW1wbGVtZW50IG5ldyBGYXZpY29ucyBBUEkKIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjQ3NgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCgpOZXcgb2JqZWN0IHdyYXBwaW5nIHRoZSBpbnRlcm5hbCBJY29uRGF0YWJhc2UgZnJv
bSBXZWJDb3JlLApwcm92aWRpbmcgYSBzaW1wbGUgYXN5bmNocm9ub3VzIEFQSSB0byByZXRyaWV2
ZSB0aGUgZmF2aWNvbgphc3NvY2lhdGVkIHRvIGEgcGFnZSBVUkwsIGFuZCB0d28gbW9yZSBmdW5j
dGlvbnMgdG8gc2ltcGxlIHF1ZXJ5CnRoZSBpbnRlcm5hbCBkYXRhYmFzZSBmb3IgdGhlIFVSSSBv
ZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHRvIGEKcGFnZSwgaWYgYW55LCBhbmQgdG8gY2xlYXIgdGhl
IHN0YXRlIG9mIHRoZSBpbnRlcm5hbCBkYXRhYmFzZS4KCiogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCihfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJp
dmF0ZSk6Cih3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9pbml0KToKKHdlYmtpdEZhdmljb25EYXRh
YmFzZUZpbmFsaXplKToKKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQpOgooR2V0
RmF2aWNvblN1cmZhY2VBc3luY0RhdGEpOiBOZXcgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBkYXRh
CmFjcm9zcyB0aGUgYXN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIG9mIGdldF9mYXZpY29uKCku
CihHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YTo6fkdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRh
KToKRGlzY29ubmVjdHMgdGhlIGNhbmNlbGxhYmxlIGlmIG5lZWRlZC4KKGdldEljb25TdXJmYWNl
U3luY2hyb25vdXNseSk6IFN5bmNocm9ub3VzbHkgcmV0dXJucyBhIHBvaW50ZXIgdG8KdGhlIGNh
aXJvX3N1cmZhY2Ugd2l0aCB0aGUgaWNvbidzIGRhdGEsIGlmIGF2YWlsYWJsZS4KKGRlbGV0ZVBl
bmRpbmdJY29uUmVxdWVzdHMpOiBSZW1vdmVzIHRoZSBmdWxsIGxpc3Qgb2YKaWNvbiByZXF1ZXN0
cyBmb3IgYSBwYWdlIFVSTC4KKHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBQcm9jZXNzIGFu
eSBpY29uIHJlcXVlc3QgdGhhdAptaWdodCBiZSBzdGlsbCBwZW5kaW5nLgooaWNvbkRhdGFSZWFk
eUZvclBhZ2VVUkxDYWxsYmFjayk6IENhbGxlZCBmcm9tIFdlYkljb25EYXRhYmFzZQp3aGVuIG5l
dyBkYXRhIGlzIHJlYWR5IGZvciBhIGZhdmljb24uCih3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVh
dGUpOiBDcmVhdGUgdGhlIFdlYktpdEZhdmljb25EYXRhYmFzZQpvYmplY3QgYW5kIGluaXRpYWxp
emVzIHRoZSBBUEkgY2xpZW50IGZvciBXS0ljb25EYXRhYmFzZUNsaWVudC4KKGdldE9yQ3JlYXRl
UGVuZGluZ0ljb25SZXF1ZXN0cyk6IFJldHVybnMgKGlmIGF2YWlsYWJsZSkgb3IKY3JlYXRlcyBh
IG5ldyBpY29uIHJlcXVlc3QsIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBsaXN0IG9mIHJlcXVlc3Rz
CmZvciB0aGUgc2FtZSBwYWdlIFVSTC4KKGdldEljb25TdXJmYWNlQ2FuY2VsbGVkKTogSGFuZGxl
IHRoZSBjYXNlIG9mIGEgcmVxdWVzdCBiZWluZwpjYW5jZWxsZWQuIE11c3QgaGFwcGVuIG9uIHRo
ZSBtYWluIHRocmVhZC4KKGdldEljb25TdXJmYWNlQ2FuY2VsbGVkQ2FsbGJhY2spOiBDYWxsYmFj
ayB1c2VkIHdpdGgKZ19jYW5jZWxsYWJsZV9jb25uZWN0KCksIHdoaWNoIGVuc3VyZSBnZXRJY29u
U3VyZmFjZUNhbmNlbGxlZCgpIGlzCmNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKHNldEVy
cm9yRm9yQXN5bmNSZXN1bHQpOiBIZWxwZXIgdG8gc2V0IGVycm9ycyBpbiB0aGUgcmVzdWx0Lgoo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZXJyb3JfcXVhcmspOiBOZXcgZnVuY3Rpb24sIHByb3Zp
ZGludCB0aGUKbmV3IGVycm9yIGRvbWFpbiBmb3IgZXJyb3JzIG9mIHR5cGUgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlRXJyb3IuCih3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbik6IE5l
dyBBUEkgZnVuY3Rpb24sIHByb3ZpZGluZwphbiBhc3luY2hyb25vdXMgbWVjaGFuaXNtIHRvIHF1
ZXJ5IHRoZSBmYXZpY29uIGZvciBhIHBhZ2UgVVJMLgood2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X2Zhdmljb25fZmluaXNoKTogTmV3IEFQSSBmdW5jdGlvbiB0bwpmaW5pc2ggdGhlIGFzeW5j
cmhvbm91cyByZXF1ZXN0IHN0YXJ0ZWQgd2l0aCBnZXRfZmF2aWNvbigpLgood2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTogTmV3IEFQSSBmdW5jdGlvbgp0byBlYXNpbHkg
cmV0cmlldmUsIGlmIGF2YWlsYWJsZSwgdGhlIFVSSSBvZiBhIGZhdmljb24uCih3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9jbGVhcik6IE5ldyBBUEkgZnVuY3Rpb24gdG8gY2xlYXIgdGhlCnN0YXRl
IG9mIHRoZSBpbnRlcm5hbCBpY29uIGRhdGFiYXNlLgoqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZhdmljb25EYXRhYmFzZS5oOiBBZGRlZC4KKF9XZWJLaXRGYXZpY29uRGF0YWJhc2UpOgooX1dl
YktpdEZhdmljb25EYXRhYmFzZUNsYXNzKToKKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2VQcml2YXRlLmg6IEFkZGVkIHRvCmludGVybmFsbHkgZXhwb3NlIHdlYmtpdEZh
dmljb25EYXRhYmFzZUNyZWF0ZSgpIHRvIFdlYktpdFdlYkNvbnRleHQuCiogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpdmF0ZS5oOiBJbXBvcnQgV2ViS2l0Mi9XS0ljb25EYXRhYmFzZS5oLgoq
IEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlcy4KCkFkZCBhIG5ldyBnZXR0ZXIg
aW4gV2ViSWNvbkRhdGFiYXNlIGZvciBtX3VybEltcG9ydENvbXBsZXRlZC4KCiogVUlQcm9jZXNz
L1dlYkljb25EYXRhYmFzZS5jcHA6CihXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6aXNVcmxJbXBv
cnRDb21wbGV0ZWQpOiBBZGRlZCB0aGlzIHNpbXBsZQpnZXR0ZXIgdG8gYWxsb3cga25vd2luZyBm
cm9tIFdlYktpdEZhdmljb25EYXRhYmFzZSB3aGV0aGVyIHRoZQppbml0aWFsIGltcG9ydCBoYXMg
ZmluaXNoZWQsIG5lZWRlZCBmb3IgbWFraW5nIHNvbWUgZGVjaXNpb25zLgooV2ViS2l0KToKKiBV
SVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6CihXZWJJY29uRGF0YWJhc2UpOgoKTmV3IEFQSSBp
biBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IG9idGFpbmluZyBhIHZhbGlkIGluc3RhbmNlIG9m
CldlYktpdEZhdmljb25EYXRhYmFzZSBhbmQgdG8gc2V0L2dldCB0aGUgbG9jYWwgcGF0aCB0byBi
ZSB1c2VkLgoKKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKF9XZWJL
aXRXZWJDb250ZXh0UHJpdmF0ZSk6Cih3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0
YWJhc2VfcGF0aCk6IE5ldyBBUEkgdG8gYWxsb3cKc2V0dGluZyBhIHBhdGggZm9yIHRoZSBpY29u
IGRhdGFiYXNlLCBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IG9uZS4KKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9wYXRoKTogTmV3IEFQSSB0bwpyZXRyaWV2ZSB0aGUgcGF0
aCBmb3IgdGhlIGljb24gZGF0YWJhc2UgY3VycmVudGx5IGluIHVzZS4KKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSk6IE5ldyBBUEkgdG8gZ2V0IGEgdmFsaWQKYW5kIHBy
b3Blcmx5IGluaXRpYWxpemVkIGluc3RhbmNlIG9mIFdlYktpdEZhdmljb25EYXRhYmFzZS4KKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CgpNYWtlIHN1cmUgd2UgaGF2ZSBh
IGRlZmF1bHQgcGF0aCBzZXQgZm9yIHRoZSBpY29uIGRhdGFiYXNlLgoKKiBVSVByb2Nlc3MvZ3Rr
L1dlYkNvbnRleHRHdGsuY3BwOgooV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJ
Y29uRGF0YWJhc2VQYXRoKTogUmV0dXJuIHRoZQpkZWZhdWx0IHBhdGggdG8gYmUgdXNlZCBmb3Ig
dGhlIGljb24gZGF0YWJhc2UuCgpBZGQgdW5pdCB0ZXN0cyBmb3IgY2hlY2tpbmcgdGhpcyBuZXcg
QVBJLgoKKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
LmNwcDogQWRkZWQuCihzZXJ2ZXJDYWxsYmFjayk6IENhbGxiYWNrIGZvciB0aGUgdGVzdCBzZXJ2
ZXIuCih0ZXN0U2V0RGlyZWN0b3J5KTogTmV3IHVuaXQgdGVzdCwgY2hlY2tzIHRoZSBhYmlsaXR5
IHRvIHNldCBhbmQKZ2V0IGEgc3BlY2lmaWMgZGlyZWN0b3J5IHBhdGggZm9yIHRoZSBpY29uIGRh
dGFiYXNlLgoodGVzdENsZWFyRGF0YWJhc2UpOiBOZXcgdW5pdCB0ZXN0LCBjaGVja3MgdGhlIGFi
aWxpdHkgdG8gY2xlYXIKdGhlIGRhdGEgaW4gdGhlIGljb24gZGF0YWJhc2UuCih0ZXN0R2V0RmF2
aWNvbik6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byBnZXQgYQpmYXZpY29u
IGZyb20gdGhlIGljb24gZGF0YWJhc2UgaW4gZGlmZmVyZW50IHNpdHVhdGlvbnMuCih0ZXN0R2V0
RmF2aWNvblVSSSk6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byByZXRyaWV2
ZQp0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiwgaWYgYW55LCBhc3NvY2lhdGVkIHRvIGEgd2ViIHBh
Z2UuCihkZWxldGVEYXRhYmFzZUZpbGVzKTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSB0ZW1w
b3JhcnkgZmlsZXMuCihiZWZvcmVBbGwpOiBJbml0aWFsaXplIHRoZSB0ZXN0IHNlcnZlciBhbmQg
YWRkIHRoZSB1bml0IHRlc3RzLgooYWZ0ZXJBbGwpOiBEZWxldGUgdGhlIHRlc3Qgc2VydmVyIGFu
ZCBjbGVhbiB1cC4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDEwNCArKysrKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gICAgICAgICAgICAgICAgIHwgICA0ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwICAgIHwgNDA5ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oICAgICAgfCAgOTQgKysrKysK
IC4uLi9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCAgICAgICAgIHwgIDMw
ICsrCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggICB8
ICAgMSArCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cCB8ICA5NSArKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5oICAgfCAgMTAgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1k
b2NzLnNnbWwgICAgfCAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQgfCAgMjggKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtIHwgICA3ICsKIC4uLi9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwICAgIHwgMjM3ICsrKysrKysrKysrKwogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oICAgICAgICAgfCAgIDEgKwogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAgICAgICAgfCAgIDUgKwogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oICAgICAgICAgfCAgIDEgKwogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcCAgICAgfCAgIDQgKy0KIDE2
IGZpbGVzIGNoYW5nZWQsIDEwMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2
YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZWY1
YzY0Li41Mjg3MDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA3IEBACisyMDEyLTA5LTI3ICBN
YXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbV0sy
XVtHVEtdIEltcGxlbWVudCBuZXcgRmF2aWNvbnMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjQ3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBvYmplY3Qgd3JhcHBpbmcgdGhlIGludGVybmFs
IEljb25EYXRhYmFzZSBmcm9tIFdlYkNvcmUsCisgICAgICAgIHByb3ZpZGluZyBhIHNpbXBsZSBh
c3luY2hyb25vdXMgQVBJIHRvIHJldHJpZXZlIHRoZSBmYXZpY29uCisgICAgICAgIGFzc29jaWF0
ZWQgdG8gYSBwYWdlIFVSTCwgYW5kIHR3byBtb3JlIGZ1bmN0aW9ucyB0byBzaW1wbGUgcXVlcnkK
KyAgICAgICAgdGhlIGludGVybmFsIGRhdGFiYXNlIGZvciB0aGUgVVJJIG9mIHRoZSBpY29uIGFz
c29jaWF0ZWQgdG8gYQorICAgICAgICBwYWdlLCBpZiBhbnksIGFuZCB0byBjbGVhciB0aGUgc3Rh
dGUgb2YgdGhlIGludGVybmFsIGRhdGFiYXNlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmF2
aWNvbkRhdGFiYXNlUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9p
bml0KToKKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplKToKKyAgICAgICAg
KHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQpOgorICAgICAgICAoR2V0RmF2aWNv
blN1cmZhY2VBc3luY0RhdGEpOiBOZXcgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBkYXRhCisgICAg
ICAgIGFjcm9zcyB0aGUgYXN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIG9mIGdldF9mYXZpY29u
KCkuCisgICAgICAgIChHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YTo6fkdldEZhdmljb25TdXJm
YWNlQXN5bmNEYXRhKToKKyAgICAgICAgRGlzY29ubmVjdHMgdGhlIGNhbmNlbGxhYmxlIGlmIG5l
ZWRlZC4KKyAgICAgICAgKGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseSk6IFN5bmNocm9ub3Vz
bHkgcmV0dXJucyBhIHBvaW50ZXIgdG8KKyAgICAgICAgdGhlIGNhaXJvX3N1cmZhY2Ugd2l0aCB0
aGUgaWNvbidzIGRhdGEsIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKGRlbGV0ZVBlbmRpbmdJY29u
UmVxdWVzdHMpOiBSZW1vdmVzIHRoZSBmdWxsIGxpc3Qgb2YKKyAgICAgICAgaWNvbiByZXF1ZXN0
cyBmb3IgYSBwYWdlIFVSTC4KKyAgICAgICAgKHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBQ
cm9jZXNzIGFueSBpY29uIHJlcXVlc3QgdGhhdAorICAgICAgICBtaWdodCBiZSBzdGlsbCBwZW5k
aW5nLgorICAgICAgICAoaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjayk6IENhbGxlZCBm
cm9tIFdlYkljb25EYXRhYmFzZQorICAgICAgICB3aGVuIG5ldyBkYXRhIGlzIHJlYWR5IGZvciBh
IGZhdmljb24uCisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUpOiBDcmVhdGUg
dGhlIFdlYktpdEZhdmljb25EYXRhYmFzZQorICAgICAgICBvYmplY3QgYW5kIGluaXRpYWxpemVz
IHRoZSBBUEkgY2xpZW50IGZvciBXS0ljb25EYXRhYmFzZUNsaWVudC4KKyAgICAgICAgKGdldE9y
Q3JlYXRlUGVuZGluZ0ljb25SZXF1ZXN0cyk6IFJldHVybnMgKGlmIGF2YWlsYWJsZSkgb3IKKyAg
ICAgICAgY3JlYXRlcyBhIG5ldyBpY29uIHJlcXVlc3QsIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBs
aXN0IG9mIHJlcXVlc3RzCisgICAgICAgIGZvciB0aGUgc2FtZSBwYWdlIFVSTC4KKyAgICAgICAg
KGdldEljb25TdXJmYWNlQ2FuY2VsbGVkKTogSGFuZGxlIHRoZSBjYXNlIG9mIGEgcmVxdWVzdCBi
ZWluZworICAgICAgICBjYW5jZWxsZWQuIE11c3QgaGFwcGVuIG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgKGdldEljb25TdXJmYWNlQ2FuY2VsbGVkQ2FsbGJhY2spOiBDYWxsYmFjayB1c2Vk
IHdpdGgKKyAgICAgICAgZ19jYW5jZWxsYWJsZV9jb25uZWN0KCksIHdoaWNoIGVuc3VyZSBnZXRJ
Y29uU3VyZmFjZUNhbmNlbGxlZCgpIGlzCisgICAgICAgIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRo
cmVhZC4KKyAgICAgICAgKHNldEVycm9yRm9yQXN5bmNSZXN1bHQpOiBIZWxwZXIgdG8gc2V0IGVy
cm9ycyBpbiB0aGUgcmVzdWx0LgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZXJy
b3JfcXVhcmspOiBOZXcgZnVuY3Rpb24sIHByb3ZpZGludCB0aGUKKyAgICAgICAgbmV3IGVycm9y
IGRvbWFpbiBmb3IgZXJyb3JzIG9mIHR5cGUgV2ViS2l0RmF2aWNvbkRhdGFiYXNlRXJyb3IuCisg
ICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbik6IE5ldyBBUEkgZnVu
Y3Rpb24sIHByb3ZpZGluZworICAgICAgICBhbiBhc3luY2hyb25vdXMgbWVjaGFuaXNtIHRvIHF1
ZXJ5IHRoZSBmYXZpY29uIGZvciBhIHBhZ2UgVVJMLgorICAgICAgICAod2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKTogTmV3IEFQSSBmdW5jdGlvbiB0bworICAgICAg
ICBmaW5pc2ggdGhlIGFzeW5jcmhvbm91cyByZXF1ZXN0IHN0YXJ0ZWQgd2l0aCBnZXRfZmF2aWNv
bigpLgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTog
TmV3IEFQSSBmdW5jdGlvbgorICAgICAgICB0byBlYXNpbHkgcmV0cmlldmUsIGlmIGF2YWlsYWJs
ZSwgdGhlIFVSSSBvZiBhIGZhdmljb24uCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9jbGVhcik6IE5ldyBBUEkgZnVuY3Rpb24gdG8gY2xlYXIgdGhlCisgICAgICAgIHN0YXRlIG9m
IHRoZSBpbnRlcm5hbCBpY29uIGRhdGFiYXNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGYXZpY29u
RGF0YWJhc2UpOgorICAgICAgICAoX1dlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmg6IEFk
ZGVkIHRvCisgICAgICAgIGludGVybmFsbHkgZXhwb3NlIHdlYmtpdEZhdmljb25EYXRhYmFzZUNy
ZWF0ZSgpIHRvIFdlYktpdFdlYkNvbnRleHQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpdmF0ZS5oOiBJbXBvcnQgV2ViS2l0Mi9XS0ljb25EYXRhYmFzZS5oLgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlcy4KKworICAgICAgICBBZGQg
YSBuZXcgZ2V0dGVyIGluIFdlYkljb25EYXRhYmFzZSBmb3IgbV91cmxJbXBvcnRDb21wbGV0ZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViSWNvbkRhdGFiYXNlOjppc1VybEltcG9ydENvbXBsZXRlZCk6IEFkZGVkIHRoaXMg
c2ltcGxlCisgICAgICAgIGdldHRlciB0byBhbGxvdyBrbm93aW5nIGZyb20gV2ViS2l0RmF2aWNv
bkRhdGFiYXNlIHdoZXRoZXIgdGhlCisgICAgICAgIGluaXRpYWwgaW1wb3J0IGhhcyBmaW5pc2hl
ZCwgbmVlZGVkIGZvciBtYWtpbmcgc29tZSBkZWNpc2lvbnMuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkljb25E
YXRhYmFzZSk6CisKKyAgICAgICAgTmV3IEFQSSBpbiBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93
IG9idGFpbmluZyBhIHZhbGlkIGluc3RhbmNlIG9mCisgICAgICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSBhbmQgdG8gc2V0L2dldCB0aGUgbG9jYWwgcGF0aCB0byBiZSB1c2VkLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgIChfV2Vi
S2l0V2ViQ29udGV4dFByaXZhdGUpOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9m
YXZpY29uX2RhdGFiYXNlX3BhdGgpOiBOZXcgQVBJIHRvIGFsbG93CisgICAgICAgIHNldHRpbmcg
YSBwYXRoIGZvciB0aGUgaWNvbiBkYXRhYmFzZSwgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvbmUu
CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfcGF0aCk6
IE5ldyBBUEkgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIHBhdGggZm9yIHRoZSBpY29uIGRhdGFi
YXNlIGN1cnJlbnRseSBpbiB1c2UuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zh
dmljb25fZGF0YWJhc2UpOiBOZXcgQVBJIHRvIGdldCBhIHZhbGlkCisgICAgICAgIGFuZCBwcm9w
ZXJseSBpbml0aWFsaXplZCBpbnN0YW5jZSBvZiBXZWJLaXRGYXZpY29uRGF0YWJhc2UuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorCisgICAgICAgIE1h
a2Ugc3VyZSB3ZSBoYXZlIGEgZGVmYXVsdCBwYXRoIHNldCBmb3IgdGhlIGljb24gZGF0YWJhc2Uu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKTogUmV0
dXJuIHRoZQorICAgICAgICBkZWZhdWx0IHBhdGggdG8gYmUgdXNlZCBmb3IgdGhlIGljb24gZGF0
YWJhc2UuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIGNoZWNraW5nIHRoaXMgbmV3IEFQ
SS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29u
RGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKTogQ2FsbGJhY2sg
Zm9yIHRoZSB0ZXN0IHNlcnZlci4KKyAgICAgICAgKHRlc3RTZXREaXJlY3RvcnkpOiBOZXcgdW5p
dCB0ZXN0LCBjaGVja3MgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZAorICAgICAgICBnZXQgYSBzcGVj
aWZpYyBkaXJlY3RvcnkgcGF0aCBmb3IgdGhlIGljb24gZGF0YWJhc2UuCisgICAgICAgICh0ZXN0
Q2xlYXJEYXRhYmFzZSk6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byBjbGVh
cgorICAgICAgICB0aGUgZGF0YSBpbiB0aGUgaWNvbiBkYXRhYmFzZS4KKyAgICAgICAgKHRlc3RH
ZXRGYXZpY29uKTogTmV3IHVuaXQgdGVzdCwgY2hlY2tzIHRoZSBhYmlsaXR5IHRvIGdldCBhCisg
ICAgICAgIGZhdmljb24gZnJvbSB0aGUgaWNvbiBkYXRhYmFzZSBpbiBkaWZmZXJlbnQgc2l0dWF0
aW9ucy4KKyAgICAgICAgKHRlc3RHZXRGYXZpY29uVVJJKTogTmV3IHVuaXQgdGVzdCwgY2hlY2tz
IHRoZSBhYmlsaXR5IHRvIHJldHJpZXZlCisgICAgICAgIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29u
LCBpZiBhbnksIGFzc29jaWF0ZWQgdG8gYSB3ZWIgcGFnZS4KKyAgICAgICAgKGRlbGV0ZURhdGFi
YXNlRmlsZXMpOiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcy4KKyAg
ICAgICAgKGJlZm9yZUFsbCk6IEluaXRpYWxpemUgdGhlIHRlc3Qgc2VydmVyIGFuZCBhZGQgdGhl
IHVuaXQgdGVzdHMuCisgICAgICAgIChhZnRlckFsbCk6IERlbGV0ZSB0aGUgdGVzdCBzZXJ2ZXIg
YW5kIGNsZWFuIHVwLgorCiAyMDEyLTA5LTI3ICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0Bz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIEFkZCBjYWxsYmFjayBmdW5jdGlvbnMg
Zm9yIFdLUGFnZUZpbmRDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDUw
MTVmYjMuLmE4NDI4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTA0LDYg
KzEwNCw3IEBAIHdlYmtpdDJndGtfaF9hcGkgKz0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFcnJvci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmlj
b25EYXRhYmFzZS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rm9y
bVN1Ym1pc3Npb25SZXF1ZXN0LmggXApAQCAtNjQzLDYgKzY0NCw5IEBAIHdlYmtpdDJfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RWRpdGluZ0Nv
bW1hbmRzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcCBc
CisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNl
LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRh
YmFzZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNv
bkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI4ZDdi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdEZhdmljb25EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KKyNp
bmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK2VudW0geworICAgIElDT05fUkVBRFksCisKKyAgICBMQVNUX1NJR05BTAor
fTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCit0eXBl
ZGVmIFZlY3RvcjxHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gPiBQZW5kaW5nSWNvblJlcXVl
c3RWZWN0b3I7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0
b3IqPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CisKK3N0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFi
YXNlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkljb25EYXRhYmFzZT4gaWNvbkRhdGFiYXNlOwor
ICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBwZW5kaW5nSWNvblJlcXVlc3RzOworfTsKKworR19E
RUZJTkVfVFlQRShXZWJLaXRGYXZpY29uRGF0YWJhc2UsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZUlmTmVlZGVk
KFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlUHJpdmF0ZSogcHJpdiA9IGRhdGFiYXNlLT5wcml2OworICAgIGlmIChwcml2LT5pY29u
RGF0YWJhc2UtPmlzT3BlbigpKQorICAgICAgICBwcml2LT5pY29uRGF0YWJhc2UtPmNsb3NlKCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBtYW5hZ2VyKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZh
dGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUobWFuYWdlciwgV0VCS0lUX1RZ
UEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSk7CisgICAg
bWFuYWdlci0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRGYXZpY29uRGF0YWJh
c2VQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqZWN0KTsKKyAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJhc2UtPnByaXY7CisKKyAgICBjbG9zZUljb25E
YXRhYmFzZUlmTmVlZGVkKGRhdGFiYXNlKTsKKyAgICBwcml2LT5+V2ViS2l0RmF2aWNvbkRhdGFi
YXNlUHJpdmF0ZSgpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFz
cyogZmF2aWNvbkRhdGFiYXNlQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhmYXZpY29uRGF0YWJhc2VDbGFzcyk7CisgICAgZ09iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplOworCisgICAgLyoq
CisgICAgICogV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjpmYXZpY29uLXJlYWR5OgorICAgICAqIEBk
YXRhYmFzZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAg
KiBAcGFnZV91cmk6IHRoZSBVUkkgb2YgdGhlIFdlYiBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24u
CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgd2hlbiB0aGUgZmF2aWNv
biBvZiBAcGFnZV91cmkgaXMKKyAgICAgKiByZWFkeS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmYXZp
Y29uJ3MgZGF0YSBpcyByZWFkeSB0byBiZSB1c2VkCisgICAgICogYnkgdGhlIGFwcGxpY2F0aW9u
LCBlaXRoZXIgYmVjYXVzZSBpdCBoYXMgYmVlbiBsb2FkZWQgZnJvbSB0aGUKKyAgICAgKiBuZXR3
b3JrLCBpZiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGdldHMgcmV0cmlldmVkLCBvciBiZWNhdXNl
CisgICAgICogaXQgaGFzIGJlZW4gYWxyZWFkeSBpbXBvcnRlZCBmcm9tIHRoZSBpY29uIGRhdGFi
YXNlLgorICAgICAqLworICAgIHNpZ25hbHNbSUNPTl9SRUFEWV0gPQorICAgICAgICBnX3NpZ25h
bF9uZXcoImZhdmljb24tcmVhZHkiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1MoZmF2aWNvbkRhdGFiYXNlQ2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklO
Ryk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZmF2aWNvbkRhdGFiYXNlQ2xhc3Ms
IHNpemVvZihXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0cnVjdCBHZXRG
YXZpY29uU3VyZmFjZUFzeW5jRGF0YSB7CisgICAgR1JlZlB0cjxXZWJLaXRGYXZpY29uRGF0YWJh
c2U+IGZhdmljb25EYXRhYmFzZTsKKyAgICBTdHJpbmcgcGFnZVVSTDsKKyAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBpY29uOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJs
ZTsKKyAgICB1bnNpZ25lZCBsb25nIGNhbmNlbGxlZElkOworCisgICAgfkdldEZhdmljb25TdXJm
YWNlQXN5bmNEYXRhKCkKKyAgICB7CisgICAgICAgIGlmIChjYW5jZWxsZWRJZCkKKyAgICAgICAg
ICAgIGdfY2FuY2VsbGFibGVfZGlzY29ubmVjdChjYW5jZWxsYWJsZS5nZXQoKSwgY2FuY2VsbGVk
SWQpOworICAgIH0KK307CitXRUJLSVRfREVGSU5FX0FTWU5DX0RBVEFfU1RSVUNUKEdldEZhdmlj
b25TdXJmYWNlQXN5bmNEYXRhKQorCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBnZXRJY29uU3Vy
ZmFjZVN5bmNocm9ub3VzbHkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBwYWdlVVJMKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJhc2UtPnByaXY7CisKKyAg
ICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIGljb25EYXRh
YmFzZSBjb2RlLgorICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDB4
MCB0byBnZXQgYW4gaWNvbi4KKyAgICBXZWJDb3JlOjpOYXRpdmVJbWFnZVB0ciBpY29uID0gcHJp
di0+aWNvbkRhdGFiYXNlLT5uYXRpdmVJbWFnZUZvclBhZ2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6
SW50U2l6ZSgxLCAxKSk7CisgICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBpY29uID8gaWNvbi0+c3VyZmFjZSgpIDogMDsKK30KKworc3RhdGljIHZvaWQgZGVs
ZXRlUGVuZGluZ0ljb25SZXF1ZXN0cyhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBQ
ZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIHJlcXVlc3RzLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwp
Cit7CisgICAgZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMucmVtb3ZlKHBhZ2VV
UkwpOworICAgIGRlbGV0ZSByZXF1ZXN0czsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc1BlbmRp
bmdJY29uc0ZvclVSSShXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJp
bmcmIHBhZ2VVUkwpCit7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRh
dGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAo
IWljb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlj
b25zLT5zaXplKCk7ICsraSkgeworICAgICAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCA9
IGljb25zLT5hdChpKS5nZXQoKTsKKyAgICAgICAgR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEq
IGRhdGEgPSBzdGF0aWNfY2FzdDxHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSo+KGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHJlc3VsdCkpOworICAgICAgICBkYXRh
LT5pY29uID0gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBwYWdlVVJMKTsK
KworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVzdWx0KTsKKyAgICB9
CisgICAgZGVsZXRlUGVuZGluZ0ljb25SZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwp
OworfQorCitzdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKFdLSWNv
bkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFiYXNlLCBXS1VSTFJlZiB3a1BhZ2VVUkwsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFdl
YktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShj
bGllbnRJbmZvKTsKKyAgICBTdHJpbmcgcGFnZVVSTFN0cmluZyA9IHRvSW1wbCh3a1BhZ2VVUkwp
LT5zdHJpbmcoKTsKKworICAgIGRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2UtPnJldGFpbklj
b25Gb3JQYWdlVVJMKHBhZ2VVUkxTdHJpbmcpOworICAgIHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JV
UkkoZGF0YWJhc2UsIHBhZ2VVUkxTdHJpbmcpOworICAgIGdfc2lnbmFsX2VtaXQoZGF0YWJhc2Us
IHNpZ25hbHNbSUNPTl9SRUFEWV0sIDAsIHBhZ2VVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cit9
CisKK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKFdl
Ykljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZmF2aWNvbkRhdGFiYXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIE5VTEwpKTsKKyAgICBmYXZpY29uRGF0YWJh
c2UtPnByaXYtPmljb25EYXRhYmFzZSA9IGljb25EYXRhYmFzZTsKKworICAgIFdLSWNvbkRhdGFi
YXNlQ2xpZW50IHdrSWNvbkRhdGFiYXNlQ2xpZW50ID0geworICAgICAgICBrV0tJY29uRGF0YWJh
c2VDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgZmF2aWNvbkRhdGFiYXNlLCAvLyBjbGll
bnRJbmZvCisgICAgICAgIDAsIC8vIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2sKKyAg
ICAgICAgMCwgLy8gZGlkUmVtb3ZlQWxsSWNvbnNDYWxsYmFjaworICAgICAgICBpY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTENhbGxiYWNrLAorICAgIH07CisgICAgV0tJY29uRGF0YWJhc2VTZXRJY29u
RGF0YWJhc2VDbGllbnQodG9BUEkoaWNvbkRhdGFiYXNlKSwgJndrSWNvbkRhdGFiYXNlQ2xpZW50
KTsKKyAgICByZXR1cm4gZmF2aWNvbkRhdGFiYXNlOworfQorCitzdGF0aWMgUGVuZGluZ0ljb25S
ZXF1ZXN0VmVjdG9yKiBnZXRPckNyZWF0ZVBlbmRpbmdJY29uUmVxdWVzdHMoV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25S
ZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykgeworICAgICAgICBpY29ucyA9
IG5ldyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I7CisgICAgICAgIGRhdGFiYXNlLT5wcml2LT5w
ZW5kaW5nSWNvblJlcXVlc3RzLnNldChwYWdlVVJMLCBpY29ucyk7CisgICAgfQorCisgICAgcmV0
dXJuIGljb25zOworfQorCitzdGF0aWMgdm9pZCBnZXRJY29uU3VyZmFjZUNhbmNlbGxlZCh2b2lk
KiB1c2VyRGF0YSkKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCA9IHN0YXRpY19j
YXN0PEdTaW1wbGVBc3luY1Jlc3VsdCo+KHVzZXJEYXRhKTsKKworICAgIC8vIEdldCB0aGUgZGF0
YSB3ZSBtaWdodCBuZWVkIGFuZCBjb21wbGV0ZSB0aGUgcmVxdWVzdC4KKyAgICBHZXRGYXZpY29u
U3VyZmFjZUFzeW5jRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEdldEZhdmljb25TdXJmYWNlQXN5
bmNEYXRhKj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0
KSk7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IGRhdGEtPmZhdmljb25E
YXRhYmFzZS5nZXQoKTsKKyAgICBTdHJpbmcgcGFnZVVSTCA9IGRhdGEtPnBhZ2VVUkw7CisKKyAg
ICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVzdWx0KTsKKworICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1
ZXN0cy5nZXQocGFnZVVSTCk7CisgICAgaWYgKCFpY29ucykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc2l6ZV90IGl0ZW1JbmRleCA9IGljb25zLT5maW5kKHJlc3VsdCk7CisgICAgaWYgKGl0ZW1J
bmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgaWNvbnMtPnJlbW92ZShpdGVtSW5kZXgpOworICAg
IGlmIChpY29ucy0+aXNFbXB0eSgpKQorICAgICAgICBkZWxldGVQZW5kaW5nSWNvblJlcXVlc3Rz
KGRhdGFiYXNlLCBpY29ucywgcGFnZVVSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldEljb25TdXJm
YWNlQ2FuY2VsbGVkQ2FsbGJhY2soR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR1NpbXBsZUFz
eW5jUmVzdWx0KiByZXN1bHQpCit7CisgICAgLy8gSGFuZGxlIGNhbmNlbGxlZCBpbiBhIGluIGlk
bGUgc2luY2UgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KKyAgICBjYWxsT25N
YWluVGhyZWFkKGdldEljb25TdXJmYWNlQ2FuY2VsbGVkLCByZXN1bHQpOworfQorCitzdGF0aWMg
dm9pZCBzZXRFcnJvckZvckFzeW5jUmVzdWx0KEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0LCBX
ZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvciBlcnJvciwgY29uc3QgU3RyaW5nJiBwYWdlVVJMID0g
U3RyaW5nKCkpCit7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBzd2l0Y2ggKGVycm9yKSB7
CisgICAgY2FzZSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQ6
CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZXJyb3IocmVzdWx0LCBXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9FUlJPUiwgZXJyb3IsIF8oIkZhdmljb25zIGRhdGFiYXNlIG5vdCBp
bml0aWFsaXplZCB5ZXQiKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXRUJLSVRfRkFW
SUNPTl9EQVRBQkFTRV9FUlJPUl9GQVZJQ09OX05PVF9GT1VORDoKKyAgICAgICAgZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3NldF9lcnJvcihyZXN1bHQsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VS
Uk9SLCBlcnJvciwgXygiUGFnZSAlcyBkb2VzIG5vdCBoYXZlIGEgZmF2aWNvbiIpLCBwYWdlVVJM
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworR1F1YXJrIHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX2Vycm9yX3F1YXJrKHZvaWQpCit7CisgICAgcmV0dXJuIGdfcXVhcmtfZnJvbV9z
dGF0aWNfc3RyaW5nKCJXZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvciIpOworfQorCisvKioKKyAq
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uOgorICogQGRhdGFiYXNlOiBhICNX
ZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGZvciB3
aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSBmYXZpY29uCisgKiBAY2FuY2VsbGFibGU6IChh
bGxvdy1ub25lKTogQSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMLgorICogQGNhbGxiYWNrOiAoc2Nv
cGUgYXN5bmMpOiBBICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVz
dCBpcworICogICAgICAgICAgICBzYXRpc2ZpZWQgb3IgJU5VTEwgaWYgeW91IGRvbid0IGNhcmUg
YWJvdXQgdGhlIHJlc3VsdC4KKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogVGhlIGRhdGEgdG8g
cGFzcyB0byBAY2FsbGJhY2suCisgKgorICogQXN5bmNocm9ub3VzbHkgb2J0YWlucyBhICNjYWly
b19zdXJmYWNlX3Qgb2YgdGhlIGZhdmljb24gZm9yIHRoZQorICogZ2l2ZW4gcGFnZSBVUkkuIEl0
IHJldHVybnMgdGhlIGNhY2hlZCBpY29uIGlmIGl0J3MgaW4gdGhlIGRhdGFiYXNlCisgKiBhc3lu
Y2hyb25vdXNseSB3YWl0aW5nIGZvciB0aGUgaWNvbiB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFi
YXNlLgorICoKKyAqIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0aGUgb3Bl
cmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxsYmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZb3UgY2Fu
IHRoZW4gY2FsbCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goKQor
ICogdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlLCBjb25zdCBnY2hhciogcGFnZVVSSSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwocGFnZVVSSSk7CisKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jl
c3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpF
Q1QoZGF0YWJhc2UpLCBjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50
ZXI+KHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKSkpOworICAgIEdldEZhdmlj
b25TdXJmYWNlQXN5bmNEYXRhKiBkYXRhID0gY3JlYXRlR2V0RmF2aWNvblN1cmZhY2VBc3luY0Rh
dGEoKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1
bHQuZ2V0KCksIGRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lH
ZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSkpOworICAgIGRhdGEtPmZhdmljb25EYXRhYmFzZSA9
IGRhdGFiYXNlOworICAgIGRhdGEtPnBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkp
OworICAgIGRhdGEtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisgICAgaWYgKGNhbmNlbGxh
YmxlKSB7CisgICAgICAgIGRhdGEtPmNhbmNlbGxlZElkID0KKyAgICAgICAgICAgIGdfY2FuY2Vs
bGFibGVfY29ubmVjdChjYW5jZWxsYWJsZSwgR19DQUxMQkFDSyhnZXRJY29uU3VyZmFjZUNhbmNl
bGxlZENhbGxiYWNrKSwgcmVzdWx0LmdldCgpLCAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9jaGVja19jYW5jZWxsYWJsZShyZXN1bHQuZ2V0KCksIGNhbmNlbGxhYmxlKTsK
KyAgICB9CisKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJh
c2UtPnByaXY7CisgICAgV2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2VJbXBsID0gcHJpdi0+
aWNvbkRhdGFiYXNlLmdldCgpOworICAgIGlmICghaWNvbkRhdGFiYXNlSW1wbC0+aXNPcGVuKCkp
IHsKKyAgICAgICAgc2V0RXJyb3JGb3JBc3luY1Jlc3VsdChyZXN1bHQuZ2V0KCksIFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFX0VSUk9SX05PVF9JTklUSUFMSVpFRCk7CisgICAgICAgIGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZGF0YS0+cGFnZVVSTC5pc0VtcHR5KCkgfHwgZGF0YS0+
cGFnZVVSTC5zdGFydHNXaXRoKCJhYm91dDoiKSkgeworICAgICAgICBzZXRFcnJvckZvckFzeW5j
UmVzdWx0KHJlc3VsdC5nZXQoKSwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfRkFWSUNP
Tl9OT1RfRk9VTkQsIGRhdGEtPnBhZ2VVUkwpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1
bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gV2UgYXNrIGZvciB0aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9uJ3QgZ2V0
IHRoZSBpY29uIGRhdGEgbm93LAorICAgIC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVyIChldmVu
IGlmIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBpbXBvcnRpbmcgaWNvbnMpLgorICAgIGRhdGEtPmlj
b24gPSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIGRhdGEtPnBhZ2VVUkwp
OworCisgICAgLy8gSWYgdGhlcmUncyBub3QgYSB2YWxpZCBpY29uLCBidXQgdGhlcmUncyBhbiBp
Y29uVVJMIHJlZ2lzdGVyZWQsCisgICAgLy8gb3IgaXQncyBzdGlsbCBub3QgcmVnaXN0ZXJlZCBi
dXQgdGhlIGltcG9ydCBwcm9jZXNzIGhhc24ndAorICAgIC8vIGZpbmlzaGVkIHlldCwgd2UgbmVl
ZCB0byB3YWl0IGZvciBpY29uRGF0YVJlYWR5Rm9yUGFnZSB0byBiZQorICAgIC8vIGNhbGxlZCBi
ZWZvcmUgbWFraW5nIGFuZCBpbmZvcm1lZCBkZWNpc2lvbi4KKyAgICBTdHJpbmcgaWNvblVSTEZv
clBhZ2VVUkw7CisgICAgaWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFn
ZVVSTChkYXRhLT5wYWdlVVJMLCBpY29uVVJMRm9yUGFnZVVSTCk7CisgICAgaWYgKCFkYXRhLT5p
Y29uICYmICghaWNvblVSTEZvclBhZ2VVUkwuaXNFbXB0eSgpIHx8ICFpY29uRGF0YWJhc2VJbXBs
LT5pc1VybEltcG9ydENvbXBsZXRlZCgpKSkgeworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RW
ZWN0b3IqIGljb25zID0gZ2V0T3JDcmVhdGVQZW5kaW5nSWNvblJlcXVlc3RzKGRhdGFiYXNlLCBk
YXRhLT5wYWdlVVJMKTsKKyAgICAgICAgQVNTRVJUKGljb25zKTsKKyAgICAgICAgaWNvbnMtPmFw
cGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgcmVh
Y2hlZCB0aGlzIHBvaW50IHdpdGhvdXQgYSB2YWxpZCBpY29uLCB3aGljaCBtZWFucyB0aGF0Cisg
ICAgLy8gdGhlcmUncyBubyBpY29uVVJMIHJlZ2lzdGVyZWQgZm9yIHRoaXMgcGFnZVVSSSBhbmQg
dGhlCisgICAgLy8gdXJsSW1wb3J0IHByb2Nlc3MgaGFzIGFscmVhZHkgZmluaXNoZWQsIG9yIGRv
IGhhdmUgYSB2YWxpZCBpY29uCisgICAgLy8gYnV0IGl0J3MgYW4gZW1wdHkgaW1hZ2UsIHRoYXQg
bWVhbnMgdGhlcmUncyBubyBmYXZpY29uLgorICAgIGlmICghZGF0YS0+aWNvbiB8fCAhY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShkYXRhLT5pY29uLmdldCgpKSkKKyAgICAgICAgc2V0RXJy
b3JGb3JBc3luY1Jlc3VsdChyZXN1bHQuZ2V0KCksIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VS
Uk9SX0ZBVklDT05fTk9UX0ZPVU5ELCBkYXRhLT5wYWdlVVJMKTsKKworICAgIC8vIENvbXBsZXRl
IHRoZSBhc3luY2hyb25vdXMgcHJvY2VzczsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0RmF2
aWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0OiBBICNHQXN5bmNSZXN1bHQgb2J0YWluZWQgZnJvbSB0
aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgcGFzc2VkIHRvIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9mYXZpY29uKCkKKyAqIEBlcnJvcjogKGFsbG93LW5vbmUpOiBSZXR1cm4gbG9jYXRpb24g
Zm9yIGVycm9yIG9yICVOVUxMLgorICoKKyAqIEZpbmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFydGVk
IHdpdGggd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oKS4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNjYWlyb19zdXJmYWNl
X3QsIG9yCisgKiAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitjYWlyb19zdXJmYWNlX3Qq
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGVSZXN1bHQgPSBHX1NJTVBMRV9BU1lO
Q19SRVNVTFQocmVzdWx0KTsKKyAgICBnX3dhcm5faWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1
bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxlUmVzdWx0KSA9PSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXRfZmF2aWNvbik7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0
ZV9lcnJvcihzaW1wbGVSZXN1bHQsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBH
ZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEdldEZhdmljb25T
dXJmYWNlQXN5bmNEYXRhKj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50
ZXIoc2ltcGxlUmVzdWx0KSk7CisgICAgQVNTRVJUKGRhdGEpOworCisgICAgLy8gUmV0dXJuIHRo
ZSBpY29uIGlzIHdlIGNhbiBnZXQgaXQgYWxyZWFkeS4KKyAgICBpZiAoZGF0YS0+aWNvbikKKyAg
ICAgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKGRhdGEtPmljb24uZ2V0KCkpOwor
CisgICAgLy8gSWYgdGhlIGljb24gaXMgbm90IGF2YWlsYWJsZSBhdCB0aGlzIHN0YWdlLCBpbnZl
c3RpZ2F0ZSB3aHkKKyAgICAvLyBhbmQgY29tZSB1cCB3aXRoIGEgZGVzY3JpcHRpdmUsIGFuZCBo
b3BlZnVsbHkgaGVscGZ1bCwgZXJyb3IuCisgICAgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMOwor
ICAgIGRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2UtPnN5bmNocm9ub3VzSWNvblVSTEZvclBh
Z2VVUkwoZGF0YS0+cGFnZVVSTCwgaWNvblVSTEZvclBhZ2VVUkwpOworCisgICAgaWYgKGljb25V
UkxGb3JQYWdlVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGljb24g
VVJMIGluIHRoZSBkYXRhYmFzZSBhdCB0aGlzIHBvaW50LCB3ZSBjYW4KKyAgICAgICAgLy8gY29u
Y2x1ZGUgdGhlcmUncyBubyBmYXZpY29uIGF0IGFsbCBmb3IgdGhlIHJlcXVlc3RlZCBwYWdlIFVS
TC4KKyAgICAgICAgZ19zZXRfZXJyb3IoZXJyb3IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VS
Uk9SLCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9GQVZJQ09OX05PVF9GT1VORCwKKyAg
ICAgICAgICAgICAgICAgICAgXygiUGFnZSAlcyBkb2VzIG5vdCBoYXZlIGEgZmF2aWNvbiIpLCBk
YXRhLT5wYWdlVVJMLnV0ZjgoKS5kYXRhKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElm
IHRoZSBpY29uIFVSTCBpcyBrbm93biBpdCBvYnZpb3VzbHkgbWVhbnMgdGhhdCB0aGUgaWNvbiBk
YXRhCisgICAgICAgIC8vIGhhc24ndCBiZWVuIHJldHJpZXZlZCB5ZXQsIHNvIHJlcG9ydCB0aGF0
IGl0J3MgJ3Vua25vd24nLgorICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgV0VCS0lUX0ZBVklD
T05fREFUQUJBU0VfRVJST1IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05f
VU5LTk9XTiwKKyAgICAgICAgICAgICAgICAgICAgXygiVW5rbm93biBmYXZpY29uIGZvciBwYWdl
ICVzIiksIGRhdGEtPnBhZ2VVUkwudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKKy8qKgorICogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJp
OgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTog
VVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIHRoZSBV
Ukkgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBAcGFnZV91cmkuCisgKgorICogUmV0dXJu
czogYSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwgaWYgdGhl
CisgKiBkYXRhYmFzZSBkb2Vzbid0IGhhdmUgYSBmYXZpY29uIGZvciBAcGFnZV91cmkuCisgKi8K
K2djaGFyKiB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkwpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJMLCAwKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMOworICAgIGRhdGFi
YXNlLT5wcml2LT5pY29uRGF0YWJhc2UtPnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3Ry
aW5nOjpmcm9tVVRGOChwYWdlVVJMKSwgaWNvblVSTEZvclBhZ2VVUkwpOworICAgIGlmIChpY29u
VVJMRm9yUGFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGdfc3RyZHVwKGljb25VUkxGb3JQYWdlVVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCisvKioKKyAq
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRG
YXZpY29uRGF0YWJhc2UKKyAqCisgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNl
LgorICovCit2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFW
SUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgZGF0YWJhc2UtPnByaXYtPmljb25EYXRh
YmFzZS0+cmVtb3ZlQWxsSWNvbnMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3NGU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oCkBAIC0wLDAg
KzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElP
TikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRGYXZpY29uRGF0YWJhc2VfaAorI2RlZmlu
ZSBXZWJLaXRGYXZpY29uRGF0YWJhc2VfaAorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRl
IDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X0ZBVklDT05fREFUQUJBU0UgICAgICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9E
QVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZBVklD
T05fREFUQUJBU0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9GQVZJQ09O
X0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZUNs
YXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRB
QkFTRSkpCisjZGVmaW5lIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0ZBVklDT05fREFU
QUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklD
T05fREFUQUJBU0VfRVJST1IgICAgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJv
cl9xdWFyaygpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlICAgICAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRh
dGFiYXNlQ2xhc3MgICBXZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZh
dGU7CisKK3N0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworLyoqCisgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvcjoKKyAqIEBX
RUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQ6IFRoZSAjV2ViS2l0
RmF2aWNvbkRhdGFiYXNlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQKKyAqIEBXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9GQVZJQ09OX05PVF9GT1VORDogVGhlcmUgaXMgbm90IGFu
IGljb24gYXZhaWxhYmxlIGZvciB0aGUgcmVxdWVzdGVkIFVSTAorICogQFdFQktJVF9GQVZJQ09O
X0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fVU5LTk9XTjogVGhlcmUgbWlnaHQgYmUgYW4gaWNvbiBm
b3IgdGhlIHJlcXVlc3RlZCBVUkwsIGJ1dCBpdHMgZGF0YSBpcyB1bmtub3duIGF0IHRoZSBtb21l
bnQKKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBlcnJvcnMg
cmVsYXRlZCB0byB0aGUgI1dlYktpdEZhdmljb25EYXRhYmFzZS4KKyAqKi8KK3R5cGVkZWYgZW51
bSB7CisgICAgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVELAor
ICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fTk9UX0ZPVU5ELAorICAg
IFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fVU5LTk9XTgorfSBXZWJLaXRG
YXZpY29uRGF0YWJhc2VFcnJvcjsKKworV0VCS0lUX0FQSSBHUXVhcmsKK3dlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX2Vycm9yX3F1YXJrICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICAgICAg
ICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
ZmF2aWNvbiAgICAgICAgICAgICAgIChXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgICAgICAgICAgICpwYWdlX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAqY2FuY2VsbGFibGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5
bmNSZWFkeUNhbGxiYWNrICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICB1c2VyX2RhdGEp
OworV0VCS0lUX0FQSSBjYWlyb19zdXJmYWNlX3QgKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X2Zhdmljb25fZmluaXNoICAgICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdB
c3luY1Jlc3VsdCAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgKiplcnJvcik7CitX
RUJLSVRfQVBJIGdjaGFyICoKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3Vy
aSAgICAgICAgICAgKFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAg
ICAgICAgKnBhZ2VfdXJpKTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfY2xlYXIgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRh
YmFzZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmRkNjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29u
RGF0YWJhc2VQcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYklj
b25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldlYktpdEZhdmljb25EYXRhYmFzZS5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCitXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtpdEZhdmlj
b25EYXRhYmFzZUNyZWF0ZShXZWJJY29uRGF0YWJhc2UqKTsKKworI2VuZGlmIC8vIFdlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpdmF0ZS5oCmluZGV4IDhmZWRlODIuLjljZWFmZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLR2VvbG9jYXRpb25NYW5hZ2VyLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLR2VvbG9jYXRpb25Qb3NpdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tJ
Y29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLSW5zcGVjdG9yLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0luc3BlY3RvckNsaWVudEd0ay5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tS
ZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggNWIyYzI2Ni4uZTdlMjM0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93
bmxvYWRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdEdlb2xvY2F0aW9uUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJL
aXRQbHVnaW5Qcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgpAQCAtMzMsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTGFuZ3VhZ2UuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KQEAgLTk2LDYgKzk4LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZSB7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0OwogCiAgICAgR1Jl
ZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOworICAgIEdSZWZQdHI8V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlPiBmYXZpY29uRGF0YWJhc2U7CiAgICAgR1JlZlB0cjxXZWJLaXRT
ZWN1cml0eU1hbmFnZXI+IHNlY3VyaXR5TWFuYWdlcjsKICAgICBXS1JldGFpblB0cjxXS1NvdXBS
ZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CiAgICAgVVJJU2NoZW1lSGFuZGxlck1h
cCB1cmlTY2hlbWVIYW5kbGVyczsKQEAgLTEwNiw2ICsxMDksNyBAQCBzdHJ1Y3QgX1dlYktpdFdl
YkNvbnRleHRQcml2YXRlIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKICAgICBPd25QdHI8V2Vi
S2l0VGV4dENoZWNrZXI+IHRleHRDaGVja2VyOwogI2VuZGlmCisgICAgQ1N0cmluZyBmYXZpY29u
RGF0YWJhc2VQYXRoOwogfTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0g
eyAwLCB9OwpAQCAtMzI0LDYgKzMyOCw5NyBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbgogfQog
CiAvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rv
cnk6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQHBhdGg6IChhbGxvdy1u
b25lKTogYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgaWNvbiBkYXRhYmFzZQorICogZGlyZWN0b3J5
IG9yICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdHMKKyAqCisgKiBTZXQgdGhlIGRpcmVjdG9yeSBw
YXRoIHRvIGJlIHVzZWQgdG8gc3RvcmUgdGhlIGZhdmljb25zIGRhdGFiYXNlCisgKiBmb3IgQGNv
bnRleHQgb24gZGlzay4gUGFzc2luZyAlTlVMTCBhcyBAcGF0aCBtZWFucyB1c2luZyB0aGUKKyAq
IGRlZmF1bHQgZGlyZWN0b3J5IGZvciB0aGUgcGxhdGZvcm0gKHNlZSBnX2dldF91c2VyX2RhdGFf
ZGlyKCkpLgorICoKKyAqIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBwYXRoIGZvciB0
aGUgZmF2aWNvbiBkYXRhYmFzZSwgdGhpcworICogbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9y
ZSB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBieQorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKCkuIE5vdGUgdGhhdCBhCisgKiAjV2ViS2l0V2ViVmlldyBjb3VsZCB1
c2UgdGhlIGZhdmljb24gZGF0YWJhc2UsIHNvIHRoaXMgc2hvdWxkIGFsc28KKyAqIGJlIGNhbGxl
ZCBiZWZvcmUgbG9hZGluZyBhbnkgd2ViIHBhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBl
eHBlY3RlZCB0byBiZSBjYWxsZWQgb25seSBvbmNlLCBmdXJ0aGVyIGNhbGxzIGZvcgorICogdGhl
IHNhbWUgaW5zdGFuY2Ugb2YgI1dlYktpdFdlYkNvbnRleHQgYWZ0ZXIgY2FsbGluZworICogd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKCkgd29uJ3QgY2F1c2UgYW55IGVm
ZmVjdC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2Vf
ZGlyZWN0b3J5KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBwYXRoKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsK
KworICAgIC8vIENhbGxpbmcgdGhpcyBtZXRob2QgdHdpY2UgaXMgYSBwcm9ncmFtbWluZyBlcnJv
ci4KKyAgICBnX3JldHVybl9pZl9mYWlsKCFjb250ZXh0LT5wcml2LT5mYXZpY29uRGF0YWJhc2Up
OworCisgICAgaWYgKHBhdGgpCisgICAgICAgIGNvbnRleHQtPnByaXYtPmZhdmljb25EYXRhYmFz
ZVBhdGggPSBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHBhdGgpLnV0ZjgoKTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfcGF0aDoKKyAqIEBj
b250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKgorICogR2V0IHRoZSBkaXJlY3RvcnkgcGF0
aCBiZWluZyB1c2VkIHRvIHN0b3JlIHRoZSBmYXZpY29ucyBkYXRhYmFzZQorICogZm9yIEBjb250
ZXh0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBwYXRoIGFmdGVy
CisgKiBoYXZpbmcgY2FsbGVkIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpIGZvciB0aGUKKyAqIGZpcnN0IHRpbWUuIFNlZSB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zh
dmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KCkKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9mIHRo
ZSBmYXZpY29ucworICogZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoIEBjb250ZXh0LgorICovCitj
b25zdCBnY2hhciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVj
dG9yeShXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7CisKKyAgICBXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisKKyAgICAvLyBVc2UgZGVmYXVs
dCBpZiBhIGRpZmZlcmVudCBwYXRoIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IHNldC4KKyAgICBp
ZiAocHJpdi0+ZmF2aWNvbkRhdGFiYXNlUGF0aC5pc051bGwoKSkKKyAgICAgICAgcHJpdi0+ZmF2
aWNvbkRhdGFiYXNlUGF0aCA9IHRvSW1wbChwcml2LT5jb250ZXh0LmdldCgpKS0+aWNvbkRhdGFi
YXNlUGF0aCgpLnV0ZjgoKTsKKworICAgIHJldHVybiBwcml2LT5mYXZpY29uRGF0YWJhc2VQYXRo
LmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0
YWJhc2U6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUg
I1dlYktpdEZhdmljb25EYXRhYmFzZSBhc3NvY2lhdGVkIHdpdGggQGNvbnRleHQuIElmIHlvdQor
ICogd2FudCB0aGUgZGF0YWJhc2UgdG8gYmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRo
YW4gdGhlIGRlZmF1bHQKKyAqIG9uZSwgeW91IG5lZWQgdG8gY2FsbAorICogd2Via2l0X3dlYl9j
b250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSgpIGJlZm9yZSB0aGUgZmlyc3QK
KyAqIHRpbWUgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogdGhlICNXZWJLaXRGYXZpY29uRGF0YWJhc2Ugb2YgQGNvbnRleHQuCisgKi8KK1dl
YktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFi
YXNlKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpLCAwKTsKKworICAgIFdlYktpdFdlYkNv
bnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKworICAgIGlmIChwcml2LT5mYXZp
Y29uRGF0YWJhc2UpCisgICAgICAgIHJldHVybiBwcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCk7
CisKKyAgICAvLyBCdWlsZCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpY29uIGRhdGFiYXNlIGZpbGUg
b24gZGlzay4KKyAgICBHT3duUHRyPGdjaGFyPiBmYXZpY29uRGF0YWJhc2VQYXRoKGdfYnVpbGRf
ZmlsZW5hbWUod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9y
eShjb250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFt
ZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpKTsKKworICAgIC8vIENhbGxpbmcgdGhlIHNldHRlciBp
biBXZWJDb250ZXh0IHdpbGwgY2F1c2UgdGhlIGljb24gZGF0YWJhc2UgdG8gYmUgb3BlbmVkLgor
ICAgIFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB0b0ltcGwocHJpdi0+Y29udGV4dC5nZXQoKSk7
CisgICAgd2ViQ29udGV4dC0+c2V0SWNvbkRhdGFiYXNlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRv
U3RyaW5nKGZhdmljb25EYXRhYmFzZVBhdGguZ2V0KCkpKTsKKyAgICBwcml2LT5mYXZpY29uRGF0
YWJhc2UgPSBhZG9wdEdSZWYod2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKHdlYkNvbnRleHQt
Pmljb25EYXRhYmFzZSgpKSk7CisKKyAgICByZXR1cm4gcHJpdi0+ZmF2aWNvbkRhdGFiYXNlLmdl
dCgpOworfQorCisvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFuYWdl
cjoKICAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CiAgKgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IGY3NzA4
NmYuLmFlNzliZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdENvb2tpZU1hbmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRGYXZpY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNlY3Vy
aXR5TWFuYWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5o
PgogCkBAIC0xMTQsNiArMTE1LDE1IEBAIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkg
ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dAogV0VCS0lUX0FQSSBXZWJLaXRD
b29raWVNYW5hZ2VyICoKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwogCitX
RUJLSVRfQVBJIFdlYktpdEZhdmljb25EYXRhYmFzZSAqCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2Zhdmljb25fZGF0YWJhc2UgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAg
ICAgICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5ICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAg
ICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICAqcGF0aCk7CitXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZV9kaXJlY3RvcnkgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwor
CiBXRUJLSVRfQVBJIFdlYktpdFNlY3VyaXR5TWFuYWdlciAqCiB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X3NlY3VyaXR5X21hbmFnZXIgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAg
ICAgICAgICpjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggYTdmMzRlNi4uODYy
M2FmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0zMCw2ICszMCw3IEBACiAgICAgPHhpOmlu
Y2x1ZGUgaHJlZj0ieG1sL1dlYktpdFByaW50T3BlcmF0aW9uLnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRXZWJSZXNvdXJjZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdEZhdmljb25EYXRhYmFzZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRGaW5kQ29udHJvbGxlci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0Q29va2llTWFuYWdlci54bWwiLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDE4
MjdiNmIuLjljZWQwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMzAsNiArMzAs
OSBAQCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRl
eHRfY2xlYXJfY2FjaGUKIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkKIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2
aWNvbl9kYXRhYmFzZQord2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2Rp
cmVjdG9yeQord2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9y
eQogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2VyCiB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3RvcnkKIHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfcGx1Z2lucwpAQCAtNjAyLDYgKzYwNSwzMSBAQCB3ZWJraXRfamF2YXNjcmlwdF9lcnJv
cl9xdWFyawogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEZhdmljb25EYXRh
YmFzZTwvRklMRT4KK1dlYktpdEZhdmljb25EYXRhYmFzZQorV0VCS0lUX0ZBVklDT05fREFUQUJB
U0VfRVJST1IKK1dlYktpdEZhdmljb25EYXRhYmFzZUVycm9yCit3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmlu
aXNoCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkKK3dlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2NsZWFyCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RmF2aWNv
bkRhdGFiYXNlQ2xhc3MKK1dFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UKK1dFQktJVF9GQVZJ
Q09OX0RBVEFCQVNFCitXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRQorV0VCS0lUX0ZBVklDT05f
REFUQUJBU0VfQ0xBU1MKK1dFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFX0NMQVNTCitXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktp
dEZhdmljb25EYXRhYmFzZVByaXZhdGUKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF90eXBl
Cit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJvcl9xdWFyaworPC9TRUNUSU9OPgorCis8U0VD
VElPTj4KIDxGSUxFPldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDwvRklMRT4KIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdAogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDNmYWRmNDAuLjg1NTVhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0xMSw2ICsx
MSw3IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0UmVz
b3VyY2VzIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFNTTCBcCiAJUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlciBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3Rz
L1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
V2ViS2l0U2V0dGluZ3MgXApAQCAtMTQxLDYgKzE0MiwxMiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdFByaW50aW5nX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKSAk
KEdUSwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREFERCA9ICQod2Vi
a2l0Ml90ZXN0c19sZGFkZCkgJChHVEtfVU5JWF9QUklOVElOR19MSUJTKQogUHJvZ3JhbXNfV2Vi
S2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
X1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdz
KQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERB
REQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdEZhdmljb25EYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3Mp
CisKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfU09V
UkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0RmluZENvbnRyb2xsZXIuY3BwCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40ZTRlZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAg
LTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitzdGF0
aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9y
eTsKKworY2xhc3MgRmF2aWNvbkRhdGFiYXNlVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1
YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZhdmljb25EYXRhYmFzZVRlc3QpOwor
CisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdCgpCisgICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAgICAgICAsIG1faWNvblJlYWR5U2lnbmFs
UmVjZWl2ZWQoZmFsc2UpCisgICAgICAgICwgbV9pY29uSXNWYWxpZChmYWxzZSkKKyAgICB7Cisg
ICAgfQorCisgICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQorICAgIHsKKyAgICAgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNv
bl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQoZGF0YWJhc2UsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGljb25SZWFkeUNhbGxiYWNrKFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHBhZ2VVUkkpOworICAgICAg
ICB0ZXN0LT5tX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBnZXRGYXZpY29uQ2FsbGJhY2soR09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIEZhdmljb25EYXRh
YmFzZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VUZXN0Kj4oZGF0YSk7
CisgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmpl
Y3QpLCByZXN1bHQsIDApOworICAgICAgICBpZiAoZmF2aWNvbikKKyAgICAgICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShmYXZpY29uKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhc2tGb3JJY29uQWZ0ZXJM
b2FkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7CisgICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1yZWFkeSIsIEdfQ0FMTEJBQ0soaWNvblJlYWR5Q2FsbGJh
Y2spLCB0ZXN0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNr
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBGYXZpY29uRGF0YWJh
c2VUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9B
RF9GSU5JU0hFRCkKKyAgICAgICAgICAgIGFza0Zvckljb25BZnRlckxvYWQodGVzdCk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXRMb2FkRXZlbnQsIGNvbnN0IGNoYXIqLCBHRXJyb3IqLCBGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgYXNrRm9ySWNvbkFmdGVyTG9hZCh0ZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIGFza0Zvckljb25BbmRXYWl0Rm9ySWNvblJlYWR5U2lnbmFsKCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19D
QUxMQkFDSyhsb2FkQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRGYWlsZWRDYWxs
YmFjayksIHRoaXMpOworCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZp
ZXcsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwg
dGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0VmFsaWRGYXZpY29uQ2FsbGJhY2so
R09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogZGF0YSkK
KyAgICB7CisgICAgICAgIEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxG
YXZpY29uRGF0YWJhc2VUZXN0Kj4oZGF0YSk7CisKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IDA7
CisgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmpl
Y3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KGZhdmljb24pOworICAgICAg
ICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHRlc3QtPm1faWNvbklzVmFsaWQgPSB0cnVl
OworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZmF2aWNvbik7CisKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBnZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIHZvaWQqIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJh
c2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwor
CisgICAgICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgICAgICBjYWlyb19zdXJmYWNlX3QqIGZh
dmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goV0VCS0lU
X0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgICAg
ICBnX2Fzc2VydCghZmF2aWNvbik7CisgICAgICAgIGdfYXNzZXJ0KGVycm9yICYmIFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fTk9UX0ZPVU5EKTsKKworICAgICAgICB0ZXN0
LT5tX2ljb25Jc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+
bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBhc2tBbmRXYWl0Rm9yVmFsaWRGYXZpY29u
KCkKKyAgICB7CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAg
ICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oZGF0YWJhc2UsIGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCksIDAsIGdldFZhbGlkRmF2aWNvbkNhbGxiYWNrLCB0
aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IHZvaWQgYXNrQW5kV2FpdEZvckludmFsaWRGYXZpY29uKCkKKyAgICB7CisgICAgICAgIFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmlj
b25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfZ2V0X2Zhdmljb24oZGF0YWJhc2UsICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwgMCwg
Z2V0SW52YWxpZEZhdmljb25DYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRl
eHQ7CisgICAgYm9vbCBtX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkOworICAgIGJvb2wgbV9pY29u
SXNWYWxpZDsKK307CisKK3N0YXRpYyB2b2lkCitzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxl
KiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIHZvaWQqIGRhdGEpCit7CisgICAg
aWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXpl
IGxlbmd0aDsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Cisg
ICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmF2aWNvbihnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJibGFuay5pY28iLCBOVUxMKSk7
CisKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9G
YXZpY29uLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOworICAgICAgICBnX2Fzc2VydChy
ZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1s
Pjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29u
dGVudHMpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFNldERpcmVjdG9yeShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRh
YmFzZV9kaXJlY3RvcnkodGVzdC0+bV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9yeSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKGtUZW1wRGlyZWN0b3J5LCA9PSwgd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQpKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdENsZWFyRGF0YWJhc2UoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4
dCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2UpOworCisgICAg
R093blB0cjxjaGFyPiBpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3VyaShkYXRhYmFzZSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSkpOworICAg
IGdfYXNzZXJ0KCFpY29uVVJJKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb24oRmF2
aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5tX2lj
b25SZWFkeVNpZ25hbFJlY2VpdmVkID0gZmFsc2U7CisgICAgdGVzdC0+YXNrRm9ySWNvbkFuZFdh
aXRGb3JJY29uUmVhZHlTaWduYWwoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2ljb25SZWFkeVNp
Z25hbFJlY2VpdmVkKTsKKworICAgIHRlc3QtPm1faWNvbklzVmFsaWQgPSBmYWxzZTsKKyAgICB0
ZXN0LT5hc2tBbmRXYWl0Rm9yVmFsaWRGYXZpY29uKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9p
Y29uSXNWYWxpZCk7CisKKyAgICB0ZXN0LT5hc2tBbmRXYWl0Rm9ySW52YWxpZEZhdmljb24oKTsK
KyAgICBnX2Fzc2VydCghdGVzdC0+bV9pY29uSXNWYWxpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RHZXRGYXZpY29uVVJJKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSh0ZXN0LT5tX3dlYkNvbnRleHQpOworCisgICAgY29u
c3QgY2hhciogYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCk7Cisg
ICAgR093blB0cjxjaGFyPiBpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZp
Y29uX3VyaShkYXRhYmFzZSwgYmFzZVVSSSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJ
LmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Zhdmljb24uaWNvIikuZGF0YSgp
KTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlcygpCit7CisgICAgaWYgKCFn
X2ZpbGVfdGVzdChrVGVtcERpcmVjdG9yeSwgR19GSUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR093blB0cjxjaGFyPiBmaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKGtU
ZW1wRGlyZWN0b3J5LCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCkpOworICAgIGdfdW5saW5rKGZp
bGVuYW1lLmdldCgpKTsKKworICAgIGZpbGVuYW1lLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtUZW1w
RGlyZWN0b3J5LCAiV2VicGFnZUljb25zLmRiLWpvdXJuYWwiLCBOVUxMKSk7CisgICAgZ191bmxp
bmsoZmlsZW5hbWUuZ2V0KCkpOworCisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICAvLyBTdGFydCBhIHNvdXAgc2VydmVyIGZvciB0ZXN0
aW5nLgorICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXIt
PnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2Vf
dG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3Rv
cnkpOworCisgICAgLy8gQWRkIHRlc3RzIHRvIHRoZSBzdWl0ZS4KKyAgICBGYXZpY29uRGF0YWJh
c2VUZXN0OjphZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJzZXQtZGlyZWN0b3J5IiwgdGVz
dFNldERpcmVjdG9yeSk7CisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZp
Y29uRGF0YWJhc2UiLCAiZ2V0LWZhdmljb24iLCB0ZXN0R2V0RmF2aWNvbik7CisgICAgRmF2aWNv
bkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZ2V0LWZhdmljb24t
dXJpIiwgdGVzdEdldEZhdmljb25VUkkpOworICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgi
V2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImNsZWFyLWRhdGFiYXNlIiwgdGVzdENsZWFyRGF0YWJh
c2UpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKKyAgICBk
ZWxldGVEYXRhYmFzZUZpbGVzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKaW5kZXggZTFmM2JhMC4uMWI0ZmE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRF
bnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRGYXZpY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRy
b2xsZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdC5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAppbmRleCAx
NGFmZGFkLi4wZmU2MzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
SWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRh
dGFiYXNlLmNwcApAQCAtMjA4LDYgKzIwOCwxMSBAQCBib29sIFdlYkljb25EYXRhYmFzZTo6aXNP
cGVuKCkKICAgICByZXR1cm4gbV9pY29uRGF0YWJhc2VJbXBsICYmIG1faWNvbkRhdGFiYXNlSW1w
bC0+aXNPcGVuKCk7CiB9CiAKK2Jvb2wgV2ViSWNvbkRhdGFiYXNlOjppc1VybEltcG9ydENvbXBs
ZXRlZCgpCit7CisgICAgcmV0dXJuIG1fdXJsSW1wb3J0Q29tcGxldGVkOworfQorCiB2b2lkIFdl
Ykljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQogewogICAgIG1faWNvbkRhdGFiYXNlSW1w
bC0+cmVtb3ZlQWxsSWNvbnMoKTsgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJJY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29u
RGF0YWJhc2UuaAppbmRleCBkZGViMzA5Li5iNzI1NDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCkBAIC04Miw2ICs4Miw3IEBAIHB1YmxpYzoKICAgICBX
ZWJDb3JlOjpJbWFnZSogaW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGljb25TaXplID0gV2ViQ29yZTo6SW50U2l6ZSgzMiwgMzIpKTsKICAgICBX
ZWJDb3JlOjpOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvclBhZ2VVUkwoY29uc3QgU3RyaW5n
JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaWNvblNpemUgPSBXZWJDb3JlOjpJbnRTaXplKDMy
LCAzMikpOwogICAgIGJvb2wgaXNPcGVuKCk7CisgICAgYm9vbCBpc1VybEltcG9ydENvbXBsZXRl
ZCgpOwogCiAgICAgdm9pZCByZW1vdmVBbGxJY29ucygpOwogICAgIHZvaWQgY2hlY2tJbnRlZ3Jp
dHlCZWZvcmVPcGVuaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJD
b250ZXh0R3RrLmNwcAppbmRleCA3MWM3YmJlLi5kMzVhZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAKQEAgLTUzLDggKzUzLDggQEAgU3Ry
aW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QK
IAogU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIFdURjo6U3RyaW5n
KCk7CisgICAgR093blB0cjxnY2hhcj4gZGF0YWJhc2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFt
ZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXRndGsiLCAiaWNvbmRhdGFiYXNlIiwgTlVM
TCkpOworICAgIHJldHVybiBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGRhdGFiYXNlRGlyZWN0
b3J5LmdldCgpKTsKIH0KIAogU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdExvY2Fs
U3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0Ci0tIAoxLjcuMTEuNAoK
</data>
<flag name="review"
          id="178186"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166241</attachid>
            <date>2012-09-28 06:45:07 -0700</date>
            <delta_ts>2012-09-28 07:03:59 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-WK2-GTK-Implement-new-Favicons-API.patch</filename>
            <type>text/plain</type>
            <size>57709</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAwYzI2Mjg4MjQ4OGY2Yzg3YjI5M2IyMGYzYTYwZTc1OTFhMDUxZDNlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDI4IFNlcCAyMDEyIDE0OjU4OjQ0ICswMjAwClN1YmplY3Q6IFtQQVRD
SCAxLzJdIFtXSzJdW0dUS10gSW1wbGVtZW50IG5ldyBGYXZpY29ucyBBUEkKIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjQ3NgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCgpOZXcgb2JqZWN0IHdyYXBwaW5nIHRoZSBpbnRlcm5hbCBJY29uRGF0YWJhc2UgZnJv
bSBXZWJDb3JlLApwcm92aWRpbmcgYSBzaW1wbGUgYXN5bmNocm9ub3VzIEFQSSB0byByZXRyaWV2
ZSB0aGUgZmF2aWNvbgphc3NvY2lhdGVkIHRvIGEgcGFnZSBVUkwsIGFuZCB0d28gbW9yZSBmdW5j
dGlvbnMgdG8gc2ltcGxlIHF1ZXJ5CnRoZSBpbnRlcm5hbCBkYXRhYmFzZSBmb3IgdGhlIFVSSSBv
ZiB0aGUgaWNvbiBhc3NvY2lhdGVkIHRvIGEKcGFnZSwgaWYgYW55LCBhbmQgdG8gY2xlYXIgdGhl
IHN0YXRlIG9mIHRoZSBpbnRlcm5hbCBkYXRhYmFzZS4KCiogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCihfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJp
dmF0ZSk6Cih3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9pbml0KToKKHdlYmtpdEZhdmljb25EYXRh
YmFzZUZpbmFsaXplKToKKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQpOgooR2V0
RmF2aWNvblN1cmZhY2VBc3luY0RhdGEpOiBOZXcgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBkYXRh
CmFjcm9zcyB0aGUgYXN5bmNocm9ub3VzIGltcGxlbWVudGF0aW9uIG9mIGdldF9mYXZpY29uKCku
CihHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YTo6fkdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRh
KToKRGlzY29ubmVjdHMgdGhlIGNhbmNlbGxhYmxlIGlmIG5lZWRlZC4KKGdldEljb25TdXJmYWNl
U3luY2hyb25vdXNseSk6IFN5bmNocm9ub3VzbHkgcmV0dXJucyBhIHBvaW50ZXIgdG8KdGhlIGNh
aXJvX3N1cmZhY2Ugd2l0aCB0aGUgaWNvbidzIGRhdGEsIGlmIGF2YWlsYWJsZS4KKGRlbGV0ZVBl
bmRpbmdJY29uUmVxdWVzdHMpOiBSZW1vdmVzIHRoZSBmdWxsIGxpc3Qgb2YKaWNvbiByZXF1ZXN0
cyBmb3IgYSBwYWdlIFVSTC4KKHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkpOiBQcm9jZXNzIGFu
eSBpY29uIHJlcXVlc3QgdGhhdAptaWdodCBiZSBzdGlsbCBwZW5kaW5nLgooaWNvbkRhdGFSZWFk
eUZvclBhZ2VVUkxDYWxsYmFjayk6IENhbGxlZCBmcm9tIFdlYkljb25EYXRhYmFzZQp3aGVuIG5l
dyBkYXRhIGlzIHJlYWR5IGZvciBhIGZhdmljb24uCih3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVh
dGUpOiBDcmVhdGUgdGhlIFdlYktpdEZhdmljb25EYXRhYmFzZQpvYmplY3QgYW5kIGluaXRpYWxp
emVzIHRoZSBBUEkgY2xpZW50IGZvciBXS0ljb25EYXRhYmFzZUNsaWVudC4KKGdldE9yQ3JlYXRl
UGVuZGluZ0ljb25SZXF1ZXN0cyk6IFJldHVybnMgKGlmIGF2YWlsYWJsZSkgb3IKY3JlYXRlcyBh
IG5ldyBpY29uIHJlcXVlc3QsIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBsaXN0IG9mIHJlcXVlc3Rz
CmZvciB0aGUgc2FtZSBwYWdlIFVSTC4KKGdldEljb25TdXJmYWNlQ2FuY2VsbGVkKTogSGFuZGxl
IHRoZSBjYXNlIG9mIGEgcmVxdWVzdCBiZWluZwpjYW5jZWxsZWQuIE11c3QgaGFwcGVuIG9uIHRo
ZSBtYWluIHRocmVhZC4KKGdldEljb25TdXJmYWNlQ2FuY2VsbGVkQ2FsbGJhY2spOiBDYWxsYmFj
ayB1c2VkIHdpdGgKZ19jYW5jZWxsYWJsZV9jb25uZWN0KCksIHdoaWNoIGVuc3VyZSBnZXRJY29u
U3VyZmFjZUNhbmNlbGxlZCgpIGlzCmNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKHNldEVy
cm9yRm9yQXN5bmNSZXN1bHQpOiBIZWxwZXIgdG8gc2V0IGVycm9ycyBpbiB0aGUgcmVzdWx0Lgoo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZXJyb3JfcXVhcmspOiBOZXcgZnVuY3Rpb24sIHByb3Zp
ZGludCB0aGUKbmV3IGVycm9yIGRvbWFpbiBmb3IgZXJyb3JzIG9mIHR5cGUgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlRXJyb3IuCih3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbik6IE5l
dyBBUEkgZnVuY3Rpb24sIHByb3ZpZGluZwphbiBhc3luY2hyb25vdXMgbWVjaGFuaXNtIHRvIHF1
ZXJ5IHRoZSBmYXZpY29uIGZvciBhIHBhZ2UgVVJMLgood2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X2Zhdmljb25fZmluaXNoKTogTmV3IEFQSSBmdW5jdGlvbiB0bwpmaW5pc2ggdGhlIGFzeW5j
cmhvbm91cyByZXF1ZXN0IHN0YXJ0ZWQgd2l0aCBnZXRfZmF2aWNvbigpLgood2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKTogTmV3IEFQSSBmdW5jdGlvbgp0byBlYXNpbHkg
cmV0cmlldmUsIGlmIGF2YWlsYWJsZSwgdGhlIFVSSSBvZiBhIGZhdmljb24uCih3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9jbGVhcik6IE5ldyBBUEkgZnVuY3Rpb24gdG8gY2xlYXIgdGhlCnN0YXRl
IG9mIHRoZSBpbnRlcm5hbCBpY29uIGRhdGFiYXNlLgoqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZhdmljb25EYXRhYmFzZS5oOiBBZGRlZC4KKF9XZWJLaXRGYXZpY29uRGF0YWJhc2UpOgooX1dl
YktpdEZhdmljb25EYXRhYmFzZUNsYXNzKToKKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2VQcml2YXRlLmg6IEFkZGVkIHRvCmludGVybmFsbHkgZXhwb3NlIHdlYmtpdEZh
dmljb25EYXRhYmFzZUNyZWF0ZSgpIHRvIFdlYktpdFdlYkNvbnRleHQuCiogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpdmF0ZS5oOiBJbXBvcnQgV2ViS2l0Mi9XS0ljb25EYXRhYmFzZS5oLgoq
IEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlcy4KCkFkZCBhIG5ldyBnZXR0ZXIg
aW4gV2ViSWNvbkRhdGFiYXNlIGZvciBtX3VybEltcG9ydENvbXBsZXRlZC4KCiogVUlQcm9jZXNz
L1dlYkljb25EYXRhYmFzZS5jcHA6CihXZWJLaXQ6OldlYkljb25EYXRhYmFzZTo6aXNVcmxJbXBv
cnRDb21wbGV0ZWQpOiBBZGRlZCB0aGlzIHNpbXBsZQpnZXR0ZXIgdG8gYWxsb3cga25vd2luZyBm
cm9tIFdlYktpdEZhdmljb25EYXRhYmFzZSB3aGV0aGVyIHRoZQppbml0aWFsIGltcG9ydCBoYXMg
ZmluaXNoZWQsIG5lZWRlZCBmb3IgbWFraW5nIHNvbWUgZGVjaXNpb25zLgooV2ViS2l0KToKKiBV
SVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6CihXZWJJY29uRGF0YWJhc2UpOgoKTmV3IEFQSSBp
biBXZWJLaXRXZWJDb250ZXh0IHRvIGFsbG93IG9idGFpbmluZyBhIHZhbGlkIGluc3RhbmNlIG9m
CldlYktpdEZhdmljb25EYXRhYmFzZSBhbmQgdG8gc2V0L2dldCB0aGUgbG9jYWwgcGF0aCB0byBi
ZSB1c2VkLgoKKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKF9XZWJL
aXRXZWJDb250ZXh0UHJpdmF0ZSk6Cih3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0
YWJhc2VfcGF0aCk6IE5ldyBBUEkgdG8gYWxsb3cKc2V0dGluZyBhIHBhdGggZm9yIHRoZSBpY29u
IGRhdGFiYXNlLCBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IG9uZS4KKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9wYXRoKTogTmV3IEFQSSB0bwpyZXRyaWV2ZSB0aGUgcGF0
aCBmb3IgdGhlIGljb24gZGF0YWJhc2UgY3VycmVudGx5IGluIHVzZS4KKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSk6IE5ldyBBUEkgdG8gZ2V0IGEgdmFsaWQKYW5kIHBy
b3Blcmx5IGluaXRpYWxpemVkIGluc3RhbmNlIG9mIFdlYktpdEZhdmljb25EYXRhYmFzZS4KKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CgpNYWtlIHN1cmUgd2UgaGF2ZSBh
IGRlZmF1bHQgcGF0aCBzZXQgZm9yIHRoZSBpY29uIGRhdGFiYXNlLgoKKiBVSVByb2Nlc3MvZ3Rr
L1dlYkNvbnRleHRHdGsuY3BwOgooV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJ
Y29uRGF0YWJhc2VQYXRoKTogUmV0dXJuIHRoZQpkZWZhdWx0IHBhdGggdG8gYmUgdXNlZCBmb3Ig
dGhlIGljb24gZGF0YWJhc2UuCgpBZGQgdW5pdCB0ZXN0cyBmb3IgY2hlY2tpbmcgdGhpcyBuZXcg
QVBJLgoKKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
LmNwcDogQWRkZWQuCihzZXJ2ZXJDYWxsYmFjayk6IENhbGxiYWNrIGZvciB0aGUgdGVzdCBzZXJ2
ZXIuCih0ZXN0U2V0RGlyZWN0b3J5KTogTmV3IHVuaXQgdGVzdCwgY2hlY2tzIHRoZSBhYmlsaXR5
IHRvIHNldCBhbmQKZ2V0IGEgc3BlY2lmaWMgZGlyZWN0b3J5IHBhdGggZm9yIHRoZSBpY29uIGRh
dGFiYXNlLgoodGVzdENsZWFyRGF0YWJhc2UpOiBOZXcgdW5pdCB0ZXN0LCBjaGVja3MgdGhlIGFi
aWxpdHkgdG8gY2xlYXIKdGhlIGRhdGEgaW4gdGhlIGljb24gZGF0YWJhc2UuCih0ZXN0R2V0RmF2
aWNvbik6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byBnZXQgYQpmYXZpY29u
IGZyb20gdGhlIGljb24gZGF0YWJhc2UgaW4gZGlmZmVyZW50IHNpdHVhdGlvbnMuCih0ZXN0R2V0
RmF2aWNvblVSSSk6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byByZXRyaWV2
ZQp0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiwgaWYgYW55LCBhc3NvY2lhdGVkIHRvIGEgd2ViIHBh
Z2UuCihkZWxldGVEYXRhYmFzZUZpbGVzKTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSB0ZW1w
b3JhcnkgZmlsZXMuCihiZWZvcmVBbGwpOiBJbml0aWFsaXplIHRoZSB0ZXN0IHNlcnZlciBhbmQg
YWRkIHRoZSB1bml0IHRlc3RzLgooYWZ0ZXJBbGwpOiBEZWxldGUgdGhlIHRlc3Qgc2VydmVyIGFu
ZCBjbGVhbiB1cC4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDEwNCArKysrKysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gICAgICAgICAgICAgICAgIHwgICA0ICsKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwICAgIHwgNDAzICsrKysrKysrKysrKysrKysrKysrKwogLi4uL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oICAgICAgfCAgOTQgKysrKysK
IC4uLi9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaCAgICAgICAgIHwgIDMw
ICsrCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggICB8
ICAgMSArCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cCB8ICA5NSArKysrKwogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5oICAgfCAgMTAgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1k
b2NzLnNnbWwgICAgfCAgIDEgKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQgfCAgMjggKysKIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtIHwgICA3ICsKIC4uLi9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwICAgIHwgMjAzICsrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggICAgICAgICB8ICAgMSArCiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCAgICAgICB8ICAgNSArCiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmggICAgICAgICB8ICAgMSArCiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwICAgICB8ICAgNCArLQogMTYg
ZmlsZXMgY2hhbmdlZCwgOTg5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNv
bkRhdGFiYXNlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2VmNWM2
NC4uNTI4NzAwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAxMi0wOS0yNyAgTWFy
aW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dLMl1b
R1RLXSBJbXBsZW1lbnQgbmV3IEZhdmljb25zIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY0NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgb2JqZWN0IHdyYXBwaW5nIHRoZSBpbnRlcm5hbCBJ
Y29uRGF0YWJhc2UgZnJvbSBXZWJDb3JlLAorICAgICAgICBwcm92aWRpbmcgYSBzaW1wbGUgYXN5
bmNocm9ub3VzIEFQSSB0byByZXRyaWV2ZSB0aGUgZmF2aWNvbgorICAgICAgICBhc3NvY2lhdGVk
IHRvIGEgcGFnZSBVUkwsIGFuZCB0d28gbW9yZSBmdW5jdGlvbnMgdG8gc2ltcGxlIHF1ZXJ5Cisg
ICAgICAgIHRoZSBpbnRlcm5hbCBkYXRhYmFzZSBmb3IgdGhlIFVSSSBvZiB0aGUgaWNvbiBhc3Nv
Y2lhdGVkIHRvIGEKKyAgICAgICAgcGFnZSwgaWYgYW55LCBhbmQgdG8gY2xlYXIgdGhlIHN0YXRl
IG9mIHRoZSBpbnRlcm5hbCBkYXRhYmFzZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGUpOgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfaW5p
dCk6CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5hbGl6ZSk6CisgICAgICAgICh3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KToKKyAgICAgICAgKEdldEZhdmljb25T
dXJmYWNlQXN5bmNEYXRhKTogTmV3IHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgZGF0YQorICAgICAg
ICBhY3Jvc3MgdGhlIGFzeW5jaHJvbm91cyBpbXBsZW1lbnRhdGlvbiBvZiBnZXRfZmF2aWNvbigp
LgorICAgICAgICAoR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGE6On5HZXRGYXZpY29uU3VyZmFj
ZUFzeW5jRGF0YSk6CisgICAgICAgIERpc2Nvbm5lY3RzIHRoZSBjYW5jZWxsYWJsZSBpZiBuZWVk
ZWQuCisgICAgICAgIChnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkpOiBTeW5jaHJvbm91c2x5
IHJldHVybnMgYSBwb2ludGVyIHRvCisgICAgICAgIHRoZSBjYWlyb19zdXJmYWNlIHdpdGggdGhl
IGljb24ncyBkYXRhLCBpZiBhdmFpbGFibGUuCisgICAgICAgIChkZWxldGVQZW5kaW5nSWNvblJl
cXVlc3RzKTogUmVtb3ZlcyB0aGUgZnVsbCBsaXN0IG9mCisgICAgICAgIGljb24gcmVxdWVzdHMg
Zm9yIGEgcGFnZSBVUkwuCisgICAgICAgIChwcm9jZXNzUGVuZGluZ0ljb25zRm9yVVJJKTogUHJv
Y2VzcyBhbnkgaWNvbiByZXF1ZXN0IHRoYXQKKyAgICAgICAgbWlnaHQgYmUgc3RpbGwgcGVuZGlu
Zy4KKyAgICAgICAgKGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2spOiBDYWxsZWQgZnJv
bSBXZWJJY29uRGF0YWJhc2UKKyAgICAgICAgd2hlbiBuZXcgZGF0YSBpcyByZWFkeSBmb3IgYSBm
YXZpY29uLgorICAgICAgICAod2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKTogQ3JlYXRlIHRo
ZSBXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAgICAgICAgb2JqZWN0IGFuZCBpbml0aWFsaXplcyB0
aGUgQVBJIGNsaWVudCBmb3IgV0tJY29uRGF0YWJhc2VDbGllbnQuCisgICAgICAgIChnZXRPckNy
ZWF0ZVBlbmRpbmdJY29uUmVxdWVzdHMpOiBSZXR1cm5zIChpZiBhdmFpbGFibGUpIG9yCisgICAg
ICAgIGNyZWF0ZXMgYSBuZXcgaWNvbiByZXF1ZXN0LCB0byBiZSBhcHBlbmRlZCB0byB0aGUgbGlz
dCBvZiByZXF1ZXN0cworICAgICAgICBmb3IgdGhlIHNhbWUgcGFnZSBVUkwuCisgICAgICAgIChn
ZXRJY29uU3VyZmFjZUNhbmNlbGxlZCk6IEhhbmRsZSB0aGUgY2FzZSBvZiBhIHJlcXVlc3QgYmVp
bmcKKyAgICAgICAgY2FuY2VsbGVkLiBNdXN0IGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgICAgIChnZXRJY29uU3VyZmFjZUNhbmNlbGxlZENhbGxiYWNrKTogQ2FsbGJhY2sgdXNlZCB3
aXRoCisgICAgICAgIGdfY2FuY2VsbGFibGVfY29ubmVjdCgpLCB3aGljaCBlbnN1cmUgZ2V0SWNv
blN1cmZhY2VDYW5jZWxsZWQoKSBpcworICAgICAgICBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgIChzZXRFcnJvckZvckFzeW5jUmVzdWx0KTogSGVscGVyIHRvIHNldCBlcnJv
cnMgaW4gdGhlIHJlc3VsdC4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Vycm9y
X3F1YXJrKTogTmV3IGZ1bmN0aW9uLCBwcm92aWRpbnQgdGhlCisgICAgICAgIG5ldyBlcnJvciBk
b21haW4gZm9yIGVycm9ycyBvZiB0eXBlIFdlYktpdEZhdmljb25EYXRhYmFzZUVycm9yLgorICAg
ICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24pOiBOZXcgQVBJIGZ1bmN0
aW9uLCBwcm92aWRpbmcKKyAgICAgICAgYW4gYXN5bmNocm9ub3VzIG1lY2hhbmlzbSB0byBxdWVy
eSB0aGUgZmF2aWNvbiBmb3IgYSBwYWdlIFVSTC4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaCk6IE5ldyBBUEkgZnVuY3Rpb24gdG8KKyAgICAgICAg
ZmluaXNoIHRoZSBhc3luY3Job25vdXMgcmVxdWVzdCBzdGFydGVkIHdpdGggZ2V0X2Zhdmljb24o
KS4KKyAgICAgICAgKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSk6IE5l
dyBBUEkgZnVuY3Rpb24KKyAgICAgICAgdG8gZWFzaWx5IHJldHJpZXZlLCBpZiBhdmFpbGFibGUs
IHRoZSBVUkkgb2YgYSBmYXZpY29uLgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Y2xlYXIpOiBOZXcgQVBJIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZQorICAgICAgICBzdGF0ZSBvZiB0
aGUgaW50ZXJuYWwgaWNvbiBkYXRhYmFzZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKToKKyAgICAgICAgKF9XZWJLaXRGYXZpY29uRGF0YWJhc2VDbGFzcyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOiBBZGRl
ZCB0bworICAgICAgICBpbnRlcm5hbGx5IGV4cG9zZSB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVh
dGUoKSB0byBXZWJLaXRXZWJDb250ZXh0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaXZhdGUuaDogSW1wb3J0IFdlYktpdDIvV0tJY29uRGF0YWJhc2UuaC4KKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCBuZXcgZmlsZXMuCisKKyAgICAgICAgQWRkIGEg
bmV3IGdldHRlciBpbiBXZWJJY29uRGF0YWJhc2UgZm9yIG1fdXJsSW1wb3J0Q29tcGxldGVkLgor
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkljb25EYXRhYmFzZTo6aXNVcmxJbXBvcnRDb21wbGV0ZWQpOiBBZGRlZCB0aGlzIHNp
bXBsZQorICAgICAgICBnZXR0ZXIgdG8gYWxsb3cga25vd2luZyBmcm9tIFdlYktpdEZhdmljb25E
YXRhYmFzZSB3aGV0aGVyIHRoZQorICAgICAgICBpbml0aWFsIGltcG9ydCBoYXMgZmluaXNoZWQs
IG5lZWRlZCBmb3IgbWFraW5nIHNvbWUgZGVjaXNpb25zLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJJY29uRGF0
YWJhc2UpOgorCisgICAgICAgIE5ldyBBUEkgaW4gV2ViS2l0V2ViQ29udGV4dCB0byBhbGxvdyBv
YnRhaW5pbmcgYSB2YWxpZCBpbnN0YW5jZSBvZgorICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UgYW5kIHRvIHNldC9nZXQgdGhlIGxvY2FsIHBhdGggdG8gYmUgdXNlZC4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAoX1dlYktp
dFdlYkNvbnRleHRQcml2YXRlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2
aWNvbl9kYXRhYmFzZV9wYXRoKTogTmV3IEFQSSB0byBhbGxvdworICAgICAgICBzZXR0aW5nIGEg
cGF0aCBmb3IgdGhlIGljb24gZGF0YWJhc2UsIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lLgor
ICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX3BhdGgpOiBO
ZXcgQVBJIHRvCisgICAgICAgIHJldHJpZXZlIHRoZSBwYXRoIGZvciB0aGUgaWNvbiBkYXRhYmFz
ZSBjdXJyZW50bHkgaW4gdXNlLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKTogTmV3IEFQSSB0byBnZXQgYSB2YWxpZAorICAgICAgICBhbmQgcHJvcGVy
bHkgaW5pdGlhbGl6ZWQgaW5zdGFuY2Ugb2YgV2ViS2l0RmF2aWNvbkRhdGFiYXNlLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKworICAgICAgICBNYWtl
IHN1cmUgd2UgaGF2ZSBhIGRlZmF1bHQgcGF0aCBzZXQgZm9yIHRoZSBpY29uIGRhdGFiYXNlLgor
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCk6IFJldHVy
biB0aGUKKyAgICAgICAgZGVmYXVsdCBwYXRoIHRvIGJlIHVzZWQgZm9yIHRoZSBpY29uIGRhdGFi
YXNlLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBjaGVja2luZyB0aGlzIG5ldyBBUEku
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6IENhbGxiYWNrIGZv
ciB0aGUgdGVzdCBzZXJ2ZXIuCisgICAgICAgICh0ZXN0U2V0RGlyZWN0b3J5KTogTmV3IHVuaXQg
dGVzdCwgY2hlY2tzIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQKKyAgICAgICAgZ2V0IGEgc3BlY2lm
aWMgZGlyZWN0b3J5IHBhdGggZm9yIHRoZSBpY29uIGRhdGFiYXNlLgorICAgICAgICAodGVzdENs
ZWFyRGF0YWJhc2UpOiBOZXcgdW5pdCB0ZXN0LCBjaGVja3MgdGhlIGFiaWxpdHkgdG8gY2xlYXIK
KyAgICAgICAgdGhlIGRhdGEgaW4gdGhlIGljb24gZGF0YWJhc2UuCisgICAgICAgICh0ZXN0R2V0
RmF2aWNvbik6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0aGUgYWJpbGl0eSB0byBnZXQgYQorICAg
ICAgICBmYXZpY29uIGZyb20gdGhlIGljb24gZGF0YWJhc2UgaW4gZGlmZmVyZW50IHNpdHVhdGlv
bnMuCisgICAgICAgICh0ZXN0R2V0RmF2aWNvblVSSSk6IE5ldyB1bml0IHRlc3QsIGNoZWNrcyB0
aGUgYWJpbGl0eSB0byByZXRyaWV2ZQorICAgICAgICB0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiwg
aWYgYW55LCBhc3NvY2lhdGVkIHRvIGEgd2ViIHBhZ2UuCisgICAgICAgIChkZWxldGVEYXRhYmFz
ZUZpbGVzKTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMuCisgICAg
ICAgIChiZWZvcmVBbGwpOiBJbml0aWFsaXplIHRoZSB0ZXN0IHNlcnZlciBhbmQgYWRkIHRoZSB1
bml0IHRlc3RzLgorICAgICAgICAoYWZ0ZXJBbGwpOiBEZWxldGUgdGhlIHRlc3Qgc2VydmVyIGFu
ZCBjbGVhbiB1cC4KKwogMjAxMi0wOS0yNyAgSmlud29vIFNvbmcgIDxqaW53b283LnNvbmdAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBBZGQgY2FsbGJhY2sgZnVuY3Rpb25zIGZv
ciBXS1BhZ2VGaW5kQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1MDE1
ZmIzLi5hODQyODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTEwNCw2ICsx
MDQsNyBAQCB3ZWJraXQyZ3RrX2hfYXBpICs9IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RWRpdGluZ0NvbW1hbmRzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29u
RGF0YWJhc2UuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5k
Q29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZvcm1T
dWJtaXNzaW9uUmVxdWVzdC5oIFwKQEAgLTY0Myw2ICs2NDQsOSBAQCB3ZWJraXQyX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21t
YW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5o
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJh
c2UuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29u
RGF0YWJhc2VQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25E
YXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiNTMxNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRGYXZpY29uRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIldlYktpdEZhdmljb25EYXRhYmFzZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KKyNpbmNsdWRl
IDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgSUNPTl9SRUFEWSwKKwor
ICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0g
PSB7IDAsIH07CisKK3R5cGVkZWYgVmVjdG9yPEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiA+
IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3Rvcio+IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsKKworc3RydWN0IF9X
ZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViSWNvbkRhdGFiYXNl
PiBpY29uRGF0YWJhc2U7CisgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwIHBlbmRpbmdJY29uUmVx
dWVzdHM7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdEZhdmljb25EYXRhYmFzZSwgd2Via2l0
X2Zhdmljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIGNsb3NlSWNv
bkRhdGFiYXNlSWZOZWVkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJhc2UtPnByaXY7Cisg
ICAgaWYgKHByaXYtPmljb25EYXRhYmFzZS0+aXNPcGVuKCkpCisgICAgICAgIHByaXYtPmljb25E
YXRhYmFzZS0+Y2xvc2UoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfaW5pdChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIG1hbmFnZXIpCit7CisgICAgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSht
YW5hZ2VyLCBXRUJLSVRfVFlQRV9GQVZJQ09OX0RBVEFCQVNFLCBXZWJLaXRGYXZpY29uRGF0YWJh
c2VQcml2YXRlKTsKKyAgICBtYW5hZ2VyLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdl
YktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmF2
aWNvbkRhdGFiYXNlRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShvYmplY3QpOwor
CisgICAgY2xvc2VJY29uRGF0YWJhc2VJZk5lZWRlZChkYXRhYmFzZSk7CisgICAgZGF0YWJhc2Ut
PnByaXYtPn5XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKCk7CisKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0
KFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKiBmYXZpY29uRGF0YWJhc2VDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZhdmljb25EYXRh
YmFzZUNsYXNzKTsKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RmF2aWNvbkRh
dGFiYXNlRmluYWxpemU7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2U6
OmZhdmljb24tcmVhZHk6CisgICAgICogQGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRo
ZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0aGUgV2Vi
IHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbi4KKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGdl
dHMgZW1pdHRlZCB3aGVuIHRoZSBmYXZpY29uIG9mIEBwYWdlX3VyaSBpcworICAgICAqIHJlYWR5
LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZhdmljb24ncyBkYXRhIGlzIHJlYWR5IHRvIGJlIHVzZWQK
KyAgICAgKiBieSB0aGUgYXBwbGljYXRpb24sIGVpdGhlciBiZWNhdXNlIGl0IGhhcyBiZWVuIGxv
YWRlZCBmcm9tIHRoZQorICAgICAqIG5ldHdvcmssIGlmIGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQg
Z2V0cyByZXRyaWV2ZWQsIG9yIGJlY2F1c2UKKyAgICAgKiBpdCBoYXMgYmVlbiBhbHJlYWR5IGlt
cG9ydGVkIGZyb20gdGhlIGljb24gZGF0YWJhc2UuCisgICAgICovCisgICAgc2lnbmFsc1tJQ09O
X1JFQURZXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmF2aWNvbi1yZWFkeSIsCisgICAgICAg
ICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmYXZpY29uRGF0YWJhc2VDbGFzcyksCisg
ICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAg
ICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShmYXZpY29uRGF0YWJhc2VDbGFzcywgc2l6ZW9mKFdlYktpdEZhdmljb25EYXRhYmFzZVBy
aXZhdGUpKTsKK30KKworc3RydWN0IEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhIHsKKyAgICBH
UmVmUHRyPFdlYktpdEZhdmljb25EYXRhYmFzZT4gZmF2aWNvbkRhdGFiYXNlOworICAgIFN0cmlu
ZyBwYWdlVVJMOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGljb247CisgICAgR1JlZlB0
cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlOworICAgIHVuc2lnbmVkIGxvbmcgY2FuY2VsbGVk
SWQ7CisKKyAgICB+R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEoKQorICAgIHsKKyAgICAgICAg
aWYgKGNhbmNlbGxlZElkKQorICAgICAgICAgICAgZ19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KGNh
bmNlbGxhYmxlLmdldCgpLCBjYW5jZWxsZWRJZCk7CisgICAgfQorfTsKK1dFQktJVF9ERUZJTkVf
QVNZTkNfREFUQV9TVFJVQ1QoR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEpCisKK3N0YXRpYyBj
YWlyb19zdXJmYWNlX3QqIGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIFRoZSBleGFjdCBzaXplIHdlIHBhc3MgaXMgaXJy
ZWxldmFudCB0byB0aGUgaWNvbkRhdGFiYXNlIGNvZGUuCisgICAgLy8gV2UgbXVzdCBwYXNzIHNv
bWV0aGluZyBncmVhdGVyIHRoYW4gMHgwIHRvIGdldCBhbiBpY29uLgorICAgIFdlYkNvcmU6Ok5h
dGl2ZUltYWdlUHRyIGljb24gPSBkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlLT5uYXRpdmVJ
bWFnZUZvclBhZ2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6SW50U2l6ZSgxLCAxKSk7CisgICAgaWYg
KCFpY29uKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpY29uID8gaWNvbi0+c3Vy
ZmFjZSgpIDogMDsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlUGVuZGluZ0ljb25SZXF1ZXN0cyhX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3Iq
IHJlcXVlc3RzLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgZGF0YWJhc2UtPnByaXYt
PnBlbmRpbmdJY29uUmVxdWVzdHMucmVtb3ZlKHBhZ2VVUkwpOworICAgIGRlbGV0ZSByZXF1ZXN0
czsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc1BlbmRpbmdJY29uc0ZvclVSSShXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNv
blJlcXVlc3RzLmdldChwYWdlVVJMKTsKKyAgICBpZiAoIWljb25zKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGljb25zLT5zaXplKCk7ICsraSkgeworICAg
ICAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCA9IGljb25zLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxHZXRG
YXZpY29uU3VyZmFjZUFzeW5jRGF0YSo+KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVz
X2dwb2ludGVyKHJlc3VsdCkpOworICAgICAgICBkYXRhLT5pY29uID0gZ2V0SWNvblN1cmZhY2VT
eW5jaHJvbm91c2x5KGRhdGFiYXNlLCBwYWdlVVJMKTsKKworICAgICAgICBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfY29tcGxldGUocmVzdWx0KTsKKyAgICB9CisgICAgZGVsZXRlUGVuZGluZ0ljb25S
ZXF1ZXN0cyhkYXRhYmFzZSwgaWNvbnMsIHBhZ2VVUkwpOworfQorCitzdGF0aWMgdm9pZCBpY29u
RGF0YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKFdLSWNvbkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFi
YXNlLCBXS1VSTFJlZiB3a1BhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0
YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShjbGllbnRJbmZvKTsKKyAgICBTdHJpbmcg
cGFnZVVSTFN0cmluZyA9IHRvSW1wbCh3a1BhZ2VVUkwpLT5zdHJpbmcoKTsKKworICAgIGRhdGFi
YXNlLT5wcml2LT5pY29uRGF0YWJhc2UtPnJldGFpbkljb25Gb3JQYWdlVVJMKHBhZ2VVUkxTdHJp
bmcpOworICAgIHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JVUkkoZGF0YWJhc2UsIHBhZ2VVUkxTdHJp
bmcpOworICAgIGdfc2lnbmFsX2VtaXQoZGF0YWJhc2UsIHNpZ25hbHNbSUNPTl9SRUFEWV0sIDAs
IHBhZ2VVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYktpdEZhdmljb25EYXRhYmFz
ZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFi
YXNlKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZmF2aWNvbkRhdGFiYXNlID0gV0VC
S0lUX0ZBVklDT05fREFUQUJBU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZBVklDT05fREFU
QUJBU0UsIE5VTEwpKTsKKyAgICBmYXZpY29uRGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZSA9
IGljb25EYXRhYmFzZTsKKworICAgIFdLSWNvbkRhdGFiYXNlQ2xpZW50IHdrSWNvbkRhdGFiYXNl
Q2xpZW50ID0geworICAgICAgICBrV0tJY29uRGF0YWJhc2VDbGllbnRDdXJyZW50VmVyc2lvbiwK
KyAgICAgICAgZmF2aWNvbkRhdGFiYXNlLCAvLyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2sKKyAgICAgICAgMCwgLy8gZGlkUmVtb3ZlQWxs
SWNvbnNDYWxsYmFjaworICAgICAgICBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrLAor
ICAgIH07CisgICAgV0tJY29uRGF0YWJhc2VTZXRJY29uRGF0YWJhc2VDbGllbnQodG9BUEkoaWNv
bkRhdGFiYXNlKSwgJndrSWNvbkRhdGFiYXNlQ2xpZW50KTsKKyAgICByZXR1cm4gZmF2aWNvbkRh
dGFiYXNlOworfQorCitzdGF0aWMgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBnZXRPckNyZWF0
ZVBlbmRpbmdJY29uUmVxdWVzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29u
c3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7Cisg
ICAgaWYgKCFpY29ucykgeworICAgICAgICBpY29ucyA9IG5ldyBQZW5kaW5nSWNvblJlcXVlc3RW
ZWN0b3I7CisgICAgICAgIGRhdGFiYXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLnNldChw
YWdlVVJMLCBpY29ucyk7CisgICAgfQorCisgICAgcmV0dXJuIGljb25zOworfQorCitzdGF0aWMg
dm9pZCBnZXRJY29uU3VyZmFjZUNhbmNlbGxlZCh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBHU2lt
cGxlQXN5bmNSZXN1bHQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEdTaW1wbGVBc3luY1Jlc3VsdCo+
KHVzZXJEYXRhKTsKKworICAgIC8vIEdldCB0aGUgZGF0YSB3ZSBtaWdodCBuZWVkIGFuZCBjb21w
bGV0ZSB0aGUgcmVxdWVzdC4KKyAgICBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSogZGF0YSA9
IHN0YXRpY19jYXN0PEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKj4oZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIocmVzdWx0KSk7CisgICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IGRhdGEtPmZhdmljb25EYXRhYmFzZS5nZXQoKTsKKyAgICBTdHJp
bmcgcGFnZVVSTCA9IGRhdGEtPnBhZ2VVUkw7CisKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRf
Y29tcGxldGUocmVzdWx0KTsKKworICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMg
PSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CisgICAg
aWYgKCFpY29ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGl0ZW1JbmRleCA9IGlj
b25zLT5maW5kKHJlc3VsdCk7CisgICAgaWYgKGl0ZW1JbmRleCAhPSBub3RGb3VuZCkKKyAgICAg
ICAgaWNvbnMtPnJlbW92ZShpdGVtSW5kZXgpOworICAgIGlmIChpY29ucy0+aXNFbXB0eSgpKQor
ICAgICAgICBkZWxldGVQZW5kaW5nSWNvblJlcXVlc3RzKGRhdGFiYXNlLCBpY29ucywgcGFnZVVS
TCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldEljb25TdXJmYWNlQ2FuY2VsbGVkQ2FsbGJhY2soR0Nh
bmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQpCit7Cisg
ICAgLy8gSGFuZGxlIGNhbmNlbGxlZCBpbiBhIGluIGlkbGUgc2luY2UgaXQgbWlnaHQgYmUgY2Fs
bGVkIGZyb20gYW55IHRocmVhZC4KKyAgICBjYWxsT25NYWluVGhyZWFkKGdldEljb25TdXJmYWNl
Q2FuY2VsbGVkLCByZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBzZXRFcnJvckZvckFzeW5jUmVz
dWx0KEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJv
ciBlcnJvciwgY29uc3QgU3RyaW5nJiBwYWdlVVJMID0gU3RyaW5nKCkpCit7CisgICAgQVNTRVJU
KHJlc3VsdCk7CisKKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBXRUJLSVRfRkFWSUNP
Tl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQ6CisgICAgICAgIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfZXJyb3IocmVzdWx0LCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUiwg
ZXJyb3IsIF8oIkZhdmljb25zIGRhdGFiYXNlIG5vdCBpbml0aWFsaXplZCB5ZXQiKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9GQVZJ
Q09OX05PVF9GT1VORDoKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9lcnJvcihy
ZXN1bHQsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SLCBlcnJvciwgXygiUGFnZSAlcyBk
b2VzIG5vdCBoYXZlIGEgZmF2aWNvbiIpLCBwYWdlVVJMLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKworR1F1YXJrIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Vycm9yX3F1YXJrKHZv
aWQpCit7CisgICAgcmV0dXJuIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJXZWJLaXRGYXZp
Y29uRGF0YWJhc2VFcnJvciIpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9mYXZpY29uOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAq
IEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZl
IHRoZSBmYXZpY29uCisgKiBAY2FuY2VsbGFibGU6IChhbGxvdy1ub25lKTogQSAjR0NhbmNlbGxh
YmxlIG9yICVOVUxMLgorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBBICNHQXN5bmNSZWFk
eUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcworICogICAgICAgICAgICBzYXRp
c2ZpZWQgb3IgJU5VTEwgaWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlc3VsdC4KKyAqIEB1
c2VyX2RhdGE6IChjbG9zdXJlKTogVGhlIGRhdGEgdG8gcGFzcyB0byBAY2FsbGJhY2suCisgKgor
ICogQXN5bmNocm9ub3VzbHkgb2J0YWlucyBhICNjYWlyb19zdXJmYWNlX3Qgb2YgdGhlIGZhdmlj
b24gZm9yIHRoZQorICogZ2l2ZW4gcGFnZSBVUkkuIEl0IHJldHVybnMgdGhlIGNhY2hlZCBpY29u
IGlmIGl0J3MgaW4gdGhlIGRhdGFiYXNlCisgKiBhc3luY2hyb25vdXNseSB3YWl0aW5nIGZvciB0
aGUgaWNvbiB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFRoaXMgaXMgYW4g
YXN5bmNocm9ub3VzIG1ldGhvZC4gV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBjYWxs
YmFjayB3aWxsCisgKiBiZSBpbnZva2VkLiBZb3UgY2FuIHRoZW4gY2FsbCB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goKQorICogdG8gZ2V0IHRoZSByZXN1bHQgb2Yg
dGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2
aWNvbihXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFnZVVS
SSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
RkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFnZVVS
SSk7CisKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVm
KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoZGF0YWJhc2UpLCBjYWxsYmFjaywg
dXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uKSkpOworICAgIEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKiBkYXRh
ID0gY3JlYXRlR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEoKTsKKyAgICBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQuZ2V0KCksIGRhdGEsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0
YSkpOworICAgIGRhdGEtPmZhdmljb25EYXRhYmFzZSA9IGRhdGFiYXNlOworICAgIGRhdGEtPnBh
Z2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpOworICAgIGRhdGEtPmNhbmNlbGxhYmxl
ID0gY2FuY2VsbGFibGU7CisgICAgaWYgKGNhbmNlbGxhYmxlKSB7CisgICAgICAgIGRhdGEtPmNh
bmNlbGxlZElkID0KKyAgICAgICAgICAgIGdfY2FuY2VsbGFibGVfY29ubmVjdChjYW5jZWxsYWJs
ZSwgR19DQUxMQkFDSyhnZXRJY29uU3VyZmFjZUNhbmNlbGxlZENhbGxiYWNrKSwgcmVzdWx0Lmdl
dCgpLCAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9jaGVja19jYW5jZWxs
YWJsZShyZXN1bHQuZ2V0KCksIGNhbmNlbGxhYmxlKTsKKyAgICB9CisKKyAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJhc2UtPnByaXY7CisgICAgV2ViSWNvbkRh
dGFiYXNlKiBpY29uRGF0YWJhc2VJbXBsID0gcHJpdi0+aWNvbkRhdGFiYXNlLmdldCgpOworICAg
IGlmICghaWNvbkRhdGFiYXNlSW1wbC0+aXNPcGVuKCkpIHsKKyAgICAgICAgc2V0RXJyb3JGb3JB
c3luY1Jlc3VsdChyZXN1bHQuZ2V0KCksIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX05P
VF9JTklUSUFMSVpFRCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9p
bl9pZGxlKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
ZGF0YS0+cGFnZVVSTC5pc0VtcHR5KCkgfHwgZGF0YS0+cGFnZVVSTC5zdGFydHNXaXRoKCJhYm91
dDoiKSkgeworICAgICAgICBzZXRFcnJvckZvckFzeW5jUmVzdWx0KHJlc3VsdC5nZXQoKSwgV0VC
S0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfRkFWSUNPTl9OT1RfRk9VTkQsIGRhdGEtPnBhZ2VV
UkwpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1
bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgYXNrIGZvciB0
aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9uJ3QgZ2V0IHRoZSBpY29uIGRhdGEgbm93LAorICAg
IC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVyIChldmVuIGlmIHRoZSBkYXRhYmFzZSBpcyBzdGls
bCBpbXBvcnRpbmcgaWNvbnMpLgorICAgIGRhdGEtPmljb24gPSBnZXRJY29uU3VyZmFjZVN5bmNo
cm9ub3VzbHkoZGF0YWJhc2UsIGRhdGEtPnBhZ2VVUkwpOworCisgICAgLy8gSWYgdGhlcmUncyBu
b3QgYSB2YWxpZCBpY29uLCBidXQgdGhlcmUncyBhbiBpY29uVVJMIHJlZ2lzdGVyZWQsCisgICAg
Ly8gb3IgaXQncyBzdGlsbCBub3QgcmVnaXN0ZXJlZCBidXQgdGhlIGltcG9ydCBwcm9jZXNzIGhh
c24ndAorICAgIC8vIGZpbmlzaGVkIHlldCwgd2UgbmVlZCB0byB3YWl0IGZvciBpY29uRGF0YVJl
YWR5Rm9yUGFnZSB0byBiZQorICAgIC8vIGNhbGxlZCBiZWZvcmUgbWFraW5nIGFuZCBpbmZvcm1l
ZCBkZWNpc2lvbi4KKyAgICBTdHJpbmcgaWNvblVSTEZvclBhZ2VVUkw7CisgICAgaWNvbkRhdGFi
YXNlSW1wbC0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChkYXRhLT5wYWdlVVJMLCBpY29u
VVJMRm9yUGFnZVVSTCk7CisgICAgaWYgKCFkYXRhLT5pY29uICYmICghaWNvblVSTEZvclBhZ2VV
UkwuaXNFbXB0eSgpIHx8ICFpY29uRGF0YWJhc2VJbXBsLT5pc1VybEltcG9ydENvbXBsZXRlZCgp
KSkgeworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZ2V0T3JDcmVh
dGVQZW5kaW5nSWNvblJlcXVlc3RzKGRhdGFiYXNlLCBkYXRhLT5wYWdlVVJMKTsKKyAgICAgICAg
QVNTRVJUKGljb25zKTsKKyAgICAgICAgaWNvbnMtPmFwcGVuZChyZXN1bHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgcmVhY2hlZCB0aGlzIHBvaW50IHdpdGhvdXQg
YSB2YWxpZCBpY29uLCB3aGljaCBtZWFucyB0aGF0CisgICAgLy8gdGhlcmUncyBubyBpY29uVVJM
IHJlZ2lzdGVyZWQgZm9yIHRoaXMgcGFnZVVSSSBhbmQgdGhlCisgICAgLy8gdXJsSW1wb3J0IHBy
b2Nlc3MgaGFzIGFscmVhZHkgZmluaXNoZWQsIG9yIGRvIGhhdmUgYSB2YWxpZCBpY29uCisgICAg
Ly8gYnV0IGl0J3MgYW4gZW1wdHkgaW1hZ2UsIHRoYXQgbWVhbnMgdGhlcmUncyBubyBmYXZpY29u
LgorICAgIGlmICghZGF0YS0+aWNvbiB8fCAhY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShk
YXRhLT5pY29uLmdldCgpKSkKKyAgICAgICAgc2V0RXJyb3JGb3JBc3luY1Jlc3VsdChyZXN1bHQu
Z2V0KCksIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fTk9UX0ZPVU5ELCBk
YXRhLT5wYWdlVVJMKTsKKworICAgIC8vIENvbXBsZXRlIHRoZSBhc3luY2hyb25vdXMgcHJvY2Vz
czsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQuZ2V0
KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2Zp
bmlzaDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlCisgKiBAcmVzdWx0
OiBBICNHQXN5bmNSZXN1bHQgb2J0YWluZWQgZnJvbSB0aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sg
cGFzc2VkIHRvIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKCkKKyAqIEBlcnJv
cjogKGFsbG93LW5vbmUpOiBSZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMLgorICoK
KyAqIEZpbmlzaGVzIGFuIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb24oKS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEg
bmV3IHJlZmVyZW5jZSB0byBhICNjYWlyb19zdXJmYWNlX3QsIG9yCisgKiAlTlVMTCBpbiBjYXNl
IG9mIGVycm9yLgorICovCitjYWlyb19zdXJmYWNlX3QqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9mYXZpY29uX2ZpbmlzaChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgR1NpbXBsZUFzeW5jUmVz
dWx0KiBzaW1wbGVSZXN1bHQgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKyAgICBn
X3dhcm5faWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxl
UmVzdWx0KSA9PSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbik7CisKKyAgICBp
ZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQsIGVy
cm9yKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0
YSogZGF0YSA9IHN0YXRpY19jYXN0PEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKj4oZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVzdWx0KSk7CisgICAg
QVNTRVJUKGRhdGEpOworCisgICAgLy8gUmV0dXJuIHRoZSBpY29uIGlzIHdlIGNhbiBnZXQgaXQg
YWxyZWFkeS4KKyAgICBpZiAoZGF0YS0+aWNvbikKKyAgICAgICAgcmV0dXJuIGNhaXJvX3N1cmZh
Y2VfcmVmZXJlbmNlKGRhdGEtPmljb24uZ2V0KCkpOworCisgICAgLy8gSWYgdGhlIGljb24gaXMg
bm90IGF2YWlsYWJsZSBhdCB0aGlzIHN0YWdlLCBpbnZlc3RpZ2F0ZSB3aHkKKyAgICAvLyBhbmQg
Y29tZSB1cCB3aXRoIGEgZGVzY3JpcHRpdmUsIGFuZCBob3BlZnVsbHkgaGVscGZ1bCwgZXJyb3Iu
CisgICAgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMOworICAgIGRhdGFiYXNlLT5wcml2LT5pY29u
RGF0YWJhc2UtPnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoZGF0YS0+cGFnZVVSTCwgaWNv
blVSTEZvclBhZ2VVUkwpOworCisgICAgaWYgKGljb25VUkxGb3JQYWdlVVJMLmlzRW1wdHkoKSkg
eworICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGljb24gVVJMIGluIHRoZSBkYXRhYmFzZSBhdCB0
aGlzIHBvaW50LCB3ZSBjYW4KKyAgICAgICAgLy8gY29uY2x1ZGUgdGhlcmUncyBubyBmYXZpY29u
IGF0IGFsbCBmb3IgdGhlIHJlcXVlc3RlZCBwYWdlIFVSTC4KKyAgICAgICAgZ19zZXRfZXJyb3Io
ZXJyb3IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SLCBXRUJLSVRfRkFWSUNPTl9EQVRB
QkFTRV9FUlJPUl9GQVZJQ09OX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgICAgXygiUGFn
ZSAlcyBkb2VzIG5vdCBoYXZlIGEgZmF2aWNvbiIpLCBkYXRhLT5wYWdlVVJMLnV0ZjgoKS5kYXRh
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBpY29uIFVSTCBpcyBrbm93biBp
dCBvYnZpb3VzbHkgbWVhbnMgdGhhdCB0aGUgaWNvbiBkYXRhCisgICAgICAgIC8vIGhhc24ndCBi
ZWVuIHJldHJpZXZlZCB5ZXQsIHNvIHJlcG9ydCB0aGF0IGl0J3MgJ3Vua25vd24nLgorICAgICAg
ICBnX3NldF9lcnJvcihlcnJvciwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IsIFdFQktJ
VF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fVU5LTk9XTiwKKyAgICAgICAgICAgICAg
ICAgICAgXygiVW5rbm93biBmYXZpY29uIGZvciBwYWdlICVzIiksIGRhdGEtPnBhZ2VVUkwudXRm
OCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogd2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpOgorICogQGRhdGFiYXNlOiBhICNXZWJL
aXRGYXZpY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5p
bmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgb2YgdGhlIGZhdmljb24gZm9yIHRo
ZSBnaXZlbiBAcGFnZV91cmkuCisgKgorICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJ
IGZvciB0aGUgZmF2aWNvbiwgb3IgJU5VTEwgaWYgdGhlCisgKiBkYXRhYmFzZSBkb2Vzbid0IGhh
dmUgYSBmYXZpY29uIGZvciBAcGFnZV91cmkuCisgKi8KK2djaGFyKiB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgZ2NoYXIqIHBhZ2VVUkwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChwYWdlVVJMLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3Ry
aW5nIGljb25VUkxGb3JQYWdlVVJMOworICAgIGRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2Ut
PnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJMKSwg
aWNvblVSTEZvclBhZ2VVUkwpOworICAgIGlmIChpY29uVVJMRm9yUGFnZVVSTC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfc3RyZHVwKGljb25VUkxGb3JQYWdl
VVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCisvKioKKyAqIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2NsZWFyOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRGYXZpY29uRGF0YWJhc2UKKyAqCisgKiBD
bGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgorICovCit2b2lkIHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkp
OworCisgICAgZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVtb3ZlQWxsSWNvbnMoKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmF2aWNvbkRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3
NGU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0
Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRGYXZpY29uRGF0YWJhc2VfaAorI2RlZmluZSBXZWJLaXRGYXZpY29uRGF0YWJhc2Vf
aAorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UgICAgICAg
ICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0ZBVklDT05fREFUQUJBU0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSwgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0Uob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRkFWSUNPTl9E
QVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZBVklDT05f
REFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0ZBVklDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfRkFWSUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0ZBVklDT05fREFUQUJBU0UsIFdlYktpdEZhdmljb25EYXRh
YmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IgICAgICAg
ICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9lcnJvcl9xdWFyaygpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2U7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VQ
cml2YXRlIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RmF2
aWNvbkRhdGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdEZhdmljb25E
YXRhYmFzZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZhdmljb25EYXRhYmFz
ZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworLyoqCisgKiBX
ZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvcjoKKyAqIEBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9F
UlJPUl9OT1RfSU5JVElBTElaRUQ6IFRoZSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlIGhhcyBub3Qg
YmVlbiBpbml0aWFsaXplZCB5ZXQKKyAqIEBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9G
QVZJQ09OX05PVF9GT1VORDogVGhlcmUgaXMgbm90IGFuIGljb24gYXZhaWxhYmxlIGZvciB0aGUg
cmVxdWVzdGVkIFVSTAorICogQFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05f
VU5LTk9XTjogVGhlcmUgbWlnaHQgYmUgYW4gaWNvbiBmb3IgdGhlIHJlcXVlc3RlZCBVUkwsIGJ1
dCBpdHMgZGF0YSBpcyB1bmtub3duIGF0IHRoZSBtb21lbnQKKyAqCisgKiBFbnVtIHZhbHVlcyB1
c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBlcnJvcnMgcmVsYXRlZCB0byB0aGUgI1dlYktpdEZh
dmljb25EYXRhYmFzZS4KKyAqKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0ZBVklDT05f
REFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVELAorICAgIFdFQktJVF9GQVZJQ09OX0RBVEFC
QVNFX0VSUk9SX0ZBVklDT05fTk9UX0ZPVU5ELAorICAgIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNF
X0VSUk9SX0ZBVklDT05fVU5LTk9XTgorfSBXZWJLaXRGYXZpY29uRGF0YWJhc2VFcnJvcjsKKwor
V0VCS0lUX0FQSSBHUXVhcmsKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Vycm9yX3F1YXJrICAg
ICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbiAgICAgICAgICAgICAgIChX
ZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICpwYWdlX3Vy
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
YW5jZWxsYWJsZSAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgIGNhbGxi
YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworV0VCS0lUX0FQSSBjYWlyb19zdXJm
YWNlX3QgKgord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoICAgICAg
ICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAqcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0Vycm9yICAgICAgICAgICAgICAgKiplcnJvcik7CitXRUJLSVRfQVBJIGdjaGFyICoKK3dlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSAgICAgICAgICAgKFdlYktpdEZhdmlj
b25EYXRhYmFzZSAqZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnBhZ2VfdXJpKTsKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjc4YmRkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgKQEAgLTAs
MCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRGYXZpY29uRGF0
YWJhc2VQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUg
IldlYktpdEZhdmljb25EYXRhYmFzZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtpdEZhdmljb25EYXRhYmFzZUNyZWF0ZShXZWJJY29u
RGF0YWJhc2UqKTsKKworI2VuZGlmIC8vIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCmlu
ZGV4IDhmZWRlODIuLjljZWFmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxXZWJL
aXQyL1dLR2VvbG9jYXRpb25NYW5hZ2VyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLR2VvbG9jYXRpb25Q
b3NpdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tJY29uRGF0YWJhc2UuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLSW5zcGVjdG9yLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0luc3BlY3RvckNs
aWVudEd0ay5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5k
ZXggNWIyYzI2Ni4uZTdlMjM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERvd25s
b2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEdlb2xv
Y2F0aW9uUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJLaXRQbHVnaW5Qcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYktp
dFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ljb25EYXRhYmFzZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGFuZ3VhZ2UuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTk2LDYgKzk4
LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAgICAgV0tSZXRhaW5QdHI8
V0tDb250ZXh0UmVmPiBjb250ZXh0OwogCiAgICAgR1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2Vy
PiBjb29raWVNYW5hZ2VyOworICAgIEdSZWZQdHI8V2ViS2l0RmF2aWNvbkRhdGFiYXNlPiBmYXZp
Y29uRGF0YWJhc2U7CiAgICAgR1JlZlB0cjxXZWJLaXRTZWN1cml0eU1hbmFnZXI+IHNlY3VyaXR5
TWFuYWdlcjsKICAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVz
dE1hbmFnZXI7CiAgICAgVVJJU2NoZW1lSGFuZGxlck1hcCB1cmlTY2hlbWVIYW5kbGVyczsKQEAg
LTEwNiw2ICsxMDksNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICNpZiBF
TkFCTEUoU1BFTExDSEVDSykKICAgICBPd25QdHI8V2ViS2l0VGV4dENoZWNrZXI+IHRleHRDaGVj
a2VyOwogI2VuZGlmCisgICAgQ1N0cmluZyBmYXZpY29uRGF0YWJhc2VQYXRoOwogfTsKIAogc3Rh
dGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMzI0LDYgKzMyOCw5
NyBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9t
YW5hZ2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbgogfQogCiAvKioKKyAqIHdlYmtpdF93ZWJfY29u
dGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rvcnk6CisgKiBAY29udGV4dDogYSAjV2Vi
S2l0V2ViQ29udGV4dAorICogQHBhdGg6IChhbGxvdy1ub25lKTogYW4gYWJzb2x1dGUgcGF0aCB0
byB0aGUgaWNvbiBkYXRhYmFzZQorICogZGlyZWN0b3J5IG9yICVOVUxMIHRvIHVzZSB0aGUgZGVm
YXVsdHMKKyAqCisgKiBTZXQgdGhlIGRpcmVjdG9yeSBwYXRoIHRvIGJlIHVzZWQgdG8gc3RvcmUg
dGhlIGZhdmljb25zIGRhdGFiYXNlCisgKiBmb3IgQGNvbnRleHQgb24gZGlzay4gUGFzc2luZyAl
TlVMTCBhcyBAcGF0aCBtZWFucyB1c2luZyB0aGUKKyAqIGRlZmF1bHQgZGlyZWN0b3J5IGZvciB0
aGUgcGxhdGZvcm0gKHNlZSBnX2dldF91c2VyX2RhdGFfZGlyKCkpLgorICoKKyAqIElmIHlvdSB3
YW50IHRvIHVzZSBhIGRpZmZlcmVudCBwYXRoIGZvciB0aGUgZmF2aWNvbiBkYXRhYmFzZSwgdGhp
cworICogbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZGF0YWJhc2UgaXMgY3JlYXRl
ZCBieQorICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKCkuIE5vdGUg
dGhhdCBhCisgKiAjV2ViS2l0V2ViVmlldyBjb3VsZCB1c2UgdGhlIGZhdmljb24gZGF0YWJhc2Us
IHNvIHRoaXMgc2hvdWxkIGFsc28KKyAqIGJlIGNhbGxlZCBiZWZvcmUgbG9hZGluZyBhbnkgd2Vi
IHBhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgb25s
eSBvbmNlLCBmdXJ0aGVyIGNhbGxzIGZvcgorICogdGhlIHNhbWUgaW5zdGFuY2Ugb2YgI1dlYktp
dFdlYkNvbnRleHQgYWZ0ZXIgY2FsbGluZworICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCkgd29uJ3QgY2F1c2UgYW55IGVmZmVjdC4KKyAqLwordm9pZCB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KFdlYktpdFdlYkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBwYXRoKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKKworICAgIC8vIENhbGxpbmcgdGhpcyBt
ZXRob2QgdHdpY2UgaXMgYSBwcm9ncmFtbWluZyBlcnJvci4KKyAgICBnX3JldHVybl9pZl9mYWls
KCFjb250ZXh0LT5wcml2LT5mYXZpY29uRGF0YWJhc2UpOworCisgICAgaWYgKHBhdGgpCisgICAg
ICAgIGNvbnRleHQtPnByaXYtPmZhdmljb25EYXRhYmFzZVBhdGggPSBXZWJDb3JlOjpmaWxlbmFt
ZVRvU3RyaW5nKHBhdGgpLnV0ZjgoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2VfcGF0aDoKKyAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250
ZXh0CisgKgorICogR2V0IHRoZSBkaXJlY3RvcnkgcGF0aCBiZWluZyB1c2VkIHRvIHN0b3JlIHRo
ZSBmYXZpY29ucyBkYXRhYmFzZQorICogZm9yIEBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIHdpbGwg
YWx3YXlzIHJldHVybiB0aGUgc2FtZSBwYXRoIGFmdGVyCisgKiBoYXZpbmcgY2FsbGVkIHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpIGZvciB0aGUKKyAqIGZpcnN0IHRp
bWUuIFNlZSB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5
KCkKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBmYXZpY29ucworICogZGF0YWJhc2Ug
YXNzb2NpYXRlZCB3aXRoIEBjb250ZXh0LgorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9j
b250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeShXZWJLaXRXZWJDb250ZXh0ICpj
b250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVY
VChjb250ZXh0KSwgMCk7CisKKyAgICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNv
bnRleHQtPnByaXY7CisKKyAgICAvLyBVc2UgZGVmYXVsdCBpZiBhIGRpZmZlcmVudCBwYXRoIGhh
cyBub3QgYmVlbiBwcmV2aW91c2x5IHNldC4KKyAgICBpZiAocHJpdi0+ZmF2aWNvbkRhdGFiYXNl
UGF0aC5pc051bGwoKSkKKyAgICAgICAgcHJpdi0+ZmF2aWNvbkRhdGFiYXNlUGF0aCA9IHRvSW1w
bChwcml2LT5jb250ZXh0LmdldCgpKS0+aWNvbkRhdGFiYXNlUGF0aCgpLnV0ZjgoKTsKKworICAg
IHJldHVybiBwcml2LT5mYXZpY29uRGF0YWJhc2VQYXRoLmRhdGEoKTsKK30KKworLyoqCisgKiB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2U6CisgKiBAY29udGV4dDogYSAj
V2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgI1dlYktpdEZhdmljb25EYXRhYmFzZSBh
c3NvY2lhdGVkIHdpdGggQGNvbnRleHQuIElmIHlvdQorICogd2FudCB0aGUgZGF0YWJhc2UgdG8g
YmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIGRlZmF1bHQKKyAqIG9uZSwg
eW91IG5lZWQgdG8gY2FsbAorICogd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFi
YXNlX2RpcmVjdG9yeSgpIGJlZm9yZSB0aGUgZmlyc3QKKyAqIHRpbWUgeW91IHVzZSB0aGlzIGZ1
bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRGYXZp
Y29uRGF0YWJhc2Ugb2YgQGNvbnRleHQuCisgKi8KK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKFdlYktpdFdlYkNvbnRleHQqIGNv
bnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhU
KGNvbnRleHQpLCAwKTsKKworICAgIFdlYktpdFdlYkNvbnRleHRQcml2YXRlKiBwcml2ID0gY29u
dGV4dC0+cHJpdjsKKworICAgIGlmIChwcml2LT5mYXZpY29uRGF0YWJhc2UpCisgICAgICAgIHJl
dHVybiBwcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCk7CisKKyAgICAvLyBCdWlsZCB0aGUgZnVs
bCBwYXRoIHRvIHRoZSBpY29uIGRhdGFiYXNlIGZpbGUgb24gZGlzay4KKyAgICBHT3duUHRyPGdj
aGFyPiBmYXZpY29uRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUod2Via2l0X3dlYl9jb250
ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeShjb250ZXh0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SWNv
bkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpLnV0ZjgoKS5kYXRhKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
KTsKKworICAgIC8vIENhbGxpbmcgdGhlIHNldHRlciBpbiBXZWJDb250ZXh0IHdpbGwgY2F1c2Ug
dGhlIGljb24gZGF0YWJhc2UgdG8gYmUgb3BlbmVkLgorICAgIFdlYkNvbnRleHQqIHdlYkNvbnRl
eHQgPSB0b0ltcGwocHJpdi0+Y29udGV4dC5nZXQoKSk7CisgICAgd2ViQ29udGV4dC0+c2V0SWNv
bkRhdGFiYXNlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGZhdmljb25EYXRhYmFzZVBh
dGguZ2V0KCkpKTsKKyAgICBwcml2LT5mYXZpY29uRGF0YWJhc2UgPSBhZG9wdEdSZWYod2Via2l0
RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKHdlYkNvbnRleHQtPmljb25EYXRhYmFzZSgpKSk7CisKKyAg
ICByZXR1cm4gcHJpdi0+ZmF2aWNvbkRhdGFiYXNlLmdldCgpOworfQorCisvKioKICAqIHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFuYWdlcjoKICAqIEBjb250ZXh0OiBhICNXZWJL
aXRXZWJDb250ZXh0CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IGY3NzA4NmYuLmFlNzliZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvb2tpZU1hbmFnZXIuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERvd25sb2FkLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGYXZpY29uRGF0YWJhc2Uu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNlY3VyaXR5TWFuYWdlci5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oPgogCkBAIC0xMTQsNiArMTE1LDE1IEBA
IHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViQ29udGV4dAogV0VCS0lUX0FQSSBXZWJLaXRDb29raWVNYW5hZ2VyICoKIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29u
dGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwogCitXRUJLSVRfQVBJIFdlYktpdEZhdmljb25E
YXRhYmFzZSAqCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UgICAgICAg
ICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKKworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0
b3J5ICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICAgICAgICAgICAgICAqcGF0aCk7CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtp
dF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkgICAoV2ViS2l0V2Vi
Q29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworCiBXRUJLSVRfQVBJIFdlYktpdFNlY3Vy
aXR5TWFuYWdlciAqCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NlY3VyaXR5X21hbmFnZXIgICAg
ICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay1kb2NzLnNnbWwKaW5kZXggYTdmMzRlNi4uODYyM2FmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5z
Z21sCkBAIC0zMCw2ICszMCw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBy
aW50T3BlcmF0aW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJS
ZXNvdXJjZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZhdmljb25EYXRhYmFzZS54bWwi
Lz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lnht
bCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54bWwi
Lz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Q29va2llTWFuYWdlci54bWwiLz4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDE4MjdiNmIuLjljZWQwMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMzAsNiArMzAsOSBAQCB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfY2xlYXJfY2FjaGUKIHdlYmtpdF93
ZWJfY29udGV4dF9kb3dubG9hZF91cmkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21h
bmFnZXIKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZQord2Via2l0X3dl
Yl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeQord2Via2l0X3dlYl9jb250
ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeQogd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9zZWN1cml0eV9tYW5hZ2VyCiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1
Z2luc19kaXJlY3RvcnkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucwpAQCAtNjAyLDYg
KzYwNSwzMSBAQCB3ZWJraXRfamF2YXNjcmlwdF9lcnJvcl9xdWFyawogPC9TRUNUSU9OPgogCiA8
U0VDVElPTj4KKzxGSUxFPldlYktpdEZhdmljb25EYXRhYmFzZTwvRklMRT4KK1dlYktpdEZhdmlj
b25EYXRhYmFzZQorV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IKK1dlYktpdEZhdmljb25E
YXRhYmFzZUVycm9yCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbgord2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoCit3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl91cmkKK3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xhc3MKK1dFQktJVF9U
WVBFX0ZBVklDT05fREFUQUJBU0UKK1dFQktJVF9GQVZJQ09OX0RBVEFCQVNFCitXRUJLSVRfSVNf
RkFWSUNPTl9EQVRBQkFTRQorV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfQ0xBU1MKK1dFQktJVF9J
U19GQVZJQ09OX0RBVEFCQVNFX0NMQVNTCitXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUK
K3dlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF90eXBlCit3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9lcnJvcl9xdWFyaworPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdDwvRklMRT4KIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAogd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNmYWRmNDAu
Ljg1NTVhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0xMSw2ICsxMSw3IEBAIFRFU1RfUFJPR1MgKz0gXAog
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0UmVzb3VyY2VzIFwKIAlQcm9ncmFtcy9XZWJL
aXQyQVBJVGVzdHMvVGVzdFNTTCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJL
aXRWZXJzaW9uIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJv
bGxlciBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQg
XAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXApAQCAtMTQx
LDYgKzE0MiwxMiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFByaW50aW5nX0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKSAkKEdUSwogUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RQcmludGluZ19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChHVEtf
VU5JWF9QUklOVElOR19MSUJTKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGlu
Z19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX1NPVVJDRVMgPSBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5j
cHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0NQ
UEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRl
c3RzX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9M
REZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKIFByb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCiBQ
cm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0NQUEZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzljZDVkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1Nl
cnZlcjsKK3N0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKKworY2xhc3MgRmF2aWNvbkRhdGFi
YXNlVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKEZhdmljb25EYXRhYmFzZVRlc3QpOworCisgICAgRmF2aWNvbkRhdGFiYXNlVGVz
dCgpCisgICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVs
dCgpKQorICAgICAgICAsIG1fZ2V0RmF2aWNvblJlc3VsdCgwKQorICAgICAgICAsIG1faWNvblJl
YWR5U2lnbmFsUmVjZWl2ZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIH5GYXZpY29uRGF0
YWJhc2VUZXN0KCkKKyAgICB7CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0
KTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNl
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBpY29uUmVhZHlDYWxsYmFjayhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJLCBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3Qt
Pm1fd2ViVmlldyksID09LCBwYWdlVVJJKTsKKyAgICAgICAgdGVzdC0+bV9pY29uUmVhZHlTaWdu
YWxSZWNlaXZlZCA9IHRydWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQq
IGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworICAgICAgICB0ZXN0LT5tX2dldEZh
dmljb25SZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBhc2tGb3JJY29uQW5kV2FpdFVudGlsUmVhZHko
KQorICAgIHsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOworICAgICAg
ICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRhYmFzZSwga1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSwgMCwgZ2V0RmF2aWNvbkNhbGxiYWNrLCB0aGlzKTsK
KworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1yZWFkeSIsIEdf
Q0FMTEJBQ0soaWNvblJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKworICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMp
OworICAgIH0KKworICAgIHZvaWQgYXNrQW5kV2FpdEZvckZhdmljb24oY29uc3QgY2hhciogcGFn
ZVVSSSkKKyAgICB7CisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAg
ICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oZGF0YWJhc2UsIHBhZ2VV
UkksIDAsIGdldEZhdmljb25DYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRl
eHQ7CisgICAgR1JlZlB0cjxHQXN5bmNSZXN1bHQ+IG1fZ2V0RmF2aWNvblJlc3VsdDsKKyAgICBi
b29sIG1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMgdm9pZAorc2VydmVy
Q2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0
LCB2b2lkKiBkYXRhKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0Rf
R0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgY2hhciog
Y29udGVudHM7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdf
YnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwg
ImJsYW5rLmljbyIsIE5VTEwpKTsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9G
YXZpY29uLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOworICAgIH0gZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi9ub2Zhdmljb24vZmF2aWNvbi5pY28iKSkgeworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJk
dXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5ndGggPSBz
dHJsZW4oY29udGVudHMpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3Ro
KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFNldERpcmVjdG9yeShGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2
aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkodGVzdC0+bV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9y
eSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGtUZW1wRGlyZWN0b3J5LCA9PSwgd2Via2l0X3dlYl9j
b250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQp
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdENsZWFyRGF0YWJhc2UoRmF2aWNvbkRhdGFiYXNlVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRh
dGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1f
d2ViQ29udGV4dCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2Up
OworCisgICAgR093blB0cjxjaGFyPiBpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uX3VyaShkYXRhYmFzZSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEo
KSkpOworICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEdldEZh
dmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAv
LyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29uIGRhdGEg
d2lsbCBiZQorICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4gYXNzb2Np
YXRlZCBmYXZpY29uLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAv
LyBDaGVjayB0aGUgV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjppY29uLXJlYWR5IHNpZ25hbC4KKyAg
ICB0ZXN0LT5tX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkID0gZmFsc2U7CisgICAgdGVzdC0+YXNr
Rm9ySWNvbkFuZFdhaXRVbnRpbFJlYWR5KCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9pY29uUmVh
ZHlTaWduYWxSZWNlaXZlZCk7CisKKyAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2
YWxpZCBmYXZpY29uLgorICAgIHRlc3QtPmFza0FuZFdhaXRGb3JGYXZpY29uKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0
YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93
ZWJDb250ZXh0KTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24gPSB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoZGF0
YWJhc2UpLCB0ZXN0LT5tX2dldEZhdmljb25SZXN1bHQuZ2V0KCksIDApOworICAgIGdfYXNzZXJ0
KGZhdmljb24pOworCisgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IG1hdGNoIHRo
b3NlIGZyb20gYmxhbmsuaWNvICgxNngxNiBmYXZpY29uKS4KKyAgICBnX2Fzc2VydF9jbXBpbnQo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoZmF2aWNvbiksID09LCAxNik7CisgICAgZ19h
c3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChmYXZpY29uKSwgPT0s
IDE2KTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZmF2aWNvbik7CisKKyAgICAvLyBDaGVj
ayB0aGUgQVBJIHJldHJpZXZpbmcgYW4gaW52YWxpZCBmYXZpY29uLgorICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vZmF2aWNvbiIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+YXNrQW5kV2FpdEZvckZhdmlj
b24oa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vZmF2aWNvbi8iKS5kYXRhKCkpOworCisgICAg
R0Vycm9yKiBlcnJvciA9IDA7CisgICAgZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9mYXZpY29uX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIHRl
c3QtPm1fZ2V0RmF2aWNvblJlc3VsdC5nZXQoKSwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCghZmF2
aWNvbik7CisgICAgZ19hc3NlcnQoZXJyb3IgJiYgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJS
T1JfRkFWSUNPTl9OT1RfRk9VTkQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVS
SShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmlj
b25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKKworICAgIGNvbnN0IGNoYXIqIGJhc2VV
UkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpOworICAgIEdPd25QdHI8Y2hh
cj4gaWNvblVSSSh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJh
c2UsIGJhc2VVUkkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoaWNvblVSSS5nZXQoKSwgPT0sIGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mYXZpY29uLmljbyIpLmRhdGEoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGRlbGV0ZURhdGFiYXNlRmlsZXMoKQoreworICAgIGlmICghZ19maWxlX3Rlc3Qoa1Rl
bXBEaXJlY3RvcnksIEdfRklMRV9URVNUX0lTX0RJUikpCisgICAgICAgIHJldHVybjsKKworICAg
IEdPd25QdHI8Y2hhcj4gZmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwg
IldlYnBhZ2VJY29ucy5kYiIsIE5VTEwpKTsKKyAgICBnX3VubGluayhmaWxlbmFtZS5nZXQoKSk7
CisKKyAgICBmaWxlbmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgIldl
YnBhZ2VJY29ucy5kYi1qb3VybmFsIiwgTlVMTCkpOworICAgIGdfdW5saW5rKGZpbGVuYW1lLmdl
dCgpKTsKKworICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOworfQorCit2b2lkIGJlZm9yZUFs
bCgpCit7CisgICAgLy8gU3RhcnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KKyAgICBrU2Vy
dmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2Fs
bGJhY2spOworCisgICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRl
c3RzLVhYWFhYWCIsIDApOworICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIC8v
IEFkZCB0ZXN0cyB0byB0aGUgc3VpdGUuCisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJX
ZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAic2V0LWRpcmVjdG9yeSIsIHRlc3RTZXREaXJlY3Rvcnkp
OworICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwg
ImdldC1mYXZpY29uIiwgdGVzdEdldEZhdmljb24pOworICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6
OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImdldC1mYXZpY29uLXVyaSIsIHRlc3RHZXRG
YXZpY29uVVJJKTsKKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldlYktpdEZhdmljb25E
YXRhYmFzZSIsICJjbGVhci1kYXRhYmFzZSIsIHRlc3RDbGVhckRhdGFiYXNlKTsKK30KKwordm9p
ZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAgZGVsZXRlRGF0YWJhc2VG
aWxlcygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmlu
ZGV4IGUxZjNiYTAuLjFiNGZhODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVk
aXRpbmdDb21tYW5kcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RmF2aWNvbkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbmRDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKaW5kZXggMTRhZmRhZC4uMGZlNjM2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKQEAg
LTIwOCw2ICsyMDgsMTEgQEAgYm9vbCBXZWJJY29uRGF0YWJhc2U6OmlzT3BlbigpCiAgICAgcmV0
dXJuIG1faWNvbkRhdGFiYXNlSW1wbCAmJiBtX2ljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpOwog
fQogCitib29sIFdlYkljb25EYXRhYmFzZTo6aXNVcmxJbXBvcnRDb21wbGV0ZWQoKQoreworICAg
IHJldHVybiBtX3VybEltcG9ydENvbXBsZXRlZDsKK30KKwogdm9pZCBXZWJJY29uRGF0YWJhc2U6
OnJlbW92ZUFsbEljb25zKCkKIHsKICAgICBtX2ljb25EYXRhYmFzZUltcGwtPnJlbW92ZUFsbElj
b25zKCk7ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRh
dGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKaW5k
ZXggZGRlYjMwOS4uYjcyNTQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkljb25EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29u
RGF0YWJhc2UuaApAQCAtODIsNiArODIsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW1hZ2Uq
IGltYWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBp
Y29uU2l6ZSA9IFdlYkNvcmU6OkludFNpemUoMzIsIDMyKSk7CiAgICAgV2ViQ29yZTo6TmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGljb25TaXplID0gV2ViQ29yZTo6SW50U2l6ZSgzMiwgMzIpKTsKICAgICBi
b29sIGlzT3BlbigpOworICAgIGJvb2wgaXNVcmxJbXBvcnRDb21wbGV0ZWQoKTsKIAogICAgIHZv
aWQgcmVtb3ZlQWxsSWNvbnMoKTsKICAgICB2b2lkIGNoZWNrSW50ZWdyaXR5QmVmb3JlT3Blbmlu
ZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAK
aW5kZXggNzFjN2JiZS4uZDM1YWVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRHdGsuY3BwCkBAIC01Myw4ICs1Myw4IEBAIFN0cmluZyBXZWJDb250ZXh0
OjpwbGF0Zm9ybURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiAKIFN0cmluZyBXZWJD
b250ZXh0OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJldHVybiBXVEY6OlN0cmluZygpOworICAgIEdPd25Q
dHI8Z2NoYXI+IGRhdGFiYXNlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9k
YXRhX2RpcigpLCAid2Via2l0Z3RrIiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhkYXRhYmFzZURpcmVjdG9yeS5nZXQoKSk7CiB9
CiAKIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkoKSBjb25zdAotLSAKMS43LjExLjQKCg==
</data>
<flag name="review"
          id="178519"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="178522"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>