<?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>43179</bug_id>
          
          <creation_ts>2010-07-29 01:15:47 -0700</creation_ts>
          <short_desc>[Qt] NPAPI Plugin metadata should be cached, and loading a plugin should not require loading every plugin</short_desc>
          <delta_ts>2010-08-30 10:45:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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>Performance, Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kimmo.t.kinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kimmo.t.kinnunen</assigned_to>
          <cc>abarth</cc>
    
    <cc>ademar</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>girish</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kevin.simons</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>markus</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257583</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-07-29 01:15:47 -0700</bug_when>
    <thetext>NPAPI plugin metadata (mimetype) should be cached so that loading plugins would be faster. For example, the mimetype -&gt; plugin dynlib mapping should be stored in a file or a sqlite db accompanied with filesystem metadata such as last modified date.

Currently plugins that are slow in intialization cause all plugins to be loaded slowly. Also when a plugin initialization causes a crash, every plugin load will end up crashing.

Probably could be implemented in QtWebKit by using the platform_strategy similar to this fix:
https://bugs.webkit.org/show_bug.cgi?id=40860</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257589</commentid>
    <comment_count>1</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-07-29 02:04:51 -0700</bug_when>
    <thetext>info to help to estimate the severity:
 - a plugin loads in 35ms when no other plugins are present
 - same plugin loads in 1000ms when 6 other real-world plugins are present</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259433</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-03 07:01:29 -0700</bug_when>
    <thetext>Girish, please feel free to assign the bug to yourself if you get around looking into it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268497</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-08-24 05:46:03 -0700</bug_when>
    <thetext>The specific problem here is apparently that all plugins are linked to fetch the metadata whether they are used or not. Adding a metadata cache will avoid linking to unused plugins and so slowing down initialization simply by having more plugins.

Kimmo said he has a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269225</commentid>
    <comment_count>4</comment_count>
      <attachid>65413</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-25 07:10:08 -0700</bug_when>
    <thetext>Created attachment 65413
Implement a cache of NPAPI plugin info using sqlite db</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269235</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-08-25 07:22:52 -0700</bug_when>
    <thetext>Any measured performance improvements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269249</commentid>
    <comment_count>6</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2010-08-25 07:58:53 -0700</bug_when>
    <thetext>What&apos;s the motivation of using sqlite as opposed to QSettings or something? May sqlite really is quite lightweight but is it as lightweight as QSettings?

Also, do we really need setPluginCachePath() API? Why would one want to change this, plugin cache is just internal optimization isn&apos;t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269254</commentid>
    <comment_count>7</comment_count>
      <attachid>65420</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-25 08:30:09 -0700</bug_when>
    <thetext>Created attachment 65420
Tester to test load-time performance increase

Shorter load-time depends on the plugins you have.
You can use attached html to dump some values.
For me, following sequence gives 500ms difference:

export QTWEBKIT_PLUGIN_PATH=$PWD/lib/plugins
rm -rf ~/.local/share/data/Nokia/QtTestBrowser/PluginCache.db

./bin/QtTestBrowser  ~//swork/meegowrtperf/testcases/html-content/null-plugin-user/plugin-metadata-cache-test.html

#inspect &quot;slow case&quot;

./bin/QtTestBrowser  ~//swork/meegowrtperf/testcases/html-content/null-plugin-user/plugin-metadata-cache-test.html

#inspect &quot;fast case&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269259</commentid>
    <comment_count>8</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-25 08:40:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; What&apos;s the motivation of using sqlite as opposed to QSettings or something? May sqlite really is quite lightweight but is it as lightweight as QSettings?

I chose sqlite mainly because the code could benefit also other ports.

If I understand correctly, QSettings does not seem to be suitable for dynamic keys with multiple values. You end up either:
 - escape the keys (escape &apos;/&apos; char in content)
 - concatenate the multiple values, (escape the contcatenation separator)

Getting the escaping correct seems to me like risk not worth taking..

Sqlite is also quite robust and somewhat resilient to corrupts.

I doubt that the actual code would be significantly shorter, so I don&apos;t know how much maintainability would be gained.

I haven&apos;t done any performance or memory footprint measurements between qsettings and sqlite.

&gt; Also, do we really need setPluginCachePath() API? Why would one want to change this, plugin cache is just internal optimization isn&apos;t it?

Yes, this is a matter of API policy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269269</commentid>
    <comment_count>9</comment_count>
      <attachid>65413</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-08-25 09:04:45 -0700</bug_when>
    <thetext>Comment on attachment 65413
Implement a cache of NPAPI plugin info using sqlite db

Generally looks good, some nits:

WebCore/ChangeLog:12
 +          Enabled only for Qt unix flavors currently.
Currently only enabled for Qt UNIX flavors.

WebCore/plugins/PluginDatabase.cpp:44
 +  static bool gPersistentCacheIsEnabled;
*PluginCache* ?

WebCore/plugins/PluginDatabase.cpp:468
 +  void PluginDatabase::verifySchemaVersion(SQLiteDatabase&amp; database)
are you modifying it or why is it not const. In Qt, our coding style tells us to use * in that case to make it more obvious that it is being modified.

WebCore/plugins/PluginDatabase.cpp:466
 +  static const int schemaVersion = 1;
unsigned?

WebCore/plugins/PluginDatabase.cpp:486
 +  
why two newlines here

WebCore/plugins/PluginDatabase.cpp:498
 +      String completeDatabasePath = pathByAppendingComponent(persistentCachePath(), &quot;PluginCache.db&quot;);
absoluteDatabasePath ?

WebCore/plugins/PluginDatabase.h:99
 +          void openDatabase(SQLiteDatabase&amp; database, bool createIfDoesNotExist);
We now try to avoid bools like these and use enums instead, personally I think it is ok

WebKit/qt/Api/qwebsettings.cpp:1091
 +      QWebSettings::setPluginCachePath(storagePath);
Should we use PluginCache or PluginPersistanceCache ?

WebKit/qt/Api/qwebsettings.cpp:1106
 +      \since 4.X
4.8 :-)

WebKit/qt/Api/qwebsettings.cpp:1107
 +      Sets the path for plugin cache to \a path.
Explain this is for persistance, not a cache that the plugins themselves can use.

WebKit/qt/Api/qwebsettings.h:122
 +      static QString pluginCachePath();
const?

WebKit/qt/Api/qwebsettings.h:121
 +      static void setPluginCachePath(const QString &amp;location);
&amp; should be left aligned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269347</commentid>
    <comment_count>10</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-25 11:00:17 -0700</bug_when>
    <thetext>(In reply to comment #9)
 
&gt; WebKit/qt/Api/qwebsettings.cpp:1091
&gt;  +      QWebSettings::setPluginCachePath(storagePath);
&gt; Should we use PluginCache or PluginPersistanceCache ?
&gt; 
&gt; 
&gt; WebKit/qt/Api/qwebsettings.cpp:1107
&gt;  +      Sets the path for plugin cache to \a path.
&gt; Explain this is for persistance, not a cache that the plugins themselves can use.
&gt; 

The whole concept should probably be named plugin metadata cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269351</commentid>
    <comment_count>11</comment_count>
      <attachid>65413</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-25 11:02:52 -0700</bug_when>
    <thetext>Comment on attachment 65413
Implement a cache of NPAPI plugin info using sqlite db

Clearing review based on feedback:
 - change naming to plugin metadata cache 
 - use filesystem directly instead of sqlite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269456</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-25 13:14:31 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; What&apos;s the motivation of using sqlite as opposed to QSettings or something? May sqlite really is quite lightweight but is it as lightweight as QSettings?
&gt; 
&gt; Also, do we really need setPluginCachePath() API? Why would one want to change this, plugin cache is just internal optimization isn&apos;t it?

I agree with Girish here. I&apos;m starting to think that it was a mistake to offer other cache paths in the API in the first place, such as the icon database path. In the end it caused more confusion, because people expect things to work out of the box. It is annoying to find out that in order to get for example fav icons - or better startup performance - working you have to set a property to a path value you don&apos;t care about.

I&apos;d say let&apos;s make a smart choice and use it :)

If it&apos;s a problem we can always add API later.

The enablePersistentStorage() API&apos;s path could serve as base directory.

I don&apos;t mind the use of sqlite over QSettings - I see the clear benefit for cross-port usage. In Qt for the plugin cache we use QSettings and it&apos;s not a problem AFAIK, i.e. it should be fast enough for these things nowadays. (I say that after the Qtopia guys spend a lot of time optimizing it for the use on their embedded platforms back then)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269698</commentid>
    <comment_count>13</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2010-08-25 20:39:35 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I don&apos;t mind the use of sqlite over QSettings - I see the clear benefit for cross-port usage. In Qt for the plugin cache we use QSettings and it&apos;s not a problem AFAIK, i.e. it should be fast enough for these things nowadays. (I say that after the Qtopia guys spend a lot of time optimizing it for the use on their embedded platforms back then)

One big advantage to me with QSettings is that it&apos;s very easy to debug. Plain text files that I can easily change/remove/add. 

I am OK with sqlite if others feel it&apos;s easy to debug with that. Since this is intended to be cross port should we check with other ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269701</commentid>
    <comment_count>14</comment_count>
    <who name="Girish Ramakrishnan">girish</who>
    <bug_when>2010-08-25 20:42:12 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=65420) [details]
&gt; Tester to test load-time performance increase
&gt; 
&gt; Shorter load-time depends on the plugins you have.
&gt; You can use attached html to dump some values.
&gt; For me, following sequence gives 500ms difference:
&gt; 
&gt; export QTWEBKIT_PLUGIN_PATH=$PWD/lib/plugins
&gt; rm -rf ~/.local/share/data/Nokia/QtTestBrowser/PluginCache.db
&gt; 
&gt; ./bin/QtTestBrowser  ~//swork/meegowrtperf/testcases/html-content/null-plugin-user/plugin-metadata-cache-test.html
&gt; 
&gt; #inspect &quot;slow case&quot;
&gt; 
&gt; ./bin/QtTestBrowser  ~//swork/meegowrtperf/testcases/html-content/null-plugin-user/plugin-metadata-cache-test.html
&gt; 
&gt; #inspect &quot;fast case&quot;

500ms for just one plugin? That&apos;s a good improvement! How did you measure this, using a timestamp or something in the code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269818</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-08-26 04:42:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; If I understand correctly, QSettings does not seem to be suitable for dynamic keys with multiple values. You end up either:
&gt;  - escape the keys (escape &apos;/&apos; char in content)
&gt;  - concatenate the multiple values, (escape the contcatenation separator)
&gt; 
&gt; Getting the escaping correct seems to me like risk not worth taking..

These are not really dynamic keys are they? The whole cache is either valid or invalid (and then regenerated). You don&apos;t add and remove items.

QSettings does seem to support some complex types (lists etc) as the values are QVariants. The primary advantage would be to avoid adding yet another file and format for this performance optimization. All platforms have some sort of settings serialization system all ready so being cross platform doesn&apos;t necessarily add that much. I don&apos;t have strong opinion about this though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269827</commentid>
    <comment_count>16</comment_count>
      <attachid>65548</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-26 05:07:25 -0700</bug_when>
    <thetext>Created attachment 65548
Plugin metadata cache version 2 with filesystem

Changed based on feedback:
 - &quot;plugin cache&quot; --&gt; &quot;plugin metadata cache&quot;
 - remove public api to control this
 - use filesystem to store the info as opposed to sqlite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269830</commentid>
    <comment_count>17</comment_count>
      <attachid>65548</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-08-26 05:21:09 -0700</bug_when>
    <thetext>Comment on attachment 65548
Plugin metadata cache version 2 with filesystem

WebCore/plugins/PluginDatabase.cpp:43
 +  static bool gPersistentPluginMetadataCacheIsEnabled;
If you intent this to be for other ports, maybe consider moving it to Settings

WebCore/plugins/PluginDatabase.cpp:479
 +              buffer.resize(bufferCapacity);
Is there an upper limit of the cache?

WebCore/plugins/PluginDatabase.cpp:526
 +      // there&apos;s error in the cache, we won&apos;t try to load it anymore
Add dot at the end of comments.

WebCore/plugins/PluginDatabase.cpp:534
 +          LOG_ERROR(&quot;Unable to read plugin metadata cache: corrupt schema&quot;);
Should we remove the cache then or ? to not let it stay corrupted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269853</commentid>
    <comment_count>18</comment_count>
      <attachid>65553</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-26 06:44:06 -0700</bug_when>
    <thetext>Created attachment 65553
Plugin metadata cache version 3

Addresses kenneths comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269854</commentid>
    <comment_count>19</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-26 06:45:40 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 65548 [details])
&gt; WebCore/plugins/PluginDatabase.cpp:43
&gt;  +  static bool gPersistentPluginMetadataCacheIsEnabled;
&gt; If you intent this to be for other ports, maybe consider moving it to Settings

Probably could be done if some other port ever starts to use this, and not sooner?

 
&gt; WebCore/plugins/PluginDatabase.cpp:479
&gt;  +              buffer.resize(bufferCapacity);
&gt; Is there an upper limit of the cache?

Added limit of 32k.

 
&gt; WebCore/plugins/PluginDatabase.cpp:526
&gt;  +      // there&apos;s error in the cache, we won&apos;t try to load it anymore
&gt; Add dot at the end of comments.

added.

&gt; WebCore/plugins/PluginDatabase.cpp:534
&gt;  +          LOG_ERROR(&quot;Unable to read plugin metadata cache: corrupt schema&quot;);
&gt; Should we remove the cache then or ? to not let it stay corrupted

added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269860</commentid>
    <comment_count>20</comment_count>
      <attachid>65553</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-08-26 06:55:42 -0700</bug_when>
    <thetext>Comment on attachment 65553
Plugin metadata cache version 3

WebCore/plugins/PluginDatabase.cpp:532
 +      // there&apos;s error in the cache, we won&apos;t try to load it anymore.x
Seems that an x crept in here :-(

WebKit/qt/Api/qwebplugindatabase.cpp:287
 +          if (plugin-&gt;ensurePluginLoaded())
So if someone requests a list of installed plugins, we force load them all?

WebCore/plugins/PluginDatabase.h:107
 +          bool m_persistentMetadataCacheLoaded;
I think we normally use the form &quot;IsLoaded&quot;

WebCore/plugins/PluginDatabase.cpp:488
 +      } while (1);
while (true) ? :-) 

Sure you don&apos;t want to move the setting to WebCore::Settings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270380</commentid>
    <comment_count>21</comment_count>
      <attachid>65690</attachid>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-27 01:46:30 -0700</bug_when>
    <thetext>Created attachment 65690
Plugin metadata cache version 4, fixes a bug with removed plugin directories

New patch:
 - include changes from feedback
 - add missing check: when reading the cache, only use metadata from the plugins that are from plugin lookup directories. Plugin lookup directory list might change for example by changing QTWEBKIT_PLUGIN_PATH=.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270382</commentid>
    <comment_count>22</comment_count>
    <who name="Kimmo Kinnunen">kimmo.t.kinnunen</who>
    <bug_when>2010-08-27 01:49:49 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 65553 [details])
&gt; WebCore/plugins/PluginDatabase.cpp:532
&gt;  +      // there&apos;s error in the cache, we won&apos;t try to load it anymore.x
&gt; Seems that an x crept in here :-(

Fixed.

&gt; WebKit/qt/Api/qwebplugindatabase.cpp:287
&gt;  +          if (plugin-&gt;ensurePluginLoaded())
&gt; So if someone requests a list of installed plugins, we force load them all?

Yes. The plugin load might fail, thus if we want behaviour parity to the cacheless version, we need this.
 
&gt; WebCore/plugins/PluginDatabase.h:107
&gt;  +          bool m_persistentMetadataCacheLoaded;
&gt; I think we normally use the form &quot;IsLoaded&quot;

Fixed.
 
&gt; WebCore/plugins/PluginDatabase.cpp:488
&gt;  +      } while (1);
&gt; while (true) ? :-) 

Fixed.
 
&gt; Sure you don&apos;t want to move the setting to WebCore::Settings?

I don&apos;t have strong feelings about this, but it would seem to make things more complicated until there are more users of this..


Kenneth, can you do still one round of review, since the last patch has changed in behavior? The change is about not using data that comes from plugins outside the plugin directory list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270918</commentid>
    <comment_count>23</comment_count>
      <attachid>65690</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-27 21:32:42 -0700</bug_when>
    <thetext>Comment on attachment 65690
Plugin metadata cache version 4, fixes a bug with removed plugin directories

Clearing flags on attachment: 65690

Committed r66297: &lt;http://trac.webkit.org/changeset/66297&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270919</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-27 21:32:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270929</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 22:37:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66297 might have broken Qt Windows 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270995</commentid>
    <comment_count>26</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-08-28 08:55:16 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 65690 [details])
&gt; Clearing flags on attachment: 65690
&gt; 
&gt; Committed r66297: &lt;http://trac.webkit.org/changeset/66297&gt;

This change broke the Qt Windows, and Qt Linux Release minimal builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270998</commentid>
    <comment_count>27</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-08-28 09:12:14 -0700</bug_when>
    <thetext>It (In reply to comment #26)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 65690 [details] [details])
&gt; &gt; Clearing flags on attachment: 65690
&gt; &gt; 
&gt; &gt; Committed r66297: &lt;http://trac.webkit.org/changeset/66297&gt;
&gt; 
&gt; This change broke the Qt Windows, and Qt Linux Release minimal builds.

From looking at the stdio logs, the issue is that QWebPluginDatabase::plugins() calls PluginPackage::ensurePluginLoaded(), which is only defined if NETSCAPE_PLUGIN_METADATA_CACHE is enabled. And NETSCAPE_PLUGIN_METADATA_CACHE is not enabled for Windows- and Linux minimal- builds:

&gt; @@ -284,7 +284,8 @@ QList&lt;QWebPluginInfo&gt; QWebPluginDatabase::plugins() const
&gt;  
&gt;      for (unsigned int i = 0; i &lt; plugins.size(); ++i) {
&gt;          PluginPackage* plugin = plugins[i];
&gt; -        qwebplugins.append(QWebPluginInfo(plugin));
&gt; +        if (plugin-&gt;ensurePluginLoaded())
&gt; +            qwebplugins.append(QWebPluginInfo(plugin));
&gt;      }
&gt;  

We should guard the call to PluginPackage::ensurePluginLoaded() with #if ENABLED(NETSCAPE_PLUGIN_METADATA_CACHE) similar to the change that was made in PluginDatabase::pluginForMIMEType() and PluginDatabase::MIMETypeForExtension() in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271081</commentid>
    <comment_count>28</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-08-28 17:34:43 -0700</bug_when>
    <thetext>Committed build fix in changeset 66307 &lt;http://trac.webkit.org/changeset/66307&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271137</commentid>
    <comment_count>29</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-08-29 01:44:59 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Committed build fix in changeset 66307 &lt;http://trac.webkit.org/changeset/66307&gt;.

Thanks Dan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271507</commentid>
    <comment_count>30</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-08-30 10:45:03 -0700</bug_when>
    <thetext>Revision r66297 cherry-picked into qtwebkit-2.1 with commit 4ed6900e3c028f1a2ace5d2f6d5ae9d7230ea8fe
Revision r66307 cherry-picked into qtwebkit-2.1 with commit 8ba35dd2ba984d71a1b91f0111d9eac1a8ce19a2</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65413</attachid>
            <date>2010-08-25 07:10:08 -0700</date>
            <delta_ts>2010-08-25 11:02:52 -0700</delta_ts>
            <desc>Implement a cache of NPAPI plugin info using sqlite db</desc>
            <filename>qt-plugin-cache-1.patch</filename>
            <type>text/plain</type>
            <size>22482</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzMjc3NTNjLi5jYmE3NDliIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMjUgIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBOUEFQSSBQbHVnaW4gbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCwgYW5kIGxvYWRpbmcgYSBw
bHVnaW4gc2hvdWxkIG5vdCByZXF1aXJlIGxvYWRpbmcgZXZlcnkgcGx1Z2luCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE3OQorCisgICAgICAgIEFk
ZCBFTkFCTEVfUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUgZmxhZyB0byBlbmFibGUgcGVyc2lzdGVu
dAorICAgICAgICBOUEFQSSBQbHVnaW4gQ2FjaGUuIFRoZSBmbGFnIGlzIGVuYWJsZWQgYnkgZGVm
YXVsdC4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGQgRU5BQkxFX1BFUlNJU1RFTlRf
UExVR0lOX0NBQ0hFCisKIDIwMTAtMDgtMjUgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCmluZGV4IGY2NTNhZGIuLmZiNzIyYTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC04
NTcsNiArODU3LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIDEKICNl
bmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX1BFUlNJU1RFTlRfUExVR0lOX0NBQ0hFKQorI2Rl
ZmluZSBFTkFCTEVfUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUgMAorI2VuZGlmCisKICNpZiAhZGVm
aW5lZChXVEZfVVNFX1BMVUdJTl9IT1NUX1BST0NFU1MpCiAjZGVmaW5lIFdURl9VU0VfUExVR0lO
X0hPU1RfUFJPQ0VTUyAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTZkYjNiNC4uOWExNDU0MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAor
MjAxMC0wOC0yNSAgS2ltbW8gS2lubnVuZW4gIDxraW1tby50Lmtpbm51bmVuQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIE5Q
QVBJIFBsdWdpbiBtZXRhZGF0YSBzaG91bGQgYmUgY2FjaGVkLCBhbmQgbG9hZGluZyBhIHBsdWdp
biBzaG91bGQgbm90IHJlcXVpcmUgbG9hZGluZyBldmVyeSBwbHVnaW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMTc5CisKKyAgICAgICAgSW1wbGVt
ZW50IGEgY2FjaGUgb2YgTlBBUEkgcGx1Z2luIG1ldGFkYXRhLiBDYWNoZSBpcyBhIHNxbGl0ZSBk
YiB0aGF0CisgICAgICAgIGdldHMgdXBkYXRlZCBpZiBhbnkgcGx1Z2luIGlzIGFkZGVkIC8gcmVt
b3ZlZC4KKyAgICAgICAgQ29tcGlsYXRpb24gb2YgdGhlIGZlYXR1cmUgaXMgY29udHJvbGxlZCBi
eSAjaWYgRU5BQkxFKFBFUlNJU1RFTlRfUExVR0lOX0NBQ0hFKQorCisgICAgICAgIEVuYWJsZWQg
b25seSBmb3IgUXQgdW5peCBmbGF2b3JzIGN1cnJlbnRseS4KKworICAgICAgICAqIFdlYkNvcmUu
cHJvOiBFbmFibGUgUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUgZm9yIHVuaXggYnVpbGRzCisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwZXJz
aXN0ZW50Q2FjaGVQYXRoKTogc3RhdGljIGFjY2Vzc29yIGZvciB0aGUgY2FjaGUgcGF0aAorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OlBsdWdpbkRhdGFiYXNlKTogYWRkIGluc3Rh
bmNlIHZhcmlhYmxlCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCk6
IExvYWQgdGhlIGNhY2hlIHdoZW4gY2FsbGVkIHRoZSBmaXJzdCB0aW1lLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKTogRW5zdXJlIHJldHVybmVk
IHBsdWdpbiBpcyBsb2FkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6TUlN
RVR5cGVGb3JFeHRlbnNpb24pOiBFbnN1cmUgcmV0dXJuZWQgcGx1Z2luIGlzIGxvYWRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6b3BlbkRhdGFiYXNlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRDYWNo
ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNp
c3RlbnRDYWNoZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omlz
UGVyc2lzdGVudENhY2hlRW5hYmxlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YWJhc2U6OnNldFBlcnNpc3RlbnRDYWNoZUVuYWJsZWQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50Q2FjaGVQYXRoKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudENhY2hlUGF0aCk6IEFk
ZGVkLgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6
UGx1Z2luUGFja2FnZSk6IGFkZCBpbnN0YW5jZSB2YXJpYWJsZSB0byBpbmRpY2F0ZSBpZiBwbHVn
aW4gaW5mbyBjb21lcyBmcm9tIGNhY2hlCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlOjplbnN1cmVQbHVnaW5Mb2FkZWQpOiBBZGRlZC4KKyAgICAgICAgKiBwbHVnaW5z
L1BsdWdpblBhY2thZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZ1bGxN
SU1FRGVzY3JpcHRpb24pOiBBZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpblBhY2th
Z2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8pOiBz
cGxpdCBtaW1lIGRlc2NyaXB0aW9uIHBhcnNpbmcgb3V0IHRvIHNldE1JTUVEZXNjcmlwdGlvbgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6c2V0TUlNRURlc2NyaXB0aW9uKTogQWRk
ZWQuCisKIDIwMTAtMDgtMjQgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDYyZDFjNjguLmU2
ODQ3NGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwpAQCAtMjM4OSw2ICsyMzg5LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05F
VFNDQVBFX1BMVUdJTl9BUEk9MSkgewogICAgICAgICAgICAgICAgIEhFQURFUlMgKz0gXAogICAg
ICAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmgKICAgICAgICAg
ICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgICAgICAgICBERUZJTkVTICs9IEVO
QUJMRV9QRVJTSVNURU5UX1BMVUdJTl9DQUNIRT0xCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCmluZGV4IDI5YjZkMjQuLmM1NGFkNTAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIGIvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApAQCAtMzAsMTMgKzMwLDMxIEBACiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgorI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKKyNpbmNsdWRlICJTUUxp
dGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgorI2VuZGlmCiAj
aW5jbHVkZSA8c3RkbGliLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1h
cDsKIAorI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKK3N0YXRpYyBib29sIGdQ
ZXJzaXN0ZW50Q2FjaGVJc0VuYWJsZWQ7CisKK1N0cmluZyYgcGVyc2lzdGVudENhY2hlUGF0aCgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGNhY2hlUGF0aCwgKCkpOworICAg
IHJldHVybiBjYWNoZVBhdGg7Cit9CisjZW5kaWYKKworCiBQbHVnaW5EYXRhYmFzZTo6UGx1Z2lu
RGF0YWJhc2UoKQorI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKKyAgICA6IG1f
cGVyc2lzdGVudENhY2hlTG9hZGVkKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTc0LDYgKzky
LDEwIEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgZGlyZWN0b3J5KQogCiBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKIHsK
KyNpZiBFTkFCTEUoUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUpCisgICAgaWYgKCFtX3BlcnNpc3Rl
bnRDYWNoZUxvYWRlZCkKKyAgICAgICAgbG9hZFBlcnNpc3RlbnRDYWNoZSgpOworI2VuZGlmCiAg
ICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CiAKICAgICBpZiAoIW1fcGx1Z2lucy5p
c0VtcHR5KCkpIHsKQEAgLTEyNiw2ICsxNDgsMTAgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVm
cmVzaCgpCiAgICAgaWYgKCFwbHVnaW5TZXRDaGFuZ2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyNpZiBFTkFCTEUoUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUpCisgICAgdXBkYXRlUGVyc2lz
dGVudENhY2hlKCk7CisjZW5kaWYKKwogICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigp
OwogCiAgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCkBAIC0xODIsOCArMjA4LDEz
IEBAIFBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQogICAgICAgICBpZiAoIXBsdWdpbi0+aXNFbmFibGVkKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5BQkxFKFBFUlNJU1RFTlRfUExVR0lOX0NB
Q0hFKQorICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCiAgICAgICAgICAgICBwbHVnaW5DaG9pY2Vz
LmFwcGVuZChwbHVnaW4pOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHBsdWdpbkNob2lj
ZXMuaXNFbXB0eSgpKQpAQCAtMjIxLDcgKzI1MiwxMCBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6
Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAogCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6
ZXF1YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWltZVR5cGU7Ci0KKyNpZiBFTkFCTEUoUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUp
CisgICAgICAgICAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCiAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7CiAgICAgICAgICAgICAgICAgICAg
IG1pbWVUeXBlRm9yUGx1Z2luLmFkZChwbHVnaW4sIG1pbWVUeXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgZm91bmRNYXBwaW5nID0gdHJ1ZTsKQEAgLTQyNyw0ICs0NjEsMTYyIEBAIHZvaWQgUGx1
Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4m
IHBhdGhzKSBjb25zdAogCiAjZW5kaWYgLy8gIU9TKFNZTUJJQU4pICYmICFPUyhXSU5ET1dTKQog
CisjaWYgRU5BQkxFKFBFUlNJU1RFTlRfUExVR0lOX0NBQ0hFKQorCitzdGF0aWMgY29uc3QgaW50
IHNjaGVtYVZlcnNpb24gPSAxOworCit2b2lkIFBsdWdpbkRhdGFiYXNlOjp2ZXJpZnlTY2hlbWFW
ZXJzaW9uKFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2Uu
aXNPcGVuKCkpOworCisgICAgaW50IHZlcnNpb24gPSBTUUxpdGVTdGF0ZW1lbnQoZGF0YWJhc2Us
ICJQUkFHTUEgdXNlcl92ZXJzaW9uIikuZ2V0Q29sdW1uSW50KDApOworICAgIGlmICh2ZXJzaW9u
ID09IHNjaGVtYVZlcnNpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFiYXNlLmNsZWFy
QWxsVGFibGVzKCk7CisKKyAgICAvLyBVcGRhdGUgdXNlciB2ZXJzaW9uLgorICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHNldERhdGFiYXNlVmVyc2lvbihkYXRhYmFzZSk7CisgICAgc2V0RGF0YWJhc2VW
ZXJzaW9uLmJlZ2luKCk7CisKKyAgICBjaGFyIHVzZXJWZXJzaW9uU1FMWzMyXTsKKyAgICBpbnQg
dW51c2VkTnVtQnl0ZXMgPSBzbnByaW50Zih1c2VyVmVyc2lvblNRTCwgc2l6ZW9mKHVzZXJWZXJz
aW9uU1FMKSwgIlBSQUdNQSB1c2VyX3ZlcnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHVudXNlZE51bUJ5dGVzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih1c2Vy
VmVyc2lvblNRTCkpID49IHVudXNlZE51bUJ5dGVzKTsKKworCisgICAgaWYgKCFTUUxpdGVTdGF0
ZW1lbnQoZGF0YWJhc2UsIHVzZXJWZXJzaW9uU1FMKS5leGVjdXRlQ29tbWFuZCgpKQorICAgICAg
ICBMT0dfRVJST1IoIlBsdWdpbiBDYWNoZTogdW5hYmxlIHRvIHNldCB1c2VyX3ZlcnNpb24iKTsK
KworICAgIHNldERhdGFiYXNlVmVyc2lvbi5jb21taXQoKTsKK30KKwordm9pZCBQbHVnaW5EYXRh
YmFzZTo6b3BlbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgYm9vbCBjcmVhdGVJ
ZkRvZXNOb3RFeGlzdCkKK3sKKyAgICBBU1NFUlQoIWRhdGFiYXNlLmlzT3BlbigpKTsKKyAgICBB
U1NFUlQoaXNQZXJzaXN0ZW50Q2FjaGVFbmFibGVkKCkgJiYgIXBlcnNpc3RlbnRDYWNoZVBhdGgo
KS5pc0VtcHR5KCkpOworCisgICAgU3RyaW5nIGNvbXBsZXRlRGF0YWJhc2VQYXRoID0gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRDYWNoZVBhdGgoKSwgIlBsdWdpbkNhY2hlLmRi
Iik7CisKKyAgICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4aXN0ICYmICFmaWxlRXhpc3RzKGNvbXBs
ZXRlRGF0YWJhc2VQYXRoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFrZUFsbERpcmVjdG9y
aWVzKHBlcnNpc3RlbnRDYWNoZVBhdGgoKSk7CisgICAgZGF0YWJhc2Uub3Blbihjb21wbGV0ZURh
dGFiYXNlUGF0aCk7CisKKyAgICBpZiAoIWRhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1
cm47CisKKyAgICB2ZXJpZnlTY2hlbWFWZXJzaW9uKGRhdGFiYXNlKTsKKworICAgIGlmICghU1FM
aXRlU3RhdGVtZW50KGRhdGFiYXNlLCAiUFJBR01BIGNhY2hlX3NpemUgPSAyMDA7IikuZXhlY3V0
ZUNvbW1hbmQoKSkKKyAgICAgICAgTE9HX0VSUk9SKCJQbHVnaW4gQ2FjaGU6IHVuYWJsZSB0byBz
ZXQgY2FjaGVfc2l6ZSIpOworCisgICAgaWYgKCFTUUxpdGVTdGF0ZW1lbnQoZGF0YWJhc2UsICJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBQbHVnaW5JbmZvIChwYXRoIFRFWFQgVU5JUVVFIE9O
IENPTkZMSUNUIEZBSUwsIGxhc3RNb2RpZmllZCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwsIG5hbWUgVEVYVCwgZGVzYyBURVhULCBtaW1lRGVzYyBURVhUKSIpLmV4ZWN1dGVDb21t
YW5kKCkpCisgICAgICAgIExPR19FUlJPUigiUGx1Z2luIENhY2hlOiB1bmFibGUgdG8gY3JlYXRl
IGRhdGFiYXNlIHNjaGVtYSIpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpsb2FkUGVyc2lz
dGVudENhY2hlKCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudENhY2hlRW5hYmxlZCgpIHx8IHBl
cnNpc3RlbnRDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNR
TGl0ZURhdGFiYXNlIGRhdGFiYXNlOworICAgIG9wZW5EYXRhYmFzZShkYXRhYmFzZSwgZmFsc2Up
OworCisgICAgaWYgKCFkYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KGRhdGFiYXNlLCAiU0VMRUNUIHBhdGgsIGxhc3RNb2RpZmll
ZCwgbmFtZSwgZGVzYywgbWltZURlc2MgRlJPTSBQbHVnaW5JbmZvIik7CisgICAgaWYgKHF1ZXJ5
LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlBsdWdpbiBD
YWNoZTogdW5hYmxlIHRvIHNlbGVjdCBwbHVnaW4gaW5mbyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICB3aGlsZSAocmVzdWx0
ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2Fn
ZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUocXVlcnkuZ2V0Q29sdW1u
VGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uSW50NjQoMSksIHF1ZXJ5LmdldENvbHVtblRleHQoMiks
IHF1ZXJ5LmdldENvbHVtblRleHQoMyksIHF1ZXJ5LmdldENvbHVtblRleHQoNCkpOworCisgICAg
ICAgIGlmIChwYWNrYWdlKSB7CisgICAgICAgICAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLmFk
ZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2RpZmllZCgpKTsKKyAgICAgICAgICAg
IGFkZChwYWNrYWdlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gcXVl
cnkuc3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKKyAg
ICAgICAgTE9HX0VSUk9SKCJQbHVnaW4gQ2FjaGU6IGVycm9yIHJlYWRpbmcgcGx1Z2luIGNhY2hl
Iik7CisKKyAgICBtX3BlcnNpc3RlbnRDYWNoZUxvYWRlZCA9IHRydWU7Cit9CisKK3ZvaWQgUGx1
Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRDYWNoZSgpCit7CisgICAgaWYgKCFpc1BlcnNp
c3RlbnRDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50Q2FjaGVQYXRoKCkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKKyAgICBvcGVu
RGF0YWJhc2UoZGF0YWJhc2UsIHRydWUpOworCisgICAgaWYgKCFkYXRhYmFzZS5pc09wZW4oKSkg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBsdWdpbiBjYWNoZSBmb3Igc2F2
aW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB1
cGRhdGVUcmFuc2FjdGlvbihkYXRhYmFzZSk7CisgICAgdXBkYXRlVHJhbnNhY3Rpb24uYmVnaW4o
KTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVFbnRyeVNRTChkYXRhYmFzZSwgIkRFTEVU
RSBGUk9NIFBsdWdpbkluZm87Iik7CisgICAgaWYgKGRlbGV0ZUVudHJ5U1FMLnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlBsdWdpbiBDYWNoZTogdW5hYmxl
IHRvIHByZXBhcmUgdG8gZGVsZXRlIHByZXZpb3VzIHBsdWdpbiBpbmZvIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVsZXRlRW50cnlTUUwuc3RlcCgpICE9IFNRTFJlc3Vs
dERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJQbHVnaW4gQ2FjaGU6IHVuYWJsZSB0byBkZWxl
dGUgcHJldmlvdXMgcGx1Z2luIGluZm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFNRTGl0ZVN0YXRlbWVudCBpbnNlcnRFbnRyeVNRTChkYXRhYmFzZSwgIklOU0VSVCBJTlRPIFBs
dWdpbkluZm8gVkFMVUVTICg/LD8sPyw/LD8pOyIpOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgaWYgKGluc2VydEVudHJ5U1FMLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJQbHVnaW4gQ2FjaGU6IHVuYWJsZSB0byBwcmVwYXJlIGZvciBwbHVn
aW4gaW5mbyBzYXZlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aW5zZXJ0RW50cnlTUUwuYmluZFRleHQoMSwgKCppdCktPnBhdGgoKSk7CisgICAgICAgIGluc2Vy
dEVudHJ5U1FMLmJpbmRJbnQ2NCgyLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpOworICAgICAgICBp
bnNlcnRFbnRyeVNRTC5iaW5kVGV4dCgzLCAoKml0KS0+bmFtZSgpKTsKKyAgICAgICAgaW5zZXJ0
RW50cnlTUUwuYmluZFRleHQoNCwgKCppdCktPmRlc2NyaXB0aW9uKCkpOworICAgICAgICBpbnNl
cnRFbnRyeVNRTC5iaW5kVGV4dCg1LCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlvbigpKTsKKyAg
ICAgICAgaWYgKCFpbnNlcnRFbnRyeVNRTC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIlBsdWdpbiBDYWNoZTogdW5hYmxlIHRvIHNhdmUgcGx1Z2luIGluZm8iKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVwZGF0ZVRyYW5z
YWN0aW9uLmNvbW1pdCgpOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1BlcnNpc3RlbnRD
YWNoZUVuYWJsZWQoKQoreworICAgIHJldHVybiBnUGVyc2lzdGVudENhY2hlSXNFbmFibGVkOwor
fQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50Q2FjaGVFbmFibGVkKGJvb2wg
aXNFbmFibGVkKQoreworICAgIGdQZXJzaXN0ZW50Q2FjaGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQ7
Cit9CisKK1N0cmluZyBQbHVnaW5EYXRhYmFzZTo6cGVyc2lzdGVudENhY2hlUGF0aCgpCit7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRDYWNoZVBhdGgoKTsKK30KKwordm9pZCBQbHVn
aW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudENhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3Rl
bnRDYWNoZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVyc2lzdGVudENhY2hlUGF0aCgpID0gcGVy
c2lzdGVudENhY2hlUGF0aDsKK30KKworI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmgKaW5kZXggZjgwZGQ4Yy4uODk4YzVlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKQEAg
LTMwLDYgKzMwLDkgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgorI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKKyNp
bmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgpAQCAtNzgsNiArODEsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0
b3I8U3RyaW5nPiBwbHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGly
ZWN0b3JpZXM7IH0KIAogICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3Qg
U3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OworI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9D
QUNIRSkKKyAgICAgICAgc3RhdGljIGJvb2wgaXNQZXJzaXN0ZW50Q2FjaGVFbmFibGVkKCk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJs
ZWQpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHBlcnNpc3RlbnRDYWNoZVBhdGgoKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgc2V0UGVyc2lzdGVudENhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNp
c3RlbnRDYWNoZVBhdGgpOworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGdl
dFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdDsKQEAgLTg2
LDYgKzk1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmV0dXJucyB3aGV0
aGVyIHRoZSBwbHVnaW4gd2FzIGFjdHVhbGx5IGFkZGVkIG9yIG5vdCAoaXQgd29uJ3QgYmUgYWRk
ZWQgaWYgaXQncyBhIGR1cGxpY2F0ZSBvZiBhbiBleGlzdGluZyBwbHVnaW4pLgogICAgICAgICBi
b29sIGFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+KTsKICAgICAgICAgdm9pZCByZW1vdmUo
UGx1Z2luUGFja2FnZSopOworI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKKyAg
ICAgICAgdm9pZCBvcGVuRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KTsKKyAgICAgICAgdm9pZCB2ZXJpZnlTY2hlbWFWZXJzaW9uKFNR
TGl0ZURhdGFiYXNlJiBkYXRhYmFzZSk7CisgICAgICAgIHZvaWQgbG9hZFBlcnNpc3RlbnRDYWNo
ZSgpOworICAgICAgICB2b2lkIHVwZGF0ZVBlcnNpc3RlbnRDYWNoZSgpOworI2VuZGlmCiAKICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5EaXJlY3RvcmllczsKICAgICAgICAgSGFzaFNl
dDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKQEAgLTkzLDYgKzEwOCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNr
YWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4g
bV9wbHVnaW5QYXRoc1dpdGhUaW1lczsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVycmVkUGx1Z2luczsKKyNpZiBFTkFCTEUoUEVSU0lTVEVO
VF9QTFVHSU5fQ0FDSEUpCisgICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50Q2FjaGVMb2FkZWQ7Cisj
ZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5jcHAKaW5kZXggYmY5NzBmMi4uZDU2MGEyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblBhY2thZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmNwcApAQCAtMTA4LDExICsxMDgsMTUgQEAgUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQogICAgICwgbV9t
b2R1bGUoMCkKICAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKICAgICAsIG1fZnJl
ZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVk
KQorI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKKyAgICAsIG1faW5mb0lzRnJv
bUNhY2hlKHRydWUpCisjZW5kaWYKIHsKICAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1l
KG1fcGF0aCk7CiAgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVu
Z3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7CiB9CiAKKwogI2lmICFPUyhTWU1CSUFO
KQogdm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQogewpAQCAtMTYyLDYgKzE2NiwxOSBAQCBQ
YXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdAogICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKIH0K
IAorI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKK1Bhc3NSZWZQdHI8UGx1Z2lu
UGFja2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9u
KQoreworICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBs
dWdpblBhY2thZ2UocGF0aCwgbGFzdE1vZGlmaWVkKSk7CisgICAgcGFja2FnZS0+bV9uYW1lID0g
bmFtZTsKKyAgICBwYWNrYWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgcGFj
a2FnZS0+ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworICAgIHBhY2th
Z2UtPnNldE1JTUVEZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOworICAgIHBhY2thZ2UtPm1f
aW5mb0lzRnJvbUNhY2hlID0gdHJ1ZTsKKyAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9
CisjZW5kaWYKKwogI2lmIGRlZmluZWQoWFBfVU5JWCkKIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0
ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CkBAIC0zNDMsNCArMzYwLDIw
IEBAIGludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uJiBjb21wYXJlVmVyc2lvCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBFTkFC
TEUoUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUpCitib29sIFBsdWdpblBhY2thZ2U6OmVuc3VyZVBs
dWdpbkxvYWRlZCgpCit7CisgICAgaWYgKCFtX2luZm9Jc0Zyb21DYWNoZSkKKyAgICAgICAgcmV0
dXJuIG1faXNMb2FkZWQ7CisKKyAgICBtX3F1aXJrcyA9IFBsdWdpblF1aXJrU2V0KCk7CisgICAg
bV9uYW1lID0gU3RyaW5nKCk7CisgICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZygpOworICAgIG1f
ZnVsbE1JTUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOworICAgIG1fbW9kdWxlVmVyc2lvbiA9IDA7
CisKKyAgICByZXR1cm4gZmV0Y2hJbmZvKCk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmgKaW5kZXggOTJhOWM1Mi4uZTZmNWJmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblBhY2thZ2UuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5o
CkBAIC00OSw2ICs0OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIH5QbHVnaW5QYWNrYWdlKCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBh
Y2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxh
c3RNb2RpZmllZCk7CisjaWYgRU5BQkxFKFBFUlNJU1RFTlRfUExVR0lOX0NBQ0hFKQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlRnJvbUNhY2hl
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1l
RGVzY3JpcHRpb24pOworI2VuZGlmCiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC04MCw2ICs4MywxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5QSW50ZXJmYWNlKiBucEludGVyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbnBJbnRlcmZhY2U7IH0KICNlbmRpZiAvLyBPUyhTWU1CSUFOKQogCisjaWYg
RU5BQkxFKFBFUlNJU1RFTlRfUExVR0lOX0NBQ0hFKQorICAgICAgICBib29sIGVuc3VyZVBsdWdp
bkxvYWRlZCgpOworICAgICAgICB2b2lkIHNldE1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcm
IG1pbWVEZXNjcmlwdGlvbik7CisgICAgICAgIFN0cmluZyBmdWxsTUlNRURlc2NyaXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9mdWxsTUlNRURlc2NyaXB0aW9uO30KKyNlbmRpZgogICAgIHByaXZh
dGU6CiAgICAgICAgIFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1l
X3QmIGxhc3RNb2RpZmllZCk7CiAKQEAgLTEyMSw2ICsxMjksMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CiAK
ICAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7CisjaWYgRU5BQkxFKFBFUlNJU1RFTlRf
UExVR0lOX0NBQ0hFKQorICAgICAgICBTdHJpbmcgbV9mdWxsTUlNRURlc2NyaXB0aW9uOworICAg
ICAgICBib29sIG1faW5mb0lzRnJvbUNhY2hlOworI2VuZGlmCiAgICAgfTsKIAogICAgIHN0cnVj
dCBQbHVnaW5QYWNrYWdlSGFzaCB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luUGFja2FnZVF0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3Bw
CmluZGV4IGI0MjFiMWUuLjM1NzdmZTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5QYWNrYWdlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdl
UXQuY3BwCkBAIC02MCw5ICs2MCwxOSBAQCBib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygp
CiAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZjsKICAgICBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJv
bURlc2NyaXB0aW9uKCk7CiAKLSAgICBTdHJpbmcgcyA9IGdtKCk7CisgICAgU3RyaW5nIG1pbWVE
ZXNjcmlwdGlvbiA9IGdtKCk7CisgICAgc2V0TUlNRURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlv
bik7CisgICAgbV9pbmZvSXNGcm9tQ2FjaGUgPSBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFBsdWdpblBhY2thZ2U6OnNldE1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcm
IG1pbWVEZXNjcmlwdGlvbikKK3sKKyAgICBtX2Z1bGxNSU1FRGVzY3JpcHRpb24gPSBtaW1lRGVz
Y3JpcHRpb247CisKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBzLnNwbGl0KFVDaGFy
KCc7JyksIGZhbHNlLCB0eXBlcyk7CisgICAgbWltZURlc2NyaXB0aW9uLnNwbGl0KFVDaGFyKCc7
JyksIGZhbHNlLCB0eXBlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHR5cGVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWU7CiAgICAgICAgIHR5cGVz
W2ldLnNwbGl0KFVDaGFyKCc6JyksIHRydWUsIG1pbWUpOwpAQCAtNzYsOCArODYsNiBAQCBib29s
IFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCiAgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNj
cmlwdGlvbnMuYWRkKG1pbWVbMF0sIG1pbWVbMl0pOwogICAgICAgICB9CiAgICAgfQotCi0gICAg
cmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBOUEVycm9yIHN0YXRpY1BsdWdpblF1aXJrUmVxdWly
ZXNHdGtUb29sS2l0X05QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKQEAgLTE3Miw0ICsxODAsNSBAQCB1aW50MTZfdCBQbHVnaW5QYWNr
YWdlOjpOUFZlcnNpb24oKSBjb25zdAogewogICAgIHJldHVybiBOUF9WRVJTSU9OX01JTk9SOwog
fQorCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAg
Yi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKaW5kZXggNzU4ZTI1Ny4uOGZk
YmQzNiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCisr
KyBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcApAQCAtMjg0LDcgKzI4NCw4
IEBAIFFMaXN0PFFXZWJQbHVnaW5JbmZvPiBRV2ViUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBj
b25zdAogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbnNbaV07Ci0gICAg
ICAgIHF3ZWJwbHVnaW5zLmFwcGVuZChRV2ViUGx1Z2luSW5mbyhwbHVnaW4pKTsKKyAgICAgICAg
aWYgKHBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCisgICAgICAgICAgICBxd2VicGx1Z2lu
cy5hcHBlbmQoUVdlYlBsdWdpbkluZm8ocGx1Z2luKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHF3
ZWJwbHVnaW5zOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIv
V2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IGVkZDA3ZGEuLjdiODk2ZDEgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCkBAIC0x
MDg3LDYgKzEwODgsNyBAQCB2b2lkIFFXZWJTZXR0aW5nczo6ZW5hYmxlUGVyc2lzdGVudFN0b3Jh
Z2UoY29uc3QgUVN0cmluZyYgcGF0aCkKICAgICBXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMo
c3RvcmFnZVBhdGgpOwogCiAgICAgUVdlYlNldHRpbmdzOjpzZXRJY29uRGF0YWJhc2VQYXRoKHN0
b3JhZ2VQYXRoKTsKKyAgICBRV2ViU2V0dGluZ3M6OnNldFBsdWdpbkNhY2hlUGF0aChzdG9yYWdl
UGF0aCk7CiAgICAgUVdlYlNldHRpbmdzOjpzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZVBh
dGgoc3RvcmFnZVBhdGgpOwogICAgIFFXZWJTZXR0aW5nczo6c2V0T2ZmbGluZVN0b3JhZ2VQYXRo
KFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChzdG9yYWdlUGF0aCwgIkRhdGFiYXNl
cyIpKTsKICAgICBRV2ViU2V0dGluZ3M6Omdsb2JhbFNldHRpbmdzKCktPnNldExvY2FsU3RvcmFn
ZVBhdGgoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0b3JhZ2VQYXRoLCAiTG9j
YWxTdG9yYWdlIikpOwpAQCAtMTA5OSwzICsxMTAxLDQyIEBAIHZvaWQgUVdlYlNldHRpbmdzOjpl
bmFibGVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBRU3RyaW5nJiBwYXRoKQogICAgIFxmbiBRV2Vi
U2V0dGluZ3NQcml2YXRlKiBRV2ViU2V0dGluZ3M6OmhhbmRsZSgpIGNvbnN0CiAgICAgXGludGVy
bmFsCiAqLworCisvKiEKKyAgICBcc2luY2UgNC5YCisgICAgU2V0cyB0aGUgcGF0aCBmb3IgcGx1
Z2luIGNhY2hlIHRvIFxhIHBhdGguCisgICAgXHNhIHBsdWdpbkNhY2hlUGF0aCgpCisqLwordm9p
ZCBRV2ViU2V0dGluZ3M6OnNldFBsdWdpbkNhY2hlUGF0aChjb25zdCBRU3RyaW5nJiBwYXRoKQor
eworI2lmIEVOQUJMRShQRVJTSVNURU5UX1BMVUdJTl9DQUNIRSkKKyAgICBpZiAoIXBhdGguaXNF
bXB0eSgpKSB7CisgICAgICAgIFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50
Q2FjaGVFbmFibGVkKHRydWUpOworICAgICAgICBRRmlsZUluZm8gaW5mbyhwYXRoKTsKKyAgICAg
ICAgaWYgKGluZm8uaXNEaXIoKSAmJiBpbmZvLmlzV3JpdGFibGUoKSkKKyAgICAgICAgICAgIFdl
YkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50Q2FjaGVQYXRoKHBhdGgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50
Q2FjaGVFbmFibGVkKGZhbHNlKTsKKyAgICB9CisjZW5kaWYKK30KKworLyohCisgICAgXHNpbmNl
IDQuWAorCisgICAgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgcGx1Z2luIGNhY2hlIG9yIGFuIGVt
cHR5IHN0cmluZyBpZiB0aGUKKyAgICBwbHVnaW4gY2FjaGUgaXMgZGlzYWJsZWQuCisKKyAgICBc
c2Egc2V0UGx1Z2luQ2FjaGVQYXRoKCkKKyovCitRU3RyaW5nIFFXZWJTZXR0aW5nczo6cGx1Z2lu
Q2FjaGVQYXRoKCkKK3sKKyNpZiBFTkFCTEUoUEVSU0lTVEVOVF9QTFVHSU5fQ0FDSEUpCisgICAg
aWYgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNpc3RlbnRDYWNoZUVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50Q2FjaGVQ
YXRoKCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUVN0cmluZygpOworI2Vsc2UKKyAgICBy
ZXR1cm4gUVN0cmluZygpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3
ZWJzZXR0aW5ncy5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuaAppbmRleCA4OTY3ZTdj
Li4yNTdjZGI5IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5oCisrKyBi
L1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmgKQEAgLTExOCw2ICsxMTgsOCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFFJY29uIGljb25Gb3JVcmwoY29uc3QgUVVybCAmdXJsKTsKIAogICAgIC8v
c3RhdGljIFFXZWJQbHVnaW5EYXRhYmFzZSAqcGx1Z2luRGF0YWJhc2UoKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRQbHVnaW5DYWNoZVBhdGgoY29uc3QgUVN0cmluZyAmbG9jYXRpb24pOworICAgIHN0
YXRpYyBRU3RyaW5nIHBsdWdpbkNhY2hlUGF0aCgpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0V2Vi
R3JhcGhpYyhXZWJHcmFwaGljIHR5cGUsIGNvbnN0IFFQaXhtYXAgJmdyYXBoaWMpOwogICAgIHN0
YXRpYyBRUGl4bWFwIHdlYkdyYXBoaWMoV2ViR3JhcGhpYyB0eXBlKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDNkNTdhMzkuLmVh
MWQ3MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA4LTI1ICBLaW1tbyBLaW5udW5lbiAgPGtp
bW1vLnQua2lubnVuZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtRdF0gTlBBUEkgUGx1Z2luIG1ldGFkYXRhIHNob3VsZCBiZSBj
YWNoZWQsIGFuZCBsb2FkaW5nIGEgcGx1Z2luIHNob3VsZCBub3QgcmVxdWlyZSBsb2FkaW5nIGV2
ZXJ5IHBsdWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDMxNzkKKworICAgICAgICAqIEFwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwOgorICAgICAg
ICAoUVdlYlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKTogTWF0Y2ggcHJldmlvdXMgYmVoYXZpb3I6
IGVuc3VyZSBhbGwgcmV0dXJuZWQgcGx1Z2lucyBhcmUgbG9hZGVkLgorICAgICAgICAqIEFwaS9x
d2Vic2V0dGluZ3MuY3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzOjplbmFibGVQZXJzaXN0ZW50
U3RvcmFnZSk6IFNldCBwbHVnaW4gY2FjaGUgcGF0aC4KKyAgICAgICAgKFFXZWJTZXR0aW5nczo6
c2V0UGx1Z2luQ2FjaGVQYXRoKTogQWRkZWQgbmV3IEFQSSBjYWxsLgorICAgICAgICAoUVdlYlNl
dHRpbmdzOjpwbHVnaW5DYWNoZVBhdGgpOiBBZGRlZCBuZXcgQVBJIGNhbGwuCisgICAgICAgICog
QXBpL3F3ZWJzZXR0aW5ncy5oOiBBZGQgbmV3IEFQSSBjYWxsIGRlY2xhcmF0aW9ucy4KKwogMjAx
MC0wOC0yNSAgR2Fib3IgTG9raSAgPGxva2lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>65420</attachid>
            <date>2010-08-25 08:30:09 -0700</date>
            <delta_ts>2010-08-25 08:30:09 -0700</delta_ts>
            <desc>Tester to test load-time performance increase</desc>
            <filename>plugin-metadata-cache-test.html</filename>
            <type>text/html</type>
            <size>1105</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlBsdWdpbiB0ZXN0PC90
aXRsZT4KICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9o
dG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8bWV0YSBuYW1lPSJuYXZpZ2F0aW9uIiBjb250ZW50
PSJub25lIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgdmFyIHN0
YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICBmdW5jdGlvbiBsb2coc3RyKSB7
CiAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAg
ICAgdmFyIHRFID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIrc3RyKTsKICAgICAgICAgIGUu
YXBwZW5kQ2hpbGQodEUpOwogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ImJvZHkiKVswXS5hcHBlbmRDaGlsZChlKTsKICAgICAgfQogICAgICB3aW5kb3cub25sb2FkID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgICBsb2coInN0YXJ0IHRpbWVzdGFtcDogIiArIHN0YXJ0VGlt
ZSk7CiAgICAgICAgICBsb2coIm9ubG9hZCB0aW1lc3RhbXA6ICIgKyAobmV3IERhdGUoKS5nZXRU
aW1lKCkpKTsKICAgICAgICAgIHZhciBwbHVnaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
dGVzdFBsdWdpbiIpOwogICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4udGVzdENhbGxiYWNrID09
PSAidW5kZWZpbmVkIikKICAgICAgICAgICAgIGxvZygiZXJyb3I6IHBsdWdpbiBub3QgbG9hZGVk
Iik7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHZhciB0cyA9IG5ldyBEYXRlKCkuZ2V0
VGltZSgpOwogICAgICAgICAgICAgbG9nKCJwYWdlIGxvYWQgZHVyYXRpb246IiArICh0cyAtIHN0
YXJ0VGltZSkpOwogICAgICAgICAgfQogICAgICB9OwogICAgIDwvc2NyaXB0PgogICAgPC9oZWFk
PgogICAgPGJvZHk+CiAgICA8ZW1iZWQgaWQ9InRlc3RQbHVnaW4iIHR5cGU9ImFwcGxpY2F0aW9u
L3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48L2VtYmVk
PgogICAgPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65548</attachid>
            <date>2010-08-26 05:07:25 -0700</date>
            <delta_ts>2010-08-26 06:44:06 -0700</delta_ts>
            <desc>Plugin metadata cache version 2 with filesystem</desc>
            <filename>qt-plugin-cache-2.patch</filename>
            <type>text/plain</type>
            <size>23546</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzMjc3NTNjLi5mZDBjMTBiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMjYgIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBOUEFQSSBQbHVnaW4gbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCwgYW5kIGxvYWRpbmcgYSBw
bHVnaW4gc2hvdWxkIG5vdCByZXF1aXJlIGxvYWRpbmcgZXZlcnkgcGx1Z2luCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE3OQorCisgICAgICAgIEFk
ZCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFIGZsYWcgdG8gZW5hYmxlIHBl
cnNpc3RlbnQKKyAgICAgICAgTlBBUEkgUGx1Z2luIENhY2hlLiBUaGUgZmxhZyBpcyBlbmFibGVk
IGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRkIEVOQUJMRV9ORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUKKwogMjAxMC0wOC0yNSAgTWljaGFlbCBTYWJvZmYg
IDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJl
bi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggZjY1M2FkYi4uOWRkNGViYyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgKQEAgLTg1Nyw2ICs4NTcsMTAgQEAKICNkZWZpbmUgRU5BQkxFX05FVFNDQVBFX1BM
VUdJTl9BUEkgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQorI2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRB
X0NBQ0hFIDAKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoV1RGX1VTRV9QTFVHSU5fSE9TVF9QUk9D
RVNTKQogI2RlZmluZSBXVEZfVVNFX1BMVUdJTl9IT1NUX1BST0NFU1MgMAogI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2ZGIz
YjQuLjkwMjczNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDgtMjYgIEtpbW1vIEtpbm51bmVuICA8
a2ltbW8udC5raW5udW5lbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBDYWNoZSBwbHVnaW4gaW5mbyB0byBhIHBlcnNpc3Rl
bnQgZGF0YWJhc2UKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDMxNzkKKworICAgICAgICBJbXBsZW1lbnQgYSBjYWNoZSBvZiBOUEFQSSBwbHVnaW4g
bWV0YWRhdGEuIFdyaXRlIHRoZSBtZXRhZGF0YSB0byBhYQorICAgICAgICBmaWxlIHRoYXQgZ2V0
cyByZXdyaXR0ZW4gaWYgYW55IHBsdWdpbiBpcyBhZGRlZCAvIHJlbW92ZWQuICBDb21waWxhdGlv
bgorICAgICAgICBvZiB0aGUgZmVhdHVyZSBpcyBjb250cm9sbGVkIGJ5ICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorCisgICAgICAgIEN1cnJlbnRseSBvbmx5IGVu
YWJsZWQgZm9yIFF0IFVOSVggZmxhdm9ycy4KKworICAgICAgICAqIFdlYkNvcmUucHJvOiAgRW5h
YmxlIE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSBmb3IgVU5JWCBidWlsZHMKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
bkZpbGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZSk6IEFkZGVkLgor
ICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKTogU3RhdGljIGFjY2Vzc29yIGZvciB0
aGUgcGF0aAorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OlBsdWdpbkRhdGFiYXNl
KTogQWRkIGluc3RhbmNlIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OnJlZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZv
ck1JTUVUeXBlKTogRW5zdXJlIHJldHVybmVkIHBsdWdpbiBpcyBsb2FkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOiBFbnN1cmUgcmV0
dXJuZWQgcGx1Z2luIGlzIGxvYWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNl
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxl
KTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRVVEY4U3Ry
aW5nKTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRUaW1l
KTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFi
YXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGVVVEY4U3RyaW5nKTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlVGltZSk6IFN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
RW5hYmxlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQ
YXRoKTogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOgorICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpQbHVnaW5QYWNrYWdlKTogQWRkIGluc3RhbmNlIHZhcmlhYmxlLgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKTogQWRk
ZWQuCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKTogQWRkZWQuCisgICAgICAgICog
cGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
UGFja2FnZTo6ZmV0Y2hJbmZvKTogU3BsaXQgbWltZSBwYXJzaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0TUlNRURlc2NyaXB0aW9uKTogQWRkZWQuIE1pbWUgcGFyc2lu
Zy4KKwogMjAxMC0wOC0yNCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjJkMWM2OC4uNGIx
YmViZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNv
cmUucHJvCkBAIC0yMzg5LDYgKzIzODksNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQST0xKSB7CiAgICAgICAgICAgICAgICAgSEVBREVSUyArPSBcCiAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAogICAgICAgICAg
ICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICAgICAgICAgIERFRklORVMgKz0gRU5B
QkxFX05FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRT0xCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAppbmRleCA5NmMyMDkz
Li5iMzg0MDkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCkBAIC0xMjgsNiAr
MTI4LDMzIEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gQ1N0cmluZygpOwogfQogCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1BsYXRmb3JtRmlsZUhh
bmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorewor
ICAgIFFJT0RldmljZTo6T3Blbk1vZGUgcGxhdGZvcm1Nb2RlOworCisgICAgaWYgKG1vZGUgPT0g
T3BlbkZvclJlYWQpCisgICAgICAgIHBsYXRmb3JtTW9kZSA9IFFJT0RldmljZTo6UmVhZE9ubHk7
CisgICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpCisgICAgICAgIHBsYXRmb3JtTW9k
ZSA9IChRSU9EZXZpY2U6OldyaXRlT25seSB8IFFJT0RldmljZTo6VHJ1bmNhdGUpOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBRRmls
ZSogZmlsZSA9IG5ldyBRRmlsZShwYXRoKTsKKyAgICBpZiAoZmlsZS0+b3BlbihwbGF0Zm9ybU1v
ZGUpKQorICAgICAgICByZXR1cm4gZmlsZTsKKworICAgIHJldHVybiBpbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlOworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUt
PmV4aXN0cygpICYmIGhhbmRsZS0+aXNSZWFkYWJsZSgpKQorICAgICAgICByZXR1cm4gaGFuZGxl
LT5yZWFkKGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogdm9pZCBj
bG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgaWYgKGhhbmRsZSkg
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBiL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggMjliNmQyNC4uNTljOGU5NiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0zMCwxMyArMzAsMjkgQEAKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjZW5kaWYKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4g
PiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKK3N0YXRpYyBib29sIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNo
ZUlzRW5hYmxlZDsKKworU3RyaW5nJiBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBjYWNoZVBhdGgsICgpKTsKKyAg
ICByZXR1cm4gY2FjaGVQYXRoOworfQorI2VuZGlmCisKIFBsdWdpbkRhdGFiYXNlOjpQbHVnaW5E
YXRhYmFzZSgpCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAg
ICA6IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVMb2FkZWQoZmFsc2UpCisjZW5kaWYKIHsKIH0K
IApAQCAtNzQsNiArOTAsMTAgQEAgdm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5E
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCiAKIGJvb2wgUGx1Z2luRGF0YWJhc2U6
OnJlZnJlc2goKQogeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUp
CisgICAgaWYgKCFtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlTG9hZGVkKQorICAgICAgICBsb2Fk
UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKKyNlbmRpZgogICAgIGJvb2wgcGx1Z2luU2V0Q2hh
bmdlZCA9IGZhbHNlOwogCiAgICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CkBAIC0xMjYs
NiArMTQ2LDEwIEBAIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQogICAgIGlmICghcGx1
Z2luU2V0Q2hhbmdlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZSgpOworI2VuZGlmCisKICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKIAog
ICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcwpAQCAtMTgyLDggKzIwNiwxMyBAQCBQ
bHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKICAgICAgICAgaWYgKCFwbHVnaW4tPmlzRW5hYmxlZCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25z
KCkuY29udGFpbnMoa2V5KSkKKyAgICAgICAgaWYgKHBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25z
KCkuY29udGFpbnMoa2V5KSkgeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFf
Q0FDSEUpCisgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKICAgICAgICAgICAgIHBsdWdpbkNob2lj
ZXMuYXBwZW5kKHBsdWdpbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAocGx1Z2luQ2hv
aWNlcy5pc0VtcHR5KCkpCkBAIC0yMjIsNiArMjUxLDEwIEBAIFN0cmluZyBQbHVnaW5EYXRhYmFz
ZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6
ZXF1YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWltZVR5cGU7CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRB
X0NBQ0hFKQorICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9h
ZGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgogICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOwogICAgICAgICAgICAg
ICAgICAgICBtaW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBtaW1lVHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kTWFwcGluZyA9IHRydWU7CkBAIC0zMTUsNiArMzQ4LDkgQEAgdm9p
ZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIoKQogICAgIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuY2xl
YXIoKTsKICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKICAgICBtX3ByZWZlcnJl
ZFBsdWdpbnMuY2xlYXIoKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQorICAgIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVMb2FkZWQgPSBmYWxzZTsKKyNlbmRp
ZgogfQogCiAjaWYgKCFPUyhXSU5DRSkpICYmICghT1MoU1lNQklBTikpICYmICghT1MoV0lORE9X
UykgfHwgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSkKQEAgLTQyNyw0ICs0NjMsMTg4IEBA
IHZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0
PFN0cmluZz4mIHBhdGhzKSBjb25zdAogCiAjZW5kaWYgLy8gIU9TKFNZTUJJQU4pICYmICFPUyhX
SU5ET1dTKQogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKwor
c3RhdGljIHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUgZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSAwOworICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisKKyAgICBidWZmZXIucmVz
aXplKGJ1ZmZlckNhcGFjaXR5KTsKKworICAgIGRvIHsKKyAgICAgICAgYnVmZmVyU2l6ZSArPSBy
ZWFkRnJvbUZpbGUoZmlsZSwgYnVmZmVyLmRhdGEoKSArIGJ1ZmZlclNpemUsIGJ1ZmZlckNhcGFj
aXR5IC0gYnVmZmVyU2l6ZSk7CisgICAgICAgIGlmIChidWZmZXJTaXplID09IGJ1ZmZlckNhcGFj
aXR5KSB7CisgICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOworICAgICAgICAgICAgYnVm
ZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfSB3aGlsZSAoMSk7CisKKyAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlclNpemUp
OworfQorCitzdGF0aWMgYm9vbCByZWFkVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdFN0cmluZywg
Y2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGxlbiA9IHN0cmxlbihzdGFydCk7Cisg
ICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdGFydCwgbGVuKTsKKyAgICBzdGFy
dCArPSBsZW4gKyAxOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHJlYWRU
aW1lKHRpbWVfdCYgcmVzdWx0VGltZSwgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7
CisgICAgaWYgKHN0YXJ0ICsgc2l6ZW9mKHRpbWVfdCkgPj0gZW5kKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXN1bHRUaW1lID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dGltZV90Kj4oc3Rh
cnQpOworICAgIHN0YXJ0ICs9IHNpemVvZih0aW1lX3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyIHNjaGVtYVZlcnNpb24gPSAnMSc7CitzdGF0aWMgY29uc3Qg
Y2hhciBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lW10gPSAiUGx1Z2luTWV0
YWRhdGFDYWNoZS5iaW4iOworCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpsb2FkUGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJs
ZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOworICAgIFN0cmluZyBhYnNv
bHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7Cisg
ICAgZmlsZSA9IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRoLCBPcGVuRm9yUmVhZCk7CisKKyAg
ICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1h
cmsgY2FjaGUgYXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBmYWlsdXJlLiBJZgor
ICAgIC8vIHRoZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCB0cnkgdG8gbG9hZCBp
dCBhbnltb3JlCisgICAgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUxvYWRlZCA9IHRydWU7CisK
KyAgICBWZWN0b3I8Y2hhcj4gZmlsZUNvbnRlbnRzOworICAgIGZpbGxCdWZmZXJXaXRoQ29udGVu
dHNPZkZpbGUoZmlsZSwgZmlsZUNvbnRlbnRzKTsKKyAgICBjbG9zZUZpbGUoZmlsZSk7CisKKyAg
ICBpZiAoZmlsZUNvbnRlbnRzLnNpemUoKSA8IDIgfHwgZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0g
c2NoZW1hVmVyc2lvbiB8fCBmaWxlQ29udGVudHMubGFzdCgpICE9ICdcMCcpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQg
c2NoZW1hIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXJQb3Mg
PSBmaWxlQ29udGVudHMuZGF0YSgpICsgMTsKKyAgICBjaGFyKiBlbmQgPSBmaWxlQ29udGVudHMu
ZGF0YSgpICsgZmlsZUNvbnRlbnRzLnNpemUoKTsKKworICAgIFBsdWdpblNldCBjYWNoZWRQbHVn
aW5zOworICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IGNhY2hlZFBsdWdpblBhdGhzV2l0aFRp
bWVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBjYWNoZWRQ
bHVnaW5zQnlQYXRoOworCisgICAgd2hpbGUgKGJ1ZmZlclBvcyA8IGVuZCkgeworICAgICAgICBT
dHJpbmcgcGF0aDsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZDsKKyAgICAgICAgU3RyaW5n
IG5hbWU7CisgICAgICAgIFN0cmluZyBkZXNjOworICAgICAgICBTdHJpbmcgbWltZURlc2M7Cisg
ICAgICAgIGlmICghKHJlYWRVVEY4U3RyaW5nKHBhdGgsIGJ1ZmZlclBvcywgZW5kKQorICAgICAg
ICAgICAgICAmJiByZWFkVGltZShsYXN0TW9kaWZpZWQsIGJ1ZmZlclBvcywgZW5kKQorICAgICAg
ICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhuYW1lLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAg
ICAgICAgJiYgcmVhZFVURjhTdHJpbmcoZGVzYywgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAg
ICAgICYmIHJlYWRVVEY4U3RyaW5nKG1pbWVEZXNjLCBidWZmZXJQb3MsIGVuZCkpKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIHBsdWdpbiBtZXRhZGF0YSBjYWNoZTog
Y29ycnVwdCBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBh
Y2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlmaWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7
CisKKyAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2FjaGVkUGx1Z2lucy5hZGQocGFja2FnZSkuc2Vj
b25kKSB7CisgICAgICAgICAgICBjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lcy5hZGQocGFja2Fn
ZS0+cGF0aCgpLCBwYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSk7CisgICAgICAgICAgICBjYWNoZWRQ
bHVnaW5zQnlQYXRoLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgbV9wbHVnaW5zLnN3YXAoY2FjaGVkUGx1Z2lucyk7CisgICAgbV9wbHVnaW5z
QnlQYXRoLnN3YXAoY2FjaGVkUGx1Z2luc0J5UGF0aCk7CisgICAgbV9wbHVnaW5QYXRoc1dpdGhU
aW1lcy5zd2FwKGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzKTsKK30KKworc3RhdGljIGJvb2wg
d3JpdGVVVEY4U3RyaW5nKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSBzdHJpbmcudXRmOCgpOworICAgIGlu
dCBsZW5ndGggPSB1dGY4U3RyaW5nLmxlbmd0aCgpICsgMTsKKyAgICByZXR1cm4gd3JpdGVUb0Zp
bGUoZmlsZSwgdXRmOFN0cmluZy5kYXRhKCksIGxlbmd0aCkgPT0gbGVuZ3RoOworfQorCitzdGF0
aWMgYm9vbCB3cml0ZVRpbWUoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIGNvbnN0IHRpbWVfdCYg
dGltZSkKK3sKKyAgICByZXR1cm4gd3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oJnRpbWUpLCBzaXplb2YodGltZV90KSkgPT0gc2l6ZW9mKHRpbWVfdCk7Cit9
CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkK
K3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtYWtlQWxsRGlyZWN0b3JpZXMocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkpOworICAg
IFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVG
aWxlbmFtZSk7CisgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisKKyAgICBpZiAo
bV9wbHVnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1GaWxl
SGFuZGxlIGZpbGU7CisgICAgZmlsZSA9IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRoLCBPcGVu
Rm9yV3JpdGUpOworCisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGZpbGUpKSB7CisgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIG9wZW4gcGx1Z2luIG1ldGFkYXRhIGNhY2hlIGZvciBzYXZpbmci
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIgbG9jYWxTY2hlbWFWZXJzaW9u
ID0gc2NoZW1hVmVyc2lvbjsKKyAgICBpZiAod3JpdGVUb0ZpbGUoZmlsZSwgJmxvY2FsU2NoZW1h
VmVyc2lvbiwgMSkgIT0gMSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB3cml0ZSBw
bHVnaW4gbWV0YWRhdGEgY2FjaGUgc2NoZW1hIik7CisgICAgICAgIGNsb3NlRmlsZShmaWxlKTsK
KyAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5l
bmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghKHdyaXRlVVRGOFN0cmlu
ZyhmaWxlLCAoKml0KS0+cGF0aCgpKQorICAgICAgICAgICAgICAmJiB3cml0ZVRpbWUoZmlsZSwg
KCppdCktPmxhc3RNb2RpZmllZCgpKQorICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmco
ZmlsZSwgKCppdCktPm5hbWUoKSkKKyAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZp
bGUsICgqaXQpLT5kZXNjcmlwdGlvbigpKQorICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJp
bmcoZmlsZSwgKCppdCktPmZ1bGxNSU1FRGVzY3JpcHRpb24oKSkpKSB7CisgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byB3cml0ZSBwbHVnaW4gbWV0YWRhdGEgdG8gY2FjaGUiKTsKKyAg
ICAgICAgICAgIGNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1
dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2xvc2VGaWxlKGZpbGUpOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1BlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGdQZXJzaXN0ZW50UGx1Z2lu
TWV0YWRhdGFDYWNoZUlzRW5hYmxlZDsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKQoreworICAgIGdQZXJz
aXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZCA9IGlzRW5hYmxlZDsKK30KKworU3Ry
aW5nIFBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKQoreworICAg
IHJldHVybiBXZWJDb3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKTsKK30K
Kwordm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKGNv
bnN0IFN0cmluZyYgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKQoreworICAgIFdlYkNvcmU6
OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpID0gcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVQYXRoOworfQorI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCmluZGV4IGY4
MGRkOGMuLjU4YjAyN2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCkBAIC03OCw2ICs3OCwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdpbkRp
cmVjdG9yaWVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5EaXJlY3RvcmllczsgfQogCiAgICAg
ICAgIFN0cmluZyBNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikg
Y29uc3Q7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgc2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKGJvb2wgaXNF
bmFibGVkKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBh
dGgoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRo
KGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKTsKKyNlbmRpZgogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFz
aFNldDxTdHJpbmc+JikgY29uc3Q7CkBAIC04Niw2ICs5MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBh
ZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4g
ZXhpc3RpbmcgcGx1Z2luKS4KICAgICAgICAgYm9vbCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNr
YWdlPik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBhY2thZ2UqKTsKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICB2b2lkIGxvYWRQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0
YUNhY2hlKCk7CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpbkRpcmVj
dG9yaWVzOwogICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOwpA
QCAtOTMsNiArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwogICAgICAgICBI
YXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwogICAgICAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQbHVnaW5z
OworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIGJv
b2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUxvYWRlZDsKKyNlbmRpZgogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAppbmRleCBiZjk3
MGYyLi41ZjM1OGIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5j
cHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCkBAIC0xMDgsNiArMTA4
LDkgQEAgUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQogICAgICwgbV9tb2R1bGUoMCkKICAgICAsIG1fbGFz
dE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKICAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAm
UGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQorI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgLCBtX2luZm9Jc0Zyb21DYWNoZSh0cnVlKQor
I2VuZGlmCiB7CiAgICAgbV9maWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpOwogICAg
IG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxl
TmFtZS5sZW5ndGgoKSAtIDEpOwpAQCAtMTYyLDYgKzE2NSwxOSBAQCBQYXNzUmVmUHRyPFBsdWdp
blBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdAogICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKIH0KIAorI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+
IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbikKK3sKKyAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNr
YWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOworICAgIHBhY2thZ2UtPm1fbmFtZSA9IG5hbWU7Cisg
ICAgcGFja2FnZS0+bV9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIHBhY2thZ2UtPmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKyAgICBwYWNrYWdlLT5zZXRN
SU1FRGVzY3JpcHRpb24obWltZURlc2NyaXB0aW9uKTsKKyAgICBwYWNrYWdlLT5tX2luZm9Jc0Zy
b21DYWNoZSA9IHRydWU7CisgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOworfQorI2VuZGlm
CisKICNpZiBkZWZpbmVkKFhQX1VOSVgpCiB2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1
aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewpAQCAtMzQzLDQgKzM1OSwyMCBAQCBpbnQg
UGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVy
c2lvbiYgY29tcGFyZVZlcnNpbwogICAgIHJldHVybiAwOwogfQogCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZW5zdXJlUGx1
Z2luTG9hZGVkKCkKK3sKKyAgICBpZiAoIW1faW5mb0lzRnJvbUNhY2hlKQorICAgICAgICByZXR1
cm4gbV9pc0xvYWRlZDsKKworICAgIG1fcXVpcmtzID0gUGx1Z2luUXVpcmtTZXQoKTsKKyAgICBt
X25hbWUgPSBTdHJpbmcoKTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgbV9m
dWxsTUlNRURlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgbV9tb2R1bGVWZXJzaW9uID0gMDsK
KworICAgIHJldHVybiBmZXRjaEluZm8oKTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBh
Y2thZ2UuaAppbmRleCA5MmE5YzUyLi5mNGQxZGFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luUGFja2FnZS5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgK
QEAgLTQ5LDYgKzQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAg
ICAgflBsdWdpblBhY2thZ2UoKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFz
dE1vZGlmaWVkKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlRnJv
bUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiBtaW1lRGVzY3JpcHRpb24pOworI2VuZGlmCiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC04MCw2ICs4MywxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5QSW50ZXJmYWNlKiBucEludGVyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbnBJbnRlcmZhY2U7IH0KICNlbmRpZiAvLyBPUyhTWU1CSUFOKQog
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgYm9v
bCBlbnN1cmVQbHVnaW5Mb2FkZWQoKTsKKyAgICAgICAgdm9pZCBzZXRNSU1FRGVzY3JpcHRpb24o
Y29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pOworICAgICAgICBTdHJpbmcgZnVsbE1JTUVE
ZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbE1JTUVEZXNjcmlwdGlvbjt9CisjZW5k
aWYKICAgICBwcml2YXRlOgogICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOwogCkBAIC0xMjEsNiArMTI5LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGltZXI8UGx1Z2luUGFja2FnZT4gbV9mcmVlTGli
cmFyeVRpbWVyOwogCiAgICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIFN0cmluZyBtX2Z1bGxN
SU1FRGVzY3JpcHRpb247CisgICAgICAgIGJvb2wgbV9pbmZvSXNGcm9tQ2FjaGU7CisjZW5kaWYK
ICAgICB9OwogCiAgICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblBhY2thZ2VRdC5jcHAKaW5kZXggYjQyMWIxZS4uMzU3N2ZlNyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAKKysrIGIvV2ViQ29yZS9wbHVn
aW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAKQEAgLTYwLDkgKzYwLDE5IEBAIGJvb2wgUGx1Z2lu
UGFja2FnZTo6ZmV0Y2hJbmZvKCkKICAgICBtX2Rlc2NyaXB0aW9uID0gYnVmOwogICAgIGRldGVy
bWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKIAotICAgIFN0cmluZyBzID0gZ20o
KTsKKyAgICBTdHJpbmcgbWltZURlc2NyaXB0aW9uID0gZ20oKTsKKyAgICBzZXRNSU1FRGVzY3Jp
cHRpb24obWltZURlc2NyaXB0aW9uKTsKKyAgICBtX2luZm9Jc0Zyb21DYWNoZSA9IGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6c2V0TUlNRURlc2Ny
aXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQoreworICAgIG1fZnVsbE1JTUVE
ZXNjcmlwdGlvbiA9IG1pbWVEZXNjcmlwdGlvbjsKKwogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwotICAgIHMuc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKKyAgICBtaW1lRGVzY3Jp
cHRpb24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4g
bWltZTsKICAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1ZSwgbWltZSk7CkBA
IC03Niw4ICs4Niw2IEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKICAgICAgICAg
ICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsyXSk7CiAgICAg
ICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIE5QRXJyb3Igc3Rh
dGljUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXRfTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5j
ZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQpAQCAtMTcyLDQgKzE4MCw1IEBA
IHVpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IE5QX1ZFUlNJT05fTUlOT1I7CiB9CisKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdl
YnBsdWdpbmRhdGFiYXNlLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNw
cAppbmRleCA3NThlMjU3Li44ZmRiZDM2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJw
bHVnaW5kYXRhYmFzZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2Uu
Y3BwCkBAIC0yODQsNyArMjg0LDggQEAgUUxpc3Q8UVdlYlBsdWdpbkluZm8+IFFXZWJQbHVnaW5E
YXRhYmFzZTo6cGx1Z2lucygpIGNvbnN0CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2lu
ID0gcGx1Z2luc1tpXTsKLSAgICAgICAgcXdlYnBsdWdpbnMuYXBwZW5kKFFXZWJQbHVnaW5JbmZv
KHBsdWdpbikpOworICAgICAgICBpZiAocGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKKyAg
ICAgICAgICAgIHF3ZWJwbHVnaW5zLmFwcGVuZChRV2ViUGx1Z2luSW5mbyhwbHVnaW4pKTsKICAg
ICB9CiAKICAgICByZXR1cm4gcXdlYnBsdWdpbnM7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZXR0aW5ncy5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKaW5kZXgg
ZWRkMDdkYS4uZDg4YjBkYSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3Mu
Y3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcApAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaCIKQEAgLTEwOTMsNiArMTA5NCwxNCBAQCB2b2lkIFFXZWJTZXR0aW5nczo6
ZW5hYmxlUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUVN0cmluZyYgcGF0aCkKICAgICBRV2ViU2V0
dGluZ3M6Omdsb2JhbFNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkxvY2Fs
U3RvcmFnZUVuYWJsZWQsIHRydWUpOwogICAgIFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3Mo
KS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVN0b3JhZ2VEYXRhYmFzZUVuYWJs
ZWQsIHRydWUpOwogICAgIFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKS0+c2V0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLCB0cnVl
KTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgUUZp
bGVJbmZvIGluZm8oc3RvcmFnZVBhdGgpOworICAgIGlmIChpbmZvLmlzRGlyKCkgJiYgaW5mby5p
c1dyaXRhYmxlKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgV2ViQ29yZTo6UGx1Z2lu
RGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChzdG9yYWdlUGF0aCk7Cisg
ICAgfQorI2VuZGlmCiB9CiAKIC8qIQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggM2Q1N2EzOS4uZjJiMDNhNyAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjUgQEAKKzIwMTAtMDgtMjYgIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBDYWNoZSBwbHVnaW4gaW5mbyB0byBhIHBlcnNpc3RlbnQgZGF0YWJhc2UKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxNzkKKworICAgICAg
ICBJbXBsZW1lbnQgYSBjYWNoZSBvZiBOUEFQSSBwbHVnaW4gbWV0YWRhdGEuIFdyaXRlIHRoZSBt
ZXRhZGF0YSB0byBhYQorICAgICAgICBmaWxlIHRoYXQgZ2V0cyByZXdyaXR0ZW4gaWYgYW55IHBs
dWdpbiBpcyBhZGRlZCAvIHJlbW92ZWQuICBDb21waWxhdGlvbgorICAgICAgICBvZiB0aGUgZmVh
dHVyZSBpcyBjb250cm9sbGVkIGJ5ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRB
X0NBQ0hFKQorCisgICAgICAgIEN1cnJlbnRseSBvbmx5IGVuYWJsZWQgZm9yIFF0IFVOSVggZmxh
dm9ycy4KKworICAgICAgICBbUXRdIE5QQVBJIFBsdWdpbiBtZXRhZGF0YSBzaG91bGQgYmUgY2Fj
aGVkLCBhbmQgbG9hZGluZyBhIHBsdWdpbiBzaG91bGQgbm90IHJlcXVpcmUgbG9hZGluZyBldmVy
eSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQzMTc5CisKKyAgICAgICAgKiBBcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFFXZWJQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6ICBNYXRjaCBwcmV2aW91cyBiZWhhdmlvcjog
ZW5zdXJlIGFsbCByZXR1cm5lZCBwbHVnaW5zIGFyZSBsb2FkZWQuCisgICAgICAgICogQXBpL3F3
ZWJzZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OmVuYWJsZVBlcnNpc3RlbnRT
dG9yYWdlKTogU2V0IHBsdWdpbiBjYWNoZSBwYXRoLgorCiAyMDEwLTA4LTI1ICBHYWJvciBMb2tp
ICA8bG9raUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xv
dWdoLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65553</attachid>
            <date>2010-08-26 06:44:06 -0700</date>
            <delta_ts>2010-08-27 01:46:30 -0700</delta_ts>
            <desc>Plugin metadata cache version 3</desc>
            <filename>qt-plugin-cache-3.patch</filename>
            <type>text/plain</type>
            <size>23884</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzMjc3NTNjLi5mZDBjMTBiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMjYgIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBOUEFQSSBQbHVnaW4gbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCwgYW5kIGxvYWRpbmcgYSBw
bHVnaW4gc2hvdWxkIG5vdCByZXF1aXJlIGxvYWRpbmcgZXZlcnkgcGx1Z2luCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE3OQorCisgICAgICAgIEFk
ZCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFIGZsYWcgdG8gZW5hYmxlIHBl
cnNpc3RlbnQKKyAgICAgICAgTlBBUEkgUGx1Z2luIENhY2hlLiBUaGUgZmxhZyBpcyBlbmFibGVk
IGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRkIEVOQUJMRV9ORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUKKwogMjAxMC0wOC0yNSAgTWljaGFlbCBTYWJvZmYg
IDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJl
bi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggZjY1M2FkYi4uOWRkNGViYyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgKQEAgLTg1Nyw2ICs4NTcsMTAgQEAKICNkZWZpbmUgRU5BQkxFX05FVFNDQVBFX1BM
VUdJTl9BUEkgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQorI2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRB
X0NBQ0hFIDAKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoV1RGX1VTRV9QTFVHSU5fSE9TVF9QUk9D
RVNTKQogI2RlZmluZSBXVEZfVVNFX1BMVUdJTl9IT1NUX1BST0NFU1MgMAogI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2ZGIz
YjQuLjkwMjczNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDgtMjYgIEtpbW1vIEtpbm51bmVuICA8
a2ltbW8udC5raW5udW5lbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBDYWNoZSBwbHVnaW4gaW5mbyB0byBhIHBlcnNpc3Rl
bnQgZGF0YWJhc2UKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDMxNzkKKworICAgICAgICBJbXBsZW1lbnQgYSBjYWNoZSBvZiBOUEFQSSBwbHVnaW4g
bWV0YWRhdGEuIFdyaXRlIHRoZSBtZXRhZGF0YSB0byBhYQorICAgICAgICBmaWxlIHRoYXQgZ2V0
cyByZXdyaXR0ZW4gaWYgYW55IHBsdWdpbiBpcyBhZGRlZCAvIHJlbW92ZWQuICBDb21waWxhdGlv
bgorICAgICAgICBvZiB0aGUgZmVhdHVyZSBpcyBjb250cm9sbGVkIGJ5ICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorCisgICAgICAgIEN1cnJlbnRseSBvbmx5IGVu
YWJsZWQgZm9yIFF0IFVOSVggZmxhdm9ycy4KKworICAgICAgICAqIFdlYkNvcmUucHJvOiAgRW5h
YmxlIE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSBmb3IgVU5JWCBidWlsZHMKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
bkZpbGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZSk6IEFkZGVkLgor
ICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKTogU3RhdGljIGFjY2Vzc29yIGZvciB0
aGUgcGF0aAorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OlBsdWdpbkRhdGFiYXNl
KTogQWRkIGluc3RhbmNlIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OnJlZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZv
ck1JTUVUeXBlKTogRW5zdXJlIHJldHVybmVkIHBsdWdpbiBpcyBsb2FkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24pOiBFbnN1cmUgcmV0
dXJuZWQgcGx1Z2luIGlzIGxvYWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNl
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxl
KTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRVVEY4U3Ry
aW5nKTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRUaW1l
KTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFi
YXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGVVVEY4U3RyaW5nKTogU3RhdGljIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlVGltZSk6IFN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
RW5hYmxlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQ
YXRoKTogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOgorICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpQbHVnaW5QYWNrYWdlKTogQWRkIGluc3RhbmNlIHZhcmlhYmxlLgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZSk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKTogQWRk
ZWQuCisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKTogQWRkZWQuCisgICAgICAgICog
cGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
UGFja2FnZTo6ZmV0Y2hJbmZvKTogU3BsaXQgbWltZSBwYXJzaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0TUlNRURlc2NyaXB0aW9uKTogQWRkZWQuIE1pbWUgcGFyc2lu
Zy4KKwogMjAxMC0wOC0yNCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjJkMWM2OC4uNGIx
YmViZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNv
cmUucHJvCkBAIC0yMzg5LDYgKzIzODksNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQST0xKSB7CiAgICAgICAgICAgICAgICAgSEVBREVSUyArPSBcCiAgICAg
ICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAogICAgICAgICAg
ICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICAgICAgICAgIERFRklORVMgKz0gRU5B
QkxFX05FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRT0xCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAppbmRleCA5NmMyMDkz
Li5iMzg0MDkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCkBAIC0xMjgsNiAr
MTI4LDMzIEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gQ1N0cmluZygpOwogfQogCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1BsYXRmb3JtRmlsZUhh
bmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorewor
ICAgIFFJT0RldmljZTo6T3Blbk1vZGUgcGxhdGZvcm1Nb2RlOworCisgICAgaWYgKG1vZGUgPT0g
T3BlbkZvclJlYWQpCisgICAgICAgIHBsYXRmb3JtTW9kZSA9IFFJT0RldmljZTo6UmVhZE9ubHk7
CisgICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpCisgICAgICAgIHBsYXRmb3JtTW9k
ZSA9IChRSU9EZXZpY2U6OldyaXRlT25seSB8IFFJT0RldmljZTo6VHJ1bmNhdGUpOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBRRmls
ZSogZmlsZSA9IG5ldyBRRmlsZShwYXRoKTsKKyAgICBpZiAoZmlsZS0+b3BlbihwbGF0Zm9ybU1v
ZGUpKQorICAgICAgICByZXR1cm4gZmlsZTsKKworICAgIHJldHVybiBpbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlOworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUt
PmV4aXN0cygpICYmIGhhbmRsZS0+aXNSZWFkYWJsZSgpKQorICAgICAgICByZXR1cm4gaGFuZGxl
LT5yZWFkKGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogdm9pZCBj
bG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgaWYgKGhhbmRsZSkg
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBiL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggMjliNmQyNC4uMmVjODhkMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0zMCwxMyArMzAsMzEgQEAKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjZW5kaWYKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4g
PiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVn
aW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4OworCitzdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7CisKK1N0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1l
dGFkYXRhQ2FjaGVQYXRoKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2Fj
aGVQYXRoLCAoKSk7CisgICAgcmV0dXJuIGNhY2hlUGF0aDsKK30KKyNlbmRpZgorCiBQbHVnaW5E
YXRhYmFzZTo6UGx1Z2luRGF0YWJhc2UoKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCisgICAgOiBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlTG9hZGVkKGZhbHNl
KQorI2VuZGlmCiB7CiB9CiAKQEAgLTc0LDYgKzkyLDEwIEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6
OmFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQogCiBib29s
IFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQorICAgIGlmICghbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUxvYWRl
ZCkKKyAgICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKICAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKIAogICAgIGlmICghbV9wbHVnaW5zLmlzRW1w
dHkoKSkgewpAQCAtMTI2LDYgKzE0OCwxMCBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNo
KCkKICAgICBpZiAoIXBsdWdpblNldENoYW5nZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgdXBkYXRlUGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKKyNlbmRpZgorCiAgICAgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNsZWFyKCk7CiAKICAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKQEAgLTE4
Miw4ICsyMDgsMTMgQEAgUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgICAgIGlmICghcGx1Z2luLT5pc0Vu
YWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChwbHVnaW4tPm1p
bWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpCisgICAgICAgIGlmIChwbHVnaW4tPm1p
bWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBs
dWdpbkxvYWRlZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCiAgICAgICAg
ICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgaWYgKHBsdWdpbkNob2ljZXMuaXNFbXB0eSgpKQpAQCAtMjIyLDYgKzI1MywxMCBAQCBTdHJp
bmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKSBjb25zdAogICAgICAgICAgICAgICAgICAgICBpZiAocHJlZmVycmVkUGx1Z2luICYm
IFBsdWdpblBhY2thZ2U6OmVxdWFsKCpwbHVnaW4sICpwcmVmZXJyZWRQbHVnaW4pKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pbWVUeXBlOwogCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwbHVnaW4t
PmVuc3VyZVBsdWdpbkxvYWRlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2lu
KTsKICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGVGb3JQbHVnaW4uYWRkKHBsdWdpbiwgbWlt
ZVR5cGUpOwogICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcHBpbmcgPSB0cnVlOwpAQCAtMzE1
LDYgKzM1MCw5IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkKICAgICBtX3BsdWdpblBh
dGhzV2l0aFRpbWVzLmNsZWFyKCk7CiAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7
CiAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlTG9hZGVk
ID0gZmFsc2U7CisjZW5kaWYKIH0KIAogI2lmICghT1MoV0lOQ0UpKSAmJiAoIU9TKFNZTUJJQU4p
KSAmJiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkpCkBAIC00
MjcsNCArNDY1LDE5NCBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGly
ZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKIAogI2VuZGlmIC8vICFPUyhT
WU1CSUFOKSAmJiAhT1MoV0lORE9XUykKIAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCisKK3N0YXRpYyB2b2lkIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHNp
emVfdCBidWZmZXJTaXplID0gMDsKKyAgICBzaXplX3QgYnVmZmVyQ2FwYWNpdHkgPSAxMDI0Owor
ICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOworCisgICAgZG8geworICAgICAgICBi
dWZmZXJTaXplICs9IHJlYWRGcm9tRmlsZShmaWxlLCBidWZmZXIuZGF0YSgpICsgYnVmZmVyU2l6
ZSwgYnVmZmVyQ2FwYWNpdHkgLSBidWZmZXJTaXplKTsKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUg
PT0gYnVmZmVyQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJDYXBhY2l0eSA8IG1h
eGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUpIHsKKyAgICAgICAgICAgICAg
ICBidWZmZXJDYXBhY2l0eSAqPSAyOworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUoYnVm
ZmVyQ2FwYWNpdHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZm
ZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAoMSk7CisKKyAgICBi
dWZmZXIuc2hyaW5rKGJ1ZmZlclNpemUpOworfQorCitzdGF0aWMgYm9vbCByZWFkVVRGOFN0cmlu
ZyhTdHJpbmcmIHJlc3VsdFN0cmluZywgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7
CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50
IGxlbiA9IHN0cmxlbihzdGFydCk7CisgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChzdGFydCwgbGVuKTsKKyAgICBzdGFydCArPSBsZW4gKyAxOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIHJlYWRUaW1lKHRpbWVfdCYgcmVzdWx0VGltZSwgY2hhciomIHN0
YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ICsgc2l6ZW9mKHRpbWVfdCkg
Pj0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHRUaW1lID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8dGltZV90Kj4oc3RhcnQpOworICAgIHN0YXJ0ICs9IHNpemVvZih0aW1lX3Qp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHNjaGVtYVZlcnNp
b24gPSAnMSc7CitzdGF0aWMgY29uc3QgY2hhciBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNo
ZUZpbGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNoZS5iaW4iOworCit2b2lkIFBsdWdpbkRh
dGFiYXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBh
dGgoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRs
ZSBmaWxlOworICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1l
dGFkYXRhQ2FjaGVGaWxlbmFtZSk7CisgICAgZmlsZSA9IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQ
YXRoLCBPcGVuRm9yUmVhZCk7CisKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIE1hcmsgY2FjaGUgYXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Yg
c3VjY2VzcyBvciBmYWlsdXJlLiBJZgorICAgIC8vIHRoZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hl
LCB3ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3JlLngKKyAgICBtX3BlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlTG9hZGVkID0gdHJ1ZTsKKworICAgIFZlY3RvcjxjaGFyPiBmaWxlQ29udGVudHM7
CisgICAgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlLCBmaWxlQ29udGVudHMpOwor
ICAgIGNsb3NlRmlsZShmaWxlKTsKKworICAgIGlmIChmaWxlQ29udGVudHMuc2l6ZSgpIDwgMiB8
fCBmaWxlQ29udGVudHMuZmlyc3QoKSAhPSBzY2hlbWFWZXJzaW9uIHx8IGZpbGVDb250ZW50cy5s
YXN0KCkgIT0gJ1wwJykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIHBsdWdp
biBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBzY2hlbWEiKTsKKyAgICAgICAgZGVsZXRlRmlsZShh
YnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFyKiBi
dWZmZXJQb3MgPSBmaWxlQ29udGVudHMuZGF0YSgpICsgMTsKKyAgICBjaGFyKiBlbmQgPSBmaWxl
Q29udGVudHMuZGF0YSgpICsgZmlsZUNvbnRlbnRzLnNpemUoKTsKKworICAgIFBsdWdpblNldCBj
YWNoZWRQbHVnaW5zOworICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IGNhY2hlZFBsdWdpblBh
dGhzV2l0aFRpbWVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4g
PiBjYWNoZWRQbHVnaW5zQnlQYXRoOworCisgICAgd2hpbGUgKGJ1ZmZlclBvcyA8IGVuZCkgewor
ICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZDsKKyAgICAg
ICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyBkZXNjOworICAgICAgICBTdHJpbmcgbWlt
ZURlc2M7CisgICAgICAgIGlmICghKHJlYWRVVEY4U3RyaW5nKHBhdGgsIGJ1ZmZlclBvcywgZW5k
KQorICAgICAgICAgICAgICAmJiByZWFkVGltZShsYXN0TW9kaWZpZWQsIGJ1ZmZlclBvcywgZW5k
KQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhuYW1lLCBidWZmZXJQb3MsIGVuZCkK
KyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcoZGVzYywgYnVmZmVyUG9zLCBlbmQpCisg
ICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKG1pbWVEZXNjLCBidWZmZXJQb3MsIGVuZCkp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIHBsdWdpbiBtZXRhZGF0
YSBjYWNoZTogY29ycnVwdCBkYXRhIik7CisgICAgICAgICAgICBkZWxldGVGaWxlKGFic29sdXRl
Q2FjaGVQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2Fn
ZUZyb21DYWNoZShwYXRoLCBsYXN0TW9kaWZpZWQsIG5hbWUsIGRlc2MsIG1pbWVEZXNjKTsKKwor
ICAgICAgICBpZiAocGFja2FnZSAmJiBjYWNoZWRQbHVnaW5zLmFkZChwYWNrYWdlKS5zZWNvbmQp
IHsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5w
YXRoKCksIHBhY2thZ2UtPmxhc3RNb2RpZmllZCgpKTsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdp
bnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX3BsdWdpbnMuc3dhcChjYWNoZWRQbHVnaW5zKTsKKyAgICBtX3BsdWdpbnNCeVBh
dGguc3dhcChjYWNoZWRQbHVnaW5zQnlQYXRoKTsKKyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVz
LnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMpOworfQorCitzdGF0aWMgYm9vbCB3cml0
ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQoreworICAgIENTdHJpbmcgdXRmOFN0cmluZyA9IHN0cmluZy51dGY4KCk7CisgICAgaW50IGxl
bmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3RoKCkgKyAxOworICAgIHJldHVybiB3cml0ZVRvRmlsZShm
aWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwgbGVuZ3RoKSA9PSBsZW5ndGg7Cit9CisKK3N0YXRpYyBi
b29sIHdyaXRlVGltZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1l
KQoreworICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPigmdGltZSksIHNpemVvZih0aW1lX3QpKSA9PSBzaXplb2YodGltZV90KTsKK30KKwor
dm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQorewor
ICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50
TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1h
a2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSk7CisgICAgU3Ry
aW5nIGFic29sdXRlQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVu
YW1lKTsKKyAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKworICAgIGlmIChtX3Bs
dWdpbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5k
bGUgZmlsZTsKKyAgICBmaWxlID0gb3BlbkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JX
cml0ZSk7CisKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gb3BlbiBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBz
Y2hlbWFWZXJzaW9uOworICAgIGlmICh3cml0ZVRvRmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJz
aW9uLCAxKSAhPSAxKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdp
biBtZXRhZGF0YSBjYWNoZSBzY2hlbWEiKTsKKyAgICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAg
ICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgp
OworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZp
bGUsICgqaXQpLT5wYXRoKCkpCisgICAgICAgICAgICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0
KS0+bGFzdE1vZGlmaWVkKCkpCisgICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxl
LCAoKml0KS0+bmFtZSgpKQorICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwg
KCppdCktPmRlc2NyaXB0aW9uKCkpCisgICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhm
aWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlvbigpKSkpIHsKKyAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSB0byBjYWNoZSIpOworICAgICAg
ICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNh
Y2hlUGF0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBj
bG9zZUZpbGUoZmlsZSk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGVFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRh
ZGF0YUNhY2hlSXNFbmFibGVkOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCit7CisgICAgZ1BlcnNpc3Rl
bnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkID0gaXNFbmFibGVkOworfQorCitTdHJpbmcg
UGx1Z2luRGF0YWJhc2U6OnBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpOworfQorCit2
b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3Qg
U3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVy
c2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZVBhdGg7Cit9CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKaW5kZXggZjgwZGQ4
Yy4uNThiMDI3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgK
KysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKQEAgLTc4LDYgKzc4LDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luRGlyZWN0
b3JpZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkRpcmVjdG9yaWVzOyB9CiAKICAgICAgICAg
U3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25z
dDsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBz
dGF0aWMgYm9vbCBpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpOworICAgICAgICBz
dGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJs
ZWQpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgp
OworICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29u
c3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOworI2VuZGlmCiAKICAgICBw
cml2YXRlOgogICAgICAgICB2b2lkIGdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0
PFN0cmluZz4mKSBjb25zdDsKQEAgLTg2LDYgKzkyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwbHVnaW4gd2FzIGFjdHVhbGx5IGFkZGVk
IG9yIG5vdCAoaXQgd29uJ3QgYmUgYWRkZWQgaWYgaXQncyBhIGR1cGxpY2F0ZSBvZiBhbiBleGlz
dGluZyBwbHVnaW4pLgogICAgICAgICBib29sIGFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+
KTsKICAgICAgICAgdm9pZCByZW1vdmUoUGx1Z2luUGFja2FnZSopOworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIHZvaWQgbG9hZFBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKCk7CisgICAgICAgIHZvaWQgdXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGUoKTsKKyNlbmRpZgogCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luRGlyZWN0b3Jp
ZXM7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CkBAIC05
Myw2ICsxMDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3BsdWdpbnNCeVBhdGg7CiAgICAgICAgIEhhc2hN
YXA8U3RyaW5nLCB0aW1lX3Q+IG1fcGx1Z2luUGF0aHNXaXRoVGltZXM7CiAgICAgICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBtX3ByZWZlcnJlZFBsdWdpbnM7Cisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgYm9vbCBt
X3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlTG9hZGVkOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCmluZGV4IGJmOTcwZjIu
LjVmMzU4YjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAor
KysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKQEAgLTEwOCw2ICsxMDgsOSBA
QCBQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
dGltZV90JiBsYXN0TW9kaWZpZWQpCiAgICAgLCBtX21vZHVsZSgwKQogICAgICwgbV9sYXN0TW9k
aWZpZWQobGFzdE1vZGlmaWVkKQogICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVn
aW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAsIG1faW5mb0lzRnJvbUNhY2hlKHRydWUpCisjZW5k
aWYKIHsKICAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1lKG1fcGF0aCk7CiAgICAgbV9w
YXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1l
Lmxlbmd0aCgpIC0gMSk7CkBAIC0xNjIsNiArMTY1LDE5IEBAIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0CiAgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOwogfQogCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1Bhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1
Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQoreworICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2Uo
cGF0aCwgbGFzdE1vZGlmaWVkKSk7CisgICAgcGFja2FnZS0+bV9uYW1lID0gbmFtZTsKKyAgICBw
YWNrYWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgcGFja2FnZS0+ZGV0ZXJt
aW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworICAgIHBhY2thZ2UtPnNldE1JTUVE
ZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOworICAgIHBhY2thZ2UtPm1faW5mb0lzRnJvbUNh
Y2hlID0gdHJ1ZTsKKyAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKwog
I2lmIGRlZmluZWQoWFBfVU5JWCkKIHZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CkBAIC0zNDMsNCArMzU5LDIwIEBAIGludCBQbHVn
aW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9u
JiBjb21wYXJlVmVyc2lvCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQorYm9vbCBQbHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5M
b2FkZWQoKQoreworICAgIGlmICghbV9pbmZvSXNGcm9tQ2FjaGUpCisgICAgICAgIHJldHVybiBt
X2lzTG9hZGVkOworCisgICAgbV9xdWlya3MgPSBQbHVnaW5RdWlya1NldCgpOworICAgIG1fbmFt
ZSA9IFN0cmluZygpOworICAgIG1fZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX2Z1bGxN
SU1FRGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX21vZHVsZVZlcnNpb24gPSAwOworCisg
ICAgcmV0dXJuIGZldGNoSW5mbygpOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5oCmluZGV4IDkyYTljNTIuLmY0ZDFkYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaApAQCAt
NDksNiArNDksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICB+
UGx1Z2luUGFja2FnZSgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
PiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9k
aWZpZWQpOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2VGcm9tQ2Fj
aGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1p
bWVEZXNjcmlwdGlvbik7CisjZW5kaWYKIAogICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KQEAgLTgwLDYgKzgzLDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTlBJbnRlcmZhY2UqIG5wSW50ZXJmYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9ucEludGVyZmFjZTsgfQogI2VuZGlmIC8vIE9TKFNZTUJJQU4pCiAKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBib29sIGVu
c3VyZVBsdWdpbkxvYWRlZCgpOworICAgICAgICB2b2lkIHNldE1JTUVEZXNjcmlwdGlvbihjb25z
dCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7CisgICAgICAgIFN0cmluZyBmdWxsTUlNRURlc2Ny
aXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsTUlNRURlc2NyaXB0aW9uO30KKyNlbmRpZgog
ICAgIHByaXZhdGU6CiAgICAgICAgIFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CiAKQEAgLTEyMSw2ICsxMjksMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlPiBtX2ZyZWVMaWJyYXJ5
VGltZXI7CiAKICAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgU3RyaW5nIG1fZnVsbE1JTUVE
ZXNjcmlwdGlvbjsKKyAgICAgICAgYm9vbCBtX2luZm9Jc0Zyb21DYWNoZTsKKyNlbmRpZgogICAg
IH07CiAKICAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggewpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luUGFja2FnZVF0LmNwcAppbmRleCBiNDIxYjFlLi4zNTc3ZmU3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMv
cXQvUGx1Z2luUGFja2FnZVF0LmNwcApAQCAtNjAsOSArNjAsMTkgQEAgYm9vbCBQbHVnaW5QYWNr
YWdlOjpmZXRjaEluZm8oKQogICAgIG1fZGVzY3JpcHRpb24gPSBidWY7CiAgICAgZGV0ZXJtaW5l
TW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwogCi0gICAgU3RyaW5nIHMgPSBnbSgpOwor
ICAgIFN0cmluZyBtaW1lRGVzY3JpcHRpb24gPSBnbSgpOworICAgIHNldE1JTUVEZXNjcmlwdGlv
bihtaW1lRGVzY3JpcHRpb24pOworICAgIG1faW5mb0lzRnJvbUNhY2hlID0gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpzZXRNSU1FRGVzY3JpcHRp
b24oY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pCit7CisgICAgbV9mdWxsTUlNRURlc2Ny
aXB0aW9uID0gbWltZURlc2NyaXB0aW9uOworCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0g
ICAgcy5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworICAgIG1pbWVEZXNjcmlwdGlv
bi5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1l
OwogICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKQEAgLTc2
LDggKzg2LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgICAgICAgICAg
ICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKICAgICAgICAg
fQogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgTlBFcnJvciBzdGF0aWNQ
bHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdF9OUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBO
UE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCkBAIC0xNzIsNCArMTgwLDUgQEAgdWlu
dDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gTlBf
VkVSU0lPTl9NSU5PUjsKIH0KKwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1
Z2luZGF0YWJhc2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCmlu
ZGV4IDc1OGUyNTcuLjhmZGJkMzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdp
bmRhdGFiYXNlLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAK
QEAgLTI4NCw3ICsyODQsOCBAQCBRTGlzdDxRV2ViUGx1Z2luSW5mbz4gUVdlYlBsdWdpbkRhdGFi
YXNlOjpwbHVnaW5zKCkgY29uc3QKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGx1Z2lucy5zaXplKCk7ICsraSkgewogICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBw
bHVnaW5zW2ldOwotICAgICAgICBxd2VicGx1Z2lucy5hcHBlbmQoUVdlYlBsdWdpbkluZm8ocGx1
Z2luKSk7CisgICAgICAgIGlmIChwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQorICAgICAg
ICAgICAgcXdlYnBsdWdpbnMuYXBwZW5kKFFXZWJQbHVnaW5JbmZvKHBsdWdpbikpOwogICAgIH0K
IAogICAgIHJldHVybiBxd2VicGx1Z2luczsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdl
YnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAppbmRleCBlZGQw
N2RhLi5kODhiMGRhIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAK
KysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
SWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5oIgpAQCAtMTA5Myw2ICsxMDk0LDE0IEBAIHZvaWQgUVdlYlNldHRpbmdzOjplbmFi
bGVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBRU3RyaW5nJiBwYXRoKQogICAgIFFXZWJTZXR0aW5n
czo6Z2xvYmFsU2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TG9jYWxTdG9y
YWdlRW5hYmxlZCwgdHJ1ZSk7CiAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCwg
dHJ1ZSk7CiAgICAgUVdlYlNldHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUo
UVdlYlNldHRpbmdzOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQsIHRydWUpOwor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBRRmlsZUlu
Zm8gaW5mbyhzdG9yYWdlUGF0aCk7CisgICAgaWYgKGluZm8uaXNEaXIoKSAmJiBpbmZvLmlzV3Jp
dGFibGUoKSkgeworICAgICAgICBXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGVFbmFibGVkKHRydWUpOworICAgICAgICBXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKHN0b3JhZ2VQYXRoKTsKKyAgICB9
CisjZW5kaWYKIH0KIAogLyohCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCAzZDU3YTM5Li5mMmIwM2E3IDEwMDY0NAotLS0gYS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAxMC0wOC0yNiAgS2ltbW8gS2lubnVuZW4gIDxraW1tby50Lmtpbm51bmVuQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
IENhY2hlIHBsdWdpbiBpbmZvIHRvIGEgcGVyc2lzdGVudCBkYXRhYmFzZQorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE3OQorCisgICAgICAgIElt
cGxlbWVudCBhIGNhY2hlIG9mIE5QQVBJIHBsdWdpbiBtZXRhZGF0YS4gV3JpdGUgdGhlIG1ldGFk
YXRhIHRvIGFhCisgICAgICAgIGZpbGUgdGhhdCBnZXRzIHJld3JpdHRlbiBpZiBhbnkgcGx1Z2lu
IGlzIGFkZGVkIC8gcmVtb3ZlZC4gIENvbXBpbGF0aW9uCisgICAgICAgIG9mIHRoZSBmZWF0dXJl
IGlzIGNvbnRyb2xsZWQgYnkgI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FD
SEUpCisKKyAgICAgICAgQ3VycmVudGx5IG9ubHkgZW5hYmxlZCBmb3IgUXQgVU5JWCBmbGF2b3Jz
LgorCisgICAgICAgIFtRdF0gTlBBUEkgUGx1Z2luIG1ldGFkYXRhIHNob3VsZCBiZSBjYWNoZWQs
IGFuZCBsb2FkaW5nIGEgcGx1Z2luIHNob3VsZCBub3QgcmVxdWlyZSBsb2FkaW5nIGV2ZXJ5IHBs
dWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMx
NzkKKworICAgICAgICAqIEFwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwOgorICAgICAgICAoUVdl
YlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKTogIE1hdGNoIHByZXZpb3VzIGJlaGF2aW9yOiBlbnN1
cmUgYWxsIHJldHVybmVkIHBsdWdpbnMgYXJlIGxvYWRlZC4KKyAgICAgICAgKiBBcGkvcXdlYnNl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFFXZWJTZXR0aW5nczo6ZW5hYmxlUGVyc2lzdGVudFN0b3Jh
Z2UpOiBTZXQgcGx1Z2luIGNhY2hlIHBhdGguCisKIDIwMTAtMDgtMjUgIEdhYm9yIExva2kgIDxs
b2tpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2gu
Cg==
</data>
<flag name="review"
          id="54353"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65690</attachid>
            <date>2010-08-27 01:46:30 -0700</date>
            <delta_ts>2010-08-27 21:32:42 -0700</delta_ts>
            <desc>Plugin metadata cache version 4, fixes a bug with removed plugin directories</desc>
            <filename>qt-plugin-cache-4.patch</filename>
            <type>text/plain</type>
            <size>24047</size>
            <attacher name="Kimmo Kinnunen">kimmo.t.kinnunen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkMmJmYTNlLi43MzY0NTgwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMjYgIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisK
KyAgICAgICAgW1F0XSBOUEFQSSBQbHVnaW4gbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCwgYW5k
IGxvYWRpbmcgYSBwbHVnaW4gc2hvdWxkIG5vdCByZXF1aXJlIGxvYWRpbmcgZXZlcnkgcGx1Z2lu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE3OQor
CisgICAgICAgIEFkZCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFIGZsYWcg
dG8gZW5hYmxlIHBlcnNpc3RlbnQKKyAgICAgICAgTlBBUEkgUGx1Z2luIENhY2hlLiBUaGUgZmxh
ZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRk
IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUKKwogMjAxMC0wOC0yNiAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93
cyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDJmMjc0ODUuLmE5MmI2NzMgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC04NTYsNiArODU2LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9O
RVRTQ0FQRV9QTFVHSU5fQVBJIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX05FVFND
QVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNkZWZpbmUgRU5BQkxFX05FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSAwCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKFdURl9VU0VfUExVR0lO
X0hPU1RfUFJPQ0VTUykKICNkZWZpbmUgV1RGX1VTRV9QTFVHSU5fSE9TVF9QUk9DRVNTIDAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA3NWQzZjBkLi5mM2RiZGRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEwLTA4LTI2ICBLaW1tbyBL
aW5udW5lbiAgPGtpbW1vLnQua2lubnVuZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIFtRdF0gQ2FjaGUgcGx1
Z2luIGluZm8gdG8gYSBwZXJzaXN0ZW50IGRhdGFiYXNlCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMTc5CisKKyAgICAgICAgSW1wbGVtZW50IGEg
Y2FjaGUgb2YgTlBBUEkgcGx1Z2luIG1ldGFkYXRhLiBXcml0ZSB0aGUgbWV0YWRhdGEgdG8gYWEK
KyAgICAgICAgZmlsZSB0aGF0IGdldHMgcmV3cml0dGVuIGlmIGFueSBwbHVnaW4gaXMgYWRkZWQg
LyByZW1vdmVkLiAgQ29tcGlsYXRpb24KKyAgICAgICAgb2YgdGhlIGZlYXR1cmUgaXMgY29udHJv
bGxlZCBieSAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKworICAg
ICAgICBDdXJyZW50bHkgb25seSBlbmFibGVkIGZvciBRdCBVTklYIGZsYXZvcnMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzogIEVuYWJsZSBORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUg
Zm9yIFVOSVggYnVpbGRzCisgICAgICAgICogcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om9wZW5GaWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpy
ZWFkRnJvbUZpbGUpOiBBZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCk6
IFN0YXRpYyBhY2Nlc3NvciBmb3IgdGhlIHBhdGgKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGFiYXNlOjpQbHVnaW5EYXRhYmFzZSk6IEFkZCBpbnN0YW5jZSB2YXJpYWJsZS4KKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZSk6IEVuc3VyZSByZXR1cm5lZCBwbHVnaW4g
aXMgbG9hZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9y
RXh0ZW5zaW9uKTogRW5zdXJlIHJldHVybmVkIHBsdWdpbiBpcyBsb2FkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEJ1
ZmZlcldpdGhDb250ZW50c09mRmlsZSk6IFN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpyZWFkVVRGOFN0cmluZyk6IFN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgIChXZWJDb3JlOjpyZWFkVGltZSk6IFN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6IFN0YXRpYyBoZWxwZXIgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRpbWUpOiBTdGF0aWMgaGVscGVyIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6aXNQ
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQpOkFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlUGF0aCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZSk6IEFkZCBpbnN0YW5j
ZSB2YXJpYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2th
Z2VGcm9tQ2FjaGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmVu
c3VyZVBsdWdpbkxvYWRlZCk6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZnVsbE1JTUVEZXNjcmlwdGlv
bik6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZldGNoSW5mbyk6IFNwbGl0IG1pbWUgcGFy
c2luZy4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnNldE1JTUVEZXNjcmlwdGlv
bik6IEFkZGVkLiBNaW1lIHBhcnNpbmcuCisKIDIwMTAtMDgtMjYgIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggODY1
Y2ZiYy4uMjAwNGM2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC0yMzg4LDYgKzIzODgsNyBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xKSB7CiAgICAgICAgICAgICAgICAgSEVBREVSUyAr
PSBcCiAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAog
ICAgICAgICAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICAgICAgICAgIERFRklO
RVMgKz0gRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRT0xCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvRmls
ZVN5c3RlbVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAppbmRl
eCA5NmMyMDkzLi5iMzg0MDkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVT
eXN0ZW1RdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCkBA
IC0xMjgsNiArMTI4LDMzIEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciog
cHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gQ1N0cmluZygp
OwogfQogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1BsYXRm
b3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBt
b2RlKQoreworICAgIFFJT0RldmljZTo6T3Blbk1vZGUgcGxhdGZvcm1Nb2RlOworCisgICAgaWYg
KG1vZGUgPT0gT3BlbkZvclJlYWQpCisgICAgICAgIHBsYXRmb3JtTW9kZSA9IFFJT0RldmljZTo6
UmVhZE9ubHk7CisgICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpCisgICAgICAgIHBs
YXRmb3JtTW9kZSA9IChRSU9EZXZpY2U6OldyaXRlT25seSB8IFFJT0RldmljZTo6VHJ1bmNhdGUp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisK
KyAgICBRRmlsZSogZmlsZSA9IG5ldyBRRmlsZShwYXRoKTsKKyAgICBpZiAoZmlsZS0+b3Blbihw
bGF0Zm9ybU1vZGUpKQorICAgICAgICByZXR1cm4gZmlsZTsKKworICAgIHJldHVybiBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKGhhbmRsZSAm
JiBoYW5kbGUtPmV4aXN0cygpICYmIGhhbmRsZS0+aXNSZWFkYWJsZSgpKQorICAgICAgICByZXR1
cm4gaGFuZGxlLT5yZWFkKGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYK
Kwogdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgaWYg
KGhhbmRsZSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKaW5kZXggMjliNmQyNC4uNDZj
N2RmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorKysg
Yi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0zMCwxMyArMzAsMzEgQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlLmgiCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjZW5kaWYKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2lu
UGFja2FnZT4gPiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwogCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVBlcnNp
c3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4OworCitzdGF0aWMgYm9vbCBnUGVy
c2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7CisKK1N0cmluZyYgcGVyc2lzdGVu
dFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgY2FjaGVQYXRoLCAoKSk7CisgICAgcmV0dXJuIGNhY2hlUGF0aDsKK30KKyNlbmRpZgor
CiBQbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJhc2UoKQorI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgOiBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNM
b2FkZWQoZmFsc2UpCisjZW5kaWYKIHsKIH0KIApAQCAtNzQsNiArOTIsMTAgQEAgdm9pZCBQbHVn
aW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnkpCiAKIGJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQogeworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgaWYgKCFtX3BlcnNpc3RlbnRNZXRhZGF0
YUNhY2hlSXNMb2FkZWQpCisgICAgICAgIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwor
I2VuZGlmCiAgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CiAKICAgICBpZiAoIW1f
cGx1Z2lucy5pc0VtcHR5KCkpIHsKQEAgLTEyNiw2ICsxNDgsMTAgQEAgYm9vbCBQbHVnaW5EYXRh
YmFzZTo6cmVmcmVzaCgpCiAgICAgaWYgKCFwbHVnaW5TZXRDaGFuZ2VkKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQor
ICAgIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKwogICAgIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwogCiAgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1F
IHR5cGVzCkBAIC0xODIsOCArMjA4LDEzIEBAIFBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNl
OjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgICAgICBpZiAo
IXBsdWdpbi0+aXNFbmFibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBp
ZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICBp
ZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgIGlmICghcGx1
Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNl
bmRpZgogICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKQEAgLTIyMiw2ICsy
NTMsMTAgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZl
cnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNrYWdlOjplcXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1
Z2luKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZTsKIAorI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgICAgICAgICAgICAg
IGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMu
YXBwZW5kKHBsdWdpbik7CiAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFk
ZChwbHVnaW4sIG1pbWVUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXBwaW5nID0g
dHJ1ZTsKQEAgLTMxNSw2ICszNTAsOSBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpjbGVhcigpCiAg
ICAgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5jbGVhcigpOwogICAgIG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jbGVhcigpOwogICAgIG1fcHJlZmVycmVkUGx1Z2lucy5jbGVhcigpOworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgbV9wZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZUlzTG9hZGVkID0gZmFsc2U7CisjZW5kaWYKIH0KIAogI2lmICghT1MoV0lOQ0UpKSAm
JiAoIU9TKFNZTUJJQU4pKSAmJiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkpCkBAIC00MjcsNCArNDY1LDIwMCBAQCB2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQ
bHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKIAog
I2VuZGlmIC8vICFPUyhTWU1CSUFOKSAmJiAhT1MoV0lORE9XUykKIAorI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisKK3N0YXRpYyB2b2lkIGZpbGxCdWZmZXJXaXRo
Q29udGVudHNPZkZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIFZlY3RvcjxjaGFyPiYgYnVm
ZmVyKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gMDsKKyAgICBzaXplX3QgYnVmZmVyQ2Fw
YWNpdHkgPSAxMDI0OworICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOworCisgICAg
ZG8geworICAgICAgICBidWZmZXJTaXplICs9IHJlYWRGcm9tRmlsZShmaWxlLCBidWZmZXIuZGF0
YSgpICsgYnVmZmVyU2l6ZSwgYnVmZmVyQ2FwYWNpdHkgLSBidWZmZXJTaXplKTsKKyAgICAgICAg
aWYgKGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGlmIChidWZm
ZXJDYXBhY2l0eSA8IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUpIHsK
KyAgICAgICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOworICAgICAgICAgICAgICAgIGJ1
ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGls
ZSAodHJ1ZSk7CisKKyAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlclNpemUpOworfQorCitzdGF0aWMg
Ym9vbCByZWFkVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdFN0cmluZywgY2hhciomIHN0YXJ0LCBj
b25zdCBjaGFyKiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50IGxlbiA9IHN0cmxlbihzdGFydCk7CisgICAgcmVzdWx0U3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOChzdGFydCwgbGVuKTsKKyAgICBzdGFydCArPSBsZW4gKyAxOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHJlYWRUaW1lKHRpbWVfdCYgcmVz
dWx0VGltZSwgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgaWYgKHN0YXJ0
ICsgc2l6ZW9mKHRpbWVfdCkgPj0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXN1bHRUaW1lID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dGltZV90Kj4oc3RhcnQpOworICAgIHN0YXJ0
ICs9IHNpemVvZih0aW1lX3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25z
dCBjaGFyIHNjaGVtYVZlcnNpb24gPSAnMSc7CitzdGF0aWMgY29uc3QgY2hhciBwZXJzaXN0ZW50
UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNoZS5iaW4i
OworCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQor
eworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOworICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwg
cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7CisgICAgZmlsZSA9IG9wZW5G
aWxlKGFic29sdXRlQ2FjaGVQYXRoLCBPcGVuRm9yUmVhZCk7CisKKyAgICBpZiAoIWlzSGFuZGxl
VmFsaWQoZmlsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1hcmsgY2FjaGUgYXMgbG9h
ZGVkIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBmYWlsdXJlLiBJZgorICAgIC8vIHRoZXJlJ3Mg
ZXJyb3IgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3JlLgorICAg
IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IHRydWU7CisKKyAgICBWZWN0b3I8
Y2hhcj4gZmlsZUNvbnRlbnRzOworICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmls
ZSwgZmlsZUNvbnRlbnRzKTsKKyAgICBjbG9zZUZpbGUoZmlsZSk7CisKKyAgICBpZiAoZmlsZUNv
bnRlbnRzLnNpemUoKSA8IDIgfHwgZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1hVmVyc2lv
biB8fCBmaWxlQ29udGVudHMubGFzdCgpICE9ICdcMCcpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1hIik7Cisg
ICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2hhciogYnVmZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIDE7Cisg
ICAgY2hhciogZW5kID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIGZpbGVDb250ZW50cy5zaXplKCk7
CisKKyAgICBQbHVnaW5TZXQgY2FjaGVkUGx1Z2luczsKKyAgICBIYXNoTWFwPFN0cmluZywgdGlt
ZV90PiBjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lczsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPFBsdWdpblBhY2thZ2U+ID4gY2FjaGVkUGx1Z2luc0J5UGF0aDsKKworICAgIHdoaWxlIChi
dWZmZXJQb3MgPCBlbmQpIHsKKyAgICAgICAgU3RyaW5nIHBhdGg7CisgICAgICAgIHRpbWVfdCBs
YXN0TW9kaWZpZWQ7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgZGVzYzsK
KyAgICAgICAgU3RyaW5nIG1pbWVEZXNjOworICAgICAgICBpZiAoIShyZWFkVVRGOFN0cmluZyhw
YXRoLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFRpbWUobGFzdE1vZGlm
aWVkLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobmFt
ZSwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKGRlc2Ms
IGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhtaW1lRGVz
YywgYnVmZmVyUG9zLCBlbmQpKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
cmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgZGF0YSIpOworICAgICAgICAgICAg
ZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTa2lwIG1ldGFkYXRhIHRoYXQgcG9pbnRzIHRvIHBsdWdpbnMg
ZnJvbSBkaXJlY3RvcmllcyB0aGF0CisgICAgICAgIC8vIGFyZSBub3QgcGFydCBvZiBwbHVnaW4g
ZGlyZWN0b3J5IGxpc3QgYW55bW9yZS4KKyAgICAgICAgU3RyaW5nIHBsdWdpbkRpcmVjdG9yeU5h
bWUgPSBkaXJlY3RvcnlOYW1lKHBhdGgpOworICAgICAgICBpZiAobV9wbHVnaW5EaXJlY3Rvcmll
cy5maW5kKHBsdWdpbkRpcmVjdG9yeU5hbWUpID09IFdURjo6bm90Rm91bmQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBs
dWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlmaWVkLCBu
YW1lLCBkZXNjLCBtaW1lRGVzYyk7CisKKyAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2FjaGVkUGx1
Z2lucy5hZGQocGFja2FnZSkuc2Vjb25kKSB7CisgICAgICAgICAgICBjYWNoZWRQbHVnaW5QYXRo
c1dpdGhUaW1lcy5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSk7
CisgICAgICAgICAgICBjYWNoZWRQbHVnaW5zQnlQYXRoLmFkZChwYWNrYWdlLT5wYXRoKCksIHBh
Y2thZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wbHVnaW5zLnN3YXAoY2FjaGVkUGx1
Z2lucyk7CisgICAgbV9wbHVnaW5zQnlQYXRoLnN3YXAoY2FjaGVkUGx1Z2luc0J5UGF0aCk7Cisg
ICAgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5zd2FwKGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVz
KTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVVVEY4U3RyaW5nKFBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSBz
dHJpbmcudXRmOCgpOworICAgIGludCBsZW5ndGggPSB1dGY4U3RyaW5nLmxlbmd0aCgpICsgMTsK
KyAgICByZXR1cm4gd3JpdGVUb0ZpbGUoZmlsZSwgdXRmOFN0cmluZy5kYXRhKCksIGxlbmd0aCkg
PT0gbGVuZ3RoOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVRpbWUoUGxhdGZvcm1GaWxlSGFuZGxl
IGZpbGUsIGNvbnN0IHRpbWVfdCYgdGltZSkKK3sKKyAgICByZXR1cm4gd3JpdGVUb0ZpbGUoZmls
ZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJnRpbWUpLCBzaXplb2YodGltZV90KSkg
PT0gc2l6ZW9mKHRpbWVfdCk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlKCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVFbmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQWxsRGlyZWN0b3JpZXMocGVyc2lzdGVudE1ldGFk
YXRhQ2FjaGVQYXRoKCkpOworICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVu
dFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7CisgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNh
Y2hlUGF0aCk7CisKKyAgICBpZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGU7CisgICAgZmlsZSA9IG9wZW5GaWxlKGFi
c29sdXRlQ2FjaGVQYXRoLCBPcGVuRm9yV3JpdGUpOworCisgICAgaWYgKCFpc0hhbmRsZVZhbGlk
KGZpbGUpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gcGx1Z2luIG1ldGFk
YXRhIGNhY2hlIGZvciBzYXZpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNo
YXIgbG9jYWxTY2hlbWFWZXJzaW9uID0gc2NoZW1hVmVyc2lvbjsKKyAgICBpZiAod3JpdGVUb0Zp
bGUoZmlsZSwgJmxvY2FsU2NoZW1hVmVyc2lvbiwgMSkgIT0gMSkgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byB3cml0ZSBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgc2NoZW1hIik7CisgICAg
ICAgIGNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0
aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IGlmICghKHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+cGF0aCgpKQorICAgICAgICAgICAg
ICAmJiB3cml0ZVRpbWUoZmlsZSwgKCppdCktPmxhc3RNb2RpZmllZCgpKQorICAgICAgICAgICAg
ICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPm5hbWUoKSkKKyAgICAgICAgICAgICAg
JiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5kZXNjcmlwdGlvbigpKQorICAgICAgICAg
ICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmZ1bGxNSU1FRGVzY3JpcHRpb24o
KSkpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB3cml0ZSBwbHVnaW4gbWV0
YWRhdGEgdG8gY2FjaGUiKTsKKyAgICAgICAgICAgIGNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAg
ICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY2xvc2VGaWxlKGZpbGUpOworfQorCitib29sIFBsdWdp
bkRhdGFiYXNlOjppc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpCit7CisgICAgcmV0
dXJuIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZDsKK30KKwordm9pZCBQ
bHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKGJvb2wgaXNF
bmFibGVkKQoreworICAgIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZCA9
IGlzRW5hYmxlZDsKK30KKworU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZVBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0
YWRhdGFDYWNoZVBhdGgoKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGVQYXRoKGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQ
YXRoKQoreworICAgIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgp
ID0gcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoOworfQorI2VuZGlmCiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCmluZGV4IGY4MGRkOGMuLmIxNDYwNWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5oCkBAIC03OCw2ICs3OCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHBsdWdpbkRpcmVjdG9yaWVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5E
aXJlY3RvcmllczsgfQogCiAgICAgICAgIFN0cmluZyBNSU1FVHlwZUZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKKyAgICAgICAgc3RhdGljIGJvb2wgaXNQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZUVuYWJsZWQoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0UGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBwZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0UGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVQYXRoKTsKKyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBnZXRQbHVnaW5Q
YXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JikgY29uc3Q7CkBAIC04Niw2ICs5Miwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUg
cGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0
J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KICAgICAgICAgYm9vbCBhZGQo
UGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBh
Y2thZ2UqKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAg
ICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2b2lkIHVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8
U3RyaW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOwogICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9y
ZWdpc3RlcmVkTUlNRVR5cGVzOwpAQCAtOTMsNiArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVn
aW5zQnlQYXRoOwogICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhz
V2l0aFRpbWVzOwogICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+
ID4gbV9wcmVmZXJyZWRQbHVnaW5zOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURB
VEFfQ0FDSEUpCisgICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVk
OworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blBhY2thZ2UuY3BwCmluZGV4IGJmOTcwZjIuLjVmMzU4YjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5jcHAKQEAgLTEwOCw2ICsxMDgsOSBAQCBQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdl
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCiAgICAgLCBt
X21vZHVsZSgwKQogICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQogICAgICwgbV9m
cmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmly
ZWQpCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAsIG1f
aW5mb0lzRnJvbUNhY2hlKHRydWUpCisjZW5kaWYKIHsKICAgICBtX2ZpbGVOYW1lID0gcGF0aEdl
dEZpbGVOYW1lKG1fcGF0aCk7CiAgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdCht
X3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7CkBAIC0xNjIsNiArMTY1
LDE5IEBAIFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFj
a2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0CiAgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFz
ZSgpOwogfQogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1Bh
c3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21D
YWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYg
bWltZURlc2NyaXB0aW9uKQoreworICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0g
YWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2UocGF0aCwgbGFzdE1vZGlmaWVkKSk7CisgICAgcGFj
a2FnZS0+bV9uYW1lID0gbmFtZTsKKyAgICBwYWNrYWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3Jp
cHRpb247CisgICAgcGFja2FnZS0+ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlv
bigpOworICAgIHBhY2thZ2UtPnNldE1JTUVEZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOwor
ICAgIHBhY2thZ2UtPm1faW5mb0lzRnJvbUNhY2hlID0gdHJ1ZTsKKyAgICByZXR1cm4gcGFja2Fn
ZS5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoWFBfVU5JWCkKIHZvaWQgUGx1
Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CkBA
IC0zNDMsNCArMzU5LDIwIEBAIGludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24o
Y29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiBjb21wYXJlVmVyc2lvCiAgICAgcmV0dXJuIDA7
CiB9CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorYm9vbCBQ
bHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5Mb2FkZWQoKQoreworICAgIGlmICghbV9pbmZvSXNG
cm9tQ2FjaGUpCisgICAgICAgIHJldHVybiBtX2lzTG9hZGVkOworCisgICAgbV9xdWlya3MgPSBQ
bHVnaW5RdWlya1NldCgpOworICAgIG1fbmFtZSA9IFN0cmluZygpOworICAgIG1fZGVzY3JpcHRp
b24gPSBTdHJpbmcoKTsKKyAgICBtX2Z1bGxNSU1FRGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAg
ICBtX21vZHVsZVZlcnNpb24gPSAwOworCisgICAgcmV0dXJuIGZldGNoSW5mbygpOworfQorI2Vu
ZGlmCisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCmluZGV4IDkyYTljNTIuLmY0ZDFkYWMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKKysrIGIvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblBhY2thZ2UuaApAQCAtNDksNiArNDksOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgcHVibGljOgogICAgICAgICB+UGx1Z2luUGFja2FnZSgpOwogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBh
Y2thZ2U+IGNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0
aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7CisjZW5kaWYKIAogICAg
ICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAg
ICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRp
b247IH0KQEAgLTgwLDYgKzgzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTlBJ
bnRlcmZhY2UqIG5wSW50ZXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9ucEludGVyZmFjZTsgfQog
I2VuZGlmIC8vIE9TKFNZTUJJQU4pCiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFE
QVRBX0NBQ0hFKQorICAgICAgICBib29sIGVuc3VyZVBsdWdpbkxvYWRlZCgpOworICAgICAgICB2
b2lkIHNldE1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7Cisg
ICAgICAgIFN0cmluZyBmdWxsTUlNRURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdWxs
TUlNRURlc2NyaXB0aW9uO30KKyNlbmRpZgogICAgIHByaXZhdGU6CiAgICAgICAgIFBsdWdpblBh
Y2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CiAK
QEAgLTEyMSw2ICsxMjksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUaW1lcjxQ
bHVnaW5QYWNrYWdlPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CiAKICAgICAgICAgUGx1Z2luUXVpcmtT
ZXQgbV9xdWlya3M7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkK
KyAgICAgICAgU3RyaW5nIG1fZnVsbE1JTUVEZXNjcmlwdGlvbjsKKyAgICAgICAgYm9vbCBtX2lu
Zm9Jc0Zyb21DYWNoZTsKKyNlbmRpZgogICAgIH07CiAKICAgICBzdHJ1Y3QgUGx1Z2luUGFja2Fn
ZUhhc2ggewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5j
cHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAppbmRleCBkOTJmZmZl
Li5lNzA1OGM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0
LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcApAQCAtNjAs
OSArNjAsMTkgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIG1fZGVzY3Jp
cHRpb24gPSBidWY7CiAgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigp
OwogCi0gICAgU3RyaW5nIHMgPSBnbSgpOworICAgIFN0cmluZyBtaW1lRGVzY3JpcHRpb24gPSBn
bSgpOworICAgIHNldE1JTUVEZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOworICAgIG1faW5m
b0lzRnJvbUNhY2hlID0gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVn
aW5QYWNrYWdlOjpzZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRp
b24pCit7CisgICAgbV9mdWxsTUlNRURlc2NyaXB0aW9uID0gbWltZURlc2NyaXB0aW9uOworCiAg
ICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgcy5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwg
dHlwZXMpOworICAgIG1pbWVEZXNjcmlwdGlvbi5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlw
ZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOwogICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hh
cignOicpLCB0cnVlLCBtaW1lKTsKQEAgLTc2LDggKzg2LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8oKQogICAgICAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZCht
aW1lWzBdLCBtaW1lWzJdKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwog
fQogCiBzdGF0aWMgTlBFcnJvciBzdGF0aWNQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdF9O
UE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpCkBAIC0xODcsNCArMTk1LDUgQEAgdWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9u
KCkgY29uc3QKIHsKICAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKIH0KKwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwIGIvV2ViS2l0L3F0L0Fw
aS9xd2VicGx1Z2luZGF0YWJhc2UuY3BwCmluZGV4IDc1OGUyNTcuLjhmZGJkMzYgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmRhdGFiYXNlLmNwcAorKysgYi9XZWJLaXQvcXQv
QXBpL3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHAKQEAgLTI4NCw3ICsyODQsOCBAQCBRTGlzdDxRV2Vi
UGx1Z2luSW5mbz4gUVdlYlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QKIAogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgewogICAgICAg
ICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVnaW5zW2ldOwotICAgICAgICBxd2VicGx1Z2lu
cy5hcHBlbmQoUVdlYlBsdWdpbkluZm8ocGx1Z2luKSk7CisgICAgICAgIGlmIChwbHVnaW4tPmVu
c3VyZVBsdWdpbkxvYWRlZCgpKQorICAgICAgICAgICAgcXdlYnBsdWdpbnMuYXBwZW5kKFFXZWJQ
bHVnaW5JbmZvKHBsdWdpbikpOwogICAgIH0KIAogICAgIHJldHVybiBxd2VicGx1Z2luczsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1dlYktpdC9xdC9BcGkv
cXdlYnNldHRpbmdzLmNwcAppbmRleCBlZGQwN2RhLi5kODhiMGRhIDEwMDY0NAotLS0gYS9XZWJL
aXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGlu
Z3MuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgpAQCAtMTA5Myw2ICsxMDk0LDE0
IEBAIHZvaWQgUVdlYlNldHRpbmdzOjplbmFibGVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBRU3Ry
aW5nJiBwYXRoKQogICAgIFFXZWJTZXR0aW5nczo6Z2xvYmFsU2V0dGluZ3MoKS0+c2V0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6TG9jYWxTdG9yYWdlRW5hYmxlZCwgdHJ1ZSk7CiAgICAgUVdlYlNl
dHRpbmdzOjpnbG9iYWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpPZmZs
aW5lU3RvcmFnZURhdGFiYXNlRW5hYmxlZCwgdHJ1ZSk7CiAgICAgUVdlYlNldHRpbmdzOjpnbG9i
YWxTZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpPZmZsaW5lV2ViQXBwbGlj
YXRpb25DYWNoZUVuYWJsZWQsIHRydWUpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKKyAgICBRRmlsZUluZm8gaW5mbyhzdG9yYWdlUGF0aCk7CisgICAgaWYg
KGluZm8uaXNEaXIoKSAmJiBpbmZvLmlzV3JpdGFibGUoKSkgeworICAgICAgICBXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKHRydWUpOwor
ICAgICAgICBXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVQYXRoKHN0b3JhZ2VQYXRoKTsKKyAgICB9CisjZW5kaWYKIH0KIAogLyohCmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBiYjM0YTM5
Li44NTU0Yzg3IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0wOC0yNiAgS2ltbW8gS2lubnVuZW4g
IDxraW1tby50Lmtpbm51bmVuQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICBbUXRdIENhY2hlIHBsdWdpbiBpbmZv
IHRvIGEgcGVyc2lzdGVudCBkYXRhYmFzZQorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MzE3OQorCisgICAgICAgIEltcGxlbWVudCBhIGNhY2hlIG9m
IE5QQVBJIHBsdWdpbiBtZXRhZGF0YS4gV3JpdGUgdGhlIG1ldGFkYXRhIHRvIGFhCisgICAgICAg
IGZpbGUgdGhhdCBnZXRzIHJld3JpdHRlbiBpZiBhbnkgcGx1Z2luIGlzIGFkZGVkIC8gcmVtb3Zl
ZC4gIENvbXBpbGF0aW9uCisgICAgICAgIG9mIHRoZSBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYnkg
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisKKyAgICAgICAgQ3Vy
cmVudGx5IG9ubHkgZW5hYmxlZCBmb3IgUXQgVU5JWCBmbGF2b3JzLgorCisgICAgICAgICogQXBp
L3F3ZWJwbHVnaW5kYXRhYmFzZS5jcHA6CisgICAgICAgIChRV2ViUGx1Z2luRGF0YWJhc2U6OnBs
dWdpbnMpOiAgTWF0Y2ggcHJldmlvdXMgYmVoYXZpb3I6IGVuc3VyZSBhbGwgcmV0dXJuZWQgcGx1
Z2lucyBhcmUgbG9hZGVkLgorICAgICAgICAqIEFwaS9xd2Vic2V0dGluZ3MuY3BwOgorICAgICAg
ICAoUVdlYlNldHRpbmdzOjplbmFibGVQZXJzaXN0ZW50U3RvcmFnZSk6IFNldCBwbHVnaW4gY2Fj
aGUgcGF0aC4KKwogMjAxMC0wOC0yNiAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdpcmlzaEBmb3J3
YXJkYmlhcy5pbj4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>