<?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>32510</bug_id>
          
          <creation_ts>2009-12-14 05:17:37 -0800</creation_ts>
          <short_desc>[GTK] provide an API to control the IconDatabase</short_desc>
          <delta_ts>2011-03-08 06:50:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julian de Navascues">julian.navascues</reporter>
          <assigned_to name="Christian Dywan">christian</assigned_to>
          <cc>christian</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171344</commentid>
    <comment_count>0</comment_count>
    <who name="Julian de Navascues">julian.navascues</who>
    <bug_when>2009-12-14 05:17:37 -0800</bug_when>
    <thetext>WebKit Gtk port should provide an API to control Icon Database (as suggested in bug https://bugs.webkit.org/show_bug.cgi?id=32334 ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171801</commentid>
    <comment_count>1</comment_count>
    <who name="Julian de Navascues">julian.navascues</who>
    <bug_when>2009-12-15 04:08:19 -0800</bug_when>
    <thetext>Im preparing a patch to add a IconDatabaseClient in WebCoreSupport as Win port does. In the Win port the client implements the virtual methods but also some extra methods for things such the start up, retrieve icon from url and a lot that doesnt seem needed by know (as far as I know).

So I think all database operations should be done through the client, any thoughts about this issue? 

(In reply to comment #0)
&gt; WebKit Gtk port should provide an API to control Icon Database (as suggested in
&gt; bug https://bugs.webkit.org/show_bug.cgi?id=32334 ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172247</commentid>
    <comment_count>2</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-12-16 03:01:31 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Im preparing a patch to add a IconDatabaseClient in WebCoreSupport as Win port
&gt; does. In the Win port the client implements the virtual methods but also some
&gt; extra methods for things such the start up, retrieve icon from url and a lot
&gt; that doesnt seem needed by know (as far as I know).
&gt; 
&gt; So I think all database operations should be done through the client, any
&gt; thoughts about this issue? 

It sounds right to me. The thing to keep in mind is you should use the client to mediate the communication between applications and WebCore, so you will probably want to create a new GObject to represent the icon database, and expose all functionality through it. It will hook into the client to know what to do/perform stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172705</commentid>
    <comment_count>3</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-12-17 03:10:57 -0800</bug_when>
    <thetext>Do you have an idea of what features you want yet? I think the following is what I would want to use in an application:

set expiration time
clear cache
icon url for page url
icon for page url -- a pixbuf, so it can be from memory
signal icon-updated -- needed for bookmark menus and buttons
make sure private mode is respected
set/ get the database path
can icons work without writing the database to disk? would be very good for private browsing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172727</commentid>
    <comment_count>4</comment_count>
    <who name="Julian de Navascues">julian.navascues</who>
    <bug_when>2009-12-17 05:29:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do you have an idea of what features you want yet? I think the following is
&gt; what I would want to use in an application:
&gt; 
&gt; set expiration time
&gt; clear cache
&gt; icon url for page url
&gt; icon for page url -- a pixbuf, so it can be from memory
&gt; signal icon-updated -- needed for bookmark menus and buttons
&gt; make sure private mode is respected
&gt; set/ get the database path
&gt; can icons work without writing the database to disk? would be very good for
&gt; private browsing

I&apos;m creating a new GObject as Gustavo suggests, thanks. I think all features you have proposed can be easily done using directly the IconDatabase API. But the expiration time is hardcoded in WebCore (set to 4 days). About privacy issues, we are lucky because IconDatabase has a private browsing mode that avoids writtings in disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172779</commentid>
    <comment_count>5</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-12-17 08:03:18 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m creating a new GObject as Gustavo suggests, thanks. I think all features
&gt; you have proposed can be easily done using directly the IconDatabase API. But
&gt; the expiration time is hardcoded in WebCore (set to 4 days). About privacy
&gt; issues, we are lucky because IconDatabase has a private browsing mode that
&gt; avoids writtings in disk.

Yeah, an object sounds good. Maybe expriation time can be changed in WebCore so that it can be changed - but it can be in a different patch, if the other features work it&apos;s relatively low priority.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354593</commentid>
    <comment_count>6</comment_count>
      <attachid>83166</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-02-21 07:52:01 -0800</bug_when>
    <thetext>Created attachment 83166
Implement WebKitIconDatabase API

So I implemented WebKitIconDatabase now. With methods

set_path() to set the folder on disk, or NULL to unset it.
get_icon_uri() to get the icon URI for a page URI
get_icon_pixbuf to get a GdkPixbuf for a page URI
clear() to clear all icons
&quot;icon-loaded&quot; signal with the page URI as the argument, similar to the same signal on WebKitWebView but emitted for any icon including sub frames. This makes it possible to handle icon updates isolated from a particular view (tab).

I also added get_icon_pixbuf() to WebKitWebView because I figure this is a very common use case and I know that a lot of people ask for this in #webkit-gtk, and it is so much easier and also more efficient than having to load the icon with WebKitDownload.

No retaining API as of yet, I&apos;m a bit unsure if/ how this should be exposed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354595</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-21 07:54:07 -0800</bug_when>
    <thetext>Attachment 83166 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1

Source/WebKit/gtk/webkit/webkiticondatabase.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/gtk/webkit/webkiticondatabase.cpp:191:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit/gtk/webkit/webkiticondatabase.cpp:198:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit/gtk/webkit/webkiticondatabase.cpp:253:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit/gtk/webkit/webkitglobals.cpp:319:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebKit/gtk/webkit/webkiticondatabase.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 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>354610</commentid>
    <comment_count>8</comment_count>
      <attachid>83169</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-02-21 08:29:53 -0800</bug_when>
    <thetext>Created attachment 83169
Implement WebKitIconDatabase API  #2

So I implemented WebKitIconDatabase now. With methods

set_path() to set the folder on disk, or NULL to unset it.
get_icon_uri() to get the icon URI for a page URI
get_icon_pixbuf to get a GdkPixbuf for a page URI
clear() to clear all icons
&quot;icon-loaded&quot; signal with the page URI as the argument, similar to the same signal on WebKitWebView but emitted for any icon including sub frames. This makes it possible to handle icon updates isolated from a particular view (tab).

I also added get_icon_pixbuf() to WebKitWebView because I figure this is a very common use case and I know that a lot of people ask for this in #webkit-gtk, and it is so much easier and also more efficient than having to load the icon with WebKitDownload.

No retaining API as of yet, I&apos;m a bit unsure if/ how this should be exposed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354617</commentid>
    <comment_count>9</comment_count>
      <attachid>83169</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-21 08:52:18 -0800</bug_when>
    <thetext>Comment on attachment 83169
Implement WebKitIconDatabase API  #2

(sorry the view in context link won&apos;t work here since, I made this against your old patch. :()

Great stuff! I&apos;d really like to see this update the old DumpRenderTree code and the removal of the old DumpRenderTreeSupport code in this patch. Please fix all the style issues as well as the stuff I mentioned below.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:248
&gt;  static void closeIconDatabaseOnExit()
&gt;  {
&gt;      iconDatabase()-&gt;close();

This code should probably go in webkiticondatabase.c now along with the code that actuall does the initialization.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:-301
&gt;          atexit(closeIconDatabaseOnExit);
&gt;      }
&gt;  
&gt; +    WebKitIconDatabase* database = webkit_get_icon_database();
&gt;      if (enabled) {
&gt; -        iconDatabase()-&gt;setEnabled(true);
&gt;          GOwnPtr&lt;gchar&gt; iconDatabasePath(g_build_filename(g_get_user_data_dir(), &quot;webkit&quot;, &quot;icondatabase&quot;, NULL));
&gt; -        iconDatabase()-&gt;open(iconDatabasePath.get());
&gt; -        return;
&gt; +        webkit_icon_database_set_path(database, iconDatabasePath.get());
&gt; +    }
&gt; +    else {
&gt; +        webkit_icon_database_set_path(database, 0);
&gt;      }
&gt; -
&gt; -    iconDatabase()-&gt;setEnabled(false);
&gt; -    iconDatabase()-&gt;close();

I&apos;d rather you removed this entirely along with where we call it in DumpRenderTreeSupport. If it&apos;s possible for DumpRenderTree to enable and diable the icon database with the API it should use that.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:40
&gt; + * @short_description: A WebKit web application database
&gt; + *
&gt; + * #WebKitIconDatabase provides access to website icons, as shown
&gt; + * in tab labels, window captions or bookmarks.
&gt; + */

If it&apos;s possible to annotate these with a @since you should do that. You should expand this greatly. Explain that when the icon database is enabled WebKit will request so and so with every page. Mention that you can disable it by setting an null path.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:69
&gt; +    priv-&gt;path.set(0);

Instead of explicitly clearing this, you should explicitly &quot;new&quot; and destruct the private area. Take a look at what happens in the webkit_web_view_finalize and webkit_web_view_init for one way to do that.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:120
&gt; +      * Since: 1.3.4

I&apos;m pretty sure all of the 1.3.4&apos;s should be 1.3.11&apos;s.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:182
&gt; + * Passing %NULL disables the icon database.

Both null and &quot;&quot; should probably disable the database.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:187
&gt; +void webkit_icon_database_set_path(WebKitIconDatabase* database,
&gt; +                                   const gchar*        path)

Please use WebKit style here and put this all on one line.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:205
&gt; +    WebCore::iconDatabase()-&gt;open(database-&gt;priv-&gt;path.get());

Casting a gchar* directly to a string here is incorrect. You need to use fileSystemRepresentation from FileSystemGtk.cpp.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:222
&gt; +gchar* webkit_icon_database_get_icon_uri(WebKitIconDatabase* database,
&gt; +                                         const gchar*        pageURI)
&gt; +{

Ditto.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:226
&gt; +    String pageURL(pageURI);

Use String::fromUTF8 here.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:238
&gt; + * The pixbuf can have a variable size and should be resized
&gt; + * before it is displayed.

Does this return the icon in the largest size possible? If so, I&apos;d mention that. If not, that&apos;s probably the behavior we want to get somehow. The documentation for this webkit_web_view_get_icon_pixbuf and actually very different. They should be in sync.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:241
&gt; + * Returns: the a new reference to a #GdkPixbuf

This should also mention that null is returned when there is a problem. What if the page has no favicon?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:252
&gt; +    // The size we pass is irrelevant as long as it is &gt; 0,0

I think we should expand this comment a big. Why is the size irrelevant?

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:256
&gt; +    GdkPixbuf* pixbuf = icon-&gt;getGdkPixbuf ();

Extra space here.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5076
&gt; + * Obtains a #GdkPixbuf for the favicon for the given #WebKitWebView, or

Probably should be Obtains a #GdkPixbuf for the favicon of the given #WebKitWebView

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5077
&gt; + * a default icon. Use webkit_web_view_get_icon_uri() if you need to

Should say when a default icon is returned.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5080
&gt; + * Usually you want to connect to WebKitWebView::icon-loaded and load the
&gt; + * pixbuf in the callback.

Please fix the flow here, so that this abuts the end of the last sentence. You might want to mention that this is a just a shortcut for getting the icon database and then getting the pixbuf from there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354630</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-21 09:21:18 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 83169 [details])
&gt; (sorry the view in context link won&apos;t work here since, I made this against your old patch. :()

Actually, it does. Just navigate to the formatted diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355334</commentid>
    <comment_count>11</comment_count>
      <attachid>83333</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-02-22 09:23:07 -0800</bug_when>
    <thetext>Created attachment 83333
Implement WebKitIconDatabase API #3

Changed DumpRenderTree to use the new API.
Moved code fully into new class except for the atexit handler.
Elaborated in the introduction of the new class.
Fixed all Since tags.
Used placement new syntax, hadn&apos;t known that one before.
Allow &quot;&quot; to unset just like %NULL.
Used String::fromUTF8.
Synced and clarifying _get_icon_pixbuf methods.
Clarified comments on icon sizing.

Pending: use of fileSystemRepresentation, I didn&apos;t find a way to pass that because it uses CString and I was unable to find a convertion function. Will have to check that again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355337</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 09:24:56 -0800</bug_when>
    <thetext>Attachment 83333 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1

Source/WebKit/gtk/webkit/webkiticondatabase.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/gtk/webkit/webkiticondatabase.cpp:224:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:110:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 3 in 12 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>355351</commentid>
    <comment_count>13</comment_count>
      <attachid>83333</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-22 09:52:36 -0800</bug_when>
    <thetext>Comment on attachment 83333
Implement WebKitIconDatabase API #3

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

Great stuff. Watch the style issues. I&apos;d really like to see some GIR annotations in all the new documentation.

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:111
&gt;  void DumpRenderTreeSupportGtk::setIconDatabaseEnabled(bool enabled)
&gt;  {
&gt; -    WebKit::setIconDatabaseEnabled(enabled);
&gt; +    WebKitIconDatabase* database = webkit_get_icon_database();
&gt; +    if (enabled) {
&gt; +        GOwnPtr&lt;gchar&gt; iconDatabasePath(g_build_filename(g_get_user_data_dir(), &quot;webkit&quot;, &quot;icondatabase&quot;, NULL));
&gt; +        webkit_icon_database_set_path(database, iconDatabasePath.get());
&gt; +    } else {
&gt; +        webkit_icon_database_set_path(database, 0);
&gt; +    }
&gt;  }

I would remove this method entirely and just do this in DumpRenderTree itself. DumpRenderTreeSupport really exists just to expose stuff that isn&apos;t in the API yet. When we remove things from here its a big win. : )

Perhaps DRT should have it&apos;s own icon directory too?

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:253
&gt; +    if (!database) {
&gt; +        database = WEBKIT_ICON_DATABASE(g_object_new(WEBKIT_TYPE_ICON_DATABASE, NULL));
&gt; +        atexit(closeIconDatabaseOnExit);
&gt; +    }
&gt; +

It makes sense to move this to where you first open the WebCore icon database actually. I&apos;d move both the atexit call and closeIconDatabaseOnExit to webkitwebicondatabase.cpp.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:43
&gt; + * SECTION:webkitwebdatabase
&gt; + * @short_description: A WebKit web application database
&gt; + *
&gt; + * #WebKitIconDatabase provides access to website icons, as shown
&gt; + * in tab labels, window captions or bookmarks.
&gt; + *
&gt; + * The icon database is enabled by default and stored in
&gt; + * ~/.local/share/webkit/icondatabase, depending on XDG_DATA_HOME.

It&apos;s worth mentioning that all views share the same icon database.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:146
&gt; +     * @page_uri: the URI of the page containing the icon

page_uri -&gt; frame_uri.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:151
&gt; +     * This signal is emitted when a favicon is available for a page,
&gt; +     * including child frames.
&gt; +     * See WebKitWebView::icon-loaded if you simply need the favicon
&gt; +     * for a particular #WebKitWebView.

Might want to clarify this a bit. WebKitWebView::icon-loaded only fires for the main frame icon. It&apos;s probably worth repeating that in the documentation for WebKitWebView::icon-loaded and pointing to this signal for child frames.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:213
&gt; +    if (database-&gt;priv-&gt;path.get()) {
&gt; +        WebCore::iconDatabase()-&gt;setEnabled(false);
&gt; +        WebCore::iconDatabase()-&gt;close();
&gt; +    }

Why do you do you disable the database here?

&gt;&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:224
&gt;&gt; +    //WebCore::iconDatabase()-&gt;open(String(WebCore::fileSystemRepresentation(database-&gt;priv-&gt;path.get())));
&gt; 
&gt; Should have a space between // and comment  [whitespace/comments] [4]

You want WebCore::iconDatabase()-&gt;open(WebCore::filenameToString(database-&gt;priv-&gt;path.get()));

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:236
&gt; + * Returns: the URI for the favicon, or %NULL

You need to mention whether it&apos;s newly allocated or not. It&apos;s probably possible to avoid it using a static CString to just cache it locally in the method.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:246
&gt; +    String pageURL = String::fromUTF8(pageURI);
&gt; +    return g_strdup(WebCore::iconDatabase()-&gt;iconURLForPageURL(pageURL).utf8().data());

You might be able to do something like this:

static CString iconURL;
iconURL = WebCore::iconDatabase()-&gt;iconURLForPageURL(String::fromUTF8(pageURI)).utf8();
return iconURL.data();

If you did that the user does not have to free the data.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:282
&gt; +    return static_cast&lt;GdkPixbuf*&gt;(g_object_ref (pixbuf));

No space after g_object_ref</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356009</commentid>
    <comment_count>14</comment_count>
      <attachid>83469</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-02-23 03:59:29 -0800</bug_when>
    <thetext>Created attachment 83469
Implement WebKitIconDatabase API #4

(In reply to comment #13)
&gt; (From update of attachment 83333 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83333&amp;action=review
&gt; 
&gt; Great stuff. Watch the style issues. I&apos;d really like to see some GIR annotations in all the new documentation.

Oddly enough, I did run check-webkit-style on the patch locally but it didn&apos;t show any issues.

I don&apos;t know what kind of annotations you have in mind. The pixbufs are newly referenced and strings don&apos;t need annotations as far as I&apos;m aware, and webkit_get_icon_database() does have an annotation already.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:111
&gt; &gt;  void DumpRenderTreeSupportGtk::setIconDatabaseEnabled(bool enabled)
&gt; &gt;  {
&gt; &gt; -    WebKit::setIconDatabaseEnabled(enabled);
&gt; &gt; +    WebKitIconDatabase* database = webkit_get_icon_database();
&gt; &gt; +    if (enabled) {
&gt; &gt; +        GOwnPtr&lt;gchar&gt; iconDatabasePath(g_build_filename(g_get_user_data_dir(), &quot;webkit&quot;, &quot;icondatabase&quot;, NULL));
&gt; &gt; +        webkit_icon_database_set_path(database, iconDatabasePath.get());
&gt; &gt; +    } else {
&gt; &gt; +        webkit_icon_database_set_path(database, 0);
&gt; &gt; +    }
&gt; &gt;  }
&gt; 
&gt; I would remove this method entirely and just do this in DumpRenderTree itself. DumpRenderTreeSupport really exists just to expose stuff that isn&apos;t in the API yet. When we remove things from here its a big win. : )
&gt; 
&gt; Perhaps DRT should have it&apos;s own icon directory too?

Moved the code inside DRT and made it use /tmp/webkit now. This actually seems like a good idea to avoid unexplicable test failures.

&gt; &gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:253
&gt; &gt; +    if (!database) {
&gt; &gt; +        database = WEBKIT_ICON_DATABASE(g_object_new(WEBKIT_TYPE_ICON_DATABASE, NULL));
&gt; &gt; +        atexit(closeIconDatabaseOnExit);
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; It makes sense to move this to where you first open the WebCore icon database actually. I&apos;d move both the atexit call and closeIconDatabaseOnExit to webkitwebicondatabase.cpp.

Moved.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:213
&gt; &gt; +    if (database-&gt;priv-&gt;path.get()) {
&gt; &gt; +        WebCore::iconDatabase()-&gt;setEnabled(false);
&gt; &gt; +        WebCore::iconDatabase()-&gt;close();
&gt; &gt; +    }
&gt; 
&gt; Why do you do you disable the database here?

Trying to keep the code flow simple. I changed it now.

&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:236
&gt; &gt; + * Returns: the URI for the favicon, or %NULL
&gt; 
&gt; You need to mention whether it&apos;s newly allocated or not. It&apos;s probably possible to avoid it using a static CString to just cache it locally in the method.

I think in this case it is fully expected to get a newly allocated string. In particular because there is no single string that is always returned, unlike the icon of a page loaded at a point in time. And this could actually lead to bugs when loading more than one icon at the same time.

I also added a comment that icons are cleaned up after 4 days and mentioned that private enable-private-browsing prevents changes of the database on disk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357112</commentid>
    <comment_count>15</comment_count>
      <attachid>83469</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-24 09:42:44 -0800</bug_when>
    <thetext>Comment on attachment 83469
Implement WebKitIconDatabase API #4

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

Thanks for the changes. We just need to have another GTK+ reviewer look this over to okay the API additions.

&gt; Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:497
&gt; +        GOwnPtr&lt;gchar&gt; iconDatabasePath(g_build_filename(g_get_tmp_dir(), &quot;webkit&quot;, &quot;icondatabase&quot;, NULL));

Probably want to change &quot;webkit&quot; to &quot;DumpRenderTree&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357118</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-24 09:52:53 -0800</bug_when>
    <thetext>Some comments from a fellow hacker:

(09:48:27 AM) csaavedra: mrobinson: I remember gir complaining when I had not explicitly annotated the methods returning pixbuf objects
(09:49:21 AM) csaavedra: (unless it is a _new() methods I believe)
(09:49:53 AM) csaavedra: but hey, just generating the gir file and seeing the output should suffice to find out
(09:50:24 AM) csaavedra: there is a typo here btw &quot;* Returns: the a new reference to a #GdkPixbuf, or %NULL&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357902</commentid>
    <comment_count>17</comment_count>
      <attachid>83810</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-02-25 07:29:49 -0800</bug_when>
    <thetext>Created attachment 83810
Implement WebKitIconDatabase API #5

Updated filename, corrected typo and added transfer: full annoation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357947</commentid>
    <comment_count>18</comment_count>
      <attachid>83810</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-25 08:53:28 -0800</bug_when>
    <thetext>Comment on attachment 83810
Implement WebKitIconDatabase API #5

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

Looks good to me! With the fixes for the @since lines and the small documentation change below, this just needs the approval of another GTK+ reviewer. Thanks!

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:233
&gt; + * Since: 1.3.4

Needs to be 1.3.13.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5081
&gt; + * Usually you want to connect to WebKitWebView::icon-loaded and load the

Probably should change &apos;load&apos; to &apos;get&apos; or &apos;call this method&apos;.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5090
&gt; + * Since: 1.3.11

All of these lines need to be 1.3.13, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362435</commentid>
    <comment_count>19</comment_count>
      <attachid>83810</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-03-04 05:29:46 -0800</bug_when>
    <thetext>Comment on attachment 83810
Implement WebKitIconDatabase API #5

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

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:153
&gt; +     * @webView: the object on which the signal is emitted
&gt; +     * @frame_uri: the URI of the frame containing the icon
&gt; +     *

It feels weird to have @webView here, is this actually meant to be @iconDatabase? Also, would it make sense to have the frame as one of the arguments? Everything else looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362478</commentid>
    <comment_count>20</comment_count>
      <attachid>84745</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-04 07:15:24 -0800</bug_when>
    <thetext>Created attachment 84745
 Implement WebKitIconDatabase API #6

Fixed all Since tags.
Changed &apos;load the pixbuf&apos; to &apos;call this method&apos;.
webView → database
added a frame argument to icon-loaded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362480</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-04 07:17:37 -0800</bug_when>
    <thetext>Attachment 84745 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1

Source/WebKit/gtk/webkit/webkiticondatabase.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:500:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 2 in 13 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>362518</commentid>
    <comment_count>22</comment_count>
      <attachid>84745</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-04 08:27:58 -0800</bug_when>
    <thetext>Comment on attachment 84745
 Implement WebKitIconDatabase API #6

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

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h:-4
&gt; -/*
&gt; - *  Copyright (C) Research In Motion Limited 2010. All rights reserved.
&gt; - *
&gt; - *  This library is free software; you can redistribute it and/or

Did you mean to remove this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362553</commentid>
    <comment_count>23</comment_count>
      <attachid>84760</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-04 09:12:38 -0800</bug_when>
    <thetext>Created attachment 84760
Implement WebKitIconDatabase API #7

&gt; Did you mean to remove this file?
No, accident during conflict resolving.
I also had to update the patch because apparently IconDatabase in WebCore changed after the commit I had written it for.

So updated patch, against latest TOT, and style issues resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363540</commentid>
    <comment_count>24</comment_count>
      <attachid>84760</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-07 13:27:57 -0800</bug_when>
    <thetext>Comment on attachment 84760
Implement WebKitIconDatabase API #7

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

Great stuff. Thanks for implementing this.

&gt; Source/WebKit/gtk/webkit/webkitglobals.cpp:242
&gt; +    static WebKitIconDatabase* database = 0;
&gt; +
&gt; +    webkitInit();
&gt; +
&gt; +    if (!database)

Small nit here. Just move the declaration of database right above where it&apos;s first used.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:50
&gt; + * found images into the memory cache if possible. The signal &quot;icon-loaded&quot;

found images -&gt; images found or images it finds

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:279
&gt; + * The pixbuf will be the largest possible size and should be
&gt; + * resized before it is displayed.

I guess it might be clearer here to say &quot;will have the same size as the original image from the server&quot; or something similar.

&gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:282
&gt; + * Returns: (transfer full): a new reference to a #GdkPixbuf, or %NULL

No comma necessary here, I think.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:5080
&gt; + * The pixbuf will be the largest possible size and should be
&gt; + * resized before it is displayed.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363948</commentid>
    <comment_count>25</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2011-03-08 06:50:53 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit/gtk/webkit/webkiticondatabase.cpp:282
&gt; &gt; + * Returns: (transfer full): a new reference to a #GdkPixbuf, or %NULL
&gt; 
&gt; No comma necessary here, I think.

The comma is always used in &quot;it could also be NULL&quot; cases, look at gtk_image_get_ or gtk_notebook_get_ functions which can return NULL.

Committed as r80561.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83166</attachid>
            <date>2011-02-21 07:52:01 -0800</date>
            <delta_ts>2011-02-21 08:29:53 -0800</delta_ts>
            <desc>Implement WebKitIconDatabase API</desc>
            <filename>0001-GTK-provide-an-API-to-control-the-IconDatabase.diff</filename>
            <type>text/plain</type>
            <size>22561</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSA3MDZiNTFlMGJkYmE0NjQ0OWFkYmUyNjhmNWRmOWUxNGRkZDYwYzFiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUxMAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgoqIEdOVW1ha2VmaWxlLmFtOgoqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCiAgICB0aGUgaWNvbiBkYXRhYmFzZSBm
b3IgbmV3IGljb25zLgoqIHdlYmtpdC93ZWJraXQuaDoKKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
OgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBB
ZGQgYSBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbAogICAgaWNvbiBkYXRhYmFzZS4KKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
Lmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQogICAgb2JqZWN0IHdpdGggbWV0aG9k
cyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xlYXJpbmcKICAgIHdhaXRpbmcg
Zm9yIG5ldyBpY29ucy4KKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Ciogd2Via2l0L3dlYmtp
dHdlYnZpZXcuaDogQWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgogICAgZm9y
IHRoZSB3ZWIgdmlldy4KLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMjMgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcCAgICB8ICAgIDUgKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgIHwgICAgMyArCiBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAgICAgICAgICB8ICAgMzIgKystCiBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oICAgICAgICAgICB8ICAgIDMgKwogU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgICAgfCAgMjc2ICsrKysr
KysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlLmggICAgICB8ICAgNzkgKysrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAgICAgICAgICB8ICAgMjYgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmggICAgICAgICAgIHwgICAgMyArCiAxMSBmaWxlcyBjaGFuZ2VkLCA0NDcg
aW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaAoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwppbmRleCAzNzBkMWZlLi43MjQ4MzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTEtMDItMjEgIENocmlzdGlhbiBEeXdhbiAgPGNocmlzdGlhbkBsYW5lZG8u
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIHByb3ZpZGUgYW4gQVBJIHRvIGNvbnRyb2wgdGhlIEljb25EYXRhYmFzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MTAKKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCisgICAgICAgICAgICB0aGUgaWNvbiBkYXRhYmFz
ZSBmb3IgbmV3IGljb25zLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNw
cDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBBZGQgYSBmdW5jdGlvbiB0byBv
YnRhaW4gdGhlIGdsb2JhbAorICAgICAgICAgICAgaWNvbiBkYXRhYmFzZS4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNv
bmRhdGFiYXNlLmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQorICAgICAgICAgICAg
b2JqZWN0IHdpdGggbWV0aG9kcyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xl
YXJpbmcKKyAgICAgICAgICAgIHdhaXRpbmcgZm9yIG5ldyBpY29ucy4KKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDog
QWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgorICAgICAgICAgICAgZm9yIHRo
ZSB3ZWIgdmlldy4KKwogMjAxMS0wMi0yMSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCmluZGV4IGUzYTAzMjYuLjEwNWQyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMTUsNiArMTE1LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRl
Y2lzaW9uLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRl
c3RyZXN1bHQuaCBcCisJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXApAQCAtMjAzLDYgKzIwNCw3IEBAIHdlYmtp
dGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFs
c3ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1
bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHBy
aXZhdGUuaCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGRjZTdmNjguLmZhNjdkYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRlcnJvci5oIgogI2luY2x1
ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgor
I2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmty
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3Rwcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0bmV0d29ya3Jlc3BvbnNlLmgiCkBAIC05MjMsNiArOTI0LDEwIEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogICAgIGlmIChtX2xv
YWRpbmdFcnJvclBhZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGNvbnN0IGdjaGFyKiBmcmFt
ZVVSSSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKKyAgICBXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLCBmcmFtZVVSSSk7CisK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsK
IAogICAgIC8vIEF2b2lkIHJlcG9ydGluZyBmYXZpY29ucyBmb3Igbm9uLW1haW4gZnJhbWVzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGQ5M2ZhZTEuLmJmM2UxMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRnbG9iYWxzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNw
b25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjBiNjA3Yi4uMGI4ODA4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC00MSw2ICs0MSw5
IEBACiAKIEdfQkVHSU5fREVDTFMKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFz
ZSBXZWJLaXRJY29uRGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNl
Q2xhc3MgV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3M7CisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRO
ZXR3b3JrUmVxdWVzdCBXZWJLaXROZXR3b3JrUmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXROZXR3b3JrUmVxdWVzdENsYXNzIFdlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3M7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAppbmRleCBjMjM4MjRjLi5jZDc4
MDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCkBAIC0z
OSw2ICszOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5o
IgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdHNvdXBh
dXRoZGlhbG9nLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3
ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaCIKQEAgLTIyMiw2ICsyMjMsMjYgQEAgc3Rh
dGljIEd0a1dpZGdldCogY3VycmVudFRvcGxldmVsQ2FsbGJhY2soV2ViS2l0U291cEF1dGhEaWFs
b2cqIGZlYXR1cmUsIFNvdXBNZXMKICAgICAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICog
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlOgorICoKKyAqIFJldHVybnMgdGhlICNXZWJLaXRJY29u
RGF0YWJhc2UgcHJvdmlkaW5nIGFjY2VzcyB0byB3ZWJzaXRlIGljb25zLgorICoKKyAqIFJldHVy
biB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCAjV2ViS2l0SWNvbkRhdGFiYXNl
CisgKgorICogU2luY2U6IDEuMy40CisgKi8KK1dlYktpdEljb25EYXRhYmFzZSogd2Via2l0X2dl
dF9pY29uX2RhdGFiYXNlKCkKK3sKKyAgICBzdGF0aWMgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSA9IDA7CisKKyAgICB3ZWJraXRJbml0KCk7CisKKyAgICBpZiAoIWRhdGFiYXNlKQorICAg
ICAgICBkYXRhYmFzZSA9IFdFQktJVF9JQ09OX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9JQ09OX0RBVEFCQVNFLCBOVUxMKSk7CisKKyAgICByZXR1cm4gZGF0YWJhc2U7Cit9CiBz
dGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiB7CiAgICAgaWNvbkRhdGFiYXNl
KCktPmNsb3NlKCk7CkBAIC0yOTAsMTUgKzMxMSwxNCBAQCB2b2lkIHNldEljb25EYXRhYmFzZUVu
YWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICBhdGV4aXQoY2xvc2VJY29uRGF0YWJhc2VPbkV4
aXQpOwogICAgIH0KIAorICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRf
Z2V0X2ljb25fZGF0YWJhc2UoKTsKICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBpY29uRGF0
YWJhc2UoKS0+c2V0RW5hYmxlZCh0cnVlKTsKICAgICAgICAgR093blB0cjxnY2hhcj4gaWNvbkRh
dGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtp
dCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7Ci0gICAgICAgIGljb25EYXRhYmFzZSgpLT5vcGVu
KGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBpY29uRGF0YWJhc2VQYXRoLmdldCgp
KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9w
YXRoKGRhdGFiYXNlLCAwKTsKICAgICB9Ci0KLSAgICBpY29uRGF0YWJhc2UoKS0+c2V0RW5hYmxl
ZChmYWxzZSk7Ci0gICAgaWNvbkRhdGFiYXNlKCktPmNsb3NlKCk7CiB9CiAKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKaW5kZXggNjEyYzE5NS4uMzNkMmI4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCkBAIC01OCw2ICs1OCw5IEBA
IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsK
IFdFQktJVF9BUEkgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UgKgogd2Via2l0X2dldF93ZWJfcGx1
Z2luX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIFdlYktp
dEljb25EYXRhYmFzZSAqCit3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UgICAgICAgICAgICAgICAg
ICAgICAgICAodm9pZCk7CisKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3NldF9jYWNoZV9tb2Rl
bCAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdENhY2hlTW9kZWwgICAgIGNhY2hlX21v
ZGVsKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmM4ZWVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5j
cHAKQEAgLTAsMCArMSwyNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFu
IER5d2FuIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAid2Vi
a2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbnByaXZh
dGUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKKy8qKgorICogU0VD
VElPTjp3ZWJraXR3ZWJkYXRhYmFzZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIFdlYktpdCB3
ZWIgYXBwbGljYXRpb24gZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0SWNvbkRhdGFiYXNlIHByb3Zp
ZGVzIGFjY2VzcyB0byB3ZWJzaXRlIGljb25zLCBhcyBzaG93bgorICogaW4gdGFiIGxhYmVscywg
d2luZG93IGNhcHRpb25zIG9yIGJvb2ttYXJrcy4KKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1BBVEgsCit9OworCitlbnVt
IHsKKyAgICBJQ09OX0xPQURFRCwKKworICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3Vp
bnQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0SWNvbkRhdGFiYXNlLCB3ZWJraXRfaWNvbl9kYXRhYmFzZSwg
R19UWVBFX09CSkVDVCk7CisKK3N0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSB7Cisg
ICAgR093blB0cjxnY2hhcj4gcGF0aDsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlID0gV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKyAgICBXZWJLaXRJ
Y29uRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gZGF0YWJhc2UtPnByaXY7CisKKyAgICBwcml2LT5w
YXRoLnNldCgwKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0lD
T05fREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQ
Uk9QX1BBVEg6CisgICAgICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNl
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAgIGdfdmFsdWVf
c2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2Up
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5p
dChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5k
aXNwb3NlID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
cHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdEljb25EYXRhYmFzZTpwYXRoOgor
ICAgICAgKgorICAgICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBm
b2xkZXIuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjMuNAorICAgICAgKi8KKyAgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUEFUSCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJw
YXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRhdGFi
YXNlIGZvbGRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVk
OgorICAgICAqIEB3ZWJWaWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1p
dHRlZAorICAgICAqIEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRo
ZSBpY29uCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBmYXZp
Y29uIGlzIGF2YWlsYWJsZSBmb3IgYSBwYWdlLAorICAgICAqIGluY2x1ZGluZyBjaGlsZCBmcmFt
ZXMuCisgICAgICogU2VlIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBzaW1wbHkg
bmVlZCB0aGUgZmF2aWNvbgorICAgICAqIGZvciBhIHBhcnRpY3VsYXIgI1dlYktpdFdlYlZpZXcu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjQKKyAgICAgKi8KKyAgICB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9zaWduYWxzW0lDT05fTE9BREVEXSA9IGdfc2lnbmFsX25ldygiaWNvbi1sb2FkZWQi
LAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xhc3MpLAorICAgICAgICAgICAgKEdT
aWduYWxGbGFncylHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAg
IEdfVFlQRV9TVFJJTkcpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBz
aXplb2YoV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9pbml0KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7Cisg
ICAgZGF0YWJhc2UtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZGF0YWJhc2Us
IFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpOwor
fQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoOgorICogQGRhdGFiYXNl
OiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBhYnNvbHV0ZSBw
YXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
YWJzb2x1dGUgcGF0aCBvZiB0aGUgZGF0YWJhc2UgZm9sZGVyCisgKgorICogU2luY2U6IDEuMy40
CisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3Bh
dGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSksIDApOworCisgICAgcmV0dXJu
IGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX3NldF9wYXRoOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAq
CisgKiBTcGVjaWZpZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRhdGFiYXNlIGZvbGRlciBv
biBkaXNrLgorICoKKyAqIFBhc3NpbmcgJU5VTEwgZGlzYWJsZXMgdGhlIGljb24gZGF0YWJhc2Uu
CisgKgorICogU2luY2U6IDEuMy40CisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3Nl
dF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGF0aCkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisKKyAgICBpZiAo
ZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkgIT0gMCkgeworICAgICAgICBXZWJDb3JlOjppY29u
RGF0YWJhc2UoKS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLT5jbG9zZSgpOworICAgIH0KKworICAgIGRhdGFiYXNlLT5wcml2LT5wYXRoLnNldChn
X3N0cmR1cChwYXRoKSk7CisKKyAgICBpZiAocGF0aCA9PSAwKSB7CisgICAgICAgIFdlYkNvcmU6
Omljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgV2ViQ29yZTo6aWNv
bkRhdGFiYXNlKCktPmNsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXZWJD
b3JlOjppY29uRGF0YWJhc2UoKS0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICBXZWJDb3JlOjppY29u
RGF0YWJhc2UoKS0+b3BlbihkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKSk7Cit9CisKKy8qKgor
ICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpOgorICogQGRhdGFiYXNlOiBhICNX
ZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5p
bmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0
aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25f
dXJpKCkuCisgKgorICogUmV0dXJuczogdGhlIFVSSSBmb3IgdGhlIGZhdmljb24sIG9yICVOVUxM
CisgKgorICogU2luY2U6IDEuMy40CisgKiovCitnY2hhciogd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZVVSSSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRh
YmFzZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOworCisgICAg
U3RyaW5nIHBhZ2VVUkwocGFnZVVSSSk7CisgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omlj
b25EYXRhYmFzZSgpLT5pY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsK
K30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CisgKiBA
ZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhl
IHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9m
IHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgKgorICogVGhlIHBpeGJ1ZiBj
YW4gaGF2ZSBhIHZhcmlhYmxlIHNpemUgYW5kIHNob3VsZCBiZSByZXNpemVkCisgKiBiZWZvcmUg
aXQgaXMgZGlzcGxheWVkLgorICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3Bp
eGJ1ZigpLgorICoKKyAqIFJldHVybnM6IHRoZSBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2RrUGl4
YnVmCisgKgorICogU2luY2U6IDEuMy40CisgKiovCitHZGtQaXhidWYqIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3BpeGJ1ZihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIq
ICAgICAgICBwYWdlVVJJKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19J
Q09OX0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFn
ZVVSSSwgMCk7CisKKyAgICBTdHJpbmcgcGFnZVVSTChwYWdlVVJJKTsKKyAgICAvLyBUaGUgc2l6
ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgYXMgbG9uZyBhcyBpdCBpcyA+IDAsMAorICAgIFdlYkNv
cmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmljb25Gb3JQYWdlVVJM
KHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYsMTYpKTsKKyAgICBpZiAoIWljb24pCisgICAg
ICAgIHJldHVybiAwOworICAgIEdka1BpeGJ1ZiogcGl4YnVmID0gaWNvbi0+Z2V0R2RrUGl4YnVm
ICgpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmIChwaXhidWYpKTsKK30KKworLyoqCisg
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcigpOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJ
Y29uRGF0YWJhc2UKKyAqCisgKiBDbGVhcnMgYWxsIGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgor
ICoKKyAqIFNpbmNlOiAxLjMuNAorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVh
cihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKworICAgIFdlYkNvcmU6Omljb25E
YXRhYmFzZSgpLT5yZW1vdmVBbGxJY29ucygpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTY5YmJkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
d2Via2l0aWNvbmRhdGFiYXNlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNlX2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
PgorI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSAgICAgICAgICAgICAod2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0lDT05fREFUQUJBU0Uob2Jq
KSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9U
WVBFX0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9J
Q09OX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKG9iaikgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0lDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UpKQorI2Rl
ZmluZSBXRUJLSVRfSUNPTl9EQVRBQkFTRV9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNv
bkRhdGFiYXNlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlUHJp
dmF0ZSBXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEljb25EYXRh
YmFzZSB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+
Ki8KKyAgICBXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9X
ZWJLaXRJY29uRGF0YWJhc2VDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
KworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9pY29uX2RhdGFiYXNlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJ
IEdfQ09OU1RfUkVUVVJOIGdjaGFyKgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAg
ICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGggICAgICAgICAgICAoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGF0aCk7CisKK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmkgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2Uq
IGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgord2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9p
Y29uX2RhdGFiYXNlX2NsZWFyICAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogd2Via2l0aWNvbmRhdGFiYXNlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2YTg1
NmI0Li45NjY5OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lk
ZWNpc2lvbi5oIgogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAi
d2Via2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJh
c2UuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29y
a3JlcXVlc3QuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCIKQEAgLTUwNjks
NiArNTA3MCwzMSBAQCBHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3VyaShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogfQogCiAvKioKKyAqIHdlYmtpdF93ZWJf
dmlld19nZXRfaWNvbl9waXhidWY6CisgKiBAd2ViVmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9i
amVjdAorICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIGZvciB0aGUgZmF2aWNvbiBmb3IgdGhl
IGdpdmVuICNXZWJLaXRXZWJWaWV3LCBvcgorICogYSBkZWZhdWx0IGljb24uIFVzZSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8KKyAqIGRpc3Rpbmd1aXNoIHRo
ZXNlIGNhc2VzLgorICogVXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRvIFdlYktpdFdlYlZp
ZXc6Omljb24tbG9hZGVkIGFuZCBsb2FkIHRoZQorICogcGl4YnVmIGluIHRoZSBjYWxsYmFjay4K
KyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgbmV3bHkgcmVmZXJlbmNlZCAjR2RrUGl4YnVmIGZvciB0
aGUgZmF2aWNvbgorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitHZGtQaXhidWYqIHdlYmtpdF93
ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisg
ICAgY29uc3QgZ2NoYXIqIHBhZ2VVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3
KTsKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2Rh
dGFiYXNlKCk7CisgICAgcmV0dXJuIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1
ZihkYXRhYmFzZSwgcGFnZVVSSSk7Cit9CisKKworCisvKioKICAqIHdlYmtpdF93ZWJfdmlld19n
ZXRfZG9tX2RvY3VtZW50OgogICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKICAqIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggMTgzOGJmZS4uMzhjOWE3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0zOTcsNiAr
Mzk3LDkgQEAgd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3LAogV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVS
TiBnY2hhciAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpICAgICAgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwogCitXRUJLSVRfQVBJIEdka1BpeGJ1
ZiAqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOworCiBXRUJLSVRfQVBJIFdlYktpdERPTURvY3Vt
ZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKLS0gCjEuNy4zLjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83169</attachid>
            <date>2011-02-21 08:29:53 -0800</date>
            <delta_ts>2011-02-22 09:23:07 -0800</delta_ts>
            <desc>Implement WebKitIconDatabase API  #2</desc>
            <filename>0001-GTK-provide-an-API-to-control-the-IconDatabase.diff</filename>
            <type>text/plain</type>
            <size>22546</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSBjM2Y3ODg4MDg3ODNiZDQ4MDg4YWE2MzlmYTQ3NGQ0YzE2NTU1ZjE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUxMAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgoqIEdOVW1ha2VmaWxlLmFtOgoqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCiAgICB0aGUgaWNvbiBkYXRhYmFzZSBm
b3IgbmV3IGljb25zLgoqIHdlYmtpdC93ZWJraXQuaDoKKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
OgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBB
ZGQgYSBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbAogICAgaWNvbiBkYXRhYmFzZS4KKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
Lmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQogICAgb2JqZWN0IHdpdGggbWV0aG9k
cyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xlYXJpbmcKICAgIHdhaXRpbmcg
Zm9yIG5ldyBpY29ucy4KKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Ciogd2Via2l0L3dlYmtp
dHdlYnZpZXcuaDogQWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgogICAgZm9y
IHRoZSB3ZWIgdmlldy4KLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMjMgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcCAgICB8ICAgIDUgKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgIHwgICAgMyArCiBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAgICAgICAgICB8ICAgMzEgKystCiBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oICAgICAgICAgICB8ICAgIDMgKwogU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgICAgfCAgMjc2ICsrKysr
KysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFi
YXNlLmggICAgICB8ICAgNzggKysrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAgICAgICAgICB8ICAgMjYgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmggICAgICAgICAgIHwgICAgMyArCiAxMSBmaWxlcyBjaGFuZ2VkLCA0NDUg
aW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaAoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwppbmRleCAzNzBkMWZlLi43MjQ4MzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTEtMDItMjEgIENocmlzdGlhbiBEeXdhbiAgPGNocmlzdGlhbkBsYW5lZG8u
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIHByb3ZpZGUgYW4gQVBJIHRvIGNvbnRyb2wgdGhlIEljb25EYXRhYmFzZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI1MTAKKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCisgICAgICAgICAgICB0aGUgaWNvbiBkYXRhYmFz
ZSBmb3IgbmV3IGljb25zLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNw
cDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBBZGQgYSBmdW5jdGlvbiB0byBv
YnRhaW4gdGhlIGdsb2JhbAorICAgICAgICAgICAgaWNvbiBkYXRhYmFzZS4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0aWNv
bmRhdGFiYXNlLmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQorICAgICAgICAgICAg
b2JqZWN0IHdpdGggbWV0aG9kcyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xl
YXJpbmcKKyAgICAgICAgICAgIHdhaXRpbmcgZm9yIG5ldyBpY29ucy4KKyAgICAgICAgKiB3ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDog
QWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgorICAgICAgICAgICAgZm9yIHRo
ZSB3ZWIgdmlldy4KKwogMjAxMS0wMi0yMSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtCmluZGV4IGUzYTAzMjYuLjEwNWQyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMTUsNiArMTE1LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRl
Y2lzaW9uLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRl
c3RyZXN1bHQuaCBcCisJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXApAQCAtMjAzLDYgKzIwNCw3IEBAIHdlYmtp
dGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFs
c3ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1
bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdHBy
aXZhdGUuaCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5j
cHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAg
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdHByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGRjZTdmNjguLmZhNjdkYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRlcnJvci5oIgogI2luY2x1
ZGUgIndlYmtpdGdsb2JhbHMuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgor
I2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmty
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3Rwcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0bmV0d29ya3Jlc3BvbnNlLmgiCkBAIC05MjMsNiArOTI0LDEwIEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogICAgIGlmIChtX2xv
YWRpbmdFcnJvclBhZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIGNvbnN0IGdjaGFyKiBmcmFt
ZVVSSSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShtX2ZyYW1lKTsKKyAgICBXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKGRhdGFiYXNlLCAiaWNvbi1sb2FkZWQiLCBmcmFtZVVSSSk7CisK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsK
IAogICAgIC8vIEF2b2lkIHJlcG9ydGluZyBmYXZpY29ucyBmb3Igbm9uLW1haW4gZnJhbWVzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGQ5M2ZhZTEuLmJmM2UxMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRnbG9iYWxzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNw
b25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjBiNjA3Yi4uMGI4ODA4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC00MSw2ICs0MSw5
IEBACiAKIEdfQkVHSU5fREVDTFMKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFz
ZSBXZWJLaXRJY29uRGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNl
Q2xhc3MgV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3M7CisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRO
ZXR3b3JrUmVxdWVzdCBXZWJLaXROZXR3b3JrUmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXROZXR3b3JrUmVxdWVzdENsYXNzIFdlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3M7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAppbmRleCBjMjM4MjRjLi5iODc4
MmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCkBAIC0z
OSw2ICszOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5o
IgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdHNvdXBh
dXRoZGlhbG9nLmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3
ZWJraXR3ZWJwbHVnaW5kYXRhYmFzZXByaXZhdGUuaCIKQEAgLTIyMiw2ICsyMjMsMjYgQEAgc3Rh
dGljIEd0a1dpZGdldCogY3VycmVudFRvcGxldmVsQ2FsbGJhY2soV2ViS2l0U291cEF1dGhEaWFs
b2cqIGZlYXR1cmUsIFNvdXBNZXMKICAgICAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICog
d2Via2l0X2dldF9pY29uX2RhdGFiYXNlOgorICoKKyAqIFJldHVybnMgdGhlICNXZWJLaXRJY29u
RGF0YWJhc2UgcHJvdmlkaW5nIGFjY2VzcyB0byB3ZWJzaXRlIGljb25zLgorICoKKyAqIFJldHVy
biB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCAjV2ViS2l0SWNvbkRhdGFiYXNl
CisgKgorICogU2luY2U6IDEuMy40CisgKi8KK1dlYktpdEljb25EYXRhYmFzZSogd2Via2l0X2dl
dF9pY29uX2RhdGFiYXNlKCkKK3sKKyAgICBzdGF0aWMgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSA9IDA7CisKKyAgICB3ZWJraXRJbml0KCk7CisKKyAgICBpZiAoIWRhdGFiYXNlKQorICAg
ICAgICBkYXRhYmFzZSA9IFdFQktJVF9JQ09OX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9JQ09OX0RBVEFCQVNFLCBOVUxMKSk7CisKKyAgICByZXR1cm4gZGF0YWJhc2U7Cit9CiBz
dGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCiB7CiAgICAgaWNvbkRhdGFiYXNl
KCktPmNsb3NlKCk7CkBAIC0yOTAsMTUgKzMxMSwxMyBAQCB2b2lkIHNldEljb25EYXRhYmFzZUVu
YWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICBhdGV4aXQoY2xvc2VJY29uRGF0YWJhc2VPbkV4
aXQpOwogICAgIH0KIAorICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRf
Z2V0X2ljb25fZGF0YWJhc2UoKTsKICAgICBpZiAoZW5hYmxlZCkgewotICAgICAgICBpY29uRGF0
YWJhc2UoKS0+c2V0RW5hYmxlZCh0cnVlKTsKICAgICAgICAgR093blB0cjxnY2hhcj4gaWNvbkRh
dGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtp
dCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7Ci0gICAgICAgIGljb25EYXRhYmFzZSgpLT5vcGVu
KGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBpY29uRGF0YWJhc2VQYXRoLmdldCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChk
YXRhYmFzZSwgMCk7CiAgICAgfQotCi0gICAgaWNvbkRhdGFiYXNlKCktPnNldEVuYWJsZWQoZmFs
c2UpOwotICAgIGljb25EYXRhYmFzZSgpLT5jbG9zZSgpOwogfQogCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCmluZGV4IDYxMmMxOTUuLjMzZDJiOGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaApAQCAtNTgsNiArNTgsOSBAQCB3ZWJr
aXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbiAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJL
SVRfQVBJIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlICoKIHdlYmtpdF9nZXRfd2ViX3BsdWdpbl9k
YXRhYmFzZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRJY29u
RGF0YWJhc2UgKgord2Via2l0X2dldF9pY29uX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQpOworCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwgICAg
ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDYWNoZU1vZGVsICAgICBjYWNoZV9tb2RlbCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkZWY0OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwCkBA
IC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIENocmlzdGlhbiBEeXdh
biA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3
ZWJraXRpY29uZGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIndlYmtpdGds
b2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmlnaW5wcml2YXRlLmgi
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisvKioKKyAqIFNFQ1RJT046
d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSBXZWJLaXQgd2ViIGFw
cGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dlYktpdEljb25EYXRhYmFzZSBwcm92aWRlcyBh
Y2Nlc3MgdG8gd2Vic2l0ZSBpY29ucywgYXMgc2hvd24KKyAqIGluIHRhYiBsYWJlbHMsIHdpbmRv
dyBjYXB0aW9ucyBvciBib29rbWFya3MuCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
KworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QQVRILAorfTsKKworZW51bSB7Cisg
ICAgSUNPTl9MT0FERUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdl
YmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RF
RklORV9UWVBFKFdlYktpdEljb25EYXRhYmFzZSwgd2Via2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQ
RV9PQkpFQ1QpOworCitzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZVByaXZhdGUgeworICAgIEdP
d25QdHI8Z2NoYXI+IHBhdGg7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSA9IFdFQktJVF9JQ09OX0RBVEFCQVNFKG9iamVjdCk7CisgICAgV2ViS2l0SWNvbkRh
dGFiYXNlUHJpdmF0ZSogcHJpdiA9IGRhdGFiYXNlLT5wcml2OworCisgICAgcHJpdi0+cGF0aC5z
ZXQoMCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfaWNvbl9kYXRhYmFzZV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfaWNvbl9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IFdFQktJVF9JQ09OX0RB
VEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9Q
QVRIOgorICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSA9IFdFQktJVF9JQ09OX0RBVEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9QQVRIOgorICAgICAgICBnX3ZhbHVlX3NldF9z
dHJpbmcodmFsdWUsIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2Vi
S2l0SWNvbkRhdGFiYXNlQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9z
ZSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2Rpc3Bvc2U7CisgICAgZ29iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Byb3BlcnR5OworICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3Byb3Bl
cnR5OworCisgICAgIC8qKgorICAgICAgKiBXZWJLaXRJY29uRGF0YWJhc2U6cGF0aDoKKyAgICAg
ICoKKyAgICAgICogVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGljb24gZGF0YWJhc2UgZm9sZGVy
LgorICAgICAgKgorICAgICAgKiBTaW5jZTogMS4zLjQKKyAgICAgICovCisgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBVEgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygicGF0aCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJQYXRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBm
b2xkZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZDoKKyAg
ICAgKiBAd2ViVmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQK
KyAgICAgKiBAcGFnZV91cmk6IHRoZSBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNv
bgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEgZmF2aWNvbiBp
cyBhdmFpbGFibGUgZm9yIGEgcGFnZSwKKyAgICAgKiBpbmNsdWRpbmcgY2hpbGQgZnJhbWVzLgor
ICAgICAqIFNlZSBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBpZiB5b3Ugc2ltcGx5IG5lZWQg
dGhlIGZhdmljb24KKyAgICAgKiBmb3IgYSBwYXJ0aWN1bGFyICNXZWJLaXRXZWJWaWV3LgorICAg
ICAqCisgICAgICogU2luY2U6IDEuMy40CisgICAgICovCisgICAgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0gPSBnX3NpZ25hbF9uZXcoImljb24tbG9hZGVkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFs
RmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVM
TCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBHX1RZ
UEVfU1RSSU5HKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2lj
b25fZGF0YWJhc2VfaW5pdChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGRh
dGFiYXNlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGRhdGFiYXNlLCBXRUJL
SVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aDoKKyAqIEBkYXRhYmFzZTogYSAj
V2ViS2l0SWNvbkRhdGFiYXNlCisgKgorICogRGV0ZXJtaW5lcyB0aGUgYWJzb2x1dGUgcGF0aCB0
byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCisgKgorICogUmV0dXJuczogdGhlIGFic29s
dXRlIHBhdGggb2YgdGhlIGRhdGFiYXNlIGZvbGRlcgorICoKKyAqIFNpbmNlOiAxLjMuNAorICoq
LworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKworICAgIHJldHVybiBkYXRh
YmFzZS0+cHJpdi0+cGF0aC5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9zZXRfcGF0aDoKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNlCisgKgorICog
U3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlz
ay4KKyAqCisgKiBQYXNzaW5nICVOVUxMIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgorICoK
KyAqIFNpbmNlOiAxLjMuNAorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgaWYgKGRhdGFi
YXNlLT5wcml2LT5wYXRoLmdldCgpKSB7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgp
LT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmNs
b3NlKCk7CisgICAgfQorCisgICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBh
dGgpKTsKKworICAgIGlmICghcGF0aCkgeworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2Uo
KS0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5j
bG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViQ29yZTo6aWNvbkRhdGFi
YXNlKCktPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPm9w
ZW4oZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2dldF9pY29uX3VyaToKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFi
YXNlCisgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisg
KgorICogT2J0YWlucyB0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2Ug
VVJJLgorICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSgpLgorICoKKyAq
IFJldHVybnM6IHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uLCBvciAlTlVMTAorICoKKyAqIFNpbmNl
OiAxLjMuNAorICoqLworZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaShX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VVUkkpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKworICAgIFN0cmluZyBwYWdlVVJM
KHBhZ2VVUkkpOworICAgIHJldHVybiBnX3N0cmR1cChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
aWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRmOCgpLmRhdGEoKSk7Cit9CisKKy8qKgorICog
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmOgorICogQGRhdGFiYXNlOiBhICNX
ZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5p
bmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBm
b3IgdGhlIGdpdmVuIHBhZ2UgVVJJLgorICoKKyAqIFRoZSBwaXhidWYgY2FuIGhhdmUgYSB2YXJp
YWJsZSBzaXplIGFuZCBzaG91bGQgYmUgcmVzaXplZAorICogYmVmb3JlIGl0IGlzIGRpc3BsYXll
ZC4KKyAqIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoKS4KKyAqCisg
KiBSZXR1cm5zOiB0aGUgYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1ZgorICoKKyAqIFNp
bmNlOiAxLjMuNAorICoqLworR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZVVS
SSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShk
YXRhYmFzZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOworCisg
ICAgU3RyaW5nIHBhZ2VVUkwocGFnZVVSSSk7CisgICAgLy8gVGhlIHNpemUgd2UgcGFzcyBpcyBp
cnJlbGV2YW50IGFzIGxvbmcgYXMgaXQgaXMgPiAwLDAKKyAgICBXZWJDb3JlOjpJbWFnZSogaWNv
biA9IFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5pY29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJD
b3JlOjpJbnRTaXplKDE2LCAxNikpOworICAgIGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgR2RrUGl4YnVmKiBwaXhidWYgPSBpY29uLT5nZXRHZGtQaXhidWYgKCk7CisgICAgaWYg
KCFwaXhidWYpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtQ
aXhidWYqPihnX29iamVjdF9yZWYgKHBpeGJ1ZikpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2NsZWFyKCk6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQor
ICoKKyAqIENsZWFycyBhbGwgaWNvbnMgZnJvbSB0aGUgZGF0YWJhc2UuCisgKgorICogU2luY2U6
IDEuMy40CisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyKFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSUNP
Tl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPnJl
bW92ZUFsbEljb25zKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRp
Y29uZGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU1YWNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25k
YXRhYmFzZS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hy
aXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRpY29uZGF0
YWJhc2VfaAorI2RlZmluZSB3ZWJraXRpY29uZGF0YWJhc2VfaAorCisjaW5jbHVkZSA8Z2RrLXBp
eGJ1Zi9nZGstcGl4YnVmLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfSUNPTl9EQVRBQkFTRSAgICAgICAgICAgICAod2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqKSAgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0lDT05fREFUQUJB
U0UsIFdlYktpdEljb25EYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9JQ09OX0RBVEFCQVNFX0NM
QVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
VFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19JQ09OX0RBVEFCQVNFKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX0lDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfSUNP
Tl9EQVRBQkFTRV9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSBXZWJLaXRJY29u
RGF0YWJhc2VQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZSB7CisgICAgR09i
amVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRJ
Y29uRGF0YWJhc2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRJY29uRGF0YWJh
c2VDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRp
bmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDQpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9pY29uX2RhdGFiYXNl
X2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJO
IGdjaGFyKgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGggICAgICAgICAgICAoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X3BhdGggICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
KiAgICAgICAgcGF0aCk7CisKK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9nZXRfaWNvbl91cmkgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAg
ICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgord2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fcGl4YnVmICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAg
ICAgcGFnZV91cmkpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2Ns
ZWFyICAgICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogd2Via2l0aWNvbmRhdGFiYXNlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2YTg1NmI0Li45NjY5OTMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC04NSw2ICs4
NSw3IEBACiAjaW5jbHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIgogI2lu
Y2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0aGl0dGVzdHJl
c3VsdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJ3ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKICNp
bmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCIKQEAgLTUwNjksNiArNTA3MCwzMSBAQCBH
X0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaShXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQogfQogCiAvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9w
aXhidWY6CisgKiBAd2ViVmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9iamVjdAorICoKKyAqIE9i
dGFpbnMgYSAjR2RrUGl4YnVmIGZvciB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuICNXZWJLaXRX
ZWJWaWV3LCBvcgorICogYSBkZWZhdWx0IGljb24uIFVzZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2lj
b25fdXJpKCkgaWYgeW91IG5lZWQgdG8KKyAqIGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2VzLgorICog
VXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRvIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVk
IGFuZCBsb2FkIHRoZQorICogcGl4YnVmIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm4g
dmFsdWU6IGEgbmV3bHkgcmVmZXJlbmNlZCAjR2RrUGl4YnVmIGZvciB0aGUgZmF2aWNvbgorICoK
KyAqIFNpbmNlOiAxLjMuNAorICovCitHZGtQaXhidWYqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisgICAgY29uc3QgZ2NoYXIq
IHBhZ2VVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAg
cmV0dXJuIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZihkYXRhYmFzZSwgcGFn
ZVVSSSk7Cit9CisKKworCisvKioKICAqIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
OgogICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKICAqIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggMTgzOGJmZS4uMzhjOWE3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0zOTcsNiArMzk3LDkgQEAgd2Via2l0
X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICp3ZWJWaWV3LAogV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhciAqCiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgKndlYlZpZXcpOwogCitXRUJLSVRfQVBJIEdka1BpeGJ1ZiAqCit3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgKndlYlZpZXcpOworCiBXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAqd2ViVmlldyk7CiAKLS0gCjEuNy4zLjUKCg==
</data>
<flag name="review"
          id="74928"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83333</attachid>
            <date>2011-02-22 09:23:07 -0800</date>
            <delta_ts>2011-02-23 03:59:29 -0800</delta_ts>
            <desc>Implement WebKitIconDatabase API #3</desc>
            <filename>0001-GTK-provide-an-API-to-control-the-IconDatabase.diff</filename>
            <type>text/plain</type>
            <size>26497</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSAyN2Y2MzhkNGQzNWQwOTdhNzJiN2I0Y2RhMjdjYTViYzVjOTdkZDk5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUxMAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgoqIEdOVW1ha2VmaWxlLmFtOgoqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCiAgICB0aGUgaWNvbiBkYXRhYmFzZSBm
b3IgbmV3IGljb25zLgoqIHdlYmtpdC93ZWJraXQuaDoKKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
OgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBB
ZGQgYSBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbAogICAgaWNvbiBkYXRhYmFzZS4KKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
Lmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQogICAgb2JqZWN0IHdpdGggbWV0aG9k
cyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xlYXJpbmcKICAgIHdhaXRpbmcg
Zm9yIG5ldyBpY29ucy4KKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Ciogd2Via2l0L3dlYmtp
dHdlYnZpZXcuaDogQWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgogICAgZm9y
IHRoZSB3ZWIgdmlldy4KLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMjMgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmNwcCAgICB8ICAgMTAgKy0KIC4uLi9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwICAgIHwgICAgNSArCiBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCAgICAgICAgIHwgICA1MiArKy0tCiBTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oICAgICAgICAgICB8ICAgIDMgKwog
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmggICAgfCAgICAx
IC0KIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwICAgIHwg
IDI5OSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGljb25kYXRhYmFzZS5oICAgICAgfCAgIDc4ICsrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICB8ICAgMzAgKysKIFNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggICAgICAgICAgIHwgICAgMyArCiAxMyBmaWxlcyBjaGFu
Z2VkLCA0ODYgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzcwZDFmZS4uNzI0ODM2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTAyLTIxICBDaHJpc3RpYW4gRHl3YW4gIDxjaHJpc3Rp
YW5AbGFuZWRvLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTEwCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHA6IEVtaXQgc2lnbmFscyBvbgorICAgICAgICAgICAgdGhlIGlj
b24gZGF0YWJhc2UgZm9yIG5ldyBpY29ucy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
Z2xvYmFscy5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMuaDogQWRkIGEgZnVu
Y3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwKKyAgICAgICAgICAgIGljb24gZGF0YWJhc2UuCisg
ICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6CisgICAgICAgICogd2Via2l0
L3dlYmtpdGljb25kYXRhYmFzZS5oOiBJbXBsZW1lbnQgcHVibGljIGljb24gZGF0YWJhc2UKKyAg
ICAgICAgICAgIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIG9idGFpbmluZyBpY29uIFVSTHMsIHBp
eGJ1ZnMsIGNsZWFyaW5nCisgICAgICAgICAgICB3YWl0aW5nIGZvciBuZXcgaWNvbnMuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3Lmg6IEFkZCBhIG1ldGhvZCB0byBvYnRhaW4gYW4gaWNvbiBwaXhidWYKKyAgICAgICAg
ICAgIGZvciB0aGUgd2ViIHZpZXcuCisKIDIwMTEtMDItMjEgIEFsZWphbmRybyBHLiBDYXN0cm8g
IDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBlM2EwMzI2Li4xMDVkMjQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQpAQCAtMTE1LDYgKzExNSw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkg
Kz0gXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRp
b25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0LmggXAorCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0aWNvbmRhdGFiYXNlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKQEAgLTIwMyw2ICsyMDQs
NyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGdsb2JhbHNwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRo
aXR0ZXN0cmVzdWx0LmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRl
c3RyZXN1bHRwcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29u
ZGF0YWJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVl
c3Rwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVz
cG9uc2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IGMyMjkyZGEuLjJiNmM4
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtNTEsNyArNTEsOSBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV29y
a2VyVGhyZWFkLmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgogI2luY2x1ZGUgIndlYmtp
dGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAid2Via2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFtZXByaXZhdGUu
aCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCkBAIC05OSw3ICsxMDEsMTMgQEAgYm9vbCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oKQogCiB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29s
IGVuYWJsZWQpCiB7Ci0gICAgV2ViS2l0OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGVuYWJsZWQp
OworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0
YWJhc2UoKTsKKyAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICBHT3duUHRyPGdjaGFyPiBpY29u
RGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Vi
a2l0IiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKKyAgICAgICAgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsK
KyAgICB9CiB9CiAKIEpTVmFsdWVSZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpub2Rlc0Zy
b21SZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHRvcCwgdW5zaWduZWQgcmlnaHQsIHVuc2lnbmVkIGJvdHRvbSwgdW5zaWdu
ZWQgbGVmdCwgYm9vbCBpZ25vcmVDbGlwcGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBkY2U3
ZjY4Li5mYTY3ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5j
bHVkZSAid2Via2l0ZXJyb3IuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVk
ZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5l
dHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5o
IgpAQCAtOTIzLDYgKzkyNCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCkKICAgICBpZiAobV9sb2FkaW5nRXJyb3JQYWdlKQogICAgICAgICByZXR1
cm47CiAKKyAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91
cmkobV9mcmFtZSk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFzZSwg
Imljb24tbG9hZGVkIiwgZnJhbWVVUkkpOworCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICAvLyBBdm9pZCByZXBvcnRpbmcgZmF2
aWNvbnMgZm9yIG5vbi1tYWluIGZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRl
eCBkOTNmYWUxLi5iZjNlMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Z2xvYmFscy5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGljb25kYXRh
YmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5l
cy5oCmluZGV4IGIwYjYwN2IuLjBiODgwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaApAQCAtNDEsNiArNDEsOSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2UgV2ViS2l0SWNvbkRhdGFiYXNlOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIFdlYktpdEljb25EYXRhYmFzZUNsYXNz
OworCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0d29ya1Jl
cXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBXZWJLaXRO
ZXR3b3JrUmVxdWVzdENsYXNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5jcHAKaW5kZXggYzIzODI0Yy4uOTIyNzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJh
c2UuaCIKICNpbmNsdWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogI2luY2x1ZGUgIndlYmtp
dHdlYmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRl
LmgiCkBAIC0yMjQsNyArMjI1LDMzIEBAIHN0YXRpYyBHdGtXaWRnZXQqIGN1cnJlbnRUb3BsZXZl
bENhbGxiYWNrKFdlYktpdFNvdXBBdXRoRGlhbG9nKiBmZWF0dXJlLCBTb3VwTWVzCiAKIHN0YXRp
YyB2b2lkIGNsb3NlSWNvbkRhdGFiYXNlT25FeGl0KCkKIHsKLSAgICBpY29uRGF0YWJhc2UoKS0+
Y2xvc2UoKTsKKyAgICBpZiAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmlzRW5hYmxlZCgpKSB7
CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAg
ICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmNsb3NlKCk7CisgICAgfQorfQorCisvKioK
KyAqIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZToKKyAqCisgKiBSZXR1cm5zIHRoZSAjV2ViS2l0
SWNvbkRhdGFiYXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucy4KKyAqCisgKiBS
ZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI1dlYktpdEljb25EYXRh
YmFzZQorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitXZWJLaXRJY29uRGF0YWJhc2UqIHdlYmtp
dF9nZXRfaWNvbl9kYXRhYmFzZSgpCit7CisgICAgc3RhdGljIFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UgPSAwOworCisgICAgd2Via2l0SW5pdCgpOworCisgICAgaWYgKCFkYXRhYmFzZSkg
eworICAgICAgICBkYXRhYmFzZSA9IFdFQktJVF9JQ09OX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBOVUxMKSk7CisgICAgICAgIGF0ZXhpdChjbG9zZUlj
b25EYXRhYmFzZU9uRXhpdCk7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCiB2
b2lkIHdlYmtpdEluaXQoKQpAQCAtMjU4LDcgKzI4NSw4IEBAIHZvaWQgd2Via2l0SW5pdCgpCiAg
ICAgUGFnZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyh0cnVlKTsKIAogICAgIFBh
c3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPnNldEhlbHBlcihXZWJLaXQ6OnBhc3RlYm9h
cmRIZWxwZXJJbnN0YW5jZSgpKTsKLSAgICBXZWJLaXQ6OnNldEljb25EYXRhYmFzZUVuYWJsZWQo
dHJ1ZSk7CisgICAgR093blB0cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVu
YW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxM
KSk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgod2Via2l0X2dldF9pY29uX2Rh
dGFiYXNlKCksIGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOwogCiAgICAgU291cFNlc3Npb24qIHNl
c3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOwogCkBAIC0yODIsMjUgKzMxMCw1
IEBAIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpCiAgICAg
cmV0dXJuIGhlbHBlcjsKIH0KIAotdm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChl
bmFibGVkICYmICFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0g
ICAgICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Ci0gICAgfQotCi0gICAgaWYg
KGVuYWJsZWQpIHsKLSAgICAgICAgaWNvbkRhdGFiYXNlKCktPnNldEVuYWJsZWQodHJ1ZSk7Ci0g
ICAgICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFtZShn
X2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkpOwot
ICAgICAgICBpY29uRGF0YWJhc2UoKS0+b3BlbihpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZh
bHNlKTsKLSAgICBpY29uRGF0YWJhc2UoKS0+Y2xvc2UoKTsKLX0KLQotCiB9IC8qKiBlbmQgbmFt
ZXNwYWNlIFdlYktpdCAqLwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2xvYmFscy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMu
aAppbmRleCA2MTJjMTk1Li4zM2QyYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0Z2xvYmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnbG9iYWxzLmgKQEAgLTU4LDYgKzU4LDkgQEAgd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24g
ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJQbHVnaW5E
YXRhYmFzZSAqCiB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJhc2UgICAgICAgICAgICAgICAg
ICAodm9pZCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0SWNvbkRhdGFiYXNlICoKK3dlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwogV0VCS0lUX0FQ
SSB2b2lkCiB3ZWJraXRfc2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAo
V2ViS2l0Q2FjaGVNb2RlbCAgICAgY2FjaGVfbW9kZWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCmluZGV4IDdlYjNhYWUuLjU5MjNmMmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5o
CkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUGFzdGVib2FyZEhl
bHBlckd0azsKIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgp
OwogCi12b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCk7CiB9CiAKIGV4dGVybiAiQyIg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTVmNmEwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAg
LTAsMCArMSwyOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFuIER5d2Fu
IDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndl
YmtpdGljb25kYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5j
bHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0
c2VjdXJpdHlvcmlnaW5wcml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisvKioKKyAqIFNFQ1RJT046d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNj
cmlwdGlvbjogQSBXZWJLaXQgd2ViIGFwcGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dlYktp
dEljb25EYXRhYmFzZSBwcm92aWRlcyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucywgYXMgc2hvd24K
KyAqIGluIHRhYiBsYWJlbHMsIHdpbmRvdyBjYXB0aW9ucyBvciBib29rbWFya3MuCisgKgorICog
VGhlIGljb24gZGF0YWJhc2UgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBzdG9yZWQgaW4KKyAq
IH4vLmxvY2FsL3NoYXJlL3dlYmtpdC9pY29uZGF0YWJhc2UsIGRlcGVuZGluZyBvbiBYREdfREFU
QV9IT01FLgorICoKKyAqIFdlYktpdCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYXZhaWxh
YmxlIGljb25zIGluIGxpbmsgZWxlbWVudHMKKyAqIG9uIG9wZW5lZCBwYWdlcyBhcyB3ZWxsIGFz
IGFuIGV4aXN0aW5nIGZhdmljb24uaWNvIGFuZCBsb2FkIHRoZQorICogZm91bmQgaW1hZ2VzIGlu
dG8gdGhlIG1lbW9yeSBjYWNoZSBpZiBwb3NzaWJsZS4gVGhlIHNpZ25hbCAiaWNvbi1sb2FkZWQi
CisgKiB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhbnkgaWNvbiBpcyBmb3VuZCBhbmQgbG9hZGVkLgor
ICoKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKCkgY2FuIGJlIHVzZWQgdG8gY2hh
bmdlIHRoZSBsb2NhdGlvbgorICogb2YgdGhlIGRhdGFiYXNlIGFuZCBhbHNvIHRvIGRpc2FibGUg
aXQgYnkgcGFzc2luZyAlTlVMTC4KKyAqCisgKiBTaW5jZTogMS4zLjExCisgKi8KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9QQVRI
LAorfTsKKworZW51bSB7CisgICAgSUNPTl9MT0FERUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsK
Kworc3RhdGljIGd1aW50IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbTEFTVF9TSUdOQUxd
ID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdlYktpdEljb25EYXRhYmFzZSwgd2Via2l0X2lj
b25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpOworCitzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFz
ZVByaXZhdGUgeworICAgIEdPd25QdHI8Z2NoYXI+IHBhdGg7Cit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfaWNvbl9kYXRhYmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8g
Q2FsbCBDKysgZGVzdHJ1Y3RvcnMsIHRoZSByZXZlcnNlIG9mICdwbGFjZW1lbnQgbmV3IHN5bnRh
eCcKKyAgICBXRUJLSVRfSUNPTl9EQVRBQkFTRShvYmplY3QpLT5wcml2LT5+V2ViS2l0SWNvbkRh
dGFiYXNlUHJpdmF0ZSgpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ljb25fZGF0YWJh
c2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2ljb25fZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJL
SVRfSUNPTl9EQVRBQkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBj
YXNlIFBST1BfUEFUSDoKKyAgICAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0
YWJhc2UsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfSUNPTl9EQVRBQkFTRShvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfUEFUSDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRh
YmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGFz
c19pbml0KFdlYktpdEljb25EYXRhYmFzZUNsYXNzKiBrbGFzcykKK3sKKyAgICB3ZWJraXRJbml0
KCk7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGts
YXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9k
aXNwb3NlOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9pY29u
X2RhdGFiYXNlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAgICAgICog
V2ViS2l0SWNvbkRhdGFiYXNlOnBhdGg6CisgICAgICAqCisgICAgICAqIFRoZSBhYnNvbHV0ZSBw
YXRoIG9mIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRlci4KKyAgICAgICoKKyAgICAgICogU2luY2U6
IDEuMy4xMQorICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsIFBST1BfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBhdGgiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBhYnNv
bHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRlciIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkOgorICAgICAqIEB3ZWJWaWV3OiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBwYWdlX3VyaTogdGhlIFVS
SSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gYSBmYXZpY29uIGlzIGF2YWlsYWJsZSBmb3IgYSBwYWdlLAor
ICAgICAqIGluY2x1ZGluZyBjaGlsZCBmcmFtZXMuCisgICAgICogU2VlIFdlYktpdFdlYlZpZXc6
Omljb24tbG9hZGVkIGlmIHlvdSBzaW1wbHkgbmVlZCB0aGUgZmF2aWNvbgorICAgICAqIGZvciBh
IHBhcnRpY3VsYXIgI1dlYktpdFdlYlZpZXcuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjEx
CisgICAgICovCisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0g
PSBnX3NpZ25hbF9uZXcoImljb24tbG9hZGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NM
QVNTKGtsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1Qs
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisg
ICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fU1RSSU5HLAorICAgICAgICAgICAg
R19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdEljb25EYXRhYmFzZVByaXZh
dGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfaW5pdChXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGRhdGFiYXNlLT5wcml2ID0gR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKGRhdGFiYXNlLCBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBX
ZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKTsKKyAgICAvLyAncGxhY2VtZW50IG5ldyBzeW50YXgn
LCBzZWUgd2Via2l0d2Vidmlldy5jcHAKKyAgICBuZXcgKGRhdGFiYXNlLT5wcml2KSBXZWJLaXRJ
Y29uRGF0YWJhc2VQcml2YXRlKCk7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X3BhdGg6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICoKKyAqIERl
dGVybWluZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRhdGFiYXNlIGZvbGRlciBvbiBkaXNr
LgorICoKKyAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBkYXRhYmFzZSBmb2xk
ZXIKKyAqCisgKiBTaW5jZTogMS4zLjExCisgKiovCitHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRh
YmFzZSksIDApOworCisgICAgcmV0dXJuIGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpOworfQor
CisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoOgorICogQGRhdGFiYXNlOiBh
ICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBwYXRoOiBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBp
Y29uIGRhdGFiYXNlIGZvbGRlcgorICoKKyAqIFNwZWNpZmllcyB0aGUgYWJzb2x1dGUgcGF0aCB0
byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCisgKgorICogUGFzc2luZyAlTlVMTCBvciAi
IiBkaXNhYmxlcyB0aGUgaWNvbiBkYXRhYmFzZS4KKyAqCisgKiBTaW5jZTogMS4zLjExCisgKiov
Cit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYXRoKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKworICAgIGlmIChwYXRoWzBdID09ICdc
MCcpCisgICAgICAgIHBhdGggPSAwOworCisgICAgaWYgKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdl
dCgpKSB7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZhbHNl
KTsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmNsb3NlKCk7CisgICAgfQorCisg
ICAgZGF0YWJhc2UtPnByaXYtPnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKKworICAgIGlmICgh
cGF0aCkgeworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+c2V0RW5hYmxlZChmYWxz
ZSk7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5jbG9zZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPnNldEVuYWJsZWQo
dHJ1ZSk7CisgICAgLy9XZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+b3BlbihTdHJpbmcoV2ViQ29y
ZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKSkp
OworICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5vcGVuKGRhdGFiYXNlLT5wcml2LT5wYXRo
LmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmk6
CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkg
b2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgdGhlIFVSSSBm
b3IgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSS4KKyAqIFNlZSBhbHNvIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIGZvciB0
aGUgZmF2aWNvbiwgb3IgJU5VTEwKKyAqCisgKiBTaW5jZTogMS4zLjExCisgKiovCitnY2hhciog
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwocGFnZVVSSSwgMCk7CisKKyAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJv
bVVURjgocGFnZVVSSSk7CisgICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25EYXRhYmFz
ZSgpLT5pY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoq
CisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CisgKiBAZGF0YWJhc2U6
IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29u
dGFpbmluZyB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZp
Y29uIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkksIG9yCisgKiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVy
ZSBpcyBubyBpY29uIGZvciB0aGUgZ2l2ZW4gcGFnZS4gVXNlCisgKiB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNl
cy4KKyAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6
Omljb24tbG9hZGVkIGFuZCBsb2FkIHRoZQorICogcGl4YnVmIGluIHRoZSBjYWxsYmFjay4KKyAq
CisgKiBUaGUgcGl4YnVmIHdpbGwgYmUgdGhlIGxhcmdlc3QgcG9zc2libGUgc2l6ZSBhbmQgc2hv
dWxkIGJlCisgKiByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCisgKiBTZWUgYWxzbyB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKCkuCisgKgorICogUmV0dXJuczogdGhlIGEg
bmV3IHJlZmVyZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCisgKgorICogU2luY2U6IDEu
My4xMQorICoqLworR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhi
dWYoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJh
c2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKworICAgIFN0
cmluZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsKKyAgICAvLyBUaGUgZXhh
Y3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFz
ZSBjb2RlLgorICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAg
dG8gZ2V0IGEgcGl4YnVmLgorICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNv
bkRhdGFiYXNlKCktPmljb25Gb3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYs
IDE2KSk7CisgICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm4gMDsKKyAgICBHZGtQaXhidWYq
IHBpeGJ1ZiA9IGljb24tPmdldEdka1BpeGJ1ZigpOworICAgIGlmICghcGl4YnVmKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3Rf
cmVmIChwaXhidWYpKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcigp
OgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqCisgKiBDbGVhcnMgYWxs
IGljb25zIGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjMuMTEKKyAqKi8KK3Zv
aWQgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFi
YXNlKSk7CisKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+cmVtb3ZlQWxsSWNvbnMoKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRh
YmFzZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTVhY2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNo
cmlzdGlhbkBsYW5lZG8uY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGljb25kYXRhYmFzZV9oCisjZGVmaW5l
IHdlYmtpdGljb25kYXRhYmFzZV9oCisKKyNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYu
aD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9JQ09OX0RBVEFC
QVNFICAgICAgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfSUNPTl9EQVRBQkFTRShvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRh
dGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX0lDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lDT05fREFUQUJB
U0UsIFdlYktpdEljb25EYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0lDT05fREFU
QUJBU0Uob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX0lDT05fREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfSVNfSUNPTl9EQVRBQkFT
RV9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfSUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9JQ09OX0RBVEFCQVNFX0dFVF9D
TEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQ
RV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGU7
CisKK3N0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEljb25EYXRhYmFzZVByaXZh
dGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4
cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAg
ICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRh
dGFiYXNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0
aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsK
KworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAg
ICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKKwor
V0VCS0lUX0FQSSBHZGtQaXhidWYqCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhi
dWYgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAg
ICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiB3ZWJraXRpY29uZGF0YWJhc2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCmluZGV4IDZhODU2YjQuLmJlMzU5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRl
ICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xv
YmFsc3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0ZS5oIgor
I2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwu
aCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5l
dHdvcmtyZXNwb25zZS5oIgpAQCAtNTA2OSw2ICs1MDcwLDM1IEBAIEdfQ09OU1RfUkVUVVJOIGdj
aGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiB9CiAKIC8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZjoKKyAqIEB3ZWJW
aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb2JqZWN0CisgKgorICogT2J0YWlucyBhICNHZGtQaXhi
dWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmlldywgb3IKKyAqIGEg
ZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdlLiBVc2UK
KyAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5n
dWlzaCB0aGVzZSBjYXNlcy4KKyAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJL
aXRXZWJWaWV3OjppY29uLWxvYWRlZCBhbmQgbG9hZCB0aGUKKyAqIHBpeGJ1ZiBpbiB0aGUgY2Fs
bGJhY2suCisgKgorICogVGhlIHBpeGJ1ZiB3aWxsIGJlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHNp
emUgYW5kIHNob3VsZCBiZQorICogcmVzaXplZCBiZWZvcmUgaXQgaXMgZGlzcGxheWVkLgorICog
U2VlIGFsc28gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKCkuCisgKgorICog
UmV0dXJuIHZhbHVlOiBhIG5ld2x5IHJlZmVyZW5jZWQgI0dka1BpeGJ1ZiBmb3IgdGhlIGZhdmlj
b24sIG9yICVOVUxMCisgKgorICogU2luY2U6IDEuMy4xMQorICovCitHZGtQaXhidWYqIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOwor
CisgICAgY29uc3QgZ2NoYXIqIHBhZ2VVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJW
aWV3KTsKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X2dldF9pY29u
X2RhdGFiYXNlKCk7CisgICAgcmV0dXJuIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3Bp
eGJ1ZihkYXRhYmFzZSwgcGFnZVVSSSk7Cit9CisKKworCisvKioKICAqIHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50OgogICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKICAqIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggMTgzOGJmZS4uMzhj
OWE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0zOTcs
NiArMzk3LDkgQEAgd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQgICAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3LAogV0VCS0lUX0FQSSBHX0NPTlNUX1JF
VFVSTiBnY2hhciAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwogCitXRUJLSVRfQVBJIEdka1Bp
eGJ1ZiAqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmICAgICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOworCiBXRUJLSVRfQVBJIFdlYktpdERPTURv
Y3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKLS0gCjEuNy4zLjUKCg==
</data>
<flag name="review"
          id="75122"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83469</attachid>
            <date>2011-02-23 03:59:29 -0800</date>
            <delta_ts>2011-02-25 07:29:49 -0800</delta_ts>
            <desc>Implement WebKitIconDatabase API #4</desc>
            <filename>0001-GTK-provide-an-API-to-control-the-IconDatabase.diff</filename>
            <type>text/plain</type>
            <size>27841</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSA4NDBlOWNmOTgzOWUzNmUwNTgyYjY0ZGNhMWRjN2Y2NTc2YTRjMzUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUxMAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgoqIEdOVW1ha2VmaWxlLmFtOgoqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCiAgICB0aGUgaWNvbiBkYXRhYmFzZSBm
b3IgbmV3IGljb25zLgoqIHdlYmtpdC93ZWJraXQuaDoKKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
OgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBB
ZGQgYSBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbAogICAgaWNvbiBkYXRhYmFzZS4KKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
Lmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQogICAgb2JqZWN0IHdpdGggbWV0aG9k
cyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xlYXJpbmcKICAgIHdhaXRpbmcg
Zm9yIG5ldyBpY29ucy4KKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Ciogd2Via2l0L3dlYmtp
dHdlYnZpZXcuaDogQWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgogICAgZm9y
IHRoZSB3ZWIgdmlldy4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzcwZDFmZS4uNzI0ODM2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTAyLTIxICBDaHJpc3RpYW4gRHl3
YW4gIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJ
Y29uRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyNTEwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6IEVtaXQgc2lnbmFscyBvbgorICAgICAg
ICAgICAgdGhlIGljb24gZGF0YWJhc2UgZm9yIG5ldyBpY29ucy4KKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0Z2xvYmFscy5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMu
aDogQWRkIGEgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwKKyAgICAgICAgICAgIGljb24g
ZGF0YWJhc2UuCisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOiBJbXBsZW1lbnQgcHVibGljIGljb24g
ZGF0YWJhc2UKKyAgICAgICAgICAgIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIG9idGFpbmluZyBp
Y29uIFVSTHMsIHBpeGJ1ZnMsIGNsZWFyaW5nCisgICAgICAgICAgICB3YWl0aW5nIGZvciBuZXcg
aWNvbnMuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3Lmg6IEFkZCBhIG1ldGhvZCB0byBvYnRhaW4gYW4gaWNvbiBwaXhi
dWYKKyAgICAgICAgICAgIGZvciB0aGUgd2ViIHZpZXcuCisKIDIwMTEtMDItMjEgIEFsZWphbmRy
byBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFu
IExvcGV6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBlM2EwMzI2Li4xMDVkMjQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTE1LDYgKzExNSw3IEBAIHdlYmtpdGd0a19z
dGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmggXAorCSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAJJChzcmNkaXIpL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCBcCiAJJChzcmNk
aXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKQEAg
LTIwMyw2ICsyMDQsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHRwcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0bmV0d29ya3JlcXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
bmV0d29ya3JlcXVlc3Rwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRuZXR3b3JrcmVzcG9uc2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IGMy
MjkyZGEuLjhhNTc0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtOTcsMTEgKzk3
LDYgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmxpbmtzSW5jbHVkZWRJbkZvY3Vz
Q2hhaW4oKQogICAgIHJldHVybiBzX2xpbmtzSW5jbHVkZWRJblRhYkNoYWluOwogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVu
YWJsZWQpCi17Ci0gICAgV2ViS2l0OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGVuYWJsZWQpOwot
fQotCiBKU1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bm9kZXNGcm9tUmVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgaW50IHgsIGludCB5LCB1bnNp
Z25lZCB0b3AsIHVuc2lnbmVkIHJpZ2h0LCB1bnNpZ25lZCBib3R0b20sIHVuc2lnbmVkIGxlZnQs
IGJvb2wgaWdub3JlQ2xpcHBpbmcpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKaW5kZXggZmNiNWU4ZS4uMTBmYTE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIHZvaWQgc2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0aWMg
Ym9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0SWNv
bkRhdGFiYXNlRW5hYmxlZChib29sKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBub2Rlc0Zyb21S
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIHRvcCwgdW5zaWduZWQgcmlnaHQsIHVuc2lnbmVkIGJvdHRvbSwgdW5zaWduZWQg
bGVmdCwgYm9vbCBpZ25vcmVDbGlwcGluZyk7CiAgICAgc3RhdGljIHZvaWQgZHVtcENvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnaW50IGF2YWlsYWJsZVdp
ZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBkY2U3
ZjY4Li5mYTY3ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5j
bHVkZSAid2Via2l0ZXJyb3IuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVk
ZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5l
dHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5o
IgpAQCAtOTIzLDYgKzkyNCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCkKICAgICBpZiAobV9sb2FkaW5nRXJyb3JQYWdlKQogICAgICAgICByZXR1
cm47CiAKKyAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91
cmkobV9mcmFtZSk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFzZSwg
Imljb24tbG9hZGVkIiwgZnJhbWVVUkkpOworCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICAvLyBBdm9pZCByZXBvcnRpbmcgZmF2
aWNvbnMgZm9yIG5vbi1tYWluIGZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRl
eCBkOTNmYWUxLi5iZjNlMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Z2xvYmFscy5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGljb25kYXRh
YmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5l
cy5oCmluZGV4IGIwYjYwN2IuLjBiODgwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaApAQCAtNDEsNiArNDEsOSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2UgV2ViS2l0SWNvbkRhdGFiYXNlOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIFdlYktpdEljb25EYXRhYmFzZUNsYXNz
OworCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0d29ya1Jl
cXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBXZWJLaXRO
ZXR3b3JrUmVxdWVzdENsYXNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5jcHAKaW5kZXggYzIzODI0Yy4uZmViN2FjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJh
c2UuaCIKICNpbmNsdWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogI2luY2x1ZGUgIndlYmtp
dHdlYmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRl
LmgiCkBAIC0yMjIsOSArMjIzLDI1IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGN1cnJlbnRUb3BsZXZl
bENhbGxiYWNrKFdlYktpdFNvdXBBdXRoRGlhbG9nKiBmZWF0dXJlLCBTb3VwTWVzCiAgICAgICAg
IHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgp
CisvKioKKyAqIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZToKKyAqCisgKiBSZXR1cm5zIHRoZSAj
V2ViS2l0SWNvbkRhdGFiYXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucy4KKyAq
CisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI1dlYktpdElj
b25EYXRhYmFzZQorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitXZWJLaXRJY29uRGF0YWJhc2Uq
IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpCiB7Ci0gICAgaWNvbkRhdGFiYXNlKCktPmNsb3Nl
KCk7CisgICAgc3RhdGljIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSAwOworCisgICAg
d2Via2l0SW5pdCgpOworCisgICAgaWYgKCFkYXRhYmFzZSkKKyAgICAgICAgZGF0YWJhc2UgPSBX
RUJLSVRfSUNPTl9EQVRBQkFTRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFT
RSwgTlVMTCkpOworCisgICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCiB2b2lkIHdlYmtpdEluaXQo
KQpAQCAtMjU4LDcgKzI3NSw4IEBAIHZvaWQgd2Via2l0SW5pdCgpCiAgICAgUGFnZUdyb3VwOjpz
ZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyh0cnVlKTsKIAogICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCktPnNldEhlbHBlcihXZWJLaXQ6OnBhc3RlYm9hcmRIZWxwZXJJbnN0YW5j
ZSgpKTsKLSAgICBXZWJLaXQ6OnNldEljb25EYXRhYmFzZUVuYWJsZWQodHJ1ZSk7CisgICAgR093
blB0cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJf
ZGF0YV9kaXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7CisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGljb25E
YXRhYmFzZVBhdGguZ2V0KCkpOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRf
Z2V0X2RlZmF1bHRfc2Vzc2lvbigpOwogCkBAIC0yODIsMjUgKzMwMCw1IEBAIFBhc3RlYm9hcmRI
ZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpCiAgICAgcmV0dXJuIGhlbHBlcjsK
IH0KIAotdm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChlbmFibGVkICYmICFpbml0
aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIGF0ZXhpdChj
bG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Ci0gICAgfQotCi0gICAgaWYgKGVuYWJsZWQpIHsKLSAg
ICAgICAgaWNvbkRhdGFiYXNlKCktPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIEdPd25QdHI8
Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFf
ZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkpOwotICAgICAgICBpY29uRGF0
YWJhc2UoKS0+b3BlbihpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICBpY29u
RGF0YWJhc2UoKS0+Y2xvc2UoKTsKLX0KLQotCiB9IC8qKiBlbmQgbmFtZXNwYWNlIFdlYktpdCAq
LwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAppbmRleCA2MTJjMTk1
Li4zM2QyYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKQEAg
LTU4LDYgKzU4LDkgQEAgd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24gICAgICAgICAgICAgICAg
ICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSAqCiB3ZWJr
aXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJhc2UgICAgICAgICAgICAgICAgICAodm9pZCk7CiAKK1dF
QktJVF9BUEkgV2ViS2l0SWNvbkRhdGFiYXNlICoKK3dlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRf
c2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q2FjaGVNb2Rl
bCAgICAgY2FjaGVfbW9kZWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnbG9iYWxzcHJpdmF0ZS5oCmluZGV4IDdlYjNhYWUuLjU5MjNmMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCkBAIC0zMyw3ICszMyw2
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUGFzdGVib2FyZEhlbHBlckd0azsKIFBhc3Rl
Ym9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpOwogCi12b2lkIHNldElj
b25EYXRhYmFzZUVuYWJsZWQoYm9vbCk7CiB9CiAKIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wNTI2YmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwzMTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AbGFu
ZWRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFz
ZS5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmlnaW5w
cml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisvKioKKyAq
IFNFQ1RJT046d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSBXZWJL
aXQgd2ViIGFwcGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dlYktpdEljb25EYXRhYmFzZSBw
cm92aWRlcyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucywgYXMgc2hvd24KKyAqIGluIHRhYiBsYWJl
bHMsIHdpbmRvdyBjYXB0aW9ucyBvciBib29rbWFya3MuIEFsbCB2aWV3cyBzaGFyZQorICogdGhl
IHNhbWUgaWNvbiBkYXRhYmFzZS4KKyAqCisgKiBUaGUgaWNvbiBkYXRhYmFzZSBpcyBlbmFibGVk
IGJ5IGRlZmF1bHQgYW5kIHN0b3JlZCBpbgorICogfi8ubG9jYWwvc2hhcmUvd2Via2l0L2ljb25k
YXRhYmFzZSwgZGVwZW5kaW5nIG9uIFhER19EQVRBX0hPTUUuCisgKgorICogV2ViS2l0IHdpbGwg
YXV0b21hdGljYWxseSBsb29rIGZvciBhdmFpbGFibGUgaWNvbnMgaW4gbGluayBlbGVtZW50cwor
ICogb24gb3BlbmVkIHBhZ2VzIGFzIHdlbGwgYXMgYW4gZXhpc3RpbmcgZmF2aWNvbi5pY28gYW5k
IGxvYWQgdGhlCisgKiBmb3VuZCBpbWFnZXMgaW50byB0aGUgbWVtb3J5IGNhY2hlIGlmIHBvc3Np
YmxlLiBUaGUgc2lnbmFsICJpY29uLWxvYWRlZCIKKyAqIHdpbGwgYmUgZW1pdHRlZCB3aGVuIGFu
eSBpY29uIGlzIGZvdW5kIGFuZCBsb2FkZWQuCisgKiBPbGQgSWNvbnMgYXJlIGF1dG9tYXRpY2Fs
bHkgY2xlYW5lZCB1cCBhZnRlciA0IGRheXMuCisgKgorICogd2Via2l0X2ljb25fZGF0YWJhc2Vf
c2V0X3BhdGgoKSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uCisgKiBvZiB0aGUg
ZGF0YWJhc2UgYW5kIGFsc28gdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nICVOVUxMLgorICoKKyAq
IElmIFdlYktpdFdlYlNldHRpbmdzOjplbmFibGUtcHJpdmF0ZS1icm93c2luZyBpcyAlVFJVRSBu
ZXcgaWNvbnMKKyAqIHdvbid0IGJlIGFkZGVkIHRvIHRoZSBkYXRhYmFzZSBvbiBkaXNrIGFuZCBu
byBleGlzdGluZyBpY29ucyB3aWxsCisgKiBiZSBkZWxldGVkIGZyb20gaXQuCisgKgorICogU2lu
Y2U6IDEuMy4xMQorICovCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2VudW0geworICAg
IFBST1BfMCwKKworICAgIFBST1BfUEFUSCwKK307CisKK2VudW0geworICAgIElDT05fTE9BREVE
LAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJL
aXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKTsKKwor
c3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlIHsKKyAgICBHT3duUHRyPGdjaGFyPiBw
YXRoOworfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIC8vIENhbGwgQysrIGRlc3RydWN0b3JzLCB0aGUgcmV2ZXJz
ZSBvZiAncGxhY2VtZW50IG5ldyBzeW50YXgnCisgICAgV0VCS0lUX0lDT05fREFUQUJBU0Uob2Jq
ZWN0KS0+cHJpdi0+fldlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3Bh
cmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2lj
b25fZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAgIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lU
X0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBQUk9QX1BBVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyog
a2xhc3MpCit7CisgICAgd2Via2l0SW5pdCgpOworCisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5kaXNwb3Nl
ID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5z
ZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcHJvcGVy
dHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdEljb25EYXRhYmFzZTpwYXRoOgorICAgICAg
KgorICAgICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBmb2xkZXIu
CisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjMuMTEKKyAgICAgICovCisgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBVEgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygicGF0aCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJQYXRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBm
b2xkZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZDoKKyAg
ICAgKiBAd2ViVmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQK
KyAgICAgKiBAZnJhbWVfdXJpOiB0aGUgVVJJIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIHRoZSBp
Y29uCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBmYXZpY29u
IGlzIGF2YWlsYWJsZSBmb3IgYSBwYWdlLAorICAgICAqIG9yIGEgY2hpbGQgZnJhbWUuCisgICAg
ICogU2VlIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGZh
dmljb24gZm9yCisgICAgICogdGhlIG1haW4gZnJhbWUgb2YgYSBwYXJ0aWN1bGFyICNXZWJLaXRX
ZWJWaWV3LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy4xMQorICAgICAqLworICAgIHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29u
LWxvYWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAg
ICAgICAgICAgR19UWVBFX1NUUklORyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
a2xhc3MsIHNpemVvZihXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSkKK3sKKyAgICBkYXRhYmFzZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShk
YXRhYmFzZSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNlUHJp
dmF0ZSk7CisgICAgLy8gJ3BsYWNlbWVudCBuZXcgc3ludGF4Jywgc2VlIHdlYmtpdHdlYnZpZXcu
Y3BwCisgICAgbmV3IChkYXRhYmFzZS0+cHJpdikgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSgp
OworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoOgorICogQGRhdGFi
YXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBhYnNvbHV0
ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGF0YWJhc2UgZm9sZGVyCisgKgorICogU2luY2U6IDEu
My4xMQorICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKworICAgIHJl
dHVybiBkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VJ
Y29uRGF0YWJhc2VPbkV4aXQoKQoreworICAgIGlmIChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
aXNFbmFibGVkKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPnNldEVuYWJs
ZWQoZmFsc2UpOworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+Y2xvc2UoKTsKKyAg
ICB9Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGg6CisgKiBAZGF0
YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhdGg6IGFuIGFic29sdXRlIHBhdGgg
dG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyCisgKgorICogU3BlY2lmaWVzIHRoZSBhYnNvbHV0
ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBQYXNzaW5nICVO
VUxMIG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjMu
MTEKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgaWYgKGRhdGFi
YXNlLT5wcml2LT5wYXRoLmdldCgpKQorICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
Y2xvc2UoKTsKKworICAgIGlmICghKHBhdGggJiYgcGF0aFswXSkpIHsKKyAgICAgICAgZGF0YWJh
c2UtPnByaXYtPnBhdGguc2V0KDApOworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhYmFz
ZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOworCisgICAgV2ViQ29yZTo6aWNvbkRh
dGFiYXNlKCktPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkt
Pm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQo
KSkpOworCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlu
aXRpYWxpemVkKSB7CisgICAgICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Cisg
ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0
YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24K
KyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFn
ZSBVUkkuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkuCisgKgor
ICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5V
TEwKKyAqCisgKiBTaW5jZTogMS4zLjExCisgKiovCitnY2hhciogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFy
KiBwYWdlVVJJKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RB
VEFCQVNFKGRhdGFiYXNlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwg
MCk7CisKKyAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7Cisg
ICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5pY29uVVJMRm9yUGFn
ZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRh
YmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgor
ICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4g
cGFnZSBVUkksIG9yCisgKiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0
aGUgZ2l2ZW4gcGFnZS4gVXNlCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmko
KSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KKyAqIFVzdWFsbHkgeW91
IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZCBs
b2FkIHRoZQorICogcGl4YnVmIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBUaGUgcGl4YnVmIHdp
bGwgYmUgdGhlIGxhcmdlc3QgcG9zc2libGUgc2l6ZSBhbmQgc2hvdWxkIGJlCisgKiByZXNpemVk
IGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2ljb25fcGl4YnVmKCkuCisgKgorICogUmV0dXJuczogdGhlIGEgbmV3IHJlZmVyZW5jZSB0byBh
ICNHZGtQaXhidWYsIG9yICVOVUxMCisgKgorICogU2luY2U6IDEuMy4xMQorICoqLworR2RrUGl4
YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKworICAgIFN0cmluZyBwYWdlVVJMID0gU3Ry
aW5nOjpmcm9tVVRGOChwYWdlVVJJKTsKKyAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlz
IGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgorICAgIC8vIFdl
IG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgor
ICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmljb25G
b3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7CisgICAgaWYgKCFp
Y29uKQorICAgICAgICByZXR1cm4gMDsKKyAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGljb24tPmdl
dEdka1BpeGJ1ZigpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1ZikpOworfQor
CisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyKCk6CisgKiBAZGF0YWJhc2U6IGEg
I1dlYktpdEljb25EYXRhYmFzZQorICoKKyAqIENsZWFycyBhbGwgaWNvbnMgZnJvbSB0aGUgZGF0
YWJhc2UuCisgKgorICogU2luY2U6IDEuMy4xMQorICoqLwordm9pZCB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9jbGVhcihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKworICAgIFdlYkNv
cmU6Omljb25EYXRhYmFzZSgpLT5yZW1vdmVBbGxJY29ucygpOworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2ZlNWFjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaApAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxhbmVkby5jb20+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgd2Via2l0aWNvbmRhdGFiYXNlX2gKKyNkZWZpbmUgd2Via2l0aWNvbmRhdGFiYXNl
X2gKKworI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgorI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UgICAgICAgICAgICAgKHdl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9JQ09OX0RBVEFC
QVNFKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2UpKQorI2RlZmluZSBX
RUJLSVRfSUNPTl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFi
YXNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShvYmopICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRB
QkFTRSkpCisjZGVmaW5lIFdFQktJVF9JU19JQ09OX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNF
KSkKKyNkZWZpbmUgV0VCS0lUX0lDT05fREFUQUJBU0VfR0VUX0NMQVNTKG9iaikgICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UsIFdl
YktpdEljb25EYXRhYmFzZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEljb25EYXRh
YmFzZVByaXZhdGUgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRJ
Y29uRGF0YWJhc2UgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHBy
aXZhdGUgPiovCisgICAgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0
cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CisgICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9w
YXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAgICAgKFdlYktp
dEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhdGgpOworCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOworCitXRUJLSVRfQVBJIEdka1BpeGJ1
ZioKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZiAgICAgKFdlYktpdEljb25E
YXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIHdlYmtpdGljb25kYXRh
YmFzZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5k
ZXggNmE4NTZiNC4uZDBmMDM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcApAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdlb2xvY2F0aW9u
cG9saWN5ZGVjaXNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdGhpdHRlc3RyZXN1bHRwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0aWNv
bmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtp
dG5ldHdvcmtyZXF1ZXN0LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3Jlc3BvbnNlLmgiCkBA
IC0yMzE2LDYgKzIzMTcsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5p
dChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgKiBAaWNvbl91cmk6IHRo
ZSBVUkkgZm9yIHRoZSBpY29uCiAgICAgICoKICAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVk
IHdoZW4gdGhlIG1haW4gZnJhbWUgaGFzIGdvdCBhIGZhdmljb24uCisgICAgICogU2VlIFdlYktp
dEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgaWYgeW91IHdhbnQgdG8ga2VlcCB0cmFjayBvZgor
ICAgICAqIGljb25zIGZvciBjaGlsZCBmcmFtZXMuCiAgICAgICoKICAgICAgKiBTaW5jZTogMS4x
LjE4CiAgICAgICovCkBAIC01MDY5LDYgKzUwNzIsMzUgQEAgR19DT05TVF9SRVRVUk4gZ2NoYXIq
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIH0K
IAogLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmOgorICogQHdlYlZpZXc6
IHRoZSAjV2ViS2l0V2ViVmlldyBvYmplY3QKKyAqCisgKiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBv
ZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3LCBvcgorICogYSBkZWZh
dWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVzZQorICog
d2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSgpIGlmIHlvdSBuZWVkIHRvIGRpc3Rpbmd1aXNo
IHRoZXNlIGNhc2VzLgorICogVXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRvIFdlYktpdFdl
YlZpZXc6Omljb24tbG9hZGVkIGFuZCBsb2FkIHRoZQorICogcGl4YnVmIGluIHRoZSBjYWxsYmFj
ay4KKyAqCisgKiBUaGUgcGl4YnVmIHdpbGwgYmUgdGhlIGxhcmdlc3QgcG9zc2libGUgc2l6ZSBh
bmQgc2hvdWxkIGJlCisgKiByZXNpemVkIGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCisgKiBTZWUg
YWxzbyB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoKS4KKyAqCisgKiBSZXR1
cm4gdmFsdWU6IGEgbmV3bHkgcmVmZXJlbmNlZCAjR2RrUGl4YnVmIGZvciB0aGUgZmF2aWNvbiwg
b3IgJU5VTEwKKyAqCisgKiBTaW5jZTogMS4zLjExCisgKi8KK0dka1BpeGJ1Ziogd2Via2l0X3dl
Yl92aWV3X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisKKyAg
ICBjb25zdCBnY2hhciogcGFnZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcp
OworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0
YWJhc2UoKTsKKyAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVm
KGRhdGFiYXNlLCBwYWdlVVJJKTsKK30KKworCisKKy8qKgogICogd2Via2l0X3dlYl92aWV3X2dl
dF9kb21fZG9jdW1lbnQ6CiAgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldwogICogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAxODM4YmZlLi4zOGM5YTcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTM5Nyw2ICsz
OTcsOSBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2hpdF90ZXN0X3Jlc3VsdCAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcsCiBXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJO
IGdjaGFyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkgICAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJVF9BUEkgR2RrUGl4YnVm
ICoKK3dlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CisKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1l
bnQgKgogd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggNzljNzk0YS4uZjI2MTg5NiAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC00NTMsNyArNDUzLDcgQEAg
c3RhdGljIHZvaWQgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgc2V0bG9j
YWxlKExDX0FMTCwgIiIpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRMaW5r
c0luY2x1ZGVkSW5Gb2N1c0NoYWluKHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CisgICAgd2Via2l0X2ljb25fZGF0YWJh
c2Vfc2V0X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIDApOwogCiAgICAgaWYgKGF4
Q29udHJvbGxlcikKICAgICAgICAgYXhDb250cm9sbGVyLT5yZXNldFRvQ29uc2lzdGVudFN0YXRl
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcAppbmRleCAyM2E5ZDk5Li5mNDA2Y2U2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTQ5Miw3ICs0
OTIsMTMgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVz
dWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91YmxlIGMKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGVuYWJsZWQpOworICAg
IFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2Uo
KTsKKyAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICBHT3duUHRyPGdjaGFyPiBpY29uRGF0YWJh
c2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0IiwgImljb25k
YXRhYmFzZSIsIE5VTEwpKTsKKyAgICAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgo
ZGF0YWJhc2UsIGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICB9CiB9CiAK
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVk
KGJvb2wgZmxhZykKLS0gCjEuNy4zLjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83810</attachid>
            <date>2011-02-25 07:29:49 -0800</date>
            <delta_ts>2011-03-04 07:15:24 -0800</delta_ts>
            <desc>Implement WebKitIconDatabase API #5</desc>
            <filename>0001-GTK-provide-an-API-to-control-the-IconDatabase.diff</filename>
            <type>text/plain</type>
            <size>27860</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSA4NDBlOWNmOTgzOWUzNmUwNTgyYjY0ZGNhMWRjN2Y2NTc2YTRjMzUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUxMAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgoqIEdOVW1ha2VmaWxlLmFtOgoqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCiAgICB0aGUgaWNvbiBkYXRhYmFzZSBm
b3IgbmV3IGljb25zLgoqIHdlYmtpdC93ZWJraXQuaDoKKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
OgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBB
ZGQgYSBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbAogICAgaWNvbiBkYXRhYmFzZS4KKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
Lmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQogICAgb2JqZWN0IHdpdGggbWV0aG9k
cyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xlYXJpbmcKICAgIHdhaXRpbmcg
Zm9yIG5ldyBpY29ucy4KKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Ciogd2Via2l0L3dlYmtp
dHdlYnZpZXcuaDogQWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgogICAgZm9y
IHRoZSB3ZWIgdmlldy4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzcwZDFmZS4uNzI0ODM2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTAyLTIxICBDaHJpc3RpYW4gRHl3
YW4gIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJ
Y29uRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyNTEwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6IEVtaXQgc2lnbmFscyBvbgorICAgICAg
ICAgICAgdGhlIGljb24gZGF0YWJhc2UgZm9yIG5ldyBpY29ucy4KKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0Z2xvYmFscy5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHMu
aDogQWRkIGEgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwKKyAgICAgICAgICAgIGljb24g
ZGF0YWJhc2UuCisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHA6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oOiBJbXBsZW1lbnQgcHVibGljIGljb24g
ZGF0YWJhc2UKKyAgICAgICAgICAgIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIG9idGFpbmluZyBp
Y29uIFVSTHMsIHBpeGJ1ZnMsIGNsZWFyaW5nCisgICAgICAgICAgICB3YWl0aW5nIGZvciBuZXcg
aWNvbnMuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3Lmg6IEFkZCBhIG1ldGhvZCB0byBvYnRhaW4gYW4gaWNvbiBwaXhi
dWYKKyAgICAgICAgICAgIGZvciB0aGUgd2ViIHZpZXcuCisKIDIwMTEtMDItMjEgIEFsZWphbmRy
byBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFu
IExvcGV6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBlM2EwMzI2Li4xMDVkMjQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTE1LDYgKzExNSw3IEBAIHdlYmtpdGd0a19z
dGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmggXAorCSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAJJChzcmNkaXIpL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCBcCiAJJChzcmNk
aXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKQEAg
LTIwMyw2ICsyMDQsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHRwcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRpY29uZGF0YWJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0bmV0d29ya3JlcXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
bmV0d29ya3JlcXVlc3Rwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRuZXR3b3JrcmVzcG9uc2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IGMy
MjkyZGEuLjhhNTc0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtOTcsMTEgKzk3
LDYgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmxpbmtzSW5jbHVkZWRJbkZvY3Vz
Q2hhaW4oKQogICAgIHJldHVybiBzX2xpbmtzSW5jbHVkZWRJblRhYkNoYWluOwogfQogCi12b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVu
YWJsZWQpCi17Ci0gICAgV2ViS2l0OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGVuYWJsZWQpOwot
fQotCiBKU1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bm9kZXNGcm9tUmVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgaW50IHgsIGludCB5LCB1bnNp
Z25lZCB0b3AsIHVuc2lnbmVkIHJpZ2h0LCB1bnNpZ25lZCBib3R0b20sIHVuc2lnbmVkIGxlZnQs
IGJvb2wgaWdub3JlQ2xpcHBpbmcpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKaW5kZXggZmNiNWU4ZS4uMTBmYTE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIHZvaWQgc2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0aWMg
Ym9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0SWNv
bkRhdGFiYXNlRW5hYmxlZChib29sKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBub2Rlc0Zyb21S
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIHRvcCwgdW5zaWduZWQgcmlnaHQsIHVuc2lnbmVkIGJvdHRvbSwgdW5zaWduZWQg
bGVmdCwgYm9vbCBpZ25vcmVDbGlwcGluZyk7CiAgICAgc3RhdGljIHZvaWQgZHVtcENvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnaW50IGF2YWlsYWJsZVdp
ZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBkY2U3
ZjY4Li5mYTY3ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5j
bHVkZSAid2Via2l0ZXJyb3IuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVk
ZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5l
dHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5o
IgpAQCAtOTIzLDYgKzkyNCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCkKICAgICBpZiAobV9sb2FkaW5nRXJyb3JQYWdlKQogICAgICAgICByZXR1
cm47CiAKKyAgICBjb25zdCBnY2hhciogZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91
cmkobV9mcmFtZSk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFzZSwg
Imljb24tbG9hZGVkIiwgZnJhbWVVUkkpOworCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICAvLyBBdm9pZCByZXBvcnRpbmcgZmF2
aWNvbnMgZm9yIG5vbi1tYWluIGZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRl
eCBkOTNmYWUxLi5iZjNlMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b24uaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Z2xvYmFscy5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGljb25kYXRh
YmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRkZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5l
cy5oCmluZGV4IGIwYjYwN2IuLjBiODgwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaApAQCAtNDEsNiArNDEsOSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2UgV2ViS2l0SWNvbkRhdGFiYXNlOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIFdlYktpdEljb25EYXRhYmFzZUNsYXNz
OworCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0d29ya1Jl
cXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBXZWJLaXRO
ZXR3b3JrUmVxdWVzdENsYXNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5jcHAKaW5kZXggYzIzODI0Yy4uZmViN2FjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRnbG9iYWxzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJh
c2UuaCIKICNpbmNsdWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogI2luY2x1ZGUgIndlYmtp
dHdlYmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRl
LmgiCkBAIC0yMjIsOSArMjIzLDI1IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGN1cnJlbnRUb3BsZXZl
bENhbGxiYWNrKFdlYktpdFNvdXBBdXRoRGlhbG9nKiBmZWF0dXJlLCBTb3VwTWVzCiAgICAgICAg
IHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgp
CisvKioKKyAqIHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZToKKyAqCisgKiBSZXR1cm5zIHRoZSAj
V2ViS2l0SWNvbkRhdGFiYXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucy4KKyAq
CisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI1dlYktpdElj
b25EYXRhYmFzZQorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitXZWJLaXRJY29uRGF0YWJhc2Uq
IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpCiB7Ci0gICAgaWNvbkRhdGFiYXNlKCktPmNsb3Nl
KCk7CisgICAgc3RhdGljIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSAwOworCisgICAg
d2Via2l0SW5pdCgpOworCisgICAgaWYgKCFkYXRhYmFzZSkKKyAgICAgICAgZGF0YWJhc2UgPSBX
RUJLSVRfSUNPTl9EQVRBQkFTRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFT
RSwgTlVMTCkpOworCisgICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCiB2b2lkIHdlYmtpdEluaXQo
KQpAQCAtMjU4LDcgKzI3NSw4IEBAIHZvaWQgd2Via2l0SW5pdCgpCiAgICAgUGFnZUdyb3VwOjpz
ZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyh0cnVlKTsKIAogICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCktPnNldEhlbHBlcihXZWJLaXQ6OnBhc3RlYm9hcmRIZWxwZXJJbnN0YW5j
ZSgpKTsKLSAgICBXZWJLaXQ6OnNldEljb25EYXRhYmFzZUVuYWJsZWQodHJ1ZSk7CisgICAgR093
blB0cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJf
ZGF0YV9kaXIoKSwgIndlYmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7CisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGljb25E
YXRhYmFzZVBhdGguZ2V0KCkpOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRf
Z2V0X2RlZmF1bHRfc2Vzc2lvbigpOwogCkBAIC0yODIsMjUgKzMwMCw1IEBAIFBhc3RlYm9hcmRI
ZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpCiAgICAgcmV0dXJuIGhlbHBlcjsK
IH0KIAotdm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChlbmFibGVkICYmICFpbml0
aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIGF0ZXhpdChj
bG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Ci0gICAgfQotCi0gICAgaWYgKGVuYWJsZWQpIHsKLSAg
ICAgICAgaWNvbkRhdGFiYXNlKCktPnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIEdPd25QdHI8
Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFf
ZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkpOwotICAgICAgICBpY29uRGF0
YWJhc2UoKS0+b3BlbihpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICBpY29u
RGF0YWJhc2UoKS0+Y2xvc2UoKTsKLX0KLQotCiB9IC8qKiBlbmQgbmFtZXNwYWNlIFdlYktpdCAq
LwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAppbmRleCA2MTJjMTk1
Li4zM2QyYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xv
YmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKQEAg
LTU4LDYgKzU4LDkgQEAgd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24gICAgICAgICAgICAgICAg
ICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSAqCiB3ZWJr
aXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJhc2UgICAgICAgICAgICAgICAgICAodm9pZCk7CiAKK1dF
QktJVF9BUEkgV2ViS2l0SWNvbkRhdGFiYXNlICoKK3dlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRf
c2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0Q2FjaGVNb2Rl
bCAgICAgY2FjaGVfbW9kZWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnbG9iYWxzcHJpdmF0ZS5oCmluZGV4IDdlYjNhYWUuLjU5MjNmMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCkBAIC0zMyw3ICszMyw2
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUGFzdGVib2FyZEhlbHBlckd0azsKIFBhc3Rl
Ym9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpOwogCi12b2lkIHNldElj
b25EYXRhYmFzZUVuYWJsZWQoYm9vbCk7CiB9CiAKIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wNTI2YmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwzMTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AbGFu
ZWRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRhYmFz
ZS5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0c2VjdXJpdHlvcmlnaW5w
cml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisvKioKKyAq
IFNFQ1RJT046d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSBXZWJL
aXQgd2ViIGFwcGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dlYktpdEljb25EYXRhYmFzZSBw
cm92aWRlcyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucywgYXMgc2hvd24KKyAqIGluIHRhYiBsYWJl
bHMsIHdpbmRvdyBjYXB0aW9ucyBvciBib29rbWFya3MuIEFsbCB2aWV3cyBzaGFyZQorICogdGhl
IHNhbWUgaWNvbiBkYXRhYmFzZS4KKyAqCisgKiBUaGUgaWNvbiBkYXRhYmFzZSBpcyBlbmFibGVk
IGJ5IGRlZmF1bHQgYW5kIHN0b3JlZCBpbgorICogfi8ubG9jYWwvc2hhcmUvd2Via2l0L2ljb25k
YXRhYmFzZSwgZGVwZW5kaW5nIG9uIFhER19EQVRBX0hPTUUuCisgKgorICogV2ViS2l0IHdpbGwg
YXV0b21hdGljYWxseSBsb29rIGZvciBhdmFpbGFibGUgaWNvbnMgaW4gbGluayBlbGVtZW50cwor
ICogb24gb3BlbmVkIHBhZ2VzIGFzIHdlbGwgYXMgYW4gZXhpc3RpbmcgZmF2aWNvbi5pY28gYW5k
IGxvYWQgdGhlCisgKiBmb3VuZCBpbWFnZXMgaW50byB0aGUgbWVtb3J5IGNhY2hlIGlmIHBvc3Np
YmxlLiBUaGUgc2lnbmFsICJpY29uLWxvYWRlZCIKKyAqIHdpbGwgYmUgZW1pdHRlZCB3aGVuIGFu
eSBpY29uIGlzIGZvdW5kIGFuZCBsb2FkZWQuCisgKiBPbGQgSWNvbnMgYXJlIGF1dG9tYXRpY2Fs
bHkgY2xlYW5lZCB1cCBhZnRlciA0IGRheXMuCisgKgorICogd2Via2l0X2ljb25fZGF0YWJhc2Vf
c2V0X3BhdGgoKSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uCisgKiBvZiB0aGUg
ZGF0YWJhc2UgYW5kIGFsc28gdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nICVOVUxMLgorICoKKyAq
IElmIFdlYktpdFdlYlNldHRpbmdzOjplbmFibGUtcHJpdmF0ZS1icm93c2luZyBpcyAlVFJVRSBu
ZXcgaWNvbnMKKyAqIHdvbid0IGJlIGFkZGVkIHRvIHRoZSBkYXRhYmFzZSBvbiBkaXNrIGFuZCBu
byBleGlzdGluZyBpY29ucyB3aWxsCisgKiBiZSBkZWxldGVkIGZyb20gaXQuCisgKgorICogU2lu
Y2U6IDEuMy4xMQorICovCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2VudW0geworICAg
IFBST1BfMCwKKworICAgIFBST1BfUEFUSCwKK307CisKK2VudW0geworICAgIElDT05fTE9BREVE
LAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJL
aXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKTsKKwor
c3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlIHsKKyAgICBHT3duUHRyPGdjaGFyPiBw
YXRoOworfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIC8vIENhbGwgQysrIGRlc3RydWN0b3JzLCB0aGUgcmV2ZXJz
ZSBvZiAncGxhY2VtZW50IG5ldyBzeW50YXgnCisgICAgV0VCS0lUX0lDT05fREFUQUJBU0Uob2Jq
ZWN0KS0+cHJpdi0+fldlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3Bh
cmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2lj
b25fZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAgIHdlYmtpdF9p
Y29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lU
X0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBQUk9QX1BBVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJhc2VDbGFzcyog
a2xhc3MpCit7CisgICAgd2Via2l0SW5pdCgpOworCisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5kaXNwb3Nl
ID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5z
ZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcHJvcGVy
dHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdEljb25EYXRhYmFzZTpwYXRoOgorICAgICAg
KgorICAgICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBmb2xkZXIu
CisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjMuMTEKKyAgICAgICovCisgICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBVEgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygicGF0aCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJQYXRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFzZSBm
b2xkZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZDoKKyAg
ICAgKiBAd2ViVmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQK
KyAgICAgKiBAZnJhbWVfdXJpOiB0aGUgVVJJIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIHRoZSBp
Y29uCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBmYXZpY29u
IGlzIGF2YWlsYWJsZSBmb3IgYSBwYWdlLAorICAgICAqIG9yIGEgY2hpbGQgZnJhbWUuCisgICAg
ICogU2VlIFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGZh
dmljb24gZm9yCisgICAgICogdGhlIG1haW4gZnJhbWUgb2YgYSBwYXJ0aWN1bGFyICNXZWJLaXRX
ZWJWaWV3LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy4xMQorICAgICAqLworICAgIHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbSUNPTl9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29u
LWxvYWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAg
ICAgICAgICAgR19UWVBFX1NUUklORyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
a2xhc3MsIHNpemVvZihXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSkKK3sKKyAgICBkYXRhYmFzZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShk
YXRhYmFzZSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNlUHJp
dmF0ZSk7CisgICAgLy8gJ3BsYWNlbWVudCBuZXcgc3ludGF4Jywgc2VlIHdlYmtpdHdlYnZpZXcu
Y3BwCisgICAgbmV3IChkYXRhYmFzZS0+cHJpdikgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSgp
OworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoOgorICogQGRhdGFi
YXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBhYnNvbHV0
ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGF0YWJhc2UgZm9sZGVyCisgKgorICogU2luY2U6IDEu
My4xMQorICoqLworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9wYXRoKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKworICAgIHJl
dHVybiBkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VJ
Y29uRGF0YWJhc2VPbkV4aXQoKQoreworICAgIGlmIChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
aXNFbmFibGVkKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPnNldEVuYWJs
ZWQoZmFsc2UpOworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+Y2xvc2UoKTsKKyAg
ICB9Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGg6CisgKiBAZGF0
YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhdGg6IGFuIGFic29sdXRlIHBhdGgg
dG8gdGhlIGljb24gZGF0YWJhc2UgZm9sZGVyCisgKgorICogU3BlY2lmaWVzIHRoZSBhYnNvbHV0
ZSBwYXRoIHRvIHRoZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBQYXNzaW5nICVO
VUxMIG9yICIiIGRpc2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjMu
MTEKKyAqKi8KK3ZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgaWYgKGRhdGFi
YXNlLT5wcml2LT5wYXRoLmdldCgpKQorICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
Y2xvc2UoKTsKKworICAgIGlmICghKHBhdGggJiYgcGF0aFswXSkpIHsKKyAgICAgICAgZGF0YWJh
c2UtPnByaXYtPnBhdGguc2V0KDApOworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+
c2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkYXRhYmFz
ZS0+cHJpdi0+cGF0aC5zZXQoZ19zdHJkdXAocGF0aCkpOworCisgICAgV2ViQ29yZTo6aWNvbkRh
dGFiYXNlKCktPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkt
Pm9wZW4oV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhkYXRhYmFzZS0+cHJpdi0+cGF0aC5nZXQo
KSkpOworCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlu
aXRpYWxpemVkKSB7CisgICAgICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFzZU9uRXhpdCk7Cisg
ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0
YWJhc2UKKyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24K
KyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgZm9yIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gcGFn
ZSBVUkkuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKCkuCisgKgor
ICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgVVJJIGZvciB0aGUgZmF2aWNvbiwgb3IgJU5V
TEwKKyAqCisgKiBTaW5jZTogMS4zLjExCisgKiovCitnY2hhciogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fdXJpKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFy
KiBwYWdlVVJJKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RB
VEFCQVNFKGRhdGFiYXNlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwg
MCk7CisKKyAgICBTdHJpbmcgcGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7Cisg
ICAgcmV0dXJuIGdfc3RyZHVwKFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5pY29uVVJMRm9yUGFn
ZVVSTChwYWdlVVJMKS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfaWNvbl9waXhidWY6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRh
YmFzZQorICogQHBhZ2VfdXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgor
ICoKKyAqIE9idGFpbnMgYSAjR2RrUGl4YnVmIG9mIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4g
cGFnZSBVUkksIG9yCisgKiBhIGRlZmF1bHQgaWNvbiBpZiB0aGVyZSBpcyBubyBpY29uIGZvciB0
aGUgZ2l2ZW4gcGFnZS4gVXNlCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmko
KSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KKyAqIFVzdWFsbHkgeW91
IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGFuZCBs
b2FkIHRoZQorICogcGl4YnVmIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBUaGUgcGl4YnVmIHdp
bGwgYmUgdGhlIGxhcmdlc3QgcG9zc2libGUgc2l6ZSBhbmQgc2hvdWxkIGJlCisgKiByZXNpemVk
IGJlZm9yZSBpdCBpcyBkaXNwbGF5ZWQuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2ljb25fcGl4YnVmKCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBy
ZWZlcmVuY2UgdG8gYSAjR2RrUGl4YnVmLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjMuMTEK
KyAqKi8KK0dka1BpeGJ1Ziogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYWdlVVJJKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFnZVVSSSwgMCk7CisKKyAgICBTdHJpbmcg
cGFnZVVSTCA9IFN0cmluZzo6ZnJvbVVURjgocGFnZVVSSSk7CisgICAgLy8gVGhlIGV4YWN0IHNp
emUgd2UgcGFzcyBpcyBpcnJlbGV2YW50IHRvIHRoZSBXZWJDb3JlOjppY29uRGF0YWJhc2UgY29k
ZS4KKyAgICAvLyBXZSBtdXN0IHBhc3Mgc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLCAwIHRvIGdl
dCBhIHBpeGJ1Zi4KKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbiA9IFdlYkNvcmU6Omljb25EYXRh
YmFzZSgpLT5pY29uRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDE2LCAxNikp
OworICAgIGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgR2RrUGl4YnVmKiBwaXhi
dWYgPSBpY29uLT5nZXRHZGtQaXhidWYoKTsKKyAgICBpZiAoIXBpeGJ1ZikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka1BpeGJ1Zio+KGdfb2JqZWN0X3JlZihw
aXhidWYpKTsKK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhcigpOgorICog
QGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqCisgKiBDbGVhcnMgYWxsIGljb25z
IGZyb20gdGhlIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjMuMTEKKyAqKi8KK3ZvaWQgd2Vi
a2l0X2ljb25fZGF0YWJhc2VfY2xlYXIoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7
CisKKyAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+cmVtb3ZlQWxsSWNvbnMoKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTVhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlh
bkBsYW5lZG8uY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGljb25kYXRhYmFzZV9oCisjZGVmaW5lIHdlYmtp
dGljb25kYXRhYmFzZV9oCisKKyNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFICAg
ICAgICAgICAgICh3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfSUNPTl9EQVRBQkFTRShvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNl
KSkKKyNkZWZpbmUgV0VCS0lUX0lDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UsIFdl
YktpdEljb25EYXRhYmFzZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0lDT05fREFUQUJBU0Uo
b2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9U
WVBFX0lDT05fREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRV9DTEFT
UyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
SUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9JQ09OX0RBVEFCQVNFX0dFVF9DTEFTUyhv
YmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9JQ09O
X0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGU7CisKK3N0
cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
KworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUqIHBy
aXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEljb25EYXRhYmFzZUNsYXNzIHsKKyAgICBHT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lv
biAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAgICAgICAo
dm9pZCk7CisKK1dFQktJVF9BUEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfaWNvbl9k
YXRhYmFzZV9nZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCAgICAg
ICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKKworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAg
KFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKKworV0VCS0lU
X0FQSSBHZGtQaXhidWYqCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAg
IChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB3
ZWJraXRpY29uZGF0YWJhc2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwCmluZGV4IDZhODU2YjQuLmQwZjAzNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJ3ZWJr
aXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3By
aXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0ZS5oIgorI2luY2x1
ZGUgIndlYmtpdGljb25kYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKICNp
bmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmty
ZXNwb25zZS5oIgpAQCAtMjMxNiw2ICsyMzE3LDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICog
QGljb25fdXJpOiB0aGUgVVJJIGZvciB0aGUgaWNvbgogICAgICAqCiAgICAgICogVGhpcyBzaWdu
YWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBtYWluIGZyYW1lIGhhcyBnb3QgYSBmYXZpY29uLgorICAg
ICAqIFNlZSBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkIGlmIHlvdSB3YW50IHRvIGtl
ZXAgdHJhY2sgb2YKKyAgICAgKiBpY29ucyBmb3IgY2hpbGQgZnJhbWVzLgogICAgICAqCiAgICAg
ICogU2luY2U6IDEuMS4xOAogICAgICAqLwpAQCAtNTA2OSw2ICs1MDcyLDM1IEBAIEdfQ09OU1Rf
UkVUVVJOIGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiB9CiAKIC8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZjoK
KyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb2JqZWN0CisgKgorICogT2J0YWlucyBh
ICNHZGtQaXhidWYgb2YgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmlldywg
b3IKKyAqIGEgZGVmYXVsdCBpY29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZlbiBw
YWdlLiBVc2UKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0
byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KKyAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVj
dCB0byBXZWJLaXRXZWJWaWV3OjppY29uLWxvYWRlZCBhbmQgbG9hZCB0aGUKKyAqIHBpeGJ1ZiBp
biB0aGUgY2FsbGJhY2suCisgKgorICogVGhlIHBpeGJ1ZiB3aWxsIGJlIHRoZSBsYXJnZXN0IHBv
c3NpYmxlIHNpemUgYW5kIHNob3VsZCBiZQorICogcmVzaXplZCBiZWZvcmUgaXQgaXMgZGlzcGxh
eWVkLgorICogU2VlIGFsc28gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKCku
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAj
R2RrUGl4YnVmLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjMuMTEKKyAqLworR2RrUGl4YnVm
KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcp
LCAwKTsKKworICAgIGNvbnN0IGdjaGFyKiBwYWdlVVJJID0gd2Via2l0X3dlYl92aWV3X2dldF91
cmkod2ViVmlldyk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9n
ZXRfaWNvbl9kYXRhYmFzZSgpOworICAgIHJldHVybiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkkpOworfQorCisKKworLyoqCiAgKiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudDoKICAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3
CiAgKiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDE4Mzhi
ZmUuLjM4YzlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApA
QCAtMzk3LDYgKzM5Nyw5IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfaGl0X3Rlc3RfcmVzdWx0ICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldywKIFdFQktJVF9BUEkgR19D
T05TVF9SRVRVUk4gZ2NoYXIgKgogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIAorV0VCS0lUX0FQ
SSBHZGtQaXhidWYgKgord2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZiAgICAgICAgICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKKwogV0VCS0lUX0FQSSBXZWJL
aXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwogCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA3OWM3OTRhLi5mMjYxODk2IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTQ1Myw3
ICs0NTMsNyBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCkK
ICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OnNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4odHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKKyAgICB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgMCk7CiAK
ICAgICBpZiAoYXhDb250cm9sbGVyKQogICAgICAgICBheENvbnRyb2xsZXItPnJlc2V0VG9Db25z
aXN0ZW50U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCmluZGV4IDIzYTlkOTkuLmY0MDZjZTYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApA
QCAtNDkyLDcgKzQ5MiwxMyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3Bl
ZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYgcmVzdWx0LCBkb3VibGUgYwogCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoZW5h
YmxlZCk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNv
bl9kYXRhYmFzZSgpOworICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+
IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksICJEdW1w
UmVuZGVyVHJlZSIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7CisgICAgICAgIHdlYmtpdF9pY29u
X2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFz
ZSwgMCk7CisgICAgfQogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2Ny
aXB0UHJvZmlsaW5nRW5hYmxlZChib29sIGZsYWcpCi0tIAoxLjcuMy41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84745</attachid>
            <date>2011-03-04 07:15:24 -0800</date>
            <delta_ts>2011-03-04 08:27:58 -0800</delta_ts>
            <desc> Implement WebKitIconDatabase API #6</desc>
            <filename>0001-provide-an-API-to-control-the-IconDatabase-https-bugs.diff</filename>
            <type>text/plain</type>
            <size>34323</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSAxOGM3Njg2MzU2YTUxY2VmMmEyZWQwMmViMzYwZTI4Y2YzM2EwNDdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTEwCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KCiogR05VbWFrZWZpbGUuYW06CiogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwOiBFbWl0IHNpZ25hbHMgb24KICAgIHRoZSBpY29uIGRhdGFiYXNlIGZvciBuZXcg
aWNvbnMuCiogd2Via2l0L3dlYmtpdC5oOgoqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6Ciogd2Vi
a2l0L3dlYmtpdGdsb2JhbHMuY3BwOgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmg6IEFkZCBhIGZ1
bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsCiAgICBpY29uIGRhdGFiYXNlLgoqIHdlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuY3BwOgoqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaDogSW1w
bGVtZW50IHB1YmxpYyBpY29uIGRhdGFiYXNlCiAgICBvYmplY3Qgd2l0aCBtZXRob2RzIGZvciBv
YnRhaW5pbmcgaWNvbiBVUkxzLCBwaXhidWZzLCBjbGVhcmluZwogICAgd2FpdGluZyBmb3IgbmV3
IGljb25zLgoqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKiB3ZWJraXQvd2Via2l0d2Vidmll
dy5oOiBBZGQgYSBtZXRob2QgdG8gb2J0YWluIGFuIGljb24gcGl4YnVmCiAgICBmb3IgdGhlIHdl
YiB2aWV3LgotLS0KIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAyMiArKwogU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gICAgICAg
ICAgICAgICAgICAgfCAgICAyICsKIC4uLi9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuY3BwICAgIHwgICAgNSAtCiAuLi4vZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5oICB8ICAxMTYgLS0tLS0tLQogLi4uL2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgICAgfCAgICA1ICsKIFNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaCAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBTb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oICAgICAgICAgICB8ICAgIDMgKwogU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwICAgICAgICAgfCAgIDQ0ICsrLS0KIFNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggICAgICAgICAgIHwgICAgMyAr
CiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaCAgICB8ICAg
IDEgLQogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAgICAg
fCAgMzE0ICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aWNvbmRhdGFiYXNlLmggICAgICB8ICAgNzggKysrKysKIFNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCAgICAgICAgIHwgICAzMiArKwogU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCAgICAgICAgICAgfCAgICAzICsKIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgICAgICAgIHwgICAgMiArLQogLi4uL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgfCAgICA4ICstCiAx
NiBmaWxlcyBjaGFuZ2VkLCA0OTIgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggMzMzYjhiMy4uM2IwN2U3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisy
MDExLTAzLTA0ICBDaHJpc3RpYW4gRHl3YW4gIDxjaHJpc3RpYW5AbGFuZWRvLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBwcm92aWRl
IGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTEwCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6
IEVtaXQgc2lnbmFscyBvbgorICAgICAgICAgICAgdGhlIGljb24gZGF0YWJhc2UgZm9yIG5ldyBp
Y29ucy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtp
dGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5jcHA6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdGdsb2JhbHMuaDogQWRkIGEgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBn
bG9iYWwKKyAgICAgICAgICAgIGljb24gZGF0YWJhc2UuCisgICAgICAgICogd2Via2l0L3dlYmtp
dGljb25kYXRhYmFzZS5jcHA6CisgICAgICAgICogd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5o
OiBJbXBsZW1lbnQgcHVibGljIGljb24gZGF0YWJhc2UKKyAgICAgICAgICAgIG9iamVjdCB3aXRo
IG1ldGhvZHMgZm9yIG9idGFpbmluZyBpY29uIFVSTHMsIHBpeGJ1ZnMsIGNsZWFyaW5nCisgICAg
ICAgICAgICB3YWl0aW5nIGZvciBuZXcgaWNvbnMuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg6IEFkZCBhIG1ldGhv
ZCB0byBvYnRhaW4gYW4gaWNvbiBwaXhidWYKKyAgICAgICAgICAgIGZvciB0aGUgd2ViIHZpZXcu
CiAyMDExLTAzLTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXgg
NDJhYzFlNC4uNzAzMGVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTExNiw2ICsx
MTYsNyBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCBcCiAJJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggXAogCSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oIFwKKwkk
KHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIFwK
IAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0
LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jl
c3BvbnNlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2Vj
dXJpdHlvcmlnaW4uaCBcCkBAIC0yMDMsNiArMjA0LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIFwKIAlT
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0ZS5oIFwKKwlTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBcCiAJU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCiAJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmNwcAppbmRleCA2ZGIyYzgxLi4xNGUzOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5jcHAKQEAgLTk4LDExICs5OCw2IEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjps
aW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCkKICAgICByZXR1cm4gc19saW5rc0luY2x1ZGVkSW5U
YWJDaGFpbjsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEljb25EYXRh
YmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdlYktpdDo6c2V0SWNvbkRhdGFiYXNl
RW5hYmxlZChlbmFibGVkKTsKLX0KLQogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
dFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIHNf
c2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCA9IGVuYWJsZWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
aCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTVkNmRhLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGtfaAotI2RlZmluZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGtfaAotCi0jaW5j
bHVkZSAiSlNTdHJpbmdSZWYuaCIKLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgot
Ci0jaW5jbHVkZSA8YXRrL2F0ay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWVu
dW0gewotICAgIFdlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlID0gMSA8PCAwLAotICAgIFdl
YkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzID0gMSA8PCAxLAotICAgIFdlYkZpbmRPcHRpb25zVHJl
YXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQgPSAxIDw8IDIsCi0gICAgV2ViRmluZE9wdGlvbnNC
YWNrd2FyZHMgPSAxIDw8IDMsCi0gICAgV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kID0gMSA8PCA0
LAotICAgIFdlYkZpbmRPcHRpb25zU3RhcnRJblNlbGVjdGlvbiA9IDEgPDwgNQotfTsKLQotfQot
dHlwZWRlZiB1bnNpZ25lZCBXZWJLaXRGaW5kT3B0aW9uczsKLQotY2xhc3MgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrIHsKLQotcHVibGljOgotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0aygp
OwotICAgIH5EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsoKTsKLQotICAgIHN0YXRpYyB2b2lkIHNl
dER1bXBSZW5kZXJUcmVlTW9kZUVuYWJsZWQoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgZHVtcFJl
bmRlclRyZWVNb2RlRW5hYmxlZCgpOwotCi0gICAgc3RhdGljIHZvaWQgc2V0TGlua3NJbmNsdWRl
ZEluRm9jdXNDaGFpbihib29sKTsKLSAgICBzdGF0aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1
c0NoYWluKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sKTsK
LSAgICBzdGF0aWMgdm9pZCBzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKGJvb2wp
OwotICAgIHN0YXRpYyBib29sIHNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKTsKLQot
ICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG5vZGVzRnJvbVJlY3QoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wLCB1bnNpZ25lZCBy
aWdodCwgdW5zaWduZWQgYm90dG9tLCB1bnNpZ25lZCBsZWZ0LCBib29sIGlnbm9yZUNsaXBwaW5n
KTsKLSAgICBzdGF0aWMgdm9pZCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGdpbnQgZGV2aWNlRFBJLCBnaW50IGRldmljZVdpZHRoLCBnaW50IGRl
dmljZUhlaWdodCwgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVIZWlnaHQpOwot
Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJPcGVuZXIoV2ViS2l0V2ViRnJhbWUqKTsKLQotICAgIC8v
IEZJWE1FOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVpciBBUEkgaGFz
IGJlZW4gZGlzY3Vzc2VkLgotICAgIHN0YXRpYyBHU0xpc3QqIGdldEZyYW1lQ2hpbGRyZW4oV2Vi
S2l0V2ViRnJhbWUqKTsKLSAgICBzdGF0aWMgV1RGOjpDU3RyaW5nIGdldElubmVyVGV4dChXZWJL
aXRXZWJGcmFtZSopOwotICAgIHN0YXRpYyBXVEY6OkNTdHJpbmcgZHVtcFJlbmRlclRyZWUoV2Vi
S2l0V2ViRnJhbWUqKTsKLSAgICBzdGF0aWMgV1RGOjpDU3RyaW5nIGNvdW50ZXJWYWx1ZUZvckVs
ZW1lbnRCeUlkKFdlYktpdFdlYkZyYW1lKiwgY29uc3QgY2hhciogaWQpOwotICAgIHN0YXRpYyBp
bnQgcGFnZU51bWJlckZvckVsZW1lbnRCeUlkKFdlYktpdFdlYkZyYW1lKiwgY29uc3QgY2hhciog
aWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCk7Ci0gICAgc3RhdGljIGludCBu
dW1iZXJPZlBhZ2VzRm9yRnJhbWUoV2ViS2l0V2ViRnJhbWUqLCBmbG9hdCBwYWdlV2lkdGgsIGZs
b2F0IHBhZ2VIZWlnaHQpOwotICAgIHN0YXRpYyBXVEY6OkNTdHJpbmcgcGFnZVByb3BlcnR5KFdl
YktpdFdlYkZyYW1lKiwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcik7
Ci0gICAgc3RhdGljIGJvb2wgaXNQYWdlQm94VmlzaWJsZShXZWJLaXRXZWJGcmFtZSosIGludCBw
YWdlTnVtYmVyKTsKLSAgICBzdGF0aWMgV1RGOjpDU3RyaW5nIHBhZ2VTaXplQW5kTWFyZ2luc0lu
UGl4ZWxzKFdlYktpdFdlYkZyYW1lKiwgaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBp
bnQgbWFyZ2luTGVmdCk7Ci0gICAgc3RhdGljIHZvaWQgYWRkVXNlclN0eWxlU2hlZXQoV2ViS2l0
V2ViRnJhbWUqLCBjb25zdCBjaGFyKiBzb3VyY2VDb2RlLCBib29sIGFsbEZyYW1lcyk7Ci0gICAg
c3RhdGljIGd1aW50IGdldFBlbmRpbmdVbmxvYWRFdmVudENvdW50KFdlYktpdFdlYkZyYW1lKik7
Ci0gICAgc3RhdGljIGJvb2wgcGF1c2VBbmltYXRpb24oV2ViS2l0V2ViRnJhbWUqLCBjb25zdCBj
aGFyKiBuYW1lLCBkb3VibGUgdGltZSwgY29uc3QgY2hhciogZWxlbWVudCk7Ci0gICAgc3RhdGlj
IGJvb2wgcGF1c2VUcmFuc2l0aW9uKFdlYktpdFdlYkZyYW1lKiwgY29uc3QgY2hhciogbmFtZSwg
ZG91YmxlIHRpbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnQpOwotICAgIHN0YXRpYyBib29sIHBhdXNl
U1ZHQW5pbWF0aW9uKFdlYktpdFdlYkZyYW1lKiwgY29uc3QgY2hhciogYW5pbWF0aW9uSWQsIGRv
dWJsZSB0aW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQpOwotICAgIHN0YXRpYyBXVEY6OkNTdHJp
bmcgbWFya2VyVGV4dEZvckxpc3RJdGVtKFdlYktpdFdlYkZyYW1lKiwgSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKFdlYktpdFdlYkZyYW1lKik7Ci0gICAgc3RhdGljIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoV2ViS2l0V2ViRnJhbWUqKTsKLSAgICBzdGF0aWMgdm9pZCByZXN1bWVBbmlt
YXRpb25zKFdlYktpdFdlYkZyYW1lKik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJNYWluRnJhbWVO
YW1lKFdlYktpdFdlYkZyYW1lKik7Ci0gICAgc3RhdGljIEF0a09iamVjdCogZ2V0Rm9jdXNlZEFj
Y2Vzc2libGVFbGVtZW50KFdlYktpdFdlYkZyYW1lKik7Ci0gICAgc3RhdGljIEF0a09iamVjdCog
Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KFdlYktpdFdlYkZyYW1lKik7Ci0gICAgc3RhdGljIHZv
aWQgbGF5b3V0RnJhbWUoV2ViS2l0V2ViRnJhbWUqKTsKLQotICAgIC8vIFdlYktpdFdlYlZpZXcK
LSAgICBzdGF0aWMgdm9pZCBleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWUoV2ViS2l0V2ViVmlldyos
IGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogdmFsdWUpOwotICAgIHN0YXRpYyBib29s
IGlzQ29tbWFuZEVuYWJsZWQoV2ViS2l0V2ViVmlldyosIGNvbnN0IGdjaGFyKiBuYW1lKTsKLSAg
ICBzdGF0aWMgYm9vbCBmaW5kU3RyaW5nKFdlYktpdFdlYlZpZXcqLCBjb25zdCBnY2hhciosIFdl
YktpdEZpbmRPcHRpb25zKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRDb21wb3NpdGlvbihXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgY2hhciogdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBzdGF0
aWMgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIHRl
eHQpOwotICAgIHN0YXRpYyBib29sIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKFdlYktpdFdl
YlZpZXcqLCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEdka1JlY3RhbmdsZSopOwotICAgIHN0
YXRpYyBib29sIHNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyosIGludCogc3RhcnQsIGludCog
ZW5kKTsKLSAgICBzdGF0aWMgZG91YmxlIGRlZmF1bHRNaW5pbXVtVGltZXJJbnRlcnZhbCgpOyAv
LyBOb3QgcmVhbGx5IHRpZWQgdG8gV2ViVmlldwotICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1U
aW1lckludGVydmFsKFdlYktpdFdlYlZpZXcqLCBkb3VibGUpOwotCi0gICAgLy8gR0MKLSAgICBz
dGF0aWMgdm9pZCBnY0NvbGxlY3RKYXZhc2NyaXB0T2JqZWN0cygpOwotICAgIHN0YXRpYyB2b2lk
IGdjQ29sbGVjdEphdmFzY3JpcHRPYmplY3RzT25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50
aWxEb25lKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBnY0NvdW50SmF2YXNjcmlwdE9iamVj
dHMoKTsKLQotICAgIHN0YXRpYyB2b2lkIHdoaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oY29uc3Qg
Z2NoYXIqIHNvdXJjZU9yaWdpbiwgY29uc3QgZ2NoYXIqIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGNv
bnN0IGdjaGFyKiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFp
bnMpOwotICAgIHN0YXRpYyB2b2lkIHJlc2V0T3JpZ2luQWNjZXNzV2hpdGVMaXN0cygpOwotICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgd29ya2VyVGhyZWFkQ291bnQoKTsKLSAgICBzdGF0aWMgYm9v
bCB3ZWJraXRXZWJGcmFtZVNlbGVjdGlvbkhhc1NwZWxsaW5nTWFya2VyKFdlYktpdFdlYkZyYW1l
KiwgZ2ludCBmcm9tLCBnaW50IGxlbmd0aCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wg
c19kcnRSdW47Ci0gICAgc3RhdGljIGJvb2wgc19saW5rc0luY2x1ZGVkSW5UYWJDaGFpbjsKLSAg
ICBzdGF0aWMgYm9vbCBzX3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQ7Ci19OwotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCBkY2U3ZjY4Li5mNGJkN2U5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAid2Via2l0ZXJyb3IuaCIKICNp
bmNsdWRlICJ3ZWJraXRnbG9iYWxzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3
b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0cHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtOTIzLDYgKzkyNCwxMCBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKICAgICBpZiAo
bV9sb2FkaW5nRXJyb3JQYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBjb25zdCBnY2hhciog
ZnJhbWVVUkkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkobV9mcmFtZSk7CisgICAgV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRfaWNvbl9kYXRhYmFzZSgpOworICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShkYXRhYmFzZSwgImljb24tbG9hZGVkIiwgbV9mcmFtZSwg
ZnJhbWVVUkkpOworCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJh
bWUobV9mcmFtZSk7CiAKICAgICAvLyBBdm9pZCByZXBvcnRpbmcgZmF2aWNvbnMgZm9yIG5vbi1t
YWluIGZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQu
aCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAppbmRleCBkODVkNjk4Li43N2U5
NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0Z2xvYmFscy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0ZXN0
cmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c2VjdXJpdHlvcmln
aW4uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVz
LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IGIwYjYw
N2IuLjBiODgwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
ZWZpbmVzLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApA
QCAtNDEsNiArNDEsOSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRJY29uRGF0YWJhc2UgV2ViS2l0SWNvbkRhdGFiYXNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dEljb25EYXRhYmFzZUNsYXNzIFdlYktpdEljb25EYXRhYmFzZUNsYXNzOworCiB0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0d29ya1JlcXVlc3Q7CiB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBXZWJLaXROZXR3b3JrUmVxdWVzdENs
YXNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFs
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKaW5kZXgg
NGQwN2NlYi4uYmQ3YzUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGdsb2JhbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9i
YWxzLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
ICNpbmNsdWRlICJ3ZWJraXRhcHBsaWNhdGlvbmNhY2hlLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xv
YmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRpY29uZGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAid2Via2l0d2VicGx1Z2luZGF0YWJhc2Vwcml2YXRlLmgiCkBAIC0yMjMsOSAr
MjI0LDI1IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGN1cnJlbnRUb3BsZXZlbENhbGxiYWNrKFdlYktp
dFNvdXBBdXRoRGlhbG9nKiBmZWF0dXJlLCBTb3VwTWVzCiAgICAgICAgIHJldHVybiBOVUxMOwog
fQogCi1zdGF0aWMgdm9pZCBjbG9zZUljb25EYXRhYmFzZU9uRXhpdCgpCisvKioKKyAqIHdlYmtp
dF9nZXRfaWNvbl9kYXRhYmFzZToKKyAqCisgKiBSZXR1cm5zIHRoZSAjV2ViS2l0SWNvbkRhdGFi
YXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucy4KKyAqCisgKiBSZXR1cm4gdmFs
dWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgI1dlYktpdEljb25EYXRhYmFzZQorICoK
KyAqIFNpbmNlOiAxLjMuMTMKKyAqLworV2ViS2l0SWNvbkRhdGFiYXNlKiB3ZWJraXRfZ2V0X2lj
b25fZGF0YWJhc2UoKQogewotICAgIGljb25EYXRhYmFzZSgpLmNsb3NlKCk7CisgICAgc3RhdGlj
IFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSAwOworCisgICAgd2Via2l0SW5pdCgpOwor
CisgICAgaWYgKCFkYXRhYmFzZSkKKyAgICAgICAgZGF0YWJhc2UgPSBXRUJLSVRfSUNPTl9EQVRB
QkFTRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgTlVMTCkpOworCisg
ICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCiB2b2lkIHdlYmtpdEluaXQoKQpAQCAtMjU2LDcgKzI3
Myw4IEBAIHZvaWQgd2Via2l0SW5pdCgpCiAgICAgUGFnZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zp
c2l0ZWRMaW5rcyh0cnVlKTsKIAogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkt
PnNldEhlbHBlcihXZWJLaXQ6OnBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpKTsKLSAgICBXZWJL
aXQ6OnNldEljb25EYXRhYmFzZUVuYWJsZWQodHJ1ZSk7CisgICAgR093blB0cjxnY2hhcj4gaWNv
bkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndl
YmtpdCIsICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vf
c2V0X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIGljb25EYXRhYmFzZVBhdGguZ2V0
KCkpOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vz
c2lvbigpOwogCkBAIC0yODAsMjUgKzI5OCw1IEBAIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3Rl
Ym9hcmRIZWxwZXJJbnN0YW5jZSgpCiAgICAgcmV0dXJuIGhlbHBlcjsKIH0KIAotdm9pZCBzZXRJ
Y29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChlbmFibGVkICYmICFpbml0aWFsaXplZCkgewotICAg
ICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIGF0ZXhpdChjbG9zZUljb25EYXRhYmFz
ZU9uRXhpdCk7Ci0gICAgfQotCi0gICAgaWYgKGVuYWJsZWQpIHsKLSAgICAgICAgaWNvbkRhdGFi
YXNlKCkuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgR093blB0cjxnY2hhcj4gaWNvbkRhdGFi
YXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIs
ICJpY29uZGF0YWJhc2UiLCBOVUxMKSk7Ci0gICAgICAgIGljb25EYXRhYmFzZSgpLm9wZW4oaWNv
bkRhdGFiYXNlUGF0aC5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpY29u
RGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICBpY29uRGF0YWJhc2UoKS5jbG9zZSgp
OwotfQotCi0KIH0gLyoqIGVuZCBuYW1lc3BhY2UgV2ViS2l0ICovCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oCmluZGV4IDYxMmMxOTUuLjMzZDJiOGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmgKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaApAQCAtNTgsNiArNTgsOSBAQCB3ZWJr
aXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbiAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJL
SVRfQVBJIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlICoKIHdlYmtpdF9nZXRfd2ViX3BsdWdpbl9k
YXRhYmFzZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRJY29u
RGF0YWJhc2UgKgord2Via2l0X2dldF9pY29uX2RhdGFiYXNlICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQpOworCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwgICAg
ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRDYWNoZU1vZGVsICAgICBjYWNoZV9tb2RlbCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmgK
aW5kZXggN2ViM2FhZS4uNTkyM2YyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHNwcml2YXRlLmgKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBQYXN0ZWJvYXJkSGVscGVyR3RrOwogUGFzdGVib2FyZEhlbHBlckd0ayogcGFz
dGVib2FyZEhlbHBlckluc3RhbmNlKCk7CiAKLXZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChi
b29sKTsKIH0KIAogZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjcyODNhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aWNvbmRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBsYW5lZG8uY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJE
YXRhYmFzZURldGFpbHMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRl
ICJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZh
dGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRzZWN1cml0eW9yaWdpbnByaXZhdGUuaCIKKyNpbmNsdWRl
IDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKy8qKgorICogU0VDVElPTjp3ZWJraXR3ZWJk
YXRhYmFzZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIFdlYktpdCB3ZWIgYXBwbGljYXRpb24g
ZGF0YWJhc2UKKyAqCisgKiAjV2ViS2l0SWNvbkRhdGFiYXNlIHByb3ZpZGVzIGFjY2VzcyB0byB3
ZWJzaXRlIGljb25zLCBhcyBzaG93bgorICogaW4gdGFiIGxhYmVscywgd2luZG93IGNhcHRpb25z
IG9yIGJvb2ttYXJrcy4gQWxsIHZpZXdzIHNoYXJlCisgKiB0aGUgc2FtZSBpY29uIGRhdGFiYXNl
LgorICoKKyAqIFRoZSBpY29uIGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgc3Rv
cmVkIGluCisgKiB+Ly5sb2NhbC9zaGFyZS93ZWJraXQvaWNvbmRhdGFiYXNlLCBkZXBlbmRpbmcg
b24gWERHX0RBVEFfSE9NRS4KKyAqCisgKiBXZWJLaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxvb2sg
Zm9yIGF2YWlsYWJsZSBpY29ucyBpbiBsaW5rIGVsZW1lbnRzCisgKiBvbiBvcGVuZWQgcGFnZXMg
YXMgd2VsbCBhcyBhbiBleGlzdGluZyBmYXZpY29uLmljbyBhbmQgbG9hZCB0aGUKKyAqIGZvdW5k
IGltYWdlcyBpbnRvIHRoZSBtZW1vcnkgY2FjaGUgaWYgcG9zc2libGUuIFRoZSBzaWduYWwgImlj
b24tbG9hZGVkIgorICogd2lsbCBiZSBlbWl0dGVkIHdoZW4gYW55IGljb24gaXMgZm91bmQgYW5k
IGxvYWRlZC4KKyAqIE9sZCBJY29ucyBhcmUgYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGFmdGVy
IDQgZGF5cy4KKyAqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCgpIGNhbiBiZSB1
c2VkIHRvIGNoYW5nZSB0aGUgbG9jYXRpb24KKyAqIG9mIHRoZSBkYXRhYmFzZSBhbmQgYWxzbyB0
byBkaXNhYmxlIGl0IGJ5IHBhc3NpbmcgJU5VTEwuCisgKgorICogSWYgV2ViS2l0V2ViU2V0dGlu
Z3M6OmVuYWJsZS1wcml2YXRlLWJyb3dzaW5nIGlzICVUUlVFIG5ldyBpY29ucworICogd29uJ3Qg
YmUgYWRkZWQgdG8gdGhlIGRhdGFiYXNlIG9uIGRpc2sgYW5kIG5vIGV4aXN0aW5nIGljb25zIHdp
bGwKKyAqIGJlIGRlbGV0ZWQgZnJvbSBpdC4KKyAqCisgKiBTaW5jZTogMS4zLjEzCisgKi8KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9QQVRILAorfTsKKworZW51bSB7CisgICAgSUNPTl9MT0FERUQsCisKKyAgICBMQVNUX1NJR05B
TAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NpZ25hbHNbTEFTVF9T
SUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdlYktpdEljb25EYXRhYmFzZSwgd2Vi
a2l0X2ljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpOworCitzdHJ1Y3QgX1dlYktpdEljb25E
YXRhYmFzZVByaXZhdGUgeworICAgIEdPd25QdHI8Z2NoYXI+IHBhdGg7Cit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgLy8gQ2FsbCBDKysgZGVzdHJ1Y3RvcnMsIHRoZSByZXZlcnNlIG9mICdwbGFjZW1lbnQgbmV3
IHN5bnRheCcKKyAgICBXRUJLSVRfSUNPTl9EQVRBQkFTRShvYmplY3QpLT5wcml2LT5+V2ViS2l0
SWNvbkRhdGFiYXNlUHJpdmF0ZSgpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ljb25f
ZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ljb25fZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+ZGlzcG9z
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2Ug
PSBXRUJLSVRfSUNPTl9EQVRBQkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsK
KyAgICBjYXNlIFBST1BfUEFUSDoKKyAgICAgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Bh
dGgoZGF0YWJhc2UsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfSUNPTl9EQVRBQkFTRShvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfUEFUSDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0
aChkYXRhYmFzZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaWNvbl9kYXRhYmFz
ZV9jbGFzc19pbml0KFdlYktpdEljb25EYXRhYmFzZUNsYXNzKiBrbGFzcykKK3sKKyAgICB3ZWJr
aXRJbml0KCk7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfaWNvbl9kYXRh
YmFzZV9kaXNwb3NlOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfaWNvbl9k
YXRhYmFzZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtp
dF9pY29uX2RhdGFiYXNlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wcm9wZXJ0eTsKKworICAgICAvKioKKyAg
ICAgICogV2ViS2l0SWNvbkRhdGFiYXNlOnBhdGg6CisgICAgICAqCisgICAgICAqIFRoZSBhYnNv
bHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRlci4KKyAgICAgICoKKyAgICAgICog
U2luY2U6IDEuMy4xMworICAgICAgKi8KKyAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJwYXRoIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlBhdGgiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpY29uIGRhdGFiYXNlIGZvbGRlciIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRJY29uRGF0YWJhc2U6Omljb24tbG9hZGVkOgorICAgICAqIEBkYXRhYmFzZTogdGhl
IG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZnJhbWU6IHRo
ZSBmcmFtZSBjb250YWluaW5nIHRoZSBpY29uCisgICAgICogQGZyYW1lX3VyaTogdGhlIFVSSSBv
ZiB0aGUgZnJhbWUgY29udGFpbmluZyB0aGUgaWNvbgorICAgICAqCisgICAgICogVGhpcyBzaWdu
YWwgaXMgZW1pdHRlZCB3aGVuIGEgZmF2aWNvbiBpcyBhdmFpbGFibGUgZm9yIGEgcGFnZSwKKyAg
ICAgKiBvciBhIGNoaWxkIGZyYW1lLgorICAgICAqIFNlZSBXZWJLaXRXZWJWaWV3OjppY29uLWxv
YWRlZCBpZiB5b3Ugb25seSBuZWVkIHRoZSBmYXZpY29uIGZvcgorICAgICAqIHRoZSBtYWluIGZy
YW1lIG9mIGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldy4KKyAgICAgKgorICAgICAqIFNpbmNl
OiAxLjMuMTMKKyAgICAgKi8KKyAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zaWduYWxzW0lDT05f
TE9BREVEXSA9IGdfc2lnbmFsX25ldygiaWNvbi1sb2FkZWQiLAorICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1Moa2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncylHX1NJR05BTF9S
VU5fTEFTVCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAg
TlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1RfU1RSSU5H
LAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNU
X1NUUklORyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihX
ZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pY29u
X2RhdGFiYXNlX2luaXQoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBkYXRh
YmFzZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShkYXRhYmFzZSwgV0VCS0lU
X1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSk7CisgICAgLy8g
J3BsYWNlbWVudCBuZXcgc3ludGF4Jywgc2VlIHdlYmtpdHdlYnZpZXcuY3BwCisgICAgbmV3IChk
YXRhYmFzZS0+cHJpdikgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSgpOworfQorCisvKioKKyAq
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJ
Y29uRGF0YWJhc2UKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBk
YXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBSZXR1cm5zOiB0aGUgYWJzb2x1dGUgcGF0
aCBvZiB0aGUgZGF0YWJhc2UgZm9sZGVyLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjMuMTMK
KyAqKi8KK0dfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0
aChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19JQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSwgMCk7CisKKyAgICByZXR1cm4g
ZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlSWNvbkRh
dGFiYXNlT25FeGl0KCkKK3sKKyAgICBpZiAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmlzRW5h
YmxlZCgpKSB7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5zZXRFbmFibGVkKGZh
bHNlKTsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmNsb3NlKCk7CisgICAgfQor
fQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoOgorICogQGRhdGFiYXNl
OiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBwYXRoOiBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRo
ZSBpY29uIGRhdGFiYXNlIGZvbGRlcgorICoKKyAqIFNwZWNpZmllcyB0aGUgYWJzb2x1dGUgcGF0
aCB0byB0aGUgZGF0YWJhc2UgZm9sZGVyIG9uIGRpc2suCisgKgorICogUGFzc2luZyAlTlVMTCBv
ciAiIiBkaXNhYmxlcyB0aGUgaWNvbiBkYXRhYmFzZS4KKyAqCisgKiBTaW5jZTogMS4zLjEzCisg
KiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsIGNvbnN0IGdjaGFyKiBwYXRoKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKworICAgIGlmIChkYXRhYmFzZS0+
cHJpdi0+cGF0aC5nZXQoKSkKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPmNsb3Nl
KCk7CisKKyAgICBpZiAoIShwYXRoICYmIHBhdGhbMF0pKSB7CisgICAgICAgIGRhdGFiYXNlLT5w
cml2LT5wYXRoLnNldCgwKTsKKyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCktPnNldEVu
YWJsZWQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YWJhc2UtPnBy
aXYtPnBhdGguc2V0KGdfc3RyZHVwKHBhdGgpKTsKKworICAgIFdlYkNvcmU6Omljb25EYXRhYmFz
ZSgpLT5zZXRFbmFibGVkKHRydWUpOworICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5vcGVu
KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2UtPnByaXYtPnBhdGguZ2V0KCkpKTsK
KworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFs
aXplZCkgeworICAgICAgICBhdGV4aXQoY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQpOworICAgICAg
ICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2Rh
dGFiYXNlX2dldF9pY29uX3VyaToKKyAqIEBkYXRhYmFzZTogYSAjV2ViS2l0SWNvbkRhdGFiYXNl
CisgKiBAcGFnZV91cmk6IFVSSSBvZiB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisgKgor
ICogT2J0YWlucyB0aGUgVVJJIGZvciB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJ
LgorICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSgpLgorICoKKyAqIFJl
dHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkIFVSSSBmb3IgdGhlIGZhdmljb24sIG9yICVOVUxMCisg
KgorICogU2luY2U6IDEuMy4xMworICoqLworZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dl
dF9pY29uX3VyaShXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBnY2hhciogcGFn
ZVVSSSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFT
RShkYXRhYmFzZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBhZ2VVUkksIDApOwor
CisgICAgU3RyaW5nIHBhZ2VVUkwgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkkpOworICAgIHJl
dHVybiBnX3N0cmR1cChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS0+aWNvblVSTEZvclBhZ2VVUkwo
cGFnZVVSTCkudXRmOCgpLmRhdGEoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJh
c2VfZ2V0X2ljb25fcGl4YnVmOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UK
KyAqIEBwYWdlX3VyaTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAqCisg
KiBPYnRhaW5zIGEgI0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2Ug
VVJJLCBvcgorICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdp
dmVuIHBhZ2UuIFVzZQorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYg
eW91IG5lZWQgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCisgKiBVc3VhbGx5IHlvdSB3YW50
IHRvIGNvbm5lY3QgdG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0
aGlzCisgKiBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgorICoKKyAqIFRoZSBwaXhidWYgd2lsbCBi
ZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzaXplIGFuZCBzaG91bGQgYmUKKyAqIHJlc2l6ZWQgYmVm
b3JlIGl0IGlzIGRpc3BsYXllZC4KKyAqIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl9waXhidWYoKS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVy
ZW5jZSB0byBhICNHZGtQaXhidWYsIG9yICVOVUxMCisgKgorICogU2luY2U6IDEuMy4xMworICoq
LworR2RrUGl4YnVmKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0
SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKworICAgIFN0cmluZyBwYWdl
VVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsKKyAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3
ZSBwYXNzIGlzIGlycmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgor
ICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEg
cGl4YnVmLgorICAgIFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNl
KCktPmljb25Gb3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMTYsIDE2KSk7Cisg
ICAgaWYgKCFpY29uKQorICAgICAgICByZXR1cm4gMDsKKyAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9
IGljb24tPmdldEdka1BpeGJ1ZigpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrUGl4YnVmKj4oZ19vYmplY3RfcmVmKHBpeGJ1
ZikpOworfQorCisvKioKKyAqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2NsZWFyKCk6CisgKiBAZGF0
YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICoKKyAqIENsZWFycyBhbGwgaWNvbnMgZnJv
bSB0aGUgZGF0YWJhc2UuCisgKgorICogU2luY2U6IDEuMy4xMworICoqLwordm9pZCB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9jbGVhcihXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKKwor
ICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLT5yZW1vdmVBbGxJY29ucygpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmggYi9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlNWFjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGxh
bmVkby5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgd2Via2l0aWNvbmRhdGFiYXNlX2gKKyNkZWZpbmUgd2Via2l0aWNv
bmRhdGFiYXNlX2gKKworI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgorI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UgICAgICAg
ICAgICAgKHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9J
Q09OX0RBVEFCQVNFKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2UpKQor
I2RlZmluZSBXRUJLSVRfSUNPTl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0
SWNvbkRhdGFiYXNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShvYmop
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
SUNPTl9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9JU19JQ09OX0RBVEFCQVNFX0NMQVNTKGts
YXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JQ09O
X0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0lDT05fREFUQUJBU0VfR0VUX0NMQVNTKG9iaikg
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0lDT05fREFU
QUJBU0UsIFdlYktpdEljb25EYXRhYmFzZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dEljb25EYXRhYmFzZVByaXZhdGUgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZTsKKworc3RydWN0
IF9XZWJLaXRJY29uRGF0YWJhc2UgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisg
ICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0SWNvbkRhdGFiYXNlUHJpdmF0ZSogcHJpdjsK
K307CisKK3N0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlQ2xhc3MgeworICAgIEdPYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICov
CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJr
aXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9p
ZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZSAgICAgICAgICAgICh2b2lk
KTsKKworV0VCS0lUX0FQSSBHX0NPTlNUX1JFVFVSTiBnY2hhcioKK3dlYmtpdF9pY29uX2RhdGFi
YXNlX2dldF9wYXRoICAgICAgICAgICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoICAgICAgICAg
ICAgKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhdGgpOworCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpICAgICAgICAoV2Vi
S2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiAgICAgICAgcGFnZV91cmkpOworCitXRUJLSVRfQVBJ
IEdka1BpeGJ1ZioKK3dlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZiAgICAgKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9jbGVhciAgICAgICAgICAgICAgIChXZWJLaXRJ
Y29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIHdlYmtp
dGljb25kYXRhYmFzZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKaW5kZXggMGZmYzlkOS4uODgyMTZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgIndlYmtpdGdl
b2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdGhpdHRlc3RyZXN1bHRwcml2YXRlLmgiCisjaW5jbHVkZSAi
d2Via2l0aWNvbmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1
ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0LmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3Jlc3Bv
bnNlLmgiCkBAIC0yMzE1LDYgKzIzMTYsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
Y2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgKiBAaWNv
bl91cmk6IHRoZSBVUkkgZm9yIHRoZSBpY29uCiAgICAgICoKICAgICAgKiBUaGlzIHNpZ25hbCBp
cyBlbWl0dGVkIHdoZW4gdGhlIG1haW4gZnJhbWUgaGFzIGdvdCBhIGZhdmljb24uCisgICAgICog
U2VlIFdlYktpdEljb25EYXRhYmFzZTo6aWNvbi1sb2FkZWQgaWYgeW91IHdhbnQgdG8ga2VlcCB0
cmFjayBvZgorICAgICAqIGljb25zIGZvciBjaGlsZCBmcmFtZXMuCiAgICAgICoKICAgICAgKiBT
aW5jZTogMS4xLjE4CiAgICAgICovCkBAIC01MDY0LDYgKzUwNjcsMzUgQEAgR19DT05TVF9SRVRV
Uk4gZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmOgorICog
QHdlYlZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvYmplY3QKKyAqCisgKiBPYnRhaW5zIGEgI0dk
a1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3LCBvcgor
ICogYSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2Uu
IFVzZQorICogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSgpIGlmIHlvdSBuZWVkIHRvIGRp
c3Rpbmd1aXNoIHRoZXNlIGNhc2VzLgorICogVXN1YWxseSB5b3Ugd2FudCB0byBjb25uZWN0IHRv
IFdlYktpdFdlYlZpZXc6Omljb24tbG9hZGVkIGFuZCBjYWxsIHRoaXMKKyAqIG1ldGhvZCBpbiB0
aGUgY2FsbGJhY2suCisgKgorICogVGhlIHBpeGJ1ZiB3aWxsIGJlIHRoZSBsYXJnZXN0IHBvc3Np
YmxlIHNpemUgYW5kIHNob3VsZCBiZQorICogcmVzaXplZCBiZWZvcmUgaXQgaXMgZGlzcGxheWVk
LgorICogU2VlIGFsc28gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKCkuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyByZWZlcmVuY2UgdG8gYSAjR2Rr
UGl4YnVmLCBvciAlTlVMTAorICoKKyAqIFNpbmNlOiAxLjMuMTMKKyAqLworR2RrUGl4YnVmKiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fcGl4YnVmKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAw
KTsKKworICAgIGNvbnN0IGdjaGFyKiBwYWdlVVJJID0gd2Via2l0X3dlYl92aWV3X2dldF91cmko
d2ViVmlldyk7CisgICAgV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF9nZXRf
aWNvbl9kYXRhYmFzZSgpOworICAgIHJldHVybiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNv
bl9waXhidWYoZGF0YWJhc2UsIHBhZ2VVUkkpOworfQorCisKKworLyoqCiAgKiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudDoKICAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CiAg
KiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDE4MzhiZmUu
LjM4YzlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApAQCAt
Mzk3LDYgKzM5Nyw5IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfaGl0X3Rlc3RfcmVzdWx0ICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldywKIFdFQktJVF9BUEkgR19DT05T
VF9SRVRVUk4gZ2NoYXIgKgogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSAgICAgICAgICAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIAorV0VCS0lUX0FQSSBH
ZGtQaXhidWYgKgord2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZiAgICAgICAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKKwogV0VCS0lUX0FQSSBXZWJLaXRE
T01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwogCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAzZjcwYjQ5Li5jY2YyOTVmIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTQ1OCw3ICs0
NTgsNyBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCkKICAg
ICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4odHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGZhbHNlKTsKKyAgICB3ZWJraXRfaWNv
bl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKSwgMCk7CiAgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkKGZhbHNlKTsKIAogICAgIGlmIChheENvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCBjODJkYTUz
Li5iYzBiYzc1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRU
ZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTQ5MSw3ICs0OTEsMTMgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwg
ZG91YmxlIGMKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRJ
Y29uRGF0YWJhc2VFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBpZiAoZW5hYmxlZCkgewor
ICAgICAgICBHT3duUHRyPGdjaGFyPiBpY29uRGF0YWJhc2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUo
Z19nZXRfdG1wX2RpcigpLCAiRHVtcFJlbmRlclRyZWUiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkp
OworICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgaWNvbkRh
dGFiYXNlUGF0aC5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2Via2l0X2ljb25fZGF0
YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIDApOworICAgIH0KIH0KIAogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQoYm9vbCBmbGFnKQotLSAK
MS43LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84760</attachid>
            <date>2011-03-04 09:12:38 -0800</date>
            <delta_ts>2011-03-07 13:27:57 -0800</delta_ts>
            <desc>Implement WebKitIconDatabase API #7</desc>
            <filename>0001-GTK-provide-an-API-to-control-the-IconDatabase.diff</filename>
            <type>text/plain</type>
            <size>28942</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">RnJvbSAyZTIyNjYzNDI3NTgwYzdjZDY1ODBlNGIyMmMwMTQ4OTYxZGVjMmU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+CkRhdGU6IE1vbiwgMjEgRmViIDIwMTEgMTY6Mjk6MTMgKzAxMDAKU3ViamVjdDogW1BBVENI
XSBbR1RLXSBwcm92aWRlIGFuIEFQSSB0byBjb250cm9sIHRoZSBJY29uRGF0YWJhc2UKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUxMAoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgoqIEdOVW1ha2VmaWxlLmFtOgoqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcDogRW1pdCBzaWduYWxzIG9uCiAgICB0aGUgaWNvbiBkYXRhYmFzZSBm
b3IgbmV3IGljb25zLgoqIHdlYmtpdC93ZWJraXQuaDoKKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
OgoqIHdlYmtpdC93ZWJraXRnbG9iYWxzLmNwcDoKKiB3ZWJraXQvd2Via2l0Z2xvYmFscy5oOiBB
ZGQgYSBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbAogICAgaWNvbiBkYXRhYmFzZS4KKiB3
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcDoKKiB3ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNl
Lmg6IEltcGxlbWVudCBwdWJsaWMgaWNvbiBkYXRhYmFzZQogICAgb2JqZWN0IHdpdGggbWV0aG9k
cyBmb3Igb2J0YWluaW5nIGljb24gVVJMcywgcGl4YnVmcywgY2xlYXJpbmcKICAgIHdhaXRpbmcg
Zm9yIG5ldyBpY29ucy4KKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Ciogd2Via2l0L3dlYmtp
dHdlYnZpZXcuaDogQWRkIGEgbWV0aG9kIHRvIG9idGFpbiBhbiBpY29uIHBpeGJ1ZgogICAgZm9y
IHRoZSB3ZWIgdmlldy4KLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMjIgKysKIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmNwcCAgICB8ICAgIDUgLQogLi4uL2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCAgfCAgICAxIC0KIC4uLi9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwICAgIHwgICAgNSArCiBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0LmggICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCAgICAgICAgIHwgICA0NCArKy0tCiBT
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oICAgICAgICAgICB8ICAgIDMg
KwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmggICAgfCAg
ICAxIC0KIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwICAg
IHwgIDMxNyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGljb25kYXRhYmFzZS5oICAgICAgfCAgIDc4ICsrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICB8ICAgMzIgKysKIFNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggICAgICAgICAgIHwgICAgMyArCiBUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwICAgICAgICB8ICAgIDIgKy0KIC4uLi9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIHwgICAgNyArLQog
MTYgZmlsZXMgY2hhbmdlZCwgNDk0IGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJh
c2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGljb25kYXRhYmFzZS5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDMzM2I4YjMuLjNiMDdlN2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMS0wMy0wNCAgQ2hyaXN0aWFuIER5
d2FuICA8Y2hyaXN0aWFuQGxhbmVkby5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dUS10gcHJvdmlkZSBhbiBBUEkgdG8gY29udHJvbCB0aGUg
SWNvbkRhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjUxMAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOiBFbWl0IHNpZ25hbHMgb24KKyAgICAg
ICAgICAgIHRoZSBpY29uIGRhdGFiYXNlIGZvciBuZXcgaWNvbnMuCisgICAgICAgICogd2Via2l0
L3dlYmtpdC5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRkZWZpbmVzLmg6CisgICAgICAgICog
d2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRnbG9iYWxz
Lmg6IEFkZCBhIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsCisgICAgICAgICAgICBpY29u
IGRhdGFiYXNlLgorICAgICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuY3BwOgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaDogSW1wbGVtZW50IHB1YmxpYyBpY29u
IGRhdGFiYXNlCisgICAgICAgICAgICBvYmplY3Qgd2l0aCBtZXRob2RzIGZvciBvYnRhaW5pbmcg
aWNvbiBVUkxzLCBwaXhidWZzLCBjbGVhcmluZworICAgICAgICAgICAgd2FpdGluZyBmb3IgbmV3
IGljb25zLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5oOiBBZGQgYSBtZXRob2QgdG8gb2J0YWluIGFuIGljb24gcGl4
YnVmCisgICAgICAgICAgICBmb3IgdGhlIHdlYiB2aWV3LgogMjAxMS0wMy0wMyAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQyYWMxZTQuLjcwMzBlYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMTYsNiArMTE2LDcgQEAgd2Via2l0Z3RrX3N0YXRp
Y19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRn
ZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2xvYmFscy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaCBcCisJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRpY29uZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2Rpcikv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXApAQCAtMjAz
LDYgKzIwNCw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aGl0dGVzdHJlc3VsdHByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGljb25kYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRu
ZXR3b3JrcmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3
b3JrcmVxdWVzdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5l
dHdvcmtyZXNwb25zZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggNmRiMmM4
MS4uMTRlMzhhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCkBAIC05OCwxMSArOTgsNiBA
QCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bGlua3NJbmNsdWRlZEluRm9jdXNDaGFp
bigpCiAgICAgcmV0dXJuIHNfbGlua3NJbmNsdWRlZEluVGFiQ2hhaW47CiB9CiAKLXZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKLXsKLSAgICBXZWJLaXQ6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0K
IHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3Bh
Y2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBzX3NlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQgPSBlbmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAppbmRleCA1OTVkNmRhLi5j
MWQ5MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaApAQCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBzZXRMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKGJvb2wpOwog
ICAgIHN0YXRpYyBib29sIGxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oKTsKLSAgICBzdGF0aWMg
dm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIHNldFNl
bGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2Vs
ZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXgg
ZGNlN2Y2OC4uZjRiZDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtNjUsNiArNjUsNyBAQAog
I2luY2x1ZGUgIndlYmtpdGVycm9yLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFscy5oIgogI2lu
Y2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0aWNvbmRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKICNpbmNsdWRlICJ3ZWJr
aXRuZXR3b3JrcmVxdWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVzcG9u
c2UuaCIKQEAgLTkyMyw2ICs5MjQsMTAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZWNlaXZlSWNvbigpCiAgICAgaWYgKG1fbG9hZGluZ0Vycm9yUGFnZSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgY29uc3QgZ2NoYXIqIGZyYW1lVVJJID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfdXJpKG1fZnJhbWUpOworICAgIFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJr
aXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoZGF0YWJh
c2UsICJpY29uLWxvYWRlZCIsIG1fZnJhbWUsIGZyYW1lVVJJKTsKKwogICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwogCiAgICAgLy8gQXZvaWQg
cmVwb3J0aW5nIGZhdmljb25zIGZvciBub24tbWFpbiBmcmFtZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0LmgKaW5kZXggZDg1ZDY5OC4uNzdlOTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRnZW9sb2NhdGlv
bnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGdsb2JhbHMuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXRpY29uZGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGRlZmluZXMuaAppbmRleCBiMGI2MDdiLi4wYjg4MDg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTQxLDYgKzQxLDkgQEAKIAogR19CRUdJTl9E
RUNMUwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SWNvbkRhdGFiYXNlIFdlYktpdEljb25EYXRh
YmFzZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VDbGFzcyBXZWJLaXRJY29u
RGF0YWJhc2VDbGFzczsKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5ldHdvcmtSZXF1ZXN0IFdl
YktpdE5ldHdvcmtSZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5ldHdvcmtSZXF1ZXN0
Q2xhc3MgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGdsb2JhbHMuY3BwCmluZGV4IDRkMDdjZWIuLmJkN2M1MTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFscy5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAid2Via2l0YXBwbGljYXRpb25j
YWNoZS5oIgogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Vi
a2l0aWNvbmRhdGFiYXNlLmgiCiAjaW5jbHVkZSAid2Via2l0c291cGF1dGhkaWFsb2cuaCIKICNp
bmNsdWRlICJ3ZWJraXR3ZWJkYXRhYmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnBsdWdpbmRh
dGFiYXNlcHJpdmF0ZS5oIgpAQCAtMjIzLDkgKzIyNCwyNSBAQCBzdGF0aWMgR3RrV2lkZ2V0KiBj
dXJyZW50VG9wbGV2ZWxDYWxsYmFjayhXZWJLaXRTb3VwQXV0aERpYWxvZyogZmVhdHVyZSwgU291
cE1lcwogICAgICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgY2xvc2VJY29uRGF0
YWJhc2VPbkV4aXQoKQorLyoqCisgKiB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2U6CisgKgorICog
UmV0dXJucyB0aGUgI1dlYktpdEljb25EYXRhYmFzZSBwcm92aWRpbmcgYWNjZXNzIHRvIHdlYnNp
dGUgaWNvbnMuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjdXJy
ZW50ICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqCisgKiBTaW5jZTogMS4zLjEzCisgKi8KK1dlYktp
dEljb25EYXRhYmFzZSogd2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCkKIHsKLSAgICBpY29uRGF0
YWJhc2UoKS5jbG9zZSgpOworICAgIHN0YXRpYyBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gMDsKKworICAgIHdlYmtpdEluaXQoKTsKKworICAgIGlmICghZGF0YWJhc2UpCisgICAgICAg
IGRhdGFiYXNlID0gV0VCS0lUX0lDT05fREFUQUJBU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0lDT05fREFUQUJBU0UsIE5VTEwpKTsKKworICAgIHJldHVybiBkYXRhYmFzZTsKIH0KIAogdm9p
ZCB3ZWJraXRJbml0KCkKQEAgLTI1Niw3ICsyNzMsOCBAQCB2b2lkIHdlYmtpdEluaXQoKQogICAg
IFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3ModHJ1ZSk7CiAKICAgICBQYXN0
ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5zZXRIZWxwZXIoV2ViS2l0OjpwYXN0ZWJvYXJk
SGVscGVySW5zdGFuY2UoKSk7Ci0gICAgV2ViS2l0OjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKHRy
dWUpOworICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFt
ZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkp
OworICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKHdlYmtpdF9nZXRfaWNvbl9kYXRh
YmFzZSgpLCBpY29uRGF0YWJhc2VQYXRoLmdldCgpKTsKIAogICAgIFNvdXBTZXNzaW9uKiBzZXNz
aW9uID0gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKIApAQCAtMjgwLDI1ICsyOTgsNSBA
QCBQYXN0ZWJvYXJkSGVscGVyR3RrKiBwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2UoKQogICAgIHJl
dHVybiBoZWxwZXI7CiB9CiAKLXZvaWQgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJs
ZWQpCi17Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoZW5h
YmxlZCAmJiAhaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
ICAgICBhdGV4aXQoY2xvc2VJY29uRGF0YWJhc2VPbkV4aXQpOwotICAgIH0KLQotICAgIGlmIChl
bmFibGVkKSB7Ci0gICAgICAgIGljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAg
ICAgIEdPd25QdHI8Z2NoYXI+IGljb25EYXRhYmFzZVBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dl
dF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiaWNvbmRhdGFiYXNlIiwgTlVMTCkpOwotICAg
ICAgICBpY29uRGF0YWJhc2UoKS5vcGVuKGljb25EYXRhYmFzZVBhdGguZ2V0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWNvbkRhdGFiYXNlKCkuc2V0RW5hYmxlZChmYWxzZSk7
Ci0gICAgaWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKLX0KLQotCiB9IC8qKiBlbmQgbmFtZXNwYWNl
IFdlYktpdCAqLwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
Z2xvYmFscy5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaAppbmRl
eCA2MTJjMTk1Li4zM2QyYjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2xvYmFscy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9i
YWxzLmgKQEAgLTU4LDYgKzU4LDkgQEAgd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24gICAgICAg
ICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJQbHVnaW5EYXRhYmFz
ZSAqCiB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJhc2UgICAgICAgICAgICAgICAgICAodm9p
ZCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0SWNvbkRhdGFiYXNlICoKK3dlYmtpdF9nZXRfaWNvbl9k
YXRhYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwogV0VCS0lUX0FQSSB2b2lk
CiB3ZWJraXRfc2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
Q2FjaGVNb2RlbCAgICAgY2FjaGVfbW9kZWwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCmluZGV4IDdlYjNhYWUuLjU5MjNmMmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzcHJpdmF0ZS5oCkBAIC0z
Myw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUGFzdGVib2FyZEhlbHBlckd0
azsKIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpOwogCi12
b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCk7CiB9CiAKIGV4dGVybiAiQyIgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDBmOGFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5jcHAKQEAgLTAsMCAr
MSwzMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hyaXN0aWFuIER5d2FuIDxjaHJp
c3RpYW5AbGFuZWRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdGlj
b25kYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIklj
b25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hh
bC5oIgorI2luY2x1ZGUgIndlYmtpdHNlY3VyaXR5b3JpZ2lucHJpdmF0ZS5oIgorI2luY2x1ZGUg
IndlYmtpdHdlYmZyYW1lLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisvKioKKyAqIFNFQ1RJT046d2Via2l0d2ViZGF0YWJhc2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlv
bjogQSBXZWJLaXQgd2ViIGFwcGxpY2F0aW9uIGRhdGFiYXNlCisgKgorICogI1dlYktpdEljb25E
YXRhYmFzZSBwcm92aWRlcyBhY2Nlc3MgdG8gd2Vic2l0ZSBpY29ucywgYXMgc2hvd24KKyAqIGlu
IHRhYiBsYWJlbHMsIHdpbmRvdyBjYXB0aW9ucyBvciBib29rbWFya3MuIEFsbCB2aWV3cyBzaGFy
ZQorICogdGhlIHNhbWUgaWNvbiBkYXRhYmFzZS4KKyAqCisgKiBUaGUgaWNvbiBkYXRhYmFzZSBp
cyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIHN0b3JlZCBpbgorICogfi8ubG9jYWwvc2hhcmUvd2Vi
a2l0L2ljb25kYXRhYmFzZSwgZGVwZW5kaW5nIG9uIFhER19EQVRBX0hPTUUuCisgKgorICogV2Vi
S2l0IHdpbGwgYXV0b21hdGljYWxseSBsb29rIGZvciBhdmFpbGFibGUgaWNvbnMgaW4gbGluayBl
bGVtZW50cworICogb24gb3BlbmVkIHBhZ2VzIGFzIHdlbGwgYXMgYW4gZXhpc3RpbmcgZmF2aWNv
bi5pY28gYW5kIGxvYWQgdGhlCisgKiBmb3VuZCBpbWFnZXMgaW50byB0aGUgbWVtb3J5IGNhY2hl
IGlmIHBvc3NpYmxlLiBUaGUgc2lnbmFsICJpY29uLWxvYWRlZCIKKyAqIHdpbGwgYmUgZW1pdHRl
ZCB3aGVuIGFueSBpY29uIGlzIGZvdW5kIGFuZCBsb2FkZWQuCisgKiBPbGQgSWNvbnMgYXJlIGF1
dG9tYXRpY2FsbHkgY2xlYW5lZCB1cCBhZnRlciA0IGRheXMuCisgKgorICogd2Via2l0X2ljb25f
ZGF0YWJhc2Vfc2V0X3BhdGgoKSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGxvY2F0aW9uCisg
KiBvZiB0aGUgZGF0YWJhc2UgYW5kIGFsc28gdG8gZGlzYWJsZSBpdCBieSBwYXNzaW5nICVOVUxM
LgorICoKKyAqIElmIFdlYktpdFdlYlNldHRpbmdzOjplbmFibGUtcHJpdmF0ZS1icm93c2luZyBp
cyAlVFJVRSBuZXcgaWNvbnMKKyAqIHdvbid0IGJlIGFkZGVkIHRvIHRoZSBkYXRhYmFzZSBvbiBk
aXNrIGFuZCBubyBleGlzdGluZyBpY29ucyB3aWxsCisgKiBiZSBkZWxldGVkIGZyb20gaXQuCisg
KgorICogU2luY2U6IDEuMy4xMworICovCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2Vu
dW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfUEFUSCwKK307CisKK2VudW0geworICAgIElD
T05fTE9BREVELAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRf
aWNvbl9kYXRhYmFzZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVf
VFlQRShXZWJLaXRJY29uRGF0YWJhc2UsIHdlYmtpdF9pY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JK
RUNUKTsKKworc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlIHsKKyAgICBHT3duUHRy
PGdjaGFyPiBwYXRoOworfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIC8vIENhbGwgQysrIGRlc3RydWN0b3JzLCB0
aGUgcmV2ZXJzZSBvZiAncGxhY2VtZW50IG5ldyBzeW50YXgnCisgICAgV0VCS0lUX0lDT05fREFU
QUJBU0Uob2JqZWN0KS0+cHJpdi0+fldlYktpdEljb25EYXRhYmFzZVByaXZhdGUoKTsKKworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9pY29uX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNlX2Rpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9pY29uX2Rh
dGFiYXNlX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAg
IHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2Vf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gV0VCS0lUX0lDT05fREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7
CisgICAgY2FzZSBQUk9QX1BBVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwg
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2ljb25fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRJY29uRGF0YWJh
c2VDbGFzcyoga2xhc3MpCit7CisgICAgd2Via2l0SW5pdCgpOworCisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5kaXNwb3NlID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZGlzcG9zZTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2ljb25fZGF0YWJhc2VfZmluYWxpemU7CisgICAgZ29iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfaWNvbl9kYXRhYmFzZV9n
ZXRfcHJvcGVydHk7CisKKyAgICAgLyoqCisgICAgICAqIFdlYktpdEljb25EYXRhYmFzZTpwYXRo
OgorICAgICAgKgorICAgICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBkYXRhYmFz
ZSBmb2xkZXIuCisgICAgICAqCisgICAgICAqIFNpbmNlOiAxLjMuMTMKKyAgICAgICovCisgICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBVEgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygicGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJQYXRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaWNvbiBk
YXRhYmFzZSBmb2xkZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxv
YWRlZDoKKyAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgY29udGFpbmluZyB0aGUgaWNvbgor
ICAgICAqIEBmcmFtZV91cmk6IHRoZSBVUkkgb2YgdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGlj
b24KKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIGZhdmljb24g
aXMgYXZhaWxhYmxlIGZvciBhIHBhZ2UsCisgICAgICogb3IgYSBjaGlsZCBmcmFtZS4KKyAgICAg
KiBTZWUgV2ViS2l0V2ViVmlldzo6aWNvbi1sb2FkZWQgaWYgeW91IG9ubHkgbmVlZCB0aGUgZmF2
aWNvbiBmb3IKKyAgICAgKiB0aGUgbWFpbiBmcmFtZSBvZiBhIHBhcnRpY3VsYXIgI1dlYktpdFdl
YlZpZXcuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjEzCisgICAgICovCisgICAgd2Via2l0
X2ljb25fZGF0YWJhc2Vfc2lnbmFsc1tJQ09OX0xPQURFRF0gPSBnX3NpZ25hbF9uZXcoImljb24t
bG9hZGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFy
c2hhbF9WT0lEX19PQkpFQ1RfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsCisgICAgICAgICAgICBHX1RZUEVfU1RS
SU5HKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktp
dEljb25EYXRhYmFzZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ljb25fZGF0
YWJhc2VfaW5pdChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIGRhdGFiYXNl
LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGRhdGFiYXNlLCBXRUJLSVRfVFlQ
RV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKTsKKyAgICAvLyAncGxh
Y2VtZW50IG5ldyBzeW50YXgnLCBzZWUgd2Via2l0d2Vidmlldy5jcHAKKyAgICBuZXcgKGRhdGFi
YXNlLT5wcml2KSBXZWJLaXRJY29uRGF0YWJhc2VQcml2YXRlKCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X3BhdGg6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25E
YXRhYmFzZQorICoKKyAqIERldGVybWluZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGRhdGFi
YXNlIGZvbGRlciBvbiBkaXNrLgorICoKKyAqIFJldHVybnM6IHRoZSBhYnNvbHV0ZSBwYXRoIG9m
IHRoZSBkYXRhYmFzZSBmb2xkZXIsIG9yICVOVUxMCisgKgorICogU2luY2U6IDEuMy4xMworICoq
LworR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9wYXRoKFdl
YktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKworICAgIHJldHVybiBkYXRh
YmFzZS0+cHJpdi0+cGF0aC5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VJY29uRGF0YWJh
c2VPbkV4aXQoKQoreworICAgIGlmIChXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5pc0VuYWJsZWQo
KSkgeworICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5zZXRFbmFibGVkKGZhbHNlKTsK
KyAgICAgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuY2xvc2UoKTsKKyAgICB9Cit9CisKKy8q
KgorICogd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGg6CisgKiBAZGF0YWJhc2U6IGEgI1dl
YktpdEljb25EYXRhYmFzZQorICogQHBhdGg6IGFuIGFic29sdXRlIHBhdGggdG8gdGhlIGljb24g
ZGF0YWJhc2UgZm9sZGVyCisgKgorICogU3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRo
ZSBkYXRhYmFzZSBmb2xkZXIgb24gZGlzay4KKyAqCisgKiBQYXNzaW5nICVOVUxMIG9yICIiIGRp
c2FibGVzIHRoZSBpY29uIGRhdGFiYXNlLgorICoKKyAqIFNpbmNlOiAxLjMuMTMKKyAqKi8KK3Zv
aWQgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoV2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwgY29uc3QgZ2NoYXIqIHBhdGgpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgaWYgKGRhdGFiYXNlLT5wcml2LT5w
YXRoLmdldCgpKQorICAgICAgICBXZWJDb3JlOjppY29uRGF0YWJhc2UoKS5jbG9zZSgpOworCisg
ICAgaWYgKCEocGF0aCAmJiBwYXRoWzBdKSkgeworICAgICAgICBkYXRhYmFzZS0+cHJpdi0+cGF0
aC5zZXQoMCk7CisgICAgICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldEVuYWJsZWQoZmFs
c2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0YWJhc2UtPnByaXYtPnBhdGgu
c2V0KGdfc3RyZHVwKHBhdGgpKTsKKworICAgIFdlYkNvcmU6Omljb25EYXRhYmFzZSgpLnNldEVu
YWJsZWQodHJ1ZSk7CisgICAgV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkub3BlbihXZWJDb3JlOjpm
aWxlbmFtZVRvU3RyaW5nKGRhdGFiYXNlLT5wcml2LT5wYXRoLmdldCgpKSk7CisKKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAg
ICAgICAgYXRleGl0KGNsb3NlSWNvbkRhdGFiYXNlT25FeGl0KTsKKyAgICAgICAgaW5pdGlhbGl6
ZWQgPSB0cnVlOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRf
aWNvbl91cmk6CisgKiBAZGF0YWJhc2U6IGEgI1dlYktpdEljb25EYXRhYmFzZQorICogQHBhZ2Vf
dXJpOiBVUkkgb2YgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICoKKyAqIE9idGFpbnMg
dGhlIFVSSSBmb3IgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBwYWdlIFVSSS4KKyAqIFNlZSBh
bHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkoKS4KKyAqCisgKiBSZXR1cm5zOiBhIG5l
d2x5IGFsbG9jYXRlZCBVUkkgZm9yIHRoZSBmYXZpY29uLCBvciAlTlVMTAorICoKKyAqIFNpbmNl
OiAxLjMuMTMKKyAqKi8KK2djaGFyKiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl91cmko
V2ViS2l0SWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2Up
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKworICAgIFN0cmlu
ZyBwYWdlVVJMID0gU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJJKTsKKyAgICByZXR1cm4gZ19zdHJk
dXAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuaWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCkudXRm
OCgpLmRhdGEoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25f
cGl4YnVmOgorICogQGRhdGFiYXNlOiBhICNXZWJLaXRJY29uRGF0YWJhc2UKKyAqIEBwYWdlX3Vy
aTogVVJJIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAqCisgKiBPYnRhaW5zIGEg
I0dka1BpeGJ1ZiBvZiB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UgVVJJLCBvcgorICog
YSBkZWZhdWx0IGljb24gaWYgdGhlcmUgaXMgbm8gaWNvbiBmb3IgdGhlIGdpdmVuIHBhZ2UuIFVz
ZQorICogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fdXJpKCkgaWYgeW91IG5lZWQgdG8g
ZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCisgKiBVc3VhbGx5IHlvdSB3YW50IHRvIGNvbm5lY3Qg
dG8gV2ViS2l0SWNvbkRhdGFiYXNlOjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBtZXRo
b2QgaW4gdGhlIGNhbGxiYWNrLgorICoKKyAqIFRoZSBwaXhidWYgd2lsbCBiZSB0aGUgbGFyZ2Vz
dCBwb3NzaWJsZSBzaXplIGFuZCBzaG91bGQgYmUKKyAqIHJlc2l6ZWQgYmVmb3JlIGl0IGlzIGRp
c3BsYXllZC4KKyAqIFNlZSBhbHNvIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYoKS4K
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHJlZmVyZW5jZSB0byBhICNH
ZGtQaXhidWYsIG9yICVOVUxMCisgKgorICogU2luY2U6IDEuMy4xMworICoqLworR2RrUGl4YnVm
KiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYoV2ViS2l0SWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgZ2NoYXIqIHBhZ2VVUkkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX0lDT05fREFUQUJBU0UoZGF0YWJhc2UpLCAwKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChwYWdlVVJJLCAwKTsKKworICAgIFN0cmluZyBwYWdlVVJMID0gU3RyaW5n
Ojpmcm9tVVRGOChwYWdlVVJJKTsKKyAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGly
cmVsZXZhbnQgdG8gdGhlIFdlYkNvcmU6Omljb25EYXRhYmFzZSBjb2RlLgorICAgIC8vIFdlIG11
c3QgcGFzcyBzb21ldGhpbmcgZ3JlYXRlciB0aGFuIDAsIDAgdG8gZ2V0IGEgcGl4YnVmLgorICAg
IFdlYkNvcmU6OkltYWdlKiBpY29uID0gV2ViQ29yZTo6aWNvbkRhdGFiYXNlKCkuaWNvbkZvclBh
Z2VVUkwocGFnZVVSTCwgV2ViQ29yZTo6SW50U2l6ZSgxNiwgMTYpKTsKKyAgICBpZiAoIWljb24p
CisgICAgICAgIHJldHVybiAwOworICAgIEdka1BpeGJ1ZiogcGl4YnVmID0gaWNvbi0+Z2V0R2Rr
UGl4YnVmKCk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxHZGtQaXhidWYqPihnX29iamVjdF9yZWYocGl4YnVmKSk7Cit9CisKKy8q
KgorICogd2Via2l0X2ljb25fZGF0YWJhc2VfY2xlYXIoKToKKyAqIEBkYXRhYmFzZTogYSAjV2Vi
S2l0SWNvbkRhdGFiYXNlCisgKgorICogQ2xlYXJzIGFsbCBpY29ucyBmcm9tIHRoZSBkYXRhYmFz
ZS4KKyAqCisgKiBTaW5jZTogMS4zLjEzCisgKiovCit2b2lkIHdlYmtpdF9pY29uX2RhdGFiYXNl
X2NsZWFyKFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOworCisgICAgV2ViQ29yZTo6
aWNvbkRhdGFiYXNlKCkucmVtb3ZlQWxsSWNvbnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGljb25kYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdmZTVhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0aWNvbmRhdGFiYXNlLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBsYW5lZG8uY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIHdlYmtpdGljb25kYXRhYmFzZV9oCisjZGVmaW5lIHdlYmtpdGljb25kYXRhYmFzZV9oCisK
KyNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFICAgICAgICAgICAgICh3ZWJraXRf
aWNvbl9kYXRhYmFzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfSUNPTl9EQVRBQkFTRShv
YmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X1RZUEVfSUNPTl9EQVRBQkFTRSwgV2ViS2l0SWNvbkRhdGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lU
X0lDT05fREFUQUJBU0VfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0UsIFdlYktpdEljb25EYXRhYmFzZUNs
YXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0lDT05fREFUQUJBU0Uob2JqKSAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0lDT05fREFUQUJBU0Up
KQorI2RlZmluZSBXRUJLSVRfSVNfSUNPTl9EQVRBQkFTRV9DTEFTUyhrbGFzcykgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSUNPTl9EQVRBQkFTRSkpCisj
ZGVmaW5lIFdFQktJVF9JQ09OX0RBVEFCQVNFX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9JQ09OX0RBVEFCQVNFLCBXZWJLaXRJ
Y29uRGF0YWJhc2VDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJY29uRGF0YWJhc2VQ
cml2YXRlIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0SWNvbkRh
dGFiYXNlIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRl
ID4qLworICAgIFdlYktpdEljb25EYXRhYmFzZVByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdEljb25EYXRhYmFzZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgR19DT05TVF9SRVRVUk4gZ2NoYXIqCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfcGF0aCAg
ICAgICAgICAgIChXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlKTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCAgICAgICAgICAgIChXZWJLaXRJY29u
RGF0YWJhc2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIqICAgICAgICBwYXRoKTsKKworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3VyaSAgICAgICAgKFdlYktpdEljb25EYXRhYmFz
ZSogZGF0YWJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciogICAgICAgIHBhZ2VfdXJpKTsKKworV0VCS0lUX0FQSSBHZGtQaXhidWYqCit3
ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfaWNvbl9waXhidWYgICAgIChXZWJLaXRJY29uRGF0YWJh
c2UqIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIqICAgICAgICBwYWdlX3VyaSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2ljb25fZGF0YWJhc2VfY2xlYXIgICAgICAgICAgICAgICAoV2ViS2l0SWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiB3ZWJraXRpY29uZGF0YWJhc2Vf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDBm
ZmM5ZDkuLjg4MjE2ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGlj
eWRlY2lzaW9uLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNsdWRl
ICJ3ZWJraXRoaXR0ZXN0cmVzdWx0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGljb25kYXRh
YmFzZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3
b3JrcmVxdWVzdC5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXNwb25zZS5oIgpAQCAtMjMx
NSw2ICsyMzE2LDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2Vi
S2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICogQGljb25fdXJpOiB0aGUgVVJJ
IGZvciB0aGUgaWNvbgogICAgICAqCiAgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVu
IHRoZSBtYWluIGZyYW1lIGhhcyBnb3QgYSBmYXZpY29uLgorICAgICAqIFNlZSBXZWJLaXRJY29u
RGF0YWJhc2U6Omljb24tbG9hZGVkIGlmIHlvdSB3YW50IHRvIGtlZXAgdHJhY2sgb2YKKyAgICAg
KiBpY29ucyBmb3IgY2hpbGQgZnJhbWVzLgogICAgICAqCiAgICAgICogU2luY2U6IDEuMS4xOAog
ICAgICAqLwpAQCAtNTA2NCw2ICs1MDY3LDM1IEBAIEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB9CiAKIC8q
KgorICogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3BpeGJ1ZjoKKyAqIEB3ZWJWaWV3OiB0aGUg
I1dlYktpdFdlYlZpZXcgb2JqZWN0CisgKgorICogT2J0YWlucyBhICNHZGtQaXhidWYgb2YgdGhl
IGZhdmljb24gZm9yIHRoZSBnaXZlbiAjV2ViS2l0V2ViVmlldywgb3IKKyAqIGEgZGVmYXVsdCBp
Y29uIGlmIHRoZXJlIGlzIG5vIGljb24gZm9yIHRoZSBnaXZlbiBwYWdlLiBVc2UKKyAqIHdlYmtp
dF93ZWJfdmlld19nZXRfaWNvbl91cmkoKSBpZiB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCB0aGVz
ZSBjYXNlcy4KKyAqIFVzdWFsbHkgeW91IHdhbnQgdG8gY29ubmVjdCB0byBXZWJLaXRXZWJWaWV3
OjppY29uLWxvYWRlZCBhbmQgY2FsbCB0aGlzCisgKiBtZXRob2QgaW4gdGhlIGNhbGxiYWNrLgor
ICoKKyAqIFRoZSBwaXhidWYgd2lsbCBiZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzaXplIGFuZCBz
aG91bGQgYmUKKyAqIHJlc2l6ZWQgYmVmb3JlIGl0IGlzIGRpc3BsYXllZC4KKyAqIFNlZSBhbHNv
IHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF9pY29uX3BpeGJ1ZigpLgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcmVmZXJlbmNlIHRvIGEgI0dka1BpeGJ1Ziwgb3IgJU5V
TEwKKyAqCisgKiBTaW5jZTogMS4zLjEzCisgKi8KK0dka1BpeGJ1Ziogd2Via2l0X3dlYl92aWV3
X2dldF9pY29uX3BpeGJ1ZihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisKKyAgICBjb25z
dCBnY2hhciogcGFnZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOworICAg
IFdlYktpdEljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2Uo
KTsKKyAgICByZXR1cm4gd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X2ljb25fcGl4YnVmKGRhdGFi
YXNlLCBwYWdlVVJJKTsKK30KKworCisKKy8qKgogICogd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQ6CiAgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldwogICogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAxODM4YmZlLi4zOGM5YTcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTM5Nyw2ICszOTcsOSBA
QCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2hpdF90ZXN0X3Jlc3VsdCAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgKndlYlZpZXcsCiBXRUJLSVRfQVBJIEdfQ09OU1RfUkVUVVJOIGdjaGFy
ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkgICAgICAgICAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJVF9BUEkgR2RrUGl4YnVmICoKK3dl
YmtpdF93ZWJfdmlld19nZXRfaWNvbl9waXhidWYgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAqd2ViVmlldyk7CisKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnQgKgog
d2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAKaW5kZXggM2Y3MGI0OS4uY2NmMjk1ZiAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgc3RhdGlj
IHZvaWQgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgc2V0bG9jYWxlKExD
X0FMTCwgIiIpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRMaW5rc0luY2x1
ZGVkSW5Gb2N1c0NoYWluKHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0
SWNvbkRhdGFiYXNlRW5hYmxlZChmYWxzZSk7CisgICAgd2Via2l0X2ljb25fZGF0YWJhc2Vfc2V0
X3BhdGgod2Via2l0X2dldF9pY29uX2RhdGFiYXNlKCksIDApOwogICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChmYWxzZSk7CiAK
ICAgICBpZiAoYXhDb250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggYzgyZGE1My4uNzk0MjNiMiAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3Rr
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwCkBAIC00OTEsNyArNDkxLDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjCiAKIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0SWNvbkRhdGFiYXNlRW5h
YmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXRJY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0
X2dldF9pY29uX2RhdGFiYXNlKCk7CisgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgR093blB0
cjxnY2hhcj4gaWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIo
KSwgIkR1bXBSZW5kZXJUcmVlIiwgImljb25kYXRhYmFzZSIsIE5VTEwpKTsKKyAgICAgICAgd2Vi
a2l0X2ljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGljb25EYXRhYmFzZVBhdGguZ2V0
KCkpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aChk
YXRhYmFzZSwgMCk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHRQcm9maWxpbmdFbmFibGVkKGJvb2wgZmxhZykKLS0gCjEuNy40LjEKCg==
</data>
<flag name="review"
          id="76790"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>