<?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>31482</bug_id>
          
          <creation_ts>2009-11-13 11:46:47 -0800</creation_ts>
          <short_desc>Refactor DatabaseTracker.h and eliminate all #ifdefs</short_desc>
          <delta_ts>2010-05-17 00:51:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>37312</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ericu</cc>
    
    <cc>eric</cc>
    
    <cc>michaeln</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163394</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-11-13 11:46:47 -0800</bug_when>
    <thetext>DatabaseTracker.h has a lot of methods that are not used by anybody in WebCore/storage. In order to avoid having lots of no-op methods in the Chromium&apos;s DatabaseTracker implementation, we #ifdef&apos;d them out when !PLATFORM(CHROMIUM). This looks ugly and should be refactored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165393</commentid>
    <comment_count>1</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-11-20 12:25:50 -0800</bug_when>
    <thetext>After talking to dglazkov about this, I think our plan is to:

1. Change DatabaseTracker.h to only define the functions needed by other WebCore/storage classes.
2. Add another interface (DatabaseManager? DatabaseController?) that would define quota management functions, and other &quot;utility&quot; functions related to databases, such as delete database, list all databases for an origin, etc.
3. Make WebCore/storage/chromium/DatabaseTrackerChromium.cpp implement the new DatabaseTracker.h interface (and ignore DatabaseManager.h).
4. Move a lot of stuff from WebCore/storage/DatabaseTracker.cpp into WebCore/storage/DatabaseManager.cpp.
5. Change classes in WebKit/{win|mac} to use DatabaseManager instead of DatabaseTracker.


Brady, Anders, Sam: any objections/suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165396</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-11-20 12:38:03 -0800</bug_when>
    <thetext>There are other changes in the works to bring WebDatabases to Workers. Let&apos;s coordinate on that front too, ericu is poking at that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206214</commentid>
    <comment_count>3</comment_count>
      <attachid>52090</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-30 15:38:18 -0700</bug_when>
    <thetext>Created attachment 52090
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206220</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-30 15:42:23 -0700</bug_when>
    <thetext>Attachment 52090 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/ChangeLog:6:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206860</commentid>
    <comment_count>5</comment_count>
      <attachid>52090</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-03-31 18:06:41 -0700</bug_when>
    <thetext>Comment on attachment 52090
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

&gt; Index: WebCore/storage/DatabaseTracker.cpp
&gt; ===================================================================
&gt; --- WebCore/storage/DatabaseTracker.cpp	(revision 56810)
&gt; +++ WebCore/storage/DatabaseTracker.cpp	(working copy)
&gt; @@ -49,20 +49,13 @@
&gt;  
&gt;  using namespace std;
&gt;  
&gt; -namespace WebCore {
&gt; -
&gt; -OriginQuotaManager&amp; DatabaseTracker::originQuotaManagerNoLock()
&gt; +static WebCore::OriginQuotaManager&amp; originQuotaManager()
&gt;  {
&gt; -    ASSERT(m_quotaManager);
&gt; -    return *m_quotaManager;
&gt; +    DEFINE_STATIC_LOCAL(WebCore::OriginQuotaManager, quotaManager, ());

Does this have to be a static local?  Could we just create it in the DatabaseTracker constructor now?
If it&apos;s always accessed from inside non-static DatabaseTracker methods, that should be simple.
And then we don&apos;t even need the accessor function; it can just be a data member.

&gt; +    return quotaManager;
&gt;  }
&gt;  
&gt; -OriginQuotaManager&amp; DatabaseTracker::originQuotaManager()
&gt; -{
&gt; -    MutexLocker lockDatabase(m_databaseGuard);
&gt; -    populateOrigins();
&gt; -    return originQuotaManagerNoLock();
&gt; -}
&gt; +namespace WebCore {
&gt;  
&gt;  DatabaseTracker&amp; DatabaseTracker::tracker()
&gt;  {
&gt; @@ -74,6 +67,9 @@ DatabaseTracker::DatabaseTracker()
&gt;      : m_client(0)
&gt;  {
&gt;      SQLiteFileSystem::registerSQLiteVFS();
&gt; +
&gt; +    MutexLocker lockDatabase(m_databaseGuard);
&gt; +    populateOrigins();
&gt;  }
&gt;  
&gt;  void DatabaseTracker::setDatabaseDirectoryPath(const String&amp; path)
&gt; @@ -132,16 +128,14 @@ bool DatabaseTracker::canEstablishDataba
&gt;      unsigned long long requirement;
&gt;      unsigned long long tempUsage;
&gt;      {
&gt; -        Locker&lt;OriginQuotaManager&gt; locker(originQuotaManager());
&gt;          MutexLocker lockDatabase(m_databaseGuard);
&gt; +        Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt;  
&gt;          if (!canCreateDatabase(origin, name))
&gt;              return false;
&gt;  
&gt;          recordCreatingDatabase(origin, name);
&gt;  
&gt; -        populateOrigins();
&gt; -
&gt;          // Since we&apos;re imminently opening a database within this context&apos;s origin, make sure this origin is being tracked by the QuotaTracker
&gt;          // by fetching its current usage now.
&gt;          unsigned long long usage = usageForOriginNoLock(origin);
&gt; @@ -192,7 +186,6 @@ bool DatabaseTracker::hasEntryForOriginN
&gt;  bool DatabaseTracker::hasEntryForOrigin(SecurityOrigin* origin)
&gt;  {
&gt;      MutexLocker lockDatabase(m_databaseGuard);
&gt; -    populateOrigins();
&gt;      return hasEntryForOriginNoLock(origin);
&gt;  }
&gt;  
&gt; @@ -218,11 +211,17 @@ unsigned long long DatabaseTracker::getM
&gt;      ASSERT(currentThread() == database-&gt;scriptExecutionContext()-&gt;databaseThread()-&gt;getThreadID());
&gt;      // The maximum size for a database is the full quota for its origin, minus the current usage within the origin,
&gt;      // plus the current usage of the given database
&gt; -    Locker&lt;OriginQuotaManager&gt; locker(originQuotaManager());
&gt; +    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt;      SecurityOrigin* origin = database-&gt;securityOrigin();
&gt;      return quotaForOrigin(origin) - originQuotaManager().diskUsage(origin) + SQLiteFileSystem::getDatabaseFileSize(database-&gt;fileName());
&gt;  }
&gt;  
&gt; +void DatabaseTracker::databaseChanged(Database* database)
&gt; +{
&gt; +    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt; +    originQuotaManager().markDatabase(database);
&gt; +}
&gt; +
&gt;  String DatabaseTracker::originPath(SecurityOrigin* origin) const
&gt;  {
&gt;      return SQLiteFileSystem::appendDatabaseFileNameToPath(m_databaseDirectoryPath.threadsafeCopy(), origin-&gt;databaseIdentifier());
&gt; @@ -231,7 +230,7 @@ String DatabaseTracker::originPath(Secur
&gt;  String DatabaseTracker::fullPathForDatabaseNoLock(SecurityOrigin* origin, const String&amp; name, bool createIfNotExists)
&gt;  {
&gt;      ASSERT(!m_databaseGuard.tryLock());
&gt; -    ASSERT(!originQuotaManagerNoLock().tryLock());
&gt; +    ASSERT(!originQuotaManager().tryLock());
&gt;  
&gt;      for (HashSet&lt;ProposedDatabase*&gt;::iterator iter = m_proposedDatabases.begin(); iter != m_proposedDatabases.end(); ++iter)
&gt;          if ((*iter)-&gt;first == origin &amp;&amp; (*iter)-&gt;second.name() == name)
&gt; @@ -275,17 +274,16 @@ String DatabaseTracker::fullPathForDatab
&gt;      // If this origin&apos;s quota is being tracked (open handle to a database in this origin), add this new database
&gt;      // to the quota manager now
&gt;      String fullFilePath = SQLiteFileSystem::appendDatabaseFileNameToPath(originPath, fileName);
&gt; -    if (originQuotaManagerNoLock().tracksOrigin(origin))
&gt; -        originQuotaManagerNoLock().addDatabase(origin, name, fullFilePath);
&gt; +    if (originQuotaManager().tracksOrigin(origin))
&gt; +        originQuotaManager().addDatabase(origin, name, fullFilePath);
&gt;  
&gt;      return fullFilePath;
&gt;  }
&gt;  
&gt;  String DatabaseTracker::fullPathForDatabase(SecurityOrigin* origin, const String&amp; name, bool createIfNotExists)
&gt;  {
&gt; -    Locker&lt;OriginQuotaManager&gt; locker(originQuotaManager());
&gt;      MutexLocker lockDatabase(m_databaseGuard);
&gt; -    populateOrigins();
&gt; +    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt;  
&gt;      return fullPathForDatabaseNoLock(origin, name, createIfNotExists).threadsafeCopy();
&gt;  }
&gt; @@ -297,8 +295,6 @@ void DatabaseTracker::populateOrigins()
&gt;          return;
&gt;  
&gt;      m_quotaMap.set(new QuotaMap);
&gt; -    if (!m_quotaManager)
&gt; -        m_quotaManager.set(new OriginQuotaManager);
&gt;  
&gt;      openTrackerDatabase(false);
&gt;      if (!m_database.isOpen())
&gt; @@ -324,7 +320,6 @@ void DatabaseTracker::populateOrigins()
&gt;  void DatabaseTracker::origins(Vector&lt;RefPtr&lt;SecurityOrigin&gt; &gt;&amp; result)
&gt;  {
&gt;      MutexLocker lockDatabase(m_databaseGuard);
&gt; -    populateOrigins();
&gt;      ASSERT(m_quotaMap);
&gt;      copyKeysToVector(*m_quotaMap, result);
&gt;  }
&gt; @@ -357,10 +352,12 @@ bool DatabaseTracker::databaseNamesForOr
&gt;  
&gt;  bool DatabaseTracker::databaseNamesForOrigin(SecurityOrigin* origin, Vector&lt;String&gt;&amp; resultVector)
&gt;  {
&gt; -    MutexLocker lockDatabase(m_databaseGuard);
&gt;      Vector&lt;String&gt; temp;
&gt; -    if (!databaseNamesForOriginNoLock(origin, temp))
&gt; -        return false;
&gt; +    {
&gt; +        MutexLocker lockDatabase(m_databaseGuard);
&gt; +        if (!databaseNamesForOriginNoLock(origin, temp))
&gt; +          return false;
&gt; +    }
&gt;  
&gt;      for (Vector&lt;String&gt;::iterator iter = temp.begin(); iter != temp.end(); ++iter)
&gt;          resultVector.append(iter-&gt;threadsafeCopy());
&gt; @@ -504,8 +501,6 @@ void DatabaseTracker::removeOpenDatabase
&gt;      if (!database)
&gt;          return;
&gt;  
&gt; -    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt; -    MutexLocker lockDatabase(m_databaseGuard);
&gt;      MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
&gt;  
&gt;      if (!m_openDatabaseMap) {
&gt; @@ -541,7 +536,9 @@ void DatabaseTracker::removeOpenDatabase
&gt;  
&gt;      m_openDatabaseMap-&gt;remove(database-&gt;securityOrigin());
&gt;      delete nameMap;
&gt; -    originQuotaManagerNoLock().removeOrigin(database-&gt;securityOrigin());

You&apos;re now locking originQuotaManager after m_openDatabaseMapGuard [it used to have to go before], and the header file no longer specifies the ordering of those two locks.  If this code is right, please specify the ordering in the header file.  The reordering is probably doable, though, as m_openDatabaseMapGuard isn&apos;t used in many places.

&gt; +    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt; +    originQuotaManager().removeOrigin(database-&gt;securityOrigin());
&gt;  }
&gt;  
&gt;  void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String&amp; name, HashSet&lt;RefPtr&lt;Database&gt; &gt;* databases)
&gt; @@ -564,30 +561,32 @@ void DatabaseTracker::getOpenDatabases(S
&gt;  
&gt;  unsigned long long DatabaseTracker::usageForOriginNoLock(SecurityOrigin* origin)
&gt;  {
&gt; -    ASSERT(!originQuotaManagerNoLock().tryLock());
&gt; +    ASSERT(!originQuotaManager().tryLock());
&gt;  
&gt;      // Use the OriginQuotaManager mechanism to calculate the usage
&gt; -    if (originQuotaManagerNoLock().tracksOrigin(origin))
&gt; -        return originQuotaManagerNoLock().diskUsage(origin);
&gt; +    if (originQuotaManager().tracksOrigin(origin))
&gt; +        return originQuotaManager().diskUsage(origin);
&gt;  
&gt;      // If the OriginQuotaManager doesn&apos;t track this origin already, prime it to do so
&gt; -    originQuotaManagerNoLock().trackOrigin(origin);
&gt; +    originQuotaManager().trackOrigin(origin);
&gt;  
&gt;      Vector&lt;String&gt; names;
&gt; -    databaseNamesForOriginNoLock(origin, names);
&gt; +    {
&gt; +        MutexLocker lockDatabase(m_databaseGuard);

You&apos;re taking a lock in a function whose name ends in NoLock.  Don&apos;t do that.  The whole point of the NoLock suffix is that you can trust it to mean something.  See if you can maintain an invariant of all locks being taken in public functions, and all functions called by DatabaseTracker methods being private NoLock functions.

&gt; +        databaseNamesForOriginNoLock(origin, names);
&gt; +    }
&gt;  
&gt;      for (unsigned i = 0; i &lt; names.size(); ++i)
&gt; -        originQuotaManagerNoLock().addDatabase(origin, names[i], fullPathForDatabaseNoLock(origin, names[i], false));
&gt; +        originQuotaManager().addDatabase(origin, names[i], fullPathForDatabaseNoLock(origin, names[i], false));
&gt;  
&gt; -    if (!originQuotaManagerNoLock().tracksOrigin(origin))
&gt; +    if (!originQuotaManager().tracksOrigin(origin))
&gt;          return 0;
&gt; -    return originQuotaManagerNoLock().diskUsage(origin);
&gt; +    return originQuotaManager().diskUsage(origin);
&gt;  }
&gt;  
&gt;  unsigned long long DatabaseTracker::usageForOrigin(SecurityOrigin* origin)
&gt;  {
&gt; -    Locker&lt;OriginQuotaManager&gt; locker(originQuotaManager());
&gt; -
&gt; +    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt;      return usageForOriginNoLock(origin);
&gt;  }
&gt;  
&gt; @@ -601,7 +600,6 @@ unsigned long long DatabaseTracker::quot
&gt;  unsigned long long DatabaseTracker::quotaForOrigin(SecurityOrigin* origin)
&gt;  {
&gt;      MutexLocker lockDatabase(m_databaseGuard);
&gt; -    populateOrigins();
&gt;      return quotaForOriginNoLock(origin);
&gt;  }
&gt;  
&gt; @@ -609,7 +607,6 @@ void DatabaseTracker::setQuota(SecurityO
&gt;  {
&gt;      MutexLocker lockDatabase(m_databaseGuard);
&gt;  
&gt; -    populateOrigins();
&gt;      if (quotaForOriginNoLock(origin) == quota)
&gt;          return;
&gt;  
&gt; @@ -721,13 +718,10 @@ void DatabaseTracker::deleteOrigin(Secur
&gt;      }
&gt;  
&gt;      {
&gt; -        // To satisfy the lock hierarchy, we have to lock the originQuotaManager before m_databaseGuard if there&apos;s any chance we&apos;ll to lock both.
&gt; -        Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt;          MutexLocker lockDatabase(m_databaseGuard);
&gt; -        SQLiteStatement statement(m_database, &quot;DELETE FROM Databases WHERE origin=?&quot;);
&gt; -
&gt;          doneDeletingOrigin(origin);
&gt;  
&gt; +        SQLiteStatement statement(m_database, &quot;DELETE FROM Databases WHERE origin=?&quot;);
&gt;          if (statement.prepare() != SQLResultOk) {
&gt;              LOG_ERROR(&quot;Unable to prepare deletion of databases from origin %s from tracker&quot;, origin-&gt;databaseIdentifier().ascii().data());
&gt;              return;
&gt; @@ -758,7 +752,10 @@ void DatabaseTracker::deleteOrigin(Secur
&gt;          RefPtr&lt;SecurityOrigin&gt; originPossiblyLastReference = origin;
&gt;          m_quotaMap-&gt;remove(origin);
&gt;  
&gt; -        originQuotaManagerNoLock().removeOrigin(origin);
&gt; +        {
&gt; +            Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt; +            originQuotaManager().removeOrigin(origin);
&gt; +        }
&gt;  
&gt;          // If we removed the last origin, do some additional deletion.
&gt;          if (m_quotaMap-&gt;isEmpty()) {
&gt; @@ -912,8 +909,6 @@ void DatabaseTracker::deleteDatabase(Sec
&gt;          return;
&gt;      }
&gt;  
&gt; -    // To satisfy the lock hierarchy, we have to lock the originQuotaManager before m_databaseGuard if there&apos;s any chance we&apos;ll to lock both.
&gt; -    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt;      MutexLocker lockDatabase(m_databaseGuard);
&gt;  
&gt;      SQLiteStatement statement(m_database, &quot;DELETE FROM Databases WHERE origin=? AND name=?&quot;);
&gt; @@ -932,7 +927,10 @@ void DatabaseTracker::deleteDatabase(Sec
&gt;          return;
&gt;      }
&gt;  
&gt; -    originQuotaManagerNoLock().removeDatabase(origin, name);
&gt; +    {
&gt; +        Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt; +        originQuotaManager().removeDatabase(origin, name);
&gt; +    }
&gt;  
&gt;      if (m_client) {
&gt;          m_client-&gt;dispatchDidModifyOrigin(origin);
&gt; @@ -951,8 +949,8 @@ bool DatabaseTracker::deleteDatabaseFile
&gt;  
&gt;  #ifndef NDEBUG
&gt;      {
&gt; -    MutexLocker lockDatabase(m_databaseGuard);
&gt; -    ASSERT(deletingDatabase(origin, name) || deletingOrigin(origin));
&gt; +        MutexLocker lockDatabase(m_databaseGuard);
&gt; +        ASSERT(deletingDatabase(origin, name) || deletingOrigin(origin));

Accidental tabs.

&gt;      }
&gt;  #endif
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206865</commentid>
    <comment_count>6</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-03-31 18:10:03 -0700</bug_when>
    <thetext>&gt; &gt;      // If the OriginQuotaManager doesn&apos;t track this origin already, prime it to do so
&gt; &gt; -    originQuotaManagerNoLock().trackOrigin(origin);
&gt; &gt; +    originQuotaManager().trackOrigin(origin);
&gt; &gt;  
&gt; &gt;      Vector&lt;String&gt; names;
&gt; &gt; -    databaseNamesForOriginNoLock(origin, names);
&gt; &gt; +    {
&gt; &gt; +        MutexLocker lockDatabase(m_databaseGuard);
&gt; 
&gt; You&apos;re taking a lock in a function whose name ends in NoLock.  Don&apos;t do that. 
&gt; The whole point of the NoLock suffix is that you can trust it to mean
&gt; something.  See if you can maintain an invariant of all locks being taken in
&gt; public functions, and all functions called by DatabaseTracker methods being
&gt; private NoLock functions.

Also, this particular lock violates your new lock hierarchy, since it&apos;s m_databaseGuard after originQuotaManager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206910</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-03-31 19:49:05 -0700</bug_when>
    <thetext>Is this meant to be solely about refactoring?  No behavior changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208081</commentid>
    <comment_count>8</comment_count>
      <attachid>52454</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-02 14:57:49 -0700</bug_when>
    <thetext>Created attachment 52454
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

Brady: this entire bug will be about refactoring. The idea is to keep in DatabaseTracker.h only the fields/methods used by all platforms and get rid of the #if !PLATFORM(CHROMIUM) conditionals.

(In reply to comment #5)
&gt; (From update of attachment 52090 [details])
&gt; &gt; Index: WebCore/storage/DatabaseTracker.cpp
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/storage/DatabaseTracker.cpp	(revision 56810)
&gt; &gt; +++ WebCore/storage/DatabaseTracker.cpp	(working copy)
&gt; &gt; @@ -49,20 +49,13 @@
&gt; &gt;  
&gt; &gt;  using namespace std;
&gt; &gt;  
&gt; &gt; -namespace WebCore {
&gt; &gt; -
&gt; &gt; -OriginQuotaManager&amp; DatabaseTracker::originQuotaManagerNoLock()
&gt; &gt; +static WebCore::OriginQuotaManager&amp; originQuotaManager()
&gt; &gt;  {
&gt; &gt; -    ASSERT(m_quotaManager);
&gt; &gt; -    return *m_quotaManager;
&gt; &gt; +    DEFINE_STATIC_LOCAL(WebCore::OriginQuotaManager, quotaManager, ());
&gt; 
&gt; Does this have to be a static local?  Could we just create it in the
&gt; DatabaseTracker constructor now?
&gt; If it&apos;s always accessed from inside non-static DatabaseTracker methods, that
&gt; should be simple.
&gt; And then we don&apos;t even need the accessor function; it can just be a data
&gt; member.

Chromium&apos;s DatabaseTracker implementation doesn&apos;t need this field, so I would like to remove it from DatabaseTracker.h. I removed the accessor method though: quotaManager is initialized in DatabaseTracker&apos;s constructor and destroyed in its destructor.

&gt; &gt; @@ -504,8 +501,6 @@ void DatabaseTracker::removeOpenDatabase
&gt; &gt;      if (!database)
&gt; &gt;          return;
&gt; &gt;  
&gt; &gt; -    Locker&lt;OriginQuotaManager&gt; quotaManagerLocker(originQuotaManager());
&gt; &gt; -    MutexLocker lockDatabase(m_databaseGuard);
&gt; &gt;      MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
&gt; &gt;  
&gt; &gt;      if (!m_openDatabaseMap) {
&gt; &gt; @@ -541,7 +536,9 @@ void DatabaseTracker::removeOpenDatabase
&gt; &gt;  
&gt; &gt;      m_openDatabaseMap-&gt;remove(database-&gt;securityOrigin());
&gt; &gt;      delete nameMap;
&gt; &gt; -    originQuotaManagerNoLock().removeOrigin(database-&gt;securityOrigin());
&gt; 
&gt; You&apos;re now locking originQuotaManager after m_openDatabaseMapGuard [it used to
&gt; have to go before], and the header file no longer specifies the ordering of
&gt; those two locks.  If this code is right, please specify the ordering in the
&gt; header file.  The reordering is probably doable, though, as
&gt; m_openDatabaseMapGuard isn&apos;t used in many places.

Updated the expectations in DatabaseTracker.h. The new expectation for m_openDatabaseMapGuard is that the code locked on it should not acquire any other lock.

&gt; &gt;  unsigned long long DatabaseTracker::usageForOriginNoLock(SecurityOrigin* origin)
&gt; &gt;  {
&gt; &gt; -    ASSERT(!originQuotaManagerNoLock().tryLock());
&gt; &gt; +    ASSERT(!originQuotaManager().tryLock());
&gt; &gt;  
&gt; &gt;      // Use the OriginQuotaManager mechanism to calculate the usage
&gt; &gt; -    if (originQuotaManagerNoLock().tracksOrigin(origin))
&gt; &gt; -        return originQuotaManagerNoLock().diskUsage(origin);
&gt; &gt; +    if (originQuotaManager().tracksOrigin(origin))
&gt; &gt; +        return originQuotaManager().diskUsage(origin);
&gt; &gt;  
&gt; &gt;      // If the OriginQuotaManager doesn&apos;t track this origin already, prime it to do so
&gt; &gt; -    originQuotaManagerNoLock().trackOrigin(origin);
&gt; &gt; +    originQuotaManager().trackOrigin(origin);
&gt; &gt;  
&gt; &gt;      Vector&lt;String&gt; names;
&gt; &gt; -    databaseNamesForOriginNoLock(origin, names);
&gt; &gt; +    {
&gt; &gt; +        MutexLocker lockDatabase(m_databaseGuard);
&gt; 
&gt; You&apos;re taking a lock in a function whose name ends in NoLock.  Don&apos;t do that. 
&gt; The whole point of the NoLock suffix is that you can trust it to mean
&gt; something.  See if you can maintain an invariant of all locks being taken in
&gt; public functions, and all functions called by DatabaseTracker methods being
&gt; private NoLock functions.

Oops, fixed. Acquiring the lock on m_databaseGuard in usageForOrigin().

&gt; &gt;      {
&gt; &gt; -    MutexLocker lockDatabase(m_databaseGuard);
&gt; &gt; -    ASSERT(deletingDatabase(origin, name) || deletingOrigin(origin));
&gt; &gt; +        MutexLocker lockDatabase(m_databaseGuard);
&gt; &gt; +        ASSERT(deletingDatabase(origin, name) || deletingOrigin(origin));
&gt; 
&gt; Accidental tabs.

No, intentional. The code in this {} block should be indented by 4 spaces like all other {} blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209960</commentid>
    <comment_count>9</comment_count>
      <attachid>52454</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-07 18:18:32 -0700</bug_when>
    <thetext>Comment on attachment 52454
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

&gt; Index: WebCore/storage/DatabaseTracker.h
&gt; ===================================================================
&gt; --- WebCore/storage/DatabaseTracker.h	(revision 57024)
&gt; +++ WebCore/storage/DatabaseTracker.h	(working copy)
&gt; @@ -52,7 +52,6 @@ struct SecurityOriginHash;
&gt;  
&gt;  #if !PLATFORM(CHROMIUM)
&gt;  class DatabaseTrackerClient;
&gt; -class OriginQuotaManager;
&gt;  
&gt;  struct SecurityOriginTraits;
&gt;  #endif // !PLATFORM(CHROMIUM)
&gt; @@ -62,8 +61,8 @@ public:
&gt;      static DatabaseTracker&amp; tracker();
&gt;      // This singleton will potentially be used from multiple worker threads and the page&apos;s context thread simultaneously.  To keep this safe, it&apos;s
&gt;      // currently using 4 locks.  In order to avoid deadlock when taking multiple locks, you must take them in the correct order:
&gt; -    // originQuotaManager() before m_databaseGuard or m_openDatabaseMapGuard
&gt; -    // m_databaseGuard before m_openDatabaseMapGuard
&gt; +    // m_databaseGuard before quotaManager if both locks are needed.
&gt; +    // no other lock is taken in the code locked on m_openDatabaseMapGuard.

I believe that m_openDatabaseMapGuard is actually independent of all other locks.  That is, we need not require that there&apos;s any ordering on it yet, just like with notificationMutex().

&gt;      // notificationMutex() is currently independent of the other locks.
&gt;  

LGTM other than that; now you need a real reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209963</commentid>
    <comment_count>10</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-07 18:31:55 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 52454 [details])
&gt; &gt; Index: WebCore/storage/DatabaseTracker.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/storage/DatabaseTracker.h	(revision 57024)
&gt; &gt; +++ WebCore/storage/DatabaseTracker.h	(working copy)
&gt; &gt; @@ -52,7 +52,6 @@ struct SecurityOriginHash;
&gt; &gt;  
&gt; &gt;  #if !PLATFORM(CHROMIUM)
&gt; &gt;  class DatabaseTrackerClient;
&gt; &gt; -class OriginQuotaManager;
&gt; &gt;  
&gt; &gt;  struct SecurityOriginTraits;
&gt; &gt;  #endif // !PLATFORM(CHROMIUM)
&gt; &gt; @@ -62,8 +61,8 @@ public:
&gt; &gt;      static DatabaseTracker&amp; tracker();
&gt; &gt;      // This singleton will potentially be used from multiple worker threads and the page&apos;s context thread simultaneously.  To keep this safe, it&apos;s
&gt; &gt;      // currently using 4 locks.  In order to avoid deadlock when taking multiple locks, you must take them in the correct order:
&gt; &gt; -    // originQuotaManager() before m_databaseGuard or m_openDatabaseMapGuard
&gt; &gt; -    // m_databaseGuard before m_openDatabaseMapGuard
&gt; &gt; +    // m_databaseGuard before quotaManager if both locks are needed.
&gt; &gt; +    // no other lock is taken in the code locked on m_openDatabaseMapGuard.
&gt; 
&gt; I believe that m_openDatabaseMapGuard is actually independent of all other
&gt; locks.  That is, we need not require that there&apos;s any ordering on it yet, just
&gt; like with notificationMutex().

Changed the comment for m_openDatabaseMapGuard to look similar to the comment for notificationMutex() (not uploading a new patch for this small change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210221</commentid>
    <comment_count>11</comment_count>
      <attachid>52454</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-08 08:42:36 -0700</bug_when>
    <thetext>Comment on attachment 52454
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

r=me, except: 

&gt;  
&gt;  DatabaseTracker&amp; DatabaseTracker::tracker()
&gt;  {
&gt; @@ -74,6 +63,16 @@ DatabaseTracker::DatabaseTracker()
&gt;      : m_client(0)
&gt;  {
&gt;      SQLiteFileSystem::registerSQLiteVFS();
&gt; +
&gt; +    quotaManager = new OriginQuotaManager();

I think you should just do DEFINE_STATIC_LOCAL accessor, like you had in the previous patch. Tracker&apos;s lifetime is the same (it&apos;s also STATIC_LOCAL), so there&apos;s no need for trying to control its lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210295</commentid>
    <comment_count>12</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-08 11:41:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 52454 [details])
&gt; r=me, except: 
&gt; 
&gt; &gt;  
&gt; &gt;  DatabaseTracker&amp; DatabaseTracker::tracker()
&gt; &gt;  {
&gt; &gt; @@ -74,6 +63,16 @@ DatabaseTracker::DatabaseTracker()
&gt; &gt;      : m_client(0)
&gt; &gt;  {
&gt; &gt;      SQLiteFileSystem::registerSQLiteVFS();
&gt; &gt; +
&gt; &gt; +    quotaManager = new OriginQuotaManager();
&gt; 
&gt; I think you should just do DEFINE_STATIC_LOCAL accessor, like you had in the
&gt; previous patch. Tracker&apos;s lifetime is the same (it&apos;s also STATIC_LOCAL), so
&gt; there&apos;s no need for trying to control its lifetime.

done.

patch #1 landed as r57286.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210321</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 12:24:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57286 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210346</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-08 13:18:40 -0700</bug_when>
    <thetext>This did break Tiger.  storage/open-database-creation-callback.html	 times out every time on the Tiger bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210383</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-08 14:24:56 -0700</bug_when>
    <thetext>Any word on Tiger?  The bot has been broken for almost 3 hours. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210385</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-08 14:26:04 -0700</bug_when>
    <thetext>Looks like the test may be flaky.

It&apos;s timed out on Snow Leopard as well:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r57290%20(7932)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210462</commentid>
    <comment_count>17</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-08 16:12:43 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Looks like the test may be flaky.
&gt; 
&gt; It&apos;s timed out on Snow Leopard as well:
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r57290%20(7932)/results.html

http://trac.webkit.org/changeset/57301 seems to have fix the problem on Snow Leopard. Waiting for Tiger to get to that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210591</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 00:08:14 -0700</bug_when>
    <thetext>Tiger failed again:
http://build.webkit.org/results/Tiger%20Intel%20Release/r57313%20(10590)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210592</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 00:08:36 -0700</bug_when>
    <thetext>Snow Leopard failed again:
http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r57313%20(5777)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210598</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 00:14:37 -0700</bug_when>
    <thetext>12 hours later.  The bots are still red, the commit-queue is still blocked (the test times out on the commit-queue as well).  It seems time to roll this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210611</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 00:37:25 -0700</bug_when>
    <thetext>I&apos;m not quite sure what needs to be rolled out here.  I&apos;m going to try with r57286 and r57301 and see if that makes the builders finally green again. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210618</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 00:45:49 -0700</bug_when>
    <thetext>Looks like I should be able to get away with just rolling out r57286.  Doing so in bug 37312.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210628</commentid>
    <comment_count>23</comment_count>
      <attachid>52454</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 01:27:17 -0700</bug_when>
    <thetext>Comment on attachment 52454
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

Marking r- since this was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212697</commentid>
    <comment_count>24</comment_count>
      <attachid>53399</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-14 19:09:53 -0700</bug_when>
    <thetext>Created attachment 53399
 patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

Same patch, with a minor change that fixes a deadlock that caused some tests to fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212867</commentid>
    <comment_count>25</comment_count>
      <attachid>53399</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-15 08:23:41 -0700</bug_when>
    <thetext>Comment on attachment 53399
 patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

it looks like you still have the quotaManager lifetime bound to that of DatabaseTracker instead of just making it local static.

Also, which was the change that you made to fix the test borkage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212999</commentid>
    <comment_count>26</comment_count>
      <attachid>53465</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-15 13:22:13 -0700</bug_when>
    <thetext>Created attachment 53465
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

(In reply to comment #25)
&gt; (From update of attachment 53399 [details])
&gt; it looks like you still have the quotaManager lifetime bound to that of
&gt; DatabaseTracker instead of just making it local static.

Oops, sorry, it should be fixed now.

&gt; Also, which was the change that you made to fix the test borkage?

I changed DatabaseTracker::getMaxSizeForDatabase(). this method used to lock on originQuotaManager(), and then it called quotaForOrigin(), which locked on m_databaseGuard. All other methods lock on m_databaseGuard first and then on originQuotaManager() (DatabaseTracker.h documents the lock ordering). So I changed getMaxSizeForDatabase() acquire locks in the correct order, and replaced quotaForOrigin() with quotaForOriginNoLock().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213003</commentid>
    <comment_count>27</comment_count>
      <attachid>53465</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-15 13:31:00 -0700</bug_when>
    <thetext>Comment on attachment 53465
patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214221</commentid>
    <comment_count>28</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-19 13:39:25 -0700</bug_when>
    <thetext>Patch #1 landed as r57668.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226662</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 00:51:29 -0700</bug_when>
    <thetext>Patch was landed, closing.  Please open new bugs for additional patches.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52090</attachid>
            <date>2010-03-30 15:38:18 -0700</date>
            <delta_ts>2010-04-02 14:57:49 -0700</delta_ts>
            <desc>patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>16268</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjgxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDMtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvciBEYXRhYmFzZVRyYWNrZXIsIHBhcnQgMTogUmVtb3ZlIHRoZSBkZXBlbmRlbmN5
IG9uCisJT3JpZ2luUXVvdGFNYW5hZ2VyIGZyb20gRGF0YWJhc2VUcmFja2VyLmguCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDgyCisKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChvcmlnaW5RdW90YU1h
bmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRh
YmFzZU5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRo
Rm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0
ZU9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luTm9M
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0
YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudCk6CisKIDIwMTAtMDMtMzAgIENocmlzIEV2YW5zICA8Y2V2YW5zQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDU2ODEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDIwICs0OSwxMyBAQAogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU9yaWdpblF1b3Rh
TWFuYWdlciYgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKQorc3Rh
dGljIFdlYkNvcmU6Ok9yaWdpblF1b3RhTWFuYWdlciYgb3JpZ2luUXVvdGFNYW5hZ2VyKCkKIHsK
LSAgICBBU1NFUlQobV9xdW90YU1hbmFnZXIpOwotICAgIHJldHVybiAqbV9xdW90YU1hbmFnZXI7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXZWJDb3JlOjpPcmlnaW5RdW90YU1hbmFnZXIsIHF1
b3RhTWFuYWdlciwgKCkpOworICAgIHJldHVybiBxdW90YU1hbmFnZXI7CiB9CiAKLU9yaWdpblF1
b3RhTWFuYWdlciYgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5RdW90YU1hbmFnZXIoKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIHBvcHVsYXRl
T3JpZ2lucygpOwotICAgIHJldHVybiBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKTsKLX0KK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAogRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKQogewpAQCAtNzQsNiArNjcsOSBAQCBEYXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJh
Y2tlcigpCiAgICAgOiBtX2NsaWVudCgwKQogewogICAgIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lz
dGVyU1FMaXRlVkZTKCk7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFz
ZUd1YXJkKTsKKyAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCkBAIC0xMzIs
MTYgKzEyOCwxNCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhCiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50OwogICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0ZW1wVXNhZ2U7CiAgICAgewotICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBs
b2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdl
cj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKIAogICAgICAgICBp
ZiAoIWNhbkNyZWF0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwog
Ci0gICAgICAgIHBvcHVsYXRlT3JpZ2lucygpOwotCiAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGlt
bWluZW50bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4s
IG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNr
ZXIKICAgICAgICAgLy8gYnkgZmV0Y2hpbmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LgogICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4p
OwpAQCAtMTkyLDcgKzE4Niw2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9y
aWdpbk4KIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvck9yaWdpbihTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNl
R3VhcmQpOwotICAgIHBvcHVsYXRlT3JpZ2lucygpOwogICAgIHJldHVybiBoYXNFbnRyeUZvck9y
aWdpbk5vTG9jayhvcmlnaW4pOwogfQogCkBAIC0yMTgsMTEgKzIxMSwxNyBAQCB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgp
LT5nZXRUaHJlYWRJRCgpKTsKICAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBhIGRhdGFiYXNl
IGlzIHRoZSBmdWxsIHF1b3RhIGZvciBpdHMgb3JpZ2luLCBtaW51cyB0aGUgY3VycmVudCB1c2Fn
ZSB3aXRoaW4gdGhlIG9yaWdpbiwKICAgICAvLyBwbHVzIHRoZSBjdXJyZW50IHVzYWdlIG9mIHRo
ZSBnaXZlbiBkYXRhYmFzZQotICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihv
cmlnaW5RdW90YU1hbmFnZXIoKSk7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVv
dGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICBTZWN1cml0eU9yaWdp
biogb3JpZ2luID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgcmV0dXJuIHF1b3Rh
Rm9yT3JpZ2luKG9yaWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2lu
KSArIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2UtPmZpbGVO
YW1lKCkpOwogfQogCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhdGFi
YXNlKiBkYXRhYmFzZSkKK3sKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1h
bmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgIG9yaWdpblF1b3RhTWFuYWdl
cigpLm1hcmtEYXRhYmFzZShkYXRhYmFzZSk7Cit9CisKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6
Om9yaWdpblBhdGgoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKIHsKICAgICByZXR1cm4g
U1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChtX2RhdGFiYXNl
RGlyZWN0b3J5UGF0aC50aHJlYWRzYWZlQ29weSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKQEAgLTIzMSw3ICsyMzAsNyBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5Q
YXRoKFNlY3VyCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlTm9M
b2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVh
dGVJZk5vdEV4aXN0cykKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkp
OwotICAgIEFTU0VSVCghb3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkudHJ5TG9jaygpKTsKKyAg
ICBBU1NFUlQoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyeUxvY2soKSk7CiAKICAgICBmb3IgKEhh
c2hTZXQ8UHJvcG9zZWREYXRhYmFzZSo+OjppdGVyYXRvciBpdGVyID0gbV9wcm9wb3NlZERhdGFi
YXNlcy5iZWdpbigpOyBpdGVyICE9IG1fcHJvcG9zZWREYXRhYmFzZXMuZW5kKCk7ICsraXRlcikK
ICAgICAgICAgaWYgKCgqaXRlciktPmZpcnN0ID09IG9yaWdpbiAmJiAoKml0ZXIpLT5zZWNvbmQu
bmFtZSgpID09IG5hbWUpCkBAIC0yNzUsMTcgKzI3NCwxNiBAQCBTdHJpbmcgRGF0YWJhc2VUcmFj
a2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgLy8gSWYgdGhpcyBvcmlnaW4ncyBxdW90YSBpcyBi
ZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGluIHRoaXMgb3JpZ2luKSwg
YWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAgLy8gdG8gdGhlIHF1b3RhIG1hbmFnZXIgbm93CiAg
ICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNl
RmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgZmlsZU5hbWUpOwotICAgIGlmIChvcmlnaW5RdW90
YU1hbmFnZXJOb0xvY2soKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAgICAgb3JpZ2luUXVv
dGFNYW5hZ2VyTm9Mb2NrKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmdWxsRmlsZVBhdGgp
OworICAgIGlmIChvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKKyAg
ICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmdWxs
RmlsZVBhdGgpOwogCiAgICAgcmV0dXJuIGZ1bGxGaWxlUGF0aDsKIH0KIAogU3RyaW5nIERhdGFi
YXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RFeGlzdHMpCiB7Ci0gICAgTG9ja2Vy
PE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICBN
dXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9y
aWdpbnMoKTsKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2Nr
ZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogCiAgICAgcmV0dXJuIGZ1bGxQYXRoRm9yRGF0YWJh
c2VOb0xvY2sob3JpZ2luLCBuYW1lLCBjcmVhdGVJZk5vdEV4aXN0cykudGhyZWFkc2FmZUNvcHko
KTsKIH0KQEAgLTI5Nyw4ICsyOTUsNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cG9wdWxhdGVP
cmlnaW5zKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9xdW90YU1hcC5zZXQobmV3IFF1b3Rh
TWFwKTsKLSAgICBpZiAoIW1fcXVvdGFNYW5hZ2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdlci5z
ZXQobmV3IE9yaWdpblF1b3RhTWFuYWdlcik7CiAKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZh
bHNlKTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCkBAIC0zMjQsNyArMzIwLDYgQEAg
dm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCiB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCiB7
CiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgcG9w
dWxhdGVPcmlnaW5zKCk7CiAgICAgQVNTRVJUKG1fcXVvdGFNYXApOwogICAgIGNvcHlLZXlzVG9W
ZWN0b3IoKm1fcXVvdGFNYXAsIHJlc3VsdCk7CiB9CkBAIC0zNTcsMTAgKzM1MiwxMiBAQCBib29s
IERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yCiAKIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3Rv
cjxTdHJpbmc+JiByZXN1bHRWZWN0b3IpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNl
KG1fZGF0YWJhc2VHdWFyZCk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGVtcDsKLSAgICBpZiAoIWRh
dGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCB0ZW1wKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJh
c2VHdWFyZCk7CisgICAgICAgIGlmICghZGF0YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9jayhvcmln
aW4sIHRlbXApKQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBmb3IgKFZl
Y3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gdGVtcC5iZWdpbigpOyBpdGVyICE9IHRlbXAu
ZW5kKCk7ICsraXRlcikKICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChpdGVyLT50aHJlYWRz
YWZlQ29weSgpKTsKQEAgLTUwNCw4ICs1MDEsNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVt
b3ZlT3BlbkRhdGFiYXNlCiAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1
b3RhTWFuYWdlcigpKTsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1
YXJkKTsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNl
TWFwR3VhcmQpOwogCiAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgewpAQCAtNTQxLDcgKzUz
Niw5IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UKIAogICAgIG1f
b3BlbkRhdGFiYXNlTWFwLT5yZW1vdmUoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAg
IGRlbGV0ZSBuYW1lTWFwOwotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnJlbW92ZU9y
aWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisKKyAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAg
IG9yaWdpblF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmln
aW4oKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0
YWJhc2U+ID4qIGRhdGFiYXNlcykKQEAgLTU2NCwzMCArNTYxLDMyIEBAIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFMKIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
VHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsK
LSAgICBBU1NFUlQoIW9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnRyeUxvY2soKSk7CisgICAg
QVNTRVJUKCFvcmlnaW5RdW90YU1hbmFnZXIoKS50cnlMb2NrKCkpOwogCiAgICAgLy8gVXNlIHRo
ZSBPcmlnaW5RdW90YU1hbmFnZXIgbWVjaGFuaXNtIHRvIGNhbGN1bGF0ZSB0aGUgdXNhZ2UKLSAg
ICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0g
ICAgICAgIHJldHVybiBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS5kaXNrVXNhZ2Uob3JpZ2lu
KTsKKyAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCisg
ICAgICAgIHJldHVybiBvcmlnaW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKIAog
ICAgIC8vIElmIHRoZSBPcmlnaW5RdW90YU1hbmFnZXIgZG9lc24ndCB0cmFjayB0aGlzIG9yaWdp
biBhbHJlYWR5LCBwcmltZSBpdCB0byBkbyBzbwotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9j
aygpLnRyYWNrT3JpZ2luKG9yaWdpbik7CisgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tP
cmlnaW4ob3JpZ2luKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgIGRhdGFiYXNl
TmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCBuYW1lcyk7CisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgZGF0YWJhc2VO
YW1lc0Zvck9yaWdpbk5vTG9jayhvcmlnaW4sIG5hbWVzKTsKKyAgICB9CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG9yaWdpblF1b3Rh
TWFuYWdlck5vTG9jaygpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZXNbaV0sIGZ1bGxQYXRoRm9y
RGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lc1tpXSwgZmFsc2UpKTsKKyAgICAgICAgb3JpZ2lu
UXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lc1tpXSwgZnVsbFBhdGhGb3JE
YXRhYmFzZU5vTG9jayhvcmlnaW4sIG5hbWVzW2ldLCBmYWxzZSkpOwogCi0gICAgaWYgKCFvcmln
aW5RdW90YU1hbmFnZXJOb0xvY2soKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKKyAgICBpZiAoIW9y
aWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihvcmlnaW4pKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gb3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkuZGlza1VzYWdlKG9yaWdp
bik7CisgICAgcmV0dXJuIG9yaWdpblF1b3RhTWFuYWdlcigpLmRpc2tVc2FnZShvcmlnaW4pOwog
fQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+
IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7Ci0KKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFN
YW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogICAgIHJl
dHVybiB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwogfQogCkBAIC02MDEsNyArNjAwLDYg
QEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdAogdW5zaWduZWQgbG9u
ZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKIHsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
LSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKICAgICByZXR1cm4gcXVvdGFGb3JPcmlnaW5Ob0xvY2so
b3JpZ2luKTsKIH0KIApAQCAtNjA5LDcgKzYwNyw2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpz
ZXRRdW90YShTZWN1cml0eU8KIHsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRh
YmFzZUd1YXJkKTsKIAotICAgIHBvcHVsYXRlT3JpZ2lucygpOwogICAgIGlmIChxdW90YUZvck9y
aWdpbk5vTG9jayhvcmlnaW4pID09IHF1b3RhKQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMSwx
MyArNzE4LDEwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAg
ICB9CiAKICAgICB7Ci0gICAgICAgIC8vIFRvIHNhdGlzZnkgdGhlIGxvY2sgaGllcmFyY2h5LCB3
ZSBoYXZlIHRvIGxvY2sgdGhlIG9yaWdpblF1b3RhTWFuYWdlciBiZWZvcmUgbV9kYXRhYmFzZUd1
YXJkIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSB3ZSdsbCB0byBsb2NrIGJvdGguCi0gICAgICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsKLQogICAgICAgICBkb25lRGVsZXRp
bmdPcmlnaW4ob3JpZ2luKTsKIAorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsKICAgICAg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20g
b3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNj
aWkoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzU4LDcgKzc1MiwxMCBAQCB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gb3JpZ2luUG9zc2libHlMYXN0UmVmZXJlbmNlID0gb3JpZ2luOwogICAg
ICAgICBtX3F1b3RhTWFwLT5yZW1vdmUob3JpZ2luKTsKIAotICAgICAgICBvcmlnaW5RdW90YU1h
bmFnZXJOb0xvY2soKS5yZW1vdmVPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1
b3RhTWFuYWdlcigpKTsKKyAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnJlbW92ZU9y
aWdpbihvcmlnaW4pOworICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUg
bGFzdCBvcmlnaW4sIGRvIHNvbWUgYWRkaXRpb25hbCBkZWxldGlvbi4KICAgICAgICAgaWYgKG1f
cXVvdGFNYXAtPmlzRW1wdHkoKSkgewpAQCAtOTEyLDggKzkwOSw2IEBAIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjpkZWxldGVEYXRhYmFzZShTZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIFRvIHNhdGlzZnkgdGhlIGxvY2sgaGllcmFyY2h5LCB3ZSBoYXZlIHRvIGxvY2sgdGhlIG9y
aWdpblF1b3RhTWFuYWdlciBiZWZvcmUgbV9kYXRhYmFzZUd1YXJkIGlmIHRoZXJlJ3MgYW55IGNo
YW5jZSB3ZSdsbCB0byBsb2NrIGJvdGguCi0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAogICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49
PyBBTkQgbmFtZT0/Iik7CkBAIC05MzIsNyArOTI3LDEwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVEYXRhYmFzZShTZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG9yaWdp
blF1b3RhTWFuYWdlck5vTG9jaygpLnJlbW92ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAg
eworICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIo
b3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1v
dmVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIH0KIAogICAgIGlmIChtX2NsaWVudCkgewog
ICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKQEAgLTk1
MSw4ICs5NDksOCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAK
ICNpZm5kZWYgTkRFQlVHCiAgICAgewotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOwotICAgIEFTU0VSVChkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSkg
fHwgZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRh
YmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICBBU1NFUlQoZGVsZXRpbmdEYXRhYmFzZShv
cmlnaW4sIG5hbWUpIHx8IGRlbGV0aW5nT3JpZ2luKG9yaWdpbikpOwogICAgIH0KICNlbmRpZgog
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCShyZXZpc2lvbiA1NjgxMCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNiBAQCBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5IYXNoOwogCiAjaWYgIVBMQVRGT1JNKENIUk9N
SVVNKQogY2xhc3MgRGF0YWJhc2VUcmFja2VyQ2xpZW50OwotY2xhc3MgT3JpZ2luUXVvdGFNYW5h
Z2VyOwogCiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5UcmFpdHM7CiAjZW5kaWYgLy8gIVBMQVRGT1JN
KENIUk9NSVVNKQpAQCAtNjIsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERhdGFiYXNl
VHJhY2tlciYgdHJhY2tlcigpOwogICAgIC8vIFRoaXMgc2luZ2xldG9uIHdpbGwgcG90ZW50aWFs
bHkgYmUgdXNlZCBmcm9tIG11bHRpcGxlIHdvcmtlciB0aHJlYWRzIGFuZCB0aGUgcGFnZSdzIGNv
bnRleHQgdGhyZWFkIHNpbXVsdGFuZW91c2x5LiAgVG8ga2VlcCB0aGlzIHNhZmUsIGl0J3MKICAg
ICAvLyBjdXJyZW50bHkgdXNpbmcgNCBsb2Nrcy4gIEluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2Nr
IHdoZW4gdGFraW5nIG11bHRpcGxlIGxvY2tzLCB5b3UgbXVzdCB0YWtlIHRoZW0gaW4gdGhlIGNv
cnJlY3Qgb3JkZXI6Ci0gICAgLy8gb3JpZ2luUXVvdGFNYW5hZ2VyKCkgYmVmb3JlIG1fZGF0YWJh
c2VHdWFyZCBvciBtX29wZW5EYXRhYmFzZU1hcEd1YXJkCisgICAgLy8gbV9kYXRhYmFzZUd1YXJk
IGJlZm9yZSBvcmlnaW5RdW90YU1hbmFnZXIoKSBpZiBib3RoIGxvY2tzIGFyZSBuZWVkZWQKICAg
ICAvLyBtX2RhdGFiYXNlR3VhcmQgYmVmb3JlIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQKICAgICAv
LyBub3RpZmljYXRpb25NdXRleCgpIGlzIGN1cnJlbnRseSBpbmRlcGVuZGVudCBvZiB0aGUgb3Ro
ZXIgbG9ja3MuCiAKQEAgLTc1LDYgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0T3BlbkRh
dGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hT
ZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpOwogCiAgICAgdW5zaWduZWQgbG9uZyBs
b25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZSopOworICAgIHZvaWQgZGF0
YWJhc2VDaGFuZ2VkKERhdGFiYXNlKik7CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VUcmFja2Vy
KCk7CkBAIC0xMTAsMTMgKzExMCw5IEBAIHB1YmxpYzoKICAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5
IHRocmVhZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRhCiAgICAgdm9pZCBzY2hl
ZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAKLSAgICBPcmlnaW5RdW90YU1hbmFnZXImIG9yaWdpblF1b3RhTWFuYWdlcigpOwot
Ci0KICAgICBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAKIHByaXZh
dGU6Ci0gICAgT3JpZ2luUXVvdGFNYW5hZ2VyJiBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKTsK
ICAgICBib29sIGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
OwogICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKICAgICBib29s
IGRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgVmVj
dG9yPFN0cmluZz4mIHJlc3VsdFZlY3Rvcik7CkBAIC0xNDIsOCArMTM4LDYgQEAgcHJpdmF0ZToK
ICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgdW5zaWduZWQgbG9u
ZyBsb25nLCBTZWN1cml0eU9yaWdpbkhhc2g+IFF1b3RhTWFwOwogICAgIG11dGFibGUgT3duUHRy
PFF1b3RhTWFwPiBtX3F1b3RhTWFwOwogCi0gICAgT3duUHRyPE9yaWdpblF1b3RhTWFuYWdlcj4g
bV9xdW90YU1hbmFnZXI7Ci0KICAgICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGg7CiAK
ICAgICBEYXRhYmFzZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50OwpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCShyZXZpc2lvbiA1NjgxMCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
VHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiT3JpZ2luUXVvdGFN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgi
CiAKQEAgLTU2LDkgKzU1LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0
VHJhbgogdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChTUUxU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9
PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKLSAgICBPcmlnaW5RdW90YU1hbmFnZXImIG1h
bmFnZXIoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwot
ICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihtYW5hZ2VyKTsKLSAgICBtYW5h
Z2VyLm1hcmtEYXRhYmFzZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7CisgICAgRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
KTsKIH0KIAogYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoU1FMVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQo=
</data>
<flag name="commit-queue"
          id="35480"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52454</attachid>
            <date>2010-04-02 14:57:49 -0700</date>
            <delta_ts>2010-04-14 19:09:53 -0700</delta_ts>
            <desc>patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19920</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzAyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDMtMzAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvciBEYXRhYmFzZVRyYWNrZXIsIHBhcnQgMTogUmVtb3ZlIHRoZSBkZXBlbmRlbmN5
IG9uCisgICAgICAgIE9yaWdpblF1b3RhTWFuYWdlciBmcm9tIERhdGFiYXNlVHJhY2tlci5oLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTQ4Mgor
CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAgICAob3JpZ2lu
UXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6RGF0YWJh
c2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJs
aXNoRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRy
eUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNp
emVGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFi
YXNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRo
Rm9yRGF0YWJhc2VOb0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpm
dWxsUGF0aEZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
cG9wdWxhdGVPcmlnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3Jp
Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNG
b3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVu
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9y
aWdpbk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9y
T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cXVvdGFGb3JPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlVHJhY2tlci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
bGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4
ZWN1dGVTdGF0ZW1lbnQpOgorCiAyMDEwLTA0LTAyICBBbmRyZXcgU2NoZXJrdXMgIDxzY2hlcmt1
c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uIGFuZCBF
cmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lv
biA1NzAyNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwyMCArNDksOSBAQAogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7CitzdGF0aWMgV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyKiBxdW90
YU1hbmFnZXIgPSAwOwogCi1PcmlnaW5RdW90YU1hbmFnZXImIERhdGFiYXNlVHJhY2tlcjo6b3Jp
Z2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkKLXsKLSAgICBBU1NFUlQobV9xdW90YU1hbmFnZXIpOwot
ICAgIHJldHVybiAqbV9xdW90YU1hbmFnZXI7Ci19Ci0KLU9yaWdpblF1b3RhTWFuYWdlciYgRGF0
YWJhc2VUcmFja2VyOjpvcmlnaW5RdW90YU1hbmFnZXIoKQotewotICAgIE11dGV4TG9ja2VyIGxv
Y2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIHBvcHVsYXRlT3JpZ2lucygpOwotICAg
IHJldHVybiBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKTsKLX0KK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogRGF0YWJhc2VUcmFja2VyJiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKQogewpAQCAt
NzQsNiArNjMsMTYgQEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoKQogICAgIDog
bV9jbGllbnQoMCkKIHsKICAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygp
OworCisgICAgcXVvdGFNYW5hZ2VyID0gbmV3IE9yaWdpblF1b3RhTWFuYWdlcigpOworCisgICAg
TXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgcG9wdWxhdGVP
cmlnaW5zKCk7Cit9CisKK0RhdGFiYXNlVHJhY2tlcjo6fkRhdGFiYXNlVHJhY2tlcigpCit7Cisg
ICAgZGVsZXRlIHF1b3RhTWFuYWdlcjsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERh
dGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCkBAIC0xMzIsMTYgKzEzMSwx
NCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhCiAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50OwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wVXNh
Z2U7CiAgICAgewotICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBsb2NrZXIob3Jp
Z2luUXVvdGFNYW5hZ2VyKCkpOwogICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9k
YXRhYmFzZUd1YXJkKTsKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFN
YW5hZ2VyTG9ja2VyKCpxdW90YU1hbmFnZXIpOwogCiAgICAgICAgIGlmICghY2FuQ3JlYXRlRGF0
YWJhc2Uob3JpZ2luLCBuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICByZWNvcmRDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAKLSAgICAgICAgcG9wdWxh
dGVPcmlnaW5zKCk7Ci0KICAgICAgICAgLy8gU2luY2Ugd2UncmUgaW1taW5lbnRseSBvcGVuaW5n
IGEgZGF0YWJhc2Ugd2l0aGluIHRoaXMgY29udGV4dCdzIG9yaWdpbiwgbWFrZSBzdXJlIHRoaXMg
b3JpZ2luIGlzIGJlaW5nIHRyYWNrZWQgYnkgdGhlIFF1b3RhVHJhY2tlcgogICAgICAgICAvLyBi
eSBmZXRjaGluZyBpdHMgY3VycmVudCB1c2FnZSBub3cuCiAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB1c2FnZSA9IHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbik7CkBAIC0xOTIsNyArMTg5
LDYgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luTgogYm9vbCBEYXRh
YmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7
CiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgcG9w
dWxhdGVPcmlnaW5zKCk7CiAgICAgcmV0dXJuIGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKG9yaWdp
bik7CiB9CiAKQEAgLTIxOCw5ICsyMTQsMTUgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
VHJhY2tlcjo6Z2V0TQogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7
CiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90
YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmln
aW4sCiAgICAgLy8gcGx1cyB0aGUgY3VycmVudCB1c2FnZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UK
LSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBsb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2Vy
KCkpOworICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcigq
cXVvdGFNYW5hZ2VyKTsKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZGF0YWJhc2UtPnNl
Y3VyaXR5T3JpZ2luKCk7Ci0gICAgcmV0dXJuIHF1b3RhRm9yT3JpZ2luKG9yaWdpbikgLSBvcmln
aW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKSArIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2UtPmZpbGVOYW1lKCkpOworICAgIHJldHVybiBxdW90
YUZvck9yaWdpbihvcmlnaW4pIC0gcXVvdGFNYW5hZ2VyLT5kaXNrVXNhZ2Uob3JpZ2luKSArIFNR
TGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2UtPmZpbGVOYW1lKCkp
OworfQorCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNlKiBk
YXRhYmFzZSkKK3sKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJM
b2NrZXIoKnF1b3RhTWFuYWdlcik7CisgICAgcXVvdGFNYW5hZ2VyLT5tYXJrRGF0YWJhc2UoZGF0
YWJhc2UpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pIGNvbnN0CkBAIC0yMzEsNyArMjMzLDcgQEAgU3RyaW5nIERhdGFiYXNl
VHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cgogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBh
dGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RFeGlzdHMpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNl
R3VhcmQudHJ5TG9jaygpKTsKLSAgICBBU1NFUlQoIW9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygp
LnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFxdW90YU1hbmFnZXItPnRyeUxvY2soKSk7CiAKICAg
ICBmb3IgKEhhc2hTZXQ8UHJvcG9zZWREYXRhYmFzZSo+OjppdGVyYXRvciBpdGVyID0gbV9wcm9w
b3NlZERhdGFiYXNlcy5iZWdpbigpOyBpdGVyICE9IG1fcHJvcG9zZWREYXRhYmFzZXMuZW5kKCk7
ICsraXRlcikKICAgICAgICAgaWYgKCgqaXRlciktPmZpcnN0ID09IG9yaWdpbiAmJiAoKml0ZXIp
LT5zZWNvbmQubmFtZSgpID09IG5hbWUpCkBAIC0yNzUsMTcgKzI3NywxNiBAQCBTdHJpbmcgRGF0
YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgLy8gSWYgdGhpcyBvcmlnaW4ncyBx
dW90YSBpcyBiZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0byBhIGRhdGFiYXNlIGluIHRoaXMg
b3JpZ2luKSwgYWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAgLy8gdG8gdGhlIHF1b3RhIG1hbmFn
ZXIgbm93CiAgICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVu
ZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwgZmlsZU5hbWUpOwotICAgIGlmIChv
cmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKLSAgICAgICAg
b3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkuYWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmdWxs
RmlsZVBhdGgpOworICAgIGlmIChxdW90YU1hbmFnZXItPnRyYWNrc09yaWdpbihvcmlnaW4pKQor
ICAgICAgICBxdW90YU1hbmFnZXItPmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZnVsbEZpbGVQ
YXRoKTsKIAogICAgIHJldHVybiBmdWxsRmlsZVBhdGg7CiB9CiAKIFN0cmluZyBEYXRhYmFzZVRy
YWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmTm90RXhpc3RzKQogewotICAgIExvY2tlcjxPcmln
aW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgcG9wdWxhdGVPcmlnaW5z
KCk7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKCpx
dW90YU1hbmFnZXIpOwogCiAgICAgcmV0dXJuIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3Jp
Z2luLCBuYW1lLCBjcmVhdGVJZk5vdEV4aXN0cykudGhyZWFkc2FmZUNvcHkoKTsKIH0KQEAgLTI5
Nyw4ICsyOTgsNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cG9wdWxhdGVPcmlnaW5zKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9xdW90YU1hcC5zZXQobmV3IFF1b3RhTWFwKTsKLSAgICBp
ZiAoIW1fcXVvdGFNYW5hZ2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdlci5zZXQobmV3IE9yaWdp
blF1b3RhTWFuYWdlcik7CiAKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCkBAIC0zMjQsNyArMzIzLDYgQEAgdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucygpCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
cyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCiB7CiAgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgcG9wdWxhdGVPcmlnaW5z
KCk7CiAgICAgQVNTRVJUKG1fcXVvdGFNYXApOwogICAgIGNvcHlLZXlzVG9WZWN0b3IoKm1fcXVv
dGFNYXAsIHJlc3VsdCk7CiB9CkBAIC0zNTcsMTAgKzM1NSwxMiBAQCBib29sIERhdGFiYXNlVHJh
Y2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yCiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFz
ZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiBy
ZXN1bHRWZWN0b3IpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VH
dWFyZCk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGVtcDsKLSAgICBpZiAoIWRhdGFiYXNlTmFtZXNG
b3JPcmlnaW5Ob0xvY2sob3JpZ2luLCB0ZW1wKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Cisg
ICAgICAgIGlmICghZGF0YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9jayhvcmlnaW4sIHRlbXApKQor
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
OjppdGVyYXRvciBpdGVyID0gdGVtcC5iZWdpbigpOyBpdGVyICE9IHRlbXAuZW5kKCk7ICsraXRl
cikKICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChpdGVyLT50aHJlYWRzYWZlQ29weSgpKTsK
QEAgLTQ3MywyNyArNDczLDI5IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJh
c2UoRGEKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICByZXR1cm47CiAKLSAgICBNdXRleExv
Y2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1h
cEd1YXJkKTsKIAotICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAgICAgIG1fb3BlbkRh
dGFiYXNlTWFwLnNldChuZXcgRGF0YWJhc2VPcmlnaW5NYXApOworICAgICAgICBpZiAoIW1fb3Bl
bkRhdGFiYXNlTWFwKQorICAgICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAuc2V0KG5ldyBEYXRh
YmFzZU9yaWdpbk1hcCk7CiAKLSAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRp
ZmllcigpKTsKLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1h
cC0+Z2V0KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBpZiAoIW5hbWVNYXApIHsK
LSAgICAgICAgbmFtZU1hcCA9IG5ldyBEYXRhYmFzZU5hbWVNYXA7Ci0gICAgICAgIG1fb3BlbkRh
dGFiYXNlTWFwLT5zZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPnRocmVhZHNhZmVDb3B5
KCksIG5hbWVNYXApOwotICAgIH0KKyAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmlu
Z0lkZW50aWZpZXIoKSk7CisgICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3Bl
bkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBp
ZiAoIW5hbWVNYXApIHsKKyAgICAgICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFw
OworICAgICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnNldChkYXRhYmFzZS0+c2VjdXJpdHlP
cmlnaW4oKS0+dGhyZWFkc2FmZUNvcHkoKSwgbmFtZU1hcCk7CisgICAgICAgIH0KIAotICAgIERh
dGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBpZiAoIWRh
dGFiYXNlU2V0KSB7Ci0gICAgICAgIGRhdGFiYXNlU2V0ID0gbmV3IERhdGFiYXNlU2V0OwotICAg
ICAgICBuYW1lTWFwLT5zZXQobmFtZS50aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFzZVNldCk7Ci0g
ICAgfQorICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFt
ZSk7CisgICAgICAgIGlmICghZGF0YWJhc2VTZXQpIHsKKyAgICAgICAgICAgIGRhdGFiYXNlU2V0
ID0gbmV3IERhdGFiYXNlU2V0OworICAgICAgICAgICAgbmFtZU1hcC0+c2V0KG5hbWUudGhyZWFk
c2FmZUNvcHkoKSwgZGF0YWJhc2VTZXQpOworICAgICAgICB9CiAKLSAgICBkYXRhYmFzZVNldC0+
YWRkKGRhdGFiYXNlKTsKKyAgICAgICAgZGF0YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7CiAKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJh
c2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJh
c2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworICAgIH0K
IAogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwogICAgIGRv
bmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+
c3RyaW5nSWRlbnRpZmllcigpKTsKQEAgLTUwNCw0NCArNTA2LDQ2IEBAIHZvaWQgRGF0YWJhc2VU
cmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2Nr
ZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZSht
X2RhdGFiYXNlR3VhcmQpOwotICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9v
cGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0
YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCi0gICAgaWYgKCFtX29wZW5E
YXRhYmFzZU1hcCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
IAotICAgIFN0cmluZyBuYW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwotICAgIERh
dGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2Ut
PnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIGlmICghbmFtZU1hcCkgewotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgU3RyaW5nIG5h
bWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CisgICAgICAgIERhdGFiYXNlTmFtZU1h
cCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3Jp
Z2luKCkpOworICAgICAgICBpZiAoIW5hbWVNYXApIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBEYXRhYmFz
ZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFz
ZVNldCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5h
bWUpOworICAgICAgICBpZiAoIWRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZGF0YWJh
c2VTZXQtPnJlbW92ZShkYXRhYmFzZSk7CisgICAgICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoZGF0
YWJhc2UpOwogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJSZW1vdmVkIG9wZW4gRGF0YWJhc2UgJXMg
KCVwKVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0
YWJhc2UpOworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJlbW92ZWQgb3BlbiBEYXRhYmFzZSAl
cyAoJXApXG4iLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpLCBk
YXRhYmFzZSk7CiAKLSAgICBpZiAoIWRhdGFiYXNlU2V0LT5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVNldC0+aXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgbmFtZU1hcC0+cmVtb3ZlKG5hbWUpOwotICAgIGRlbGV0ZSBkYXRhYmFz
ZVNldDsKKyAgICAgICAgbmFtZU1hcC0+cmVtb3ZlKG5hbWUpOworICAgICAgICBkZWxldGUgZGF0
YWJhc2VTZXQ7CiAKLSAgICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKGRhdGFiYXNlLT5zZWN1cml0eU9y
aWdpbigpKTsKKyAgICAgICAgZGVsZXRlIG5hbWVNYXA7CisgICAgfQogCi0gICAgbV9vcGVuRGF0
YWJhc2VNYXAtPnJlbW92ZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgZGVsZXRl
IG5hbWVNYXA7Ci0gICAgb3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkucmVtb3ZlT3JpZ2luKGRh
dGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2Vy
PiBxdW90YU1hbmFnZXJMb2NrZXIoKnF1b3RhTWFuYWdlcik7CisgICAgcXVvdGFNYW5hZ2VyLT5y
ZW1vdmVPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogfQogCiB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+KiBkYXRhYmFzZXMpCkBA
IC01NjQsMzAgKzU2OCwzMCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNl
cyhTCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2lu
Tm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7Ci0gICAgQVNTRVJUKCFvcmlnaW5RdW90
YU1hbmFnZXJOb0xvY2soKS50cnlMb2NrKCkpOworICAgIEFTU0VSVCghcXVvdGFNYW5hZ2VyLT50
cnlMb2NrKCkpOwogCiAgICAgLy8gVXNlIHRoZSBPcmlnaW5RdW90YU1hbmFnZXIgbWVjaGFuaXNt
IHRvIGNhbGN1bGF0ZSB0aGUgdXNhZ2UKLSAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2Nr
KCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0gICAgICAgIHJldHVybiBvcmlnaW5RdW90YU1hbmFn
ZXJOb0xvY2soKS5kaXNrVXNhZ2Uob3JpZ2luKTsKKyAgICBpZiAocXVvdGFNYW5hZ2VyLT50cmFj
a3NPcmlnaW4ob3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHF1b3RhTWFuYWdlci0+ZGlza1VzYWdl
KG9yaWdpbik7CiAKICAgICAvLyBJZiB0aGUgT3JpZ2luUXVvdGFNYW5hZ2VyIGRvZXNuJ3QgdHJh
Y2sgdGhpcyBvcmlnaW4gYWxyZWFkeSwgcHJpbWUgaXQgdG8gZG8gc28KLSAgICBvcmlnaW5RdW90
YU1hbmFnZXJOb0xvY2soKS50cmFja09yaWdpbihvcmlnaW4pOworICAgIHF1b3RhTWFuYWdlci0+
dHJhY2tPcmlnaW4ob3JpZ2luKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgIGRh
dGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCBuYW1lcyk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG9yaWdpblF1b3Rh
TWFuYWdlck5vTG9jaygpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZXNbaV0sIGZ1bGxQYXRoRm9y
RGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lc1tpXSwgZmFsc2UpKTsKKyAgICAgICAgcXVvdGFN
YW5hZ2VyLT5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWVzW2ldLCBmdWxsUGF0aEZvckRhdGFiYXNl
Tm9Mb2NrKG9yaWdpbiwgbmFtZXNbaV0sIGZhbHNlKSk7CiAKLSAgICBpZiAoIW9yaWdpblF1b3Rh
TWFuYWdlck5vTG9jaygpLnRyYWNrc09yaWdpbihvcmlnaW4pKQorICAgIGlmICghcXVvdGFNYW5h
Z2VyLT50cmFja3NPcmlnaW4ob3JpZ2luKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLmRpc2tVc2FnZShvcmlnaW4pOworICAgIHJldHVy
biBxdW90YU1hbmFnZXItPmRpc2tVc2FnZShvcmlnaW4pOwogfQogCiB1bnNpZ25lZCBsb25nIGxv
bmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2lu
KQogewotICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7Ci0KKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJk
KTsKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIoKnF1
b3RhTWFuYWdlcik7CiAgICAgcmV0dXJuIHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbik7CiB9
CiAKQEAgLTYwMSw3ICs2MDUsNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2Vy
OjpxdW90CiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpxdW90YUZvck9yaWdp
bihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIHBvcHVsYXRlT3JpZ2lucygpOwogICAgIHJldHVybiBx
dW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwogfQogCkBAIC02MDksNyArNjEyLDYgQEAgdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OnNldFF1b3RhKFNlY3VyaXR5TwogewogICAgIE11dGV4TG9ja2Vy
IGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwogCi0gICAgcG9wdWxhdGVPcmlnaW5zKCk7
CiAgICAgaWYgKHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikgPT0gcXVvdGEpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNzIxLDEzICs3MjMsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRl
bGV0ZU9yaWdpbihTZWN1cgogICAgIH0KIAogICAgIHsKLSAgICAgICAgLy8gVG8gc2F0aXNmeSB0
aGUgbG9jayBoaWVyYXJjaHksIHdlIGhhdmUgdG8gbG9jayB0aGUgb3JpZ2luUXVvdGFNYW5hZ2Vy
IGJlZm9yZSBtX2RhdGFiYXNlR3VhcmQgaWYgdGhlcmUncyBhbnkgY2hhbmNlIHdlJ2xsIHRvIGxv
Y2sgYm90aC4KLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2Vy
TG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0Rh
dGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyIpOwot
CiAgICAgICAgIGRvbmVEZWxldGluZ09yaWdpbihvcmlnaW4pOwogCisgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVS
RSBvcmlnaW49PyIpOwogICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBkZWxldGlv
biBvZiBkYXRhYmFzZXMgZnJvbSBvcmlnaW4gJXMgZnJvbSB0cmFja2VyIiwgb3JpZ2luLT5kYXRh
YmFzZUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC03NTgsNyArNzU3LDEwIEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmln
aW4oU2VjdXIKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5Qb3NzaWJseUxh
c3RSZWZlcmVuY2UgPSBvcmlnaW47CiAgICAgICAgIG1fcXVvdGFNYXAtPnJlbW92ZShvcmlnaW4p
OwogCi0gICAgICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnJlbW92ZU9yaWdpbihvcmln
aW4pOworICAgICAgICB7CisgICAgICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBx
dW90YU1hbmFnZXJMb2NrZXIoKnF1b3RhTWFuYWdlcik7CisgICAgICAgICAgICBxdW90YU1hbmFn
ZXItPnJlbW92ZU9yaWdpbihvcmlnaW4pOworICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2Ug
cmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4sIGRvIHNvbWUgYWRkaXRpb25hbCBkZWxldGlvbi4KICAg
ICAgICAgaWYgKG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgewpAQCAtOTEzLDggKzkxNSw2IEBAIGJv
b2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShTZWMKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIC8vIFRvIHNhdGlzZnkgdGhlIGxvY2sgaGllcmFyY2h5LCB3ZSBo
YXZlIHRvIGxvY2sgdGhlIG9yaWdpblF1b3RhTWFuYWdlciBiZWZvcmUgbV9kYXRhYmFzZUd1YXJk
IGlmIHRoZXJlJ3MgYW55IGNoYW5jZSB3ZSdsbCB0byBsb2NrIGJvdGguCi0gICAgTG9ja2VyPE9y
aWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigp
KTsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAogICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIERhdGFi
YXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7CkBAIC05MzMsNyArOTMzLDEwIEBAIGJv
b2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShTZWMKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnJlbW92ZURhdGFi
YXNlKG9yaWdpbiwgbmFtZSk7CisgICAgeworICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5h
Z2VyPiBxdW90YU1hbmFnZXJMb2NrZXIoKnF1b3RhTWFuYWdlcik7CisgICAgICAgIHF1b3RhTWFu
YWdlci0+cmVtb3ZlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKKyAgICB9CiAKICAgICBpZiAobV9j
bGllbnQpIHsKICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdp
bik7CkBAIC05NTQsOCArOTU3LDggQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFi
YXNlRmlsZQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBBU1NFUlQoZGVsZXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpIHx8IGRlbGV0aW5nT3JpZ2luKG9yaWdpbikpOworICAgICAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICAgICAgQVNTRVJUKGRlbGV0aW5n
RGF0YWJhc2Uob3JpZ2luLCBuYW1lKSB8fCBkZWxldGluZ09yaWdpbihvcmlnaW4pKTsKICAgICB9
CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaAkocmV2aXNpb24gNTcw
MjQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDYgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luSGFzaDsKIAogI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKIGNsYXNzIERhdGFiYXNlVHJhY2tlckNsaWVudDsKLWNsYXNzIE9yaWdp
blF1b3RhTWFuYWdlcjsKIAogc3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOwogI2VuZGlmIC8v
ICFQTEFURk9STShDSFJPTUlVTSkKQEAgLTYyLDggKzYxLDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBEYXRhYmFzZVRyYWNrZXImIHRyYWNrZXIoKTsKICAgICAvLyBUaGlzIHNpbmdsZXRvbiB3aWxs
IHBvdGVudGlhbGx5IGJlIHVzZWQgZnJvbSBtdWx0aXBsZSB3b3JrZXIgdGhyZWFkcyBhbmQgdGhl
IHBhZ2UncyBjb250ZXh0IHRocmVhZCBzaW11bHRhbmVvdXNseS4gIFRvIGtlZXAgdGhpcyBzYWZl
LCBpdCdzCiAgICAgLy8gY3VycmVudGx5IHVzaW5nIDQgbG9ja3MuICBJbiBvcmRlciB0byBhdm9p
ZCBkZWFkbG9jayB3aGVuIHRha2luZyBtdWx0aXBsZSBsb2NrcywgeW91IG11c3QgdGFrZSB0aGVt
IGluIHRoZSBjb3JyZWN0IG9yZGVyOgotICAgIC8vIG9yaWdpblF1b3RhTWFuYWdlcigpIGJlZm9y
ZSBtX2RhdGFiYXNlR3VhcmQgb3IgbV9vcGVuRGF0YWJhc2VNYXBHdWFyZAotICAgIC8vIG1fZGF0
YWJhc2VHdWFyZCBiZWZvcmUgbV9vcGVuRGF0YWJhc2VNYXBHdWFyZAorICAgIC8vIG1fZGF0YWJh
c2VHdWFyZCBiZWZvcmUgcXVvdGFNYW5hZ2VyIGlmIGJvdGggbG9ja3MgYXJlIG5lZWRlZC4KKyAg
ICAvLyBubyBvdGhlciBsb2NrIGlzIHRha2VuIGluIHRoZSBjb2RlIGxvY2tlZCBvbiBtX29wZW5E
YXRhYmFzZU1hcEd1YXJkLgogICAgIC8vIG5vdGlmaWNhdGlvbk11dGV4KCkgaXMgY3VycmVudGx5
IGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBsb2Nrcy4KIAogICAgIGJvb2wgY2FuRXN0YWJsaXNo
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKQEAg
LTc1LDkgKzc0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxEYXRh
YmFzZT4gPiogZGF0YWJhc2VzKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXpl
Rm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2UqKTsKKyAgICB2b2lkIGRhdGFiYXNlQ2hhbmdlZChE
YXRhYmFzZSopOwogCiBwcml2YXRlOgogICAgIERhdGFiYXNlVHJhY2tlcigpOworICAgIH5EYXRh
YmFzZVRyYWNrZXIoKTsKIAogICAgIHR5cGVkZWYgSGFzaFNldDxEYXRhYmFzZSo+IERhdGFiYXNl
U2V0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlU2V0Kj4gRGF0YWJhc2VO
YW1lTWFwOwpAQCAtMTEwLDEzICsxMTEsOSBAQCBwdWJsaWM6CiAgICAgLy8gRnJvbSBhIHNlY29u
ZGFyeSB0aHJlYWQsIG11c3QgYmUgdGhyZWFkIHNhZmUgd2l0aCBpdHMgZGF0YQogICAgIHZvaWQg
c2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwogCi0gICAgT3JpZ2luUXVvdGFNYW5hZ2VyJiBvcmlnaW5RdW90YU1hbmFnZXIo
KTsKLQotCiAgICAgYm9vbCBoYXNFbnRyeUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwogCiBw
cml2YXRlOgotICAgIE9yaWdpblF1b3RhTWFuYWdlciYgb3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2Nr
KCk7CiAgICAgYm9vbCBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3Jp
Z2luKTsKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAg
Ym9vbCBkYXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IFZlY3RvcjxTdHJpbmc+JiByZXN1bHRWZWN0b3IpOwpAQCAtMTQyLDggKzEzOSw2IEBAIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIHVuc2lnbmVk
IGxvbmcgbG9uZywgU2VjdXJpdHlPcmlnaW5IYXNoPiBRdW90YU1hcDsKICAgICBtdXRhYmxlIE93
blB0cjxRdW90YU1hcD4gbV9xdW90YU1hcDsKIAotICAgIE93blB0cjxPcmlnaW5RdW90YU1hbmFn
ZXI+IG1fcXVvdGFNYW5hZ2VyOwotCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
OwogCiAgICAgRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBtX2NsaWVudDsKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAkocmV2aXNpb24gNTcwMjQpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw2IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIk9yaWdpblF1
b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bi5oIgogCkBAIC01Niw5ICs1NSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENv
bW1pdFRyYW4KIHZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQo
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAgT3JpZ2luUXVvdGFNYW5hZ2Vy
JiBtYW5hZ2VyKERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpblF1b3RhTWFuYWdlcigp
KTsKLSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBsb2NrZXIobWFuYWdlcik7Ci0gICAg
bWFuYWdlci5tYXJrRGF0YWJhc2UodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpOworICAgIERhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZCh0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKSk7CiB9CiAKIGJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
</data>
<flag name="review"
          id="35938"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53399</attachid>
            <date>2010-04-14 19:09:53 -0700</date>
            <delta_ts>2010-04-15 13:22:13 -0700</delta_ts>
            <desc> patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20041</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzYxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDQtMTQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEYXRhYmFzZVRyYWNrZXIgcmVmYWN0b3Jpbmc6IHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbgor
ICAgICAgICBPcmlnaW5RdW90YU1hbmFnZXIgZnJvbSBEYXRhYmFzZVRyYWNrZXIuaAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE0ODIKKworICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6fkRhdGFiYXNlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpkYXRhYmFzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6dXNhZ2VGb3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp1c2FnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OnF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0
UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KToKKwogMjAxMC0wNC0xNCAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjU3NjA5LgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJl
dmlzaW9uIDU3NjA2KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDIwICs0OSw5IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
LW5hbWVzcGFjZSBXZWJDb3JlIHsKK3N0YXRpYyBXZWJDb3JlOjpPcmlnaW5RdW90YU1hbmFnZXIq
IHF1b3RhTWFuYWdlciA9IDA7CiAKLU9yaWdpblF1b3RhTWFuYWdlciYgRGF0YWJhc2VUcmFja2Vy
OjpvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKQotewotICAgIEFTU0VSVChtX3F1b3RhTWFuYWdl
cik7Ci0gICAgcmV0dXJuICptX3F1b3RhTWFuYWdlcjsKLX0KLQotT3JpZ2luUXVvdGFNYW5hZ2Vy
JiBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblF1b3RhTWFuYWdlcigpCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgcG9wdWxhdGVPcmlnaW5zKCk7
Ci0gICAgcmV0dXJuIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpOwotfQorbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBEYXRhYmFzZVRyYWNrZXImIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpCiB7
CkBAIC03NCw2ICs2MywxNiBAQCBEYXRhYmFzZVRyYWNrZXI6OkRhdGFiYXNlVHJhY2tlcigpCiAg
ICAgOiBtX2NsaWVudCgwKQogewogICAgIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRl
VkZTKCk7CisKKyAgICBxdW90YU1hbmFnZXIgPSBuZXcgT3JpZ2luUXVvdGFNYW5hZ2VyKCk7CisK
KyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBwb3B1
bGF0ZU9yaWdpbnMoKTsKK30KKworRGF0YWJhc2VUcmFja2VyOjp+RGF0YWJhc2VUcmFja2VyKCkK
K3sKKyAgICBkZWxldGUgcXVvdGFNYW5hZ2VyOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKQEAgLTEzMiwxNiAr
MTMxLDE0IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmEKICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQ7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRl
bXBVc2FnZTsKICAgICB7Ci0gICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tl
cihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOworICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBx
dW90YU1hbmFnZXJMb2NrZXIoKnF1b3RhTWFuYWdlcik7CiAKICAgICAgICAgaWYgKCFjYW5DcmVh
dGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIHJlY29yZENyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKIAotICAgICAgICBw
b3B1bGF0ZU9yaWdpbnMoKTsKLQogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBpbW1pbmVudGx5IG9w
ZW5pbmcgYSBkYXRhYmFzZSB3aXRoaW4gdGhpcyBjb250ZXh0J3Mgb3JpZ2luLCBtYWtlIHN1cmUg
dGhpcyBvcmlnaW4gaXMgYmVpbmcgdHJhY2tlZCBieSB0aGUgUXVvdGFUcmFja2VyCiAgICAgICAg
IC8vIGJ5IGZldGNoaW5nIGl0cyBjdXJyZW50IHVzYWdlIG5vdy4KICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIHVzYWdlID0gdXNhZ2VGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKQEAgLTE5Miw3
ICsxODksNiBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW5OCiBib29s
IERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKIHsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAg
ICBwb3B1bGF0ZU9yaWdpbnMoKTsKICAgICByZXR1cm4gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2so
b3JpZ2luKTsKIH0KIApAQCAtMjE4LDkgKzIxNCwxNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0
YWJhc2VUcmFja2VyOjpnZXRNCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFz
ZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJ
RCgpKTsKICAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBhIGRhdGFiYXNlIGlzIHRoZSBmdWxs
IHF1b3RhIGZvciBpdHMgb3JpZ2luLCBtaW51cyB0aGUgY3VycmVudCB1c2FnZSB3aXRoaW4gdGhl
IG9yaWdpbiwKICAgICAvLyBwbHVzIHRoZSBjdXJyZW50IHVzYWdlIG9mIHRoZSBnaXZlbiBkYXRh
YmFzZQotICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7
CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKCpxdW90
YU1hbmFnZXIpOwogICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkYXRhYmFzZS0+c2VjdXJp
dHlPcmlnaW4oKTsKLSAgICByZXR1cm4gcXVvdGFGb3JPcmlnaW4ob3JpZ2luKSAtIG9yaWdpblF1
b3RhTWFuYWdlcigpLmRpc2tVc2FnZShvcmlnaW4pICsgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0
YWJhc2VGaWxlU2l6ZShkYXRhYmFzZS0+ZmlsZU5hbWUoKSk7CisgICAgcmV0dXJuIHF1b3RhRm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikgLSBxdW90YU1hbmFnZXItPmRpc2tVc2FnZShvcmlnaW4pICsg
U1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShkYXRhYmFzZS0+ZmlsZU5hbWUo
KSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2Uq
IGRhdGFiYXNlKQoreworICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdl
ckxvY2tlcigqcXVvdGFNYW5hZ2VyKTsKKyAgICBxdW90YU1hbmFnZXItPm1hcmtEYXRhYmFzZShk
YXRhYmFzZSk7CiB9CiAKIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpblBhdGgoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikgY29uc3QKQEAgLTIzMSw3ICsyMzQsNyBAQCBTdHJpbmcgRGF0YWJh
c2VUcmFja2VyOjpvcmlnaW5QYXRoKFNlY3VyCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxs
UGF0aEZvckRhdGFiYXNlTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0cykKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJh
c2VHdWFyZC50cnlMb2NrKCkpOwotICAgIEFTU0VSVCghb3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2Nr
KCkudHJ5TG9jaygpKTsKKyAgICBBU1NFUlQoIXF1b3RhTWFuYWdlci0+dHJ5TG9jaygpKTsKIAog
ICAgIGZvciAoSGFzaFNldDxQcm9wb3NlZERhdGFiYXNlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3By
b3Bvc2VkRGF0YWJhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9wcm9wb3NlZERhdGFiYXNlcy5lbmQo
KTsgKytpdGVyKQogICAgICAgICBpZiAoKCppdGVyKS0+c2Vjb25kLm5hbWUoKSA9PSBuYW1lICYm
ICgqaXRlciktPmZpcnN0LT5lcXVhbChvcmlnaW4pKQpAQCAtMjc1LDE3ICsyNzgsMTYgQEAgU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIC8vIElmIHRoaXMgb3Jp
Z2luJ3MgcXVvdGEgaXMgYmVpbmcgdHJhY2tlZCAob3BlbiBoYW5kbGUgdG8gYSBkYXRhYmFzZSBp
biB0aGlzIG9yaWdpbiksIGFkZCB0aGlzIG5ldyBkYXRhYmFzZQogICAgIC8vIHRvIHRoZSBxdW90
YSBtYW5hZ2VyIG5vdwogICAgIFN0cmluZyBmdWxsRmlsZVBhdGggPSBTUUxpdGVGaWxlU3lzdGVt
OjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIGZpbGVOYW1lKTsKLSAg
ICBpZiAob3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0g
ICAgICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFt
ZSwgZnVsbEZpbGVQYXRoKTsKKyAgICBpZiAocXVvdGFNYW5hZ2VyLT50cmFja3NPcmlnaW4ob3Jp
Z2luKSkKKyAgICAgICAgcXVvdGFNYW5hZ2VyLT5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWUsIGZ1
bGxGaWxlUGF0aCk7CiAKICAgICByZXR1cm4gZnVsbEZpbGVQYXRoOwogfQogCiBTdHJpbmcgRGF0
YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZk5vdEV4aXN0cykKIHsKLSAgICBMb2Nr
ZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBsb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogICAg
IE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIHBvcHVsYXRl
T3JpZ2lucygpOworICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxv
Y2tlcigqcXVvdGFNYW5hZ2VyKTsKIAogICAgIHJldHVybiBmdWxsUGF0aEZvckRhdGFiYXNlTm9M
b2NrKG9yaWdpbiwgbmFtZSwgY3JlYXRlSWZOb3RFeGlzdHMpLnRocmVhZHNhZmVDb3B5KCk7CiB9
CkBAIC0yOTcsOCArMjk5LDYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lu
cygpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcXVvdGFNYXAuc2V0KG5ldyBRdW90YU1hcCk7
Ci0gICAgaWYgKCFtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9xdW90YU1hbmFnZXIuc2V0KG5l
dyBPcmlnaW5RdW90YU1hbmFnZXIpOwogCiAgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7
CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQpAQCAtMzI0LDcgKzMyNCw2IEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpwb3B1bGF0ZU9yaWdpbnMoKQogdm9pZCBEYXRhYmFzZVRyYWNrZXI6
Om9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KQogewogICAg
IE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIHBvcHVsYXRl
T3JpZ2lucygpOwogICAgIEFTU0VSVChtX3F1b3RhTWFwKTsKICAgICBjb3B5S2V5c1RvVmVjdG9y
KCptX3F1b3RhTWFwLCByZXN1bHQpOwogfQpAQCAtMzU3LDEwICszNTYsMTIgQEAgYm9vbCBEYXRh
YmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JPcgogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6
ZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBWZWN0b3I8U3Ry
aW5nPiYgcmVzdWx0VmVjdG9yKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOwogICAgIFZlY3RvcjxTdHJpbmc+IHRlbXA7Ci0gICAgaWYgKCFkYXRhYmFz
ZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbiwgdGVtcCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgICAgICBpZiAoIWRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3JpZ2luLCB0
ZW1wKSkKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6aXRlcmF0b3IgaXRlciA9IHRlbXAuYmVnaW4oKTsgaXRlciAhPSB0ZW1wLmVuZCgp
OyArK2l0ZXIpCiAgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoaXRlci0+dGhyZWFkc2FmZUNv
cHkoKSk7CkBAIC00NzMsMjcgKzQ3NCwyOSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3Bl
bkRhdGFiYXNlKERhCiAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TXV0ZXhMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0
YWJhc2VNYXBHdWFyZCk7CiAKLSAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQotICAgICAgICBt
X29wZW5EYXRhYmFzZU1hcC5zZXQobmV3IERhdGFiYXNlT3JpZ2luTWFwKTsKKyAgICAgICAgaWYg
KCFtX29wZW5EYXRhYmFzZU1hcCkKKyAgICAgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLnNldChu
ZXcgRGF0YWJhc2VPcmlnaW5NYXApOwogCi0gICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmlu
Z0lkZW50aWZpZXIoKSk7Ci0gICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0
YWJhc2VNYXAtPmdldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgaWYgKCFuYW1l
TWFwKSB7Ci0gICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwOwotICAgICAgICBt
X29wZW5EYXRhYmFzZU1hcC0+c2V0KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLT50aHJlYWRz
YWZlQ29weSgpLCBuYW1lTWFwKTsKLSAgICB9CisgICAgICAgIFN0cmluZyBuYW1lKGRhdGFiYXNl
LT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgICAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAg
PSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKKyAg
ICAgICAgaWYgKCFuYW1lTWFwKSB7CisgICAgICAgICAgICBuYW1lTWFwID0gbmV3IERhdGFiYXNl
TmFtZU1hcDsKKyAgICAgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLT5zZXQoZGF0YWJhc2UtPnNl
Y3VyaXR5T3JpZ2luKCktPnRocmVhZHNhZmVDb3B5KCksIG5hbWVNYXApOworICAgICAgICB9CiAK
LSAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAg
aWYgKCFkYXRhYmFzZVNldCkgewotICAgICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNl
dDsKLSAgICAgICAgbmFtZU1hcC0+c2V0KG5hbWUudGhyZWFkc2FmZUNvcHkoKSwgZGF0YWJhc2VT
ZXQpOwotICAgIH0KKyAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+
Z2V0KG5hbWUpOworICAgICAgICBpZiAoIWRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICBkYXRh
YmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldDsKKyAgICAgICAgICAgIG5hbWVNYXAtPnNldChuYW1l
LnRocmVhZHNhZmVDb3B5KCksIGRhdGFiYXNlU2V0KTsKKyAgICAgICAgfQogCi0gICAgZGF0YWJh
c2VTZXQtPmFkZChkYXRhYmFzZSk7CisgICAgICAgIGRhdGFiYXNlU2V0LT5hZGQoZGF0YWJhc2Up
OwogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBZGRlZCBvcGVuIERhdGFiYXNlICVzICglcClcbiIs
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlKTsK
KyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJBZGRlZCBvcGVuIERhdGFiYXNlICVzICglcClcbiIs
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlKTsK
KyAgICB9CiAKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsK
ICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0
YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CkBAIC01MDQsNDQgKzUwNyw0NiBAQCB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlCiAgICAgaWYgKCFkYXRhYmFzZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5h
Z2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBM
b2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
b3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKIAotICAgIGlmICgh
bV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApIHsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKLSAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsK
LSAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRh
dGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBpZiAoIW5hbWVNYXApIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIFN0
cmluZyBuYW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgICAgICBEYXRhYmFz
ZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpKTsKKyAgICAgICAgaWYgKCFuYW1lTWFwKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAg
RGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICgh
ZGF0YWJhc2VTZXQpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAt
PmdldChuYW1lKTsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAg
IGRhdGFiYXNlU2V0LT5yZW1vdmUoZGF0YWJhc2UpOworICAgICAgICBkYXRhYmFzZVNldC0+cmVt
b3ZlKGRhdGFiYXNlKTsKIAotICAgIExPRyhTdG9yYWdlQVBJLCAiUmVtb3ZlZCBvcGVuIERhdGFi
YXNlICVzICglcClcbiIsIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRh
KCksIGRhdGFiYXNlKTsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZW1vdmVkIG9wZW4gRGF0
YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRh
dGEoKSwgZGF0YWJhc2UpOwogCi0gICAgaWYgKCFkYXRhYmFzZVNldC0+aXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICghZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKIAotICAgIG5hbWVNYXAtPnJlbW92ZShuYW1lKTsKLSAgICBkZWxldGUg
ZGF0YWJhc2VTZXQ7CisgICAgICAgIG5hbWVNYXAtPnJlbW92ZShuYW1lKTsKKyAgICAgICAgZGVs
ZXRlIGRhdGFiYXNlU2V0OwogCi0gICAgaWYgKCFuYW1lTWFwLT5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCFuYW1lTWFwLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJlbW92ZShkYXRhYmFzZS0+c2Vj
dXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGRlbGV0ZSBuYW1lTWFwOworICAgIH0KIAotICAgIG1f
b3BlbkRhdGFiYXNlTWFwLT5yZW1vdmUoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAg
IGRlbGV0ZSBuYW1lTWFwOwotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnJlbW92ZU9y
aWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgTG9ja2VyPE9yaWdpblF1b3Rh
TWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKCpxdW90YU1hbmFnZXIpOworICAgIHF1b3RhTWFu
YWdlci0+cmVtb3ZlT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiogZGF0YWJh
c2VzKQpAQCAtNTY0LDMwICs1NjksMzAgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5E
YXRhYmFzZXMoUwogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZv
ck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIEFTU0VSVCghb3Jp
Z2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkudHJ5TG9jaygpKTsKKyAgICBBU1NFUlQoIXF1b3RhTWFu
YWdlci0+dHJ5TG9jaygpKTsKIAogICAgIC8vIFVzZSB0aGUgT3JpZ2luUXVvdGFNYW5hZ2VyIG1l
Y2hhbmlzbSB0byBjYWxjdWxhdGUgdGhlIHVzYWdlCi0gICAgaWYgKG9yaWdpblF1b3RhTWFuYWdl
ck5vTG9jaygpLnRyYWNrc09yaWdpbihvcmlnaW4pKQotICAgICAgICByZXR1cm4gb3JpZ2luUXVv
dGFNYW5hZ2VyTm9Mb2NrKCkuZGlza1VzYWdlKG9yaWdpbik7CisgICAgaWYgKHF1b3RhTWFuYWdl
ci0+dHJhY2tzT3JpZ2luKG9yaWdpbikpCisgICAgICAgIHJldHVybiBxdW90YU1hbmFnZXItPmRp
c2tVc2FnZShvcmlnaW4pOwogCiAgICAgLy8gSWYgdGhlIE9yaWdpblF1b3RhTWFuYWdlciBkb2Vz
bid0IHRyYWNrIHRoaXMgb3JpZ2luIGFscmVhZHksIHByaW1lIGl0IHRvIGRvIHNvCi0gICAgb3Jp
Z2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkudHJhY2tPcmlnaW4ob3JpZ2luKTsKKyAgICBxdW90YU1h
bmFnZXItPnRyYWNrT3JpZ2luKG9yaWdpbik7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsK
ICAgICBkYXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbiwgbmFtZXMpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBvcmln
aW5RdW90YU1hbmFnZXJOb0xvY2soKS5hZGREYXRhYmFzZShvcmlnaW4sIG5hbWVzW2ldLCBmdWxs
UGF0aEZvckRhdGFiYXNlTm9Mb2NrKG9yaWdpbiwgbmFtZXNbaV0sIGZhbHNlKSk7CisgICAgICAg
IHF1b3RhTWFuYWdlci0+YWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lc1tpXSwgZnVsbFBhdGhGb3JE
YXRhYmFzZU5vTG9jayhvcmlnaW4sIG5hbWVzW2ldLCBmYWxzZSkpOwogCi0gICAgaWYgKCFvcmln
aW5RdW90YU1hbmFnZXJOb0xvY2soKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKKyAgICBpZiAoIXF1
b3RhTWFuYWdlci0+dHJhY2tzT3JpZ2luKG9yaWdpbikpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS5kaXNrVXNhZ2Uob3JpZ2luKTsKKyAg
ICByZXR1cm4gcXVvdGFNYW5hZ2VyLT5kaXNrVXNhZ2Uob3JpZ2luKTsKIH0KIAogdW5zaWduZWQg
bG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKIHsKLSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBsb2NrZXIob3JpZ2lu
UXVvdGFNYW5hZ2VyKCkpOwotCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJh
c2VHdWFyZCk7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9j
a2VyKCpxdW90YU1hbmFnZXIpOwogICAgIHJldHVybiB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmln
aW4pOwogfQogCkBAIC02MDEsNyArNjA2LDYgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
VHJhY2tlcjo6cXVvdAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFG
b3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBNdXRleExvY2tlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKICAgICBy
ZXR1cm4gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKIH0KIApAQCAtNjA5LDcgKzYxMyw2
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YShTZWN1cml0eU8KIHsKICAgICBNdXRl
eExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIHBvcHVsYXRlT3Jp
Z2lucygpOwogICAgIGlmIChxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pID09IHF1b3RhKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTcyMSwxMyArNzI0LDEwIEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICB9CiAKICAgICB7Ci0gICAgICAgIC8vIFRvIHNh
dGlzZnkgdGhlIGxvY2sgaGllcmFyY2h5LCB3ZSBoYXZlIHRvIGxvY2sgdGhlIG9yaWdpblF1b3Rh
TWFuYWdlciBiZWZvcmUgbV9kYXRhYmFzZUd1YXJkIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSB3ZSds
bCB0byBsb2NrIGJvdGguCi0gICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3Rh
TWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2lu
PT8iKTsKLQogICAgICAgICBkb25lRGVsZXRpbmdPcmlnaW4ob3JpZ2luKTsKIAorICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFz
ZXMgV0hFUkUgb3JpZ2luPT8iKTsKICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
ZGVsZXRpb24gb2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNzU4LDcgKzc1OCwxMCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVs
ZXRlT3JpZ2luKFNlY3VyCiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luUG9z
c2libHlMYXN0UmVmZXJlbmNlID0gb3JpZ2luOwogICAgICAgICBtX3F1b3RhTWFwLT5yZW1vdmUo
b3JpZ2luKTsKIAotICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS5yZW1vdmVPcmln
aW4ob3JpZ2luKTsKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFu
YWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKCpxdW90YU1hbmFnZXIpOworICAgICAgICAgICAgcXVv
dGFNYW5hZ2VyLT5yZW1vdmVPcmlnaW4ob3JpZ2luKTsKKyAgICAgICAgfQogCiAgICAgICAgIC8v
IElmIHdlIHJlbW92ZWQgdGhlIGxhc3Qgb3JpZ2luLCBkbyBzb21lIGFkZGl0aW9uYWwgZGVsZXRp
b24uCiAgICAgICAgIGlmIChtX3F1b3RhTWFwLT5pc0VtcHR5KCkpIHsKQEAgLTkxMyw4ICs5MTYs
NiBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoU2VjCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBUbyBzYXRpc2Z5IHRoZSBsb2NrIGhpZXJhcmNo
eSwgd2UgaGF2ZSB0byBsb2NrIHRoZSBvcmlnaW5RdW90YU1hbmFnZXIgYmVmb3JlIG1fZGF0YWJh
c2VHdWFyZCBpZiB0aGVyZSdzIGFueSBjaGFuY2Ugd2UnbGwgdG8gbG9jayBib3RoLgotICAgIExv
Y2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1h
bmFnZXIoKSk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7
CiAKICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PyIpOwpAQCAtOTMzLDcgKzkzNCwx
MCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2UoU2VjCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS5yZW1v
dmVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIHsKKyAgICAgICAgTG9ja2VyPE9yaWdpblF1
b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKCpxdW90YU1hbmFnZXIpOworICAgICAgICBx
dW90YU1hbmFnZXItPnJlbW92ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgfQogCiAgICAg
aWYgKG1fY2xpZW50KSB7CiAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9yaWdp
bihvcmlnaW4pOwpAQCAtOTU0LDggKzk1OCw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxl
dGVEYXRhYmFzZUZpbGUKIAogI2lmbmRlZiBOREVCVUcKICAgICB7Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgQVNTRVJUKGRlbGV0aW5nRGF0YWJh
c2Uob3JpZ2luLCBuYW1lKSB8fCBkZWxldGluZ09yaWdpbihvcmlnaW4pKTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIEFTU0VSVChk
ZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSkgfHwgZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7
CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlz
aW9uIDU3NjA2KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw2IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkhhc2g7CiAKICNp
ZiAhUExBVEZPUk0oQ0hST01JVU0pCiBjbGFzcyBEYXRhYmFzZVRyYWNrZXJDbGllbnQ7Ci1jbGFz
cyBPcmlnaW5RdW90YU1hbmFnZXI7CiAKIHN0cnVjdCBTZWN1cml0eU9yaWdpblRyYWl0czsKICNl
bmRpZiAvLyAhUExBVEZPUk0oQ0hST01JVU0pCkBAIC02Miw4ICs2MSw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgRGF0YWJhc2VUcmFja2VyJiB0cmFja2VyKCk7CiAgICAgLy8gVGhpcyBzaW5nbGV0
b24gd2lsbCBwb3RlbnRpYWxseSBiZSB1c2VkIGZyb20gbXVsdGlwbGUgd29ya2VyIHRocmVhZHMg
YW5kIHRoZSBwYWdlJ3MgY29udGV4dCB0aHJlYWQgc2ltdWx0YW5lb3VzbHkuICBUbyBrZWVwIHRo
aXMgc2FmZSwgaXQncwogICAgIC8vIGN1cnJlbnRseSB1c2luZyA0IGxvY2tzLiAgSW4gb3JkZXIg
dG8gYXZvaWQgZGVhZGxvY2sgd2hlbiB0YWtpbmcgbXVsdGlwbGUgbG9ja3MsIHlvdSBtdXN0IHRh
a2UgdGhlbSBpbiB0aGUgY29ycmVjdCBvcmRlcjoKLSAgICAvLyBvcmlnaW5RdW90YU1hbmFnZXIo
KSBiZWZvcmUgbV9kYXRhYmFzZUd1YXJkIG9yIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQKLSAgICAv
LyBtX2RhdGFiYXNlR3VhcmQgYmVmb3JlIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQKKyAgICAvLyBt
X2RhdGFiYXNlR3VhcmQgYmVmb3JlIHF1b3RhTWFuYWdlciBpZiBib3RoIGxvY2tzIGFyZSBuZWVk
ZWQuCisgICAgLy8gbm8gb3RoZXIgbG9jayBpcyB0YWtlbiBpbiB0aGUgY29kZSBsb2NrZWQgb24g
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZC4KICAgICAvLyBub3RpZmljYXRpb25NdXRleCgpIGlzIGN1
cnJlbnRseSBpbmRlcGVuZGVudCBvZiB0aGUgb3RoZXIgbG9ja3MuCiAKICAgICBib29sIGNhbkVz
dGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSk7CkBAIC03NSw5ICs3NCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRPcGVuRGF0YWJhc2Vz
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQ
dHI8RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0
TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlKik7CisgICAgdm9pZCBkYXRhYmFzZUNo
YW5nZWQoRGF0YWJhc2UqKTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZVRyYWNrZXIoKTsKKyAg
ICB+RGF0YWJhc2VUcmFja2VyKCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8RGF0YWJhc2UqPiBE
YXRhYmFzZVNldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+IERh
dGFiYXNlTmFtZU1hcDsKQEAgLTExMCwxMyArMTExLDkgQEAgcHVibGljOgogICAgIC8vIEZyb20g
YSBzZWNvbmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKICAg
ICB2b2lkIHNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIE9yaWdpblF1b3RhTWFuYWdlciYgb3JpZ2luUXVvdGFN
YW5hZ2VyKCk7Ci0KLQogICAgIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
KTsKIAogcHJpdmF0ZToKLSAgICBPcmlnaW5RdW90YU1hbmFnZXImIG9yaWdpblF1b3RhTWFuYWdl
ck5vTG9jaygpOwogICAgIGJvb2wgaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmln
aW4qIG9yaWdpbik7CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
OwogICAgIGJvb2wgZGF0YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0VmVjdG9yKTsKQEAgLTE0Miw4ICsxMzksNiBA
QCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1
bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gUXVvdGFNYXA7CiAgICAgbXV0
YWJsZSBPd25QdHI8UXVvdGFNYXA+IG1fcXVvdGFNYXA7CiAKLSAgICBPd25QdHI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBtX3F1b3RhTWFuYWdlcjsKLQogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aDsKIAogICAgIERhdGFiYXNlVHJhY2tlckNsaWVudCogbV9jbGllbnQ7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDU3NjA2KQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJP
cmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb24uaCIKIApAQCAtNTYsOSArNTUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50
OjpkaWRDb21taXRUcmFuCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3Rh
dGVtZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIE9yaWdpblF1b3Rh
TWFuYWdlciYgbWFuYWdlcihEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5RdW90YU1h
bmFnZXIoKSk7Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG1hbmFnZXIp
OwotICAgIG1hbmFnZXIubWFya0RhdGFiYXNlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKTsKKyAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQodHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkpOwogfQogCiBib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRR
dW90YShTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCg==
</data>
<flag name="commit-queue"
          id="37127"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53465</attachid>
            <date>2010-04-15 13:22:13 -0700</date>
            <delta_ts>2010-04-15 13:31:00 -0700</delta_ts>
            <desc>patch #1: remove the dependency on OriginQuotaManager from DatabaseTracker.h</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>20041</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDQtMTQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEYXRhYmFzZVRyYWNrZXIgcmVmYWN0b3Jpbmc6IHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbgor
ICAgICAgICBPcmlnaW5RdW90YU1hbmFnZXIgZnJvbSBEYXRhYmFzZVRyYWNrZXIuaAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE0ODIKKworICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6fkRhdGFiYXNlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpkYXRhYmFzZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnBvcHVsYXRlT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6Om9yaWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6dXNhZ2VGb3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFj
a2VyOjp1c2FnZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OnF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2V0
UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KToKKwogMjAxMC0wNC0xNCAgQW50b25pbyBHb21l
cyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZy
YXNlci4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA1NzY2
MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwyMCArNDksMTMgQEAKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1PcmlnaW5RdW90YU1hbmFnZXImIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lu
UXVvdGFNYW5hZ2VyTm9Mb2NrKCkKK3N0YXRpYyBXZWJDb3JlOjpPcmlnaW5RdW90YU1hbmFnZXIm
IG9yaWdpblF1b3RhTWFuYWdlcigpCiB7Ci0gICAgQVNTRVJUKG1fcXVvdGFNYW5hZ2VyKTsKLSAg
ICByZXR1cm4gKm1fcXVvdGFNYW5hZ2VyOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2ViQ29y
ZTo6T3JpZ2luUXVvdGFNYW5hZ2VyLCBxdW90YU1hbmFnZXIsICgpKTsKKyAgICByZXR1cm4gcXVv
dGFNYW5hZ2VyOwogfQogCi1PcmlnaW5RdW90YU1hbmFnZXImIERhdGFiYXNlVHJhY2tlcjo6b3Jp
Z2luUXVvdGFNYW5hZ2VyKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRh
YmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKLSAgICByZXR1cm4gb3JpZ2luUXVv
dGFNYW5hZ2VyTm9Mb2NrKCk7Ci19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERhdGFiYXNlVHJh
Y2tlciYgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkKIHsKQEAgLTc0LDYgKzY3LDkgQEAgRGF0
YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoKQogICAgIDogbV9jbGllbnQoMCkKIHsKICAg
ICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpOworCisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgcG9wdWxhdGVPcmlnaW5zKCk7
CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoY29u
c3QgU3RyaW5nJiBwYXRoKQpAQCAtMTMyLDE2ICsxMjgsMTQgQEAgYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmNhbkVzdGFibGlzaERhdGFiYQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXF1aXJlbWVu
dDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdGVtcFVzYWdlOwogICAgIHsKLSAgICAgICAgTG9j
a2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90
YU1hbmFnZXIoKSk7CiAKICAgICAgICAgaWYgKCFjYW5DcmVhdGVEYXRhYmFzZShvcmlnaW4sIG5h
bWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJlY29yZENyZWF0aW5n
RGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKIAotICAgICAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKLQog
ICAgICAgICAvLyBTaW5jZSB3ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3aXRo
aW4gdGhpcyBjb250ZXh0J3Mgb3JpZ2luLCBtYWtlIHN1cmUgdGhpcyBvcmlnaW4gaXMgYmVpbmcg
dHJhY2tlZCBieSB0aGUgUXVvdGFUcmFja2VyCiAgICAgICAgIC8vIGJ5IGZldGNoaW5nIGl0cyBj
dXJyZW50IHVzYWdlIG5vdy4KICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0gdXNh
Z2VGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKQEAgLTE5Miw3ICsxODYsNiBAQCBib29sIERhdGFi
YXNlVHJhY2tlcjo6aGFzRW50cnlGb3JPcmlnaW5OCiBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFz
RW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsK
ICAgICByZXR1cm4gaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKIH0KIApAQCAtMjE4
LDkgKzIxMSwxNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNCiAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKICAgICAvLyBUaGUgbWF4
aW11bSBzaXplIGZvciBhIGRhdGFiYXNlIGlzIHRoZSBmdWxsIHF1b3RhIGZvciBpdHMgb3JpZ2lu
LCBtaW51cyB0aGUgY3VycmVudCB1c2FnZSB3aXRoaW4gdGhlIG9yaWdpbiwKICAgICAvLyBwbHVz
IHRoZSBjdXJyZW50IHVzYWdlIG9mIHRoZSBnaXZlbiBkYXRhYmFzZQotICAgIExvY2tlcjxPcmln
aW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgTG9ja2VyPE9yaWdpblF1
b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAg
ICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCk7Ci0g
ICAgcmV0dXJuIHF1b3RhRm9yT3JpZ2luKG9yaWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIoKS5k
aXNrVXNhZ2Uob3JpZ2luKSArIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
ZGF0YWJhc2UtPmZpbGVOYW1lKCkpOworICAgIHJldHVybiBxdW90YUZvck9yaWdpbk5vTG9jayhv
cmlnaW4pIC0gb3JpZ2luUXVvdGFNYW5hZ2VyKCkuZGlza1VzYWdlKG9yaWdpbikgKyBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGRhdGFiYXNlLT5maWxlTmFtZSgpKTsKK30K
Kwordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZSogZGF0YWJh
c2UpCit7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2Vy
KG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5tYXJrRGF0
YWJhc2UoZGF0YWJhc2UpOwogfQogCiBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5QYXRo
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pIGNvbnN0CkBAIC0yMzEsNyArMjMxLDcgQEAgU3RyaW5n
IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cgogU3RyaW5nIERhdGFiYXNlVHJhY2tl
cjo6ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RFeGlzdHMpCiB7CiAgICAgQVNTRVJUKCFt
X2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBBU1NFUlQoIW9yaWdpblF1b3RhTWFuYWdl
ck5vTG9jaygpLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFvcmlnaW5RdW90YU1hbmFnZXIoKS50
cnlMb2NrKCkpOwogCiAgICAgZm9yIChIYXNoU2V0PFByb3Bvc2VkRGF0YWJhc2UqPjo6aXRlcmF0
b3IgaXRlciA9IG1fcHJvcG9zZWREYXRhYmFzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Byb3Bvc2Vk
RGF0YWJhc2VzLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgIGlmICgoKml0ZXIpLT5zZWNvbmQubmFt
ZSgpID09IG5hbWUgJiYgKCppdGVyKS0+Zmlyc3QtPmVxdWFsKG9yaWdpbikpCkBAIC0yNzUsMTcg
KzI3NSwxNiBAQCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAg
Ly8gSWYgdGhpcyBvcmlnaW4ncyBxdW90YSBpcyBiZWluZyB0cmFja2VkIChvcGVuIGhhbmRsZSB0
byBhIGRhdGFiYXNlIGluIHRoaXMgb3JpZ2luKSwgYWRkIHRoaXMgbmV3IGRhdGFiYXNlCiAgICAg
Ly8gdG8gdGhlIHF1b3RhIG1hbmFnZXIgbm93CiAgICAgU3RyaW5nIGZ1bGxGaWxlUGF0aCA9IFNR
TGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgob3JpZ2luUGF0aCwg
ZmlsZU5hbWUpOwotICAgIGlmIChvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS50cmFja3NPcmln
aW4ob3JpZ2luKSkKLSAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyTm9Mb2NrKCkuYWRkRGF0YWJh
c2Uob3JpZ2luLCBuYW1lLCBmdWxsRmlsZVBhdGgpOworICAgIGlmIChvcmlnaW5RdW90YU1hbmFn
ZXIoKS50cmFja3NPcmlnaW4ob3JpZ2luKSkKKyAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCku
YWRkRGF0YWJhc2Uob3JpZ2luLCBuYW1lLCBmdWxsRmlsZVBhdGgpOwogCiAgICAgcmV0dXJuIGZ1
bGxGaWxlUGF0aDsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRh
YmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3Jl
YXRlSWZOb3RFeGlzdHMpCiB7Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2Vy
KG9yaWdpblF1b3RhTWFuYWdlcigpKTsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9k
YXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKKyAgICBMb2NrZXI8T3JpZ2lu
UXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwog
CiAgICAgcmV0dXJuIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lLCBjcmVh
dGVJZk5vdEV4aXN0cykudGhyZWFkc2FmZUNvcHkoKTsKIH0KQEAgLTI5Nyw4ICsyOTYsNiBAQCB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6cG9wdWxhdGVPcmlnaW5zKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9xdW90YU1hcC5zZXQobmV3IFF1b3RhTWFwKTsKLSAgICBpZiAoIW1fcXVvdGFNYW5h
Z2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdlci5zZXQobmV3IE9yaWdpblF1b3RhTWFuYWdlcik7
CiAKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKICAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCkBAIC0zMjQsNyArMzIxLDYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnBvcHVs
YXRlT3JpZ2lucygpCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFi
YXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgcG9wdWxhdGVPcmlnaW5zKCk7CiAgICAgQVNTRVJU
KG1fcXVvdGFNYXApOwogICAgIGNvcHlLZXlzVG9WZWN0b3IoKm1fcXVvdGFNYXAsIHJlc3VsdCk7
CiB9CkBAIC0zNTcsMTAgKzM1MywxMiBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VO
YW1lc0Zvck9yCiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2lu
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiByZXN1bHRWZWN0b3IpCiB7
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CiAgICAgVmVj
dG9yPFN0cmluZz4gdGVtcDsKLSAgICBpZiAoIWRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2so
b3JpZ2luLCB0ZW1wKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgICAgIGlmICghZGF0
YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9jayhvcmlnaW4sIHRlbXApKQorICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAKICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdGVy
ID0gdGVtcC5iZWdpbigpOyBpdGVyICE9IHRlbXAuZW5kKCk7ICsraXRlcikKICAgICAgICAgcmVz
dWx0VmVjdG9yLmFwcGVuZChpdGVyLT50aHJlYWRzYWZlQ29weSgpKTsKQEAgLTQ3MywyNyArNDcx
LDI5IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGEKICAgICBpZiAo
IWRhdGFiYXNlKQogICAgICAgICByZXR1cm47CiAKLSAgICBNdXRleExvY2tlciBvcGVuRGF0YWJh
c2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKIAotICAg
IGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLnNldChu
ZXcgRGF0YWJhc2VPcmlnaW5NYXApOworICAgICAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQor
ICAgICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAuc2V0KG5ldyBEYXRhYmFzZU9yaWdpbk1hcCk7
CiAKLSAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKLSAgICBE
YXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRhdGFiYXNl
LT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBpZiAoIW5hbWVNYXApIHsKLSAgICAgICAgbmFtZU1h
cCA9IG5ldyBEYXRhYmFzZU5hbWVNYXA7Ci0gICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLT5zZXQo
ZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPnRocmVhZHNhZmVDb3B5KCksIG5hbWVNYXApOwot
ICAgIH0KKyAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7
CisgICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5n
ZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBpZiAoIW5hbWVNYXApIHsK
KyAgICAgICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1lTWFwOworICAgICAgICAgICAg
bV9vcGVuRGF0YWJhc2VNYXAtPnNldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+dGhyZWFk
c2FmZUNvcHkoKSwgbmFtZU1hcCk7CisgICAgICAgIH0KIAotICAgIERhdGFiYXNlU2V0KiBkYXRh
YmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBpZiAoIWRhdGFiYXNlU2V0KSB7Ci0g
ICAgICAgIGRhdGFiYXNlU2V0ID0gbmV3IERhdGFiYXNlU2V0OwotICAgICAgICBuYW1lTWFwLT5z
ZXQobmFtZS50aHJlYWRzYWZlQ29weSgpLCBkYXRhYmFzZVNldCk7Ci0gICAgfQorICAgICAgICBE
YXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7CisgICAgICAgIGlm
ICghZGF0YWJhc2VTZXQpIHsKKyAgICAgICAgICAgIGRhdGFiYXNlU2V0ID0gbmV3IERhdGFiYXNl
U2V0OworICAgICAgICAgICAgbmFtZU1hcC0+c2V0KG5hbWUudGhyZWFkc2FmZUNvcHkoKSwgZGF0
YWJhc2VTZXQpOworICAgICAgICB9CiAKLSAgICBkYXRhYmFzZVNldC0+YWRkKGRhdGFiYXNlKTsK
KyAgICAgICAgZGF0YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7CiAKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50
aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50
aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworICAgIH0KIAogICAgIE11dGV4TG9j
a2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwogICAgIGRvbmVDcmVhdGluZ0RhdGFi
YXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmll
cigpKTsKQEAgLTUwNCw0NCArNTA0LDQ2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVP
cGVuRGF0YWJhc2UKICAgICBpZiAoIWRhdGFiYXNlKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
b2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFN
YW5hZ2VyKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQp
OwotICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBH
dWFyZCk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1f
b3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCi0gICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIFN0cmluZyBu
YW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwotICAgIERhdGFiYXNlTmFtZU1hcCog
bmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2lu
KCkpOwotICAgIGlmICghbmFtZU1hcCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgU3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0
cmluZ0lkZW50aWZpZXIoKSk7CisgICAgICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1f
b3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAg
ICBpZiAoIW5hbWVNYXApIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VT
ZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFzZVNldCkgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAg
RGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOworICAgICAgICBp
ZiAoIWRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgZGF0YWJhc2VTZXQtPnJlbW92ZShk
YXRhYmFzZSk7CisgICAgICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoZGF0YWJhc2UpOwogCi0gICAg
TE9HKFN0b3JhZ2VBUEksICJSZW1vdmVkIG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJh
c2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UpOworICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIlJlbW92ZWQgb3BlbiBEYXRhYmFzZSAlcyAoJXApXG4iLCBkYXRh
YmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZSk7CiAKLSAg
ICBpZiAoIWRhdGFiYXNlU2V0LT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKCFkYXRhYmFzZVNldC0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
bmFtZU1hcC0+cmVtb3ZlKG5hbWUpOwotICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKKyAgICAgICAg
bmFtZU1hcC0+cmVtb3ZlKG5hbWUpOworICAgICAgICBkZWxldGUgZGF0YWJhc2VTZXQ7CiAKLSAg
ICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
IW5hbWVNYXAtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIG1fb3BlbkRh
dGFiYXNlTWFwLT5yZW1vdmUoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIGRlbGV0
ZSBuYW1lTWFwOwotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnJlbW92ZU9yaWdpbihk
YXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLT5y
ZW1vdmUoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBkZWxldGUgbmFtZU1h
cDsKKyAgICB9CisKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJM
b2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnJl
bW92ZU9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID4qIGRhdGFiYXNlcykKQEAg
LTU2NCwzMCArNTY2LDMwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2Vz
KFMKIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6dXNhZ2VGb3JPcmlnaW5O
b0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKLSAgICBBU1NFUlQoIW9yaWdpblF1b3Rh
TWFuYWdlck5vTG9jaygpLnRyeUxvY2soKSk7CisgICAgQVNTRVJUKCFvcmlnaW5RdW90YU1hbmFn
ZXIoKS50cnlMb2NrKCkpOwogCiAgICAgLy8gVXNlIHRoZSBPcmlnaW5RdW90YU1hbmFnZXIgbWVj
aGFuaXNtIHRvIGNhbGN1bGF0ZSB0aGUgdXNhZ2UKLSAgICBpZiAob3JpZ2luUXVvdGFNYW5hZ2Vy
Tm9Mb2NrKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0gICAgICAgIHJldHVybiBvcmlnaW5RdW90
YU1hbmFnZXJOb0xvY2soKS5kaXNrVXNhZ2Uob3JpZ2luKTsKKyAgICBpZiAob3JpZ2luUXVvdGFN
YW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCisgICAgICAgIHJldHVybiBvcmlnaW5RdW90
YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKIAogICAgIC8vIElmIHRoZSBPcmlnaW5RdW90
YU1hbmFnZXIgZG9lc24ndCB0cmFjayB0aGlzIG9yaWdpbiBhbHJlYWR5LCBwcmltZSBpdCB0byBk
byBzbwotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLnRyYWNrT3JpZ2luKG9yaWdpbik7
CisgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4ob3JpZ2luKTsKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IG5hbWVzOwogICAgIGRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luLCBuYW1lcyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygpLmFkZERhdGFiYXNlKG9y
aWdpbiwgbmFtZXNbaV0sIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2sob3JpZ2luLCBuYW1lc1tp
XSwgZmFsc2UpKTsKKyAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJhc2Uob3Jp
Z2luLCBuYW1lc1tpXSwgZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhvcmlnaW4sIG5hbWVzW2ld
LCBmYWxzZSkpOwogCi0gICAgaWYgKCFvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS50cmFja3NP
cmlnaW4ob3JpZ2luKSkKKyAgICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdp
bihvcmlnaW4pKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gb3JpZ2luUXVvdGFNYW5h
Z2VyTm9Mb2NrKCkuZGlza1VzYWdlKG9yaWdpbik7CisgICAgcmV0dXJuIG9yaWdpblF1b3RhTWFu
YWdlcigpLmRpc2tVc2FnZShvcmlnaW4pOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJh
c2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IGxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7
Ci0KKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBM
b2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFN
YW5hZ2VyKCkpOwogICAgIHJldHVybiB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwogfQog
CkBAIC02MDEsNyArNjAzLDYgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6
cXVvdAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFGb3JPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2Uo
bV9kYXRhYmFzZUd1YXJkKTsKLSAgICBwb3B1bGF0ZU9yaWdpbnMoKTsKICAgICByZXR1cm4gcXVv
dGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKIH0KIApAQCAtNjA5LDcgKzYxMCw2IEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpzZXRRdW90YShTZWN1cml0eU8KIHsKICAgICBNdXRleExvY2tlciBs
b2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKIAotICAgIHBvcHVsYXRlT3JpZ2lucygpOwog
ICAgIGlmIChxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pID09IHF1b3RhKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTcyMSwxMyArNzIxLDEwIEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxl
dGVPcmlnaW4oU2VjdXIKICAgICB9CiAKICAgICB7Ci0gICAgICAgIC8vIFRvIHNhdGlzZnkgdGhl
IGxvY2sgaGllcmFyY2h5LCB3ZSBoYXZlIHRvIGxvY2sgdGhlIG9yaWdpblF1b3RhTWFuYWdlciBi
ZWZvcmUgbV9kYXRhYmFzZUd1YXJkIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSB3ZSdsbCB0byBsb2Nr
IGJvdGguCi0gICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxv
Y2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRh
YmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8iKTsKLQog
ICAgICAgICBkb25lRGVsZXRpbmdPcmlnaW4ob3JpZ2luKTsKIAorICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBEYXRhYmFzZXMgV0hFUkUg
b3JpZ2luPT8iKTsKICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRpb24g
b2YgZGF0YWJhc2VzIGZyb20gb3JpZ2luICVzIGZyb20gdHJhY2tlciIsIG9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzU4LDcgKzc1NSwxMCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2lu
KFNlY3VyCiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luUG9zc2libHlMYXN0
UmVmZXJlbmNlID0gb3JpZ2luOwogICAgICAgICBtX3F1b3RhTWFwLT5yZW1vdmUob3JpZ2luKTsK
IAotICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXJOb0xvY2soKS5yZW1vdmVPcmlnaW4ob3JpZ2lu
KTsKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVv
dGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAgICAgICAgIG9yaWdp
blF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihvcmlnaW4pOworICAgICAgICB9CiAKICAgICAg
ICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4sIGRvIHNvbWUgYWRkaXRpb25hbCBk
ZWxldGlvbi4KICAgICAgICAgaWYgKG1fcXVvdGFNYXAtPmlzRW1wdHkoKSkgewpAQCAtOTEzLDgg
KzkxMyw2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShTZWMKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFRvIHNhdGlzZnkgdGhlIGxvY2sgaGll
cmFyY2h5LCB3ZSBoYXZlIHRvIGxvY2sgdGhlIG9yaWdpblF1b3RhTWFuYWdlciBiZWZvcmUgbV9k
YXRhYmFzZUd1YXJkIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSB3ZSdsbCB0byBsb2NrIGJvdGguCi0g
ICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1
b3RhTWFuYWdlcigpKTsKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1
YXJkKTsKIAogICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVU
RSBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/Iik7CkBAIC05MzMsNyAr
OTMxLDEwIEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZShTZWMKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9yaWdpblF1b3RhTWFuYWdlck5vTG9jaygp
LnJlbW92ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgeworICAgICAgICBMb2NrZXI8T3Jp
Z2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkp
OworICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVEYXRhYmFzZShvcmlnaW4sIG5h
bWUpOworICAgIH0KIAogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBtX2NsaWVudC0+ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKQEAgLTk1NCw4ICs5NTUsOCBAQCBib29sIERh
dGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
ewotICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIEFT
U0VSVChkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSkgfHwgZGVsZXRpbmdPcmlnaW4ob3Jp
Z2luKSk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQp
OworICAgICAgICBBU1NFUlQoZGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpIHx8IGRlbGV0
aW5nT3JpZ2luKG9yaWdpbikpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVHJhY2tlci5oCShyZXZpc2lvbiA1NzY2MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5IYXNoOwogCiAjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogY2xhc3MgRGF0YWJhc2VU
cmFja2VyQ2xpZW50OwotY2xhc3MgT3JpZ2luUXVvdGFNYW5hZ2VyOwogCiBzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5UcmFpdHM7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKENIUk9NSVVNKQpAQCAtNjIsOCAr
NjEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIERhdGFiYXNlVHJhY2tlciYgdHJhY2tlcigpOwog
ICAgIC8vIFRoaXMgc2luZ2xldG9uIHdpbGwgcG90ZW50aWFsbHkgYmUgdXNlZCBmcm9tIG11bHRp
cGxlIHdvcmtlciB0aHJlYWRzIGFuZCB0aGUgcGFnZSdzIGNvbnRleHQgdGhyZWFkIHNpbXVsdGFu
ZW91c2x5LiAgVG8ga2VlcCB0aGlzIHNhZmUsIGl0J3MKICAgICAvLyBjdXJyZW50bHkgdXNpbmcg
NCBsb2Nrcy4gIEluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHdoZW4gdGFraW5nIG11bHRpcGxl
IGxvY2tzLCB5b3UgbXVzdCB0YWtlIHRoZW0gaW4gdGhlIGNvcnJlY3Qgb3JkZXI6Ci0gICAgLy8g
b3JpZ2luUXVvdGFNYW5hZ2VyKCkgYmVmb3JlIG1fZGF0YWJhc2VHdWFyZCBvciBtX29wZW5EYXRh
YmFzZU1hcEd1YXJkCi0gICAgLy8gbV9kYXRhYmFzZUd1YXJkIGJlZm9yZSBtX29wZW5EYXRhYmFz
ZU1hcEd1YXJkCisgICAgLy8gbV9kYXRhYmFzZUd1YXJkIGJlZm9yZSBxdW90YU1hbmFnZXIgaWYg
Ym90aCBsb2NrcyBhcmUgbmVlZGVkLgorICAgIC8vIG5vIG90aGVyIGxvY2sgaXMgdGFrZW4gaW4g
dGhlIGNvZGUgbG9ja2VkIG9uIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQuCiAgICAgLy8gbm90aWZp
Y2F0aW9uTXV0ZXgoKSBpcyBjdXJyZW50bHkgaW5kZXBlbmRlbnQgb2YgdGhlIG90aGVyIGxvY2tz
LgogCiAgICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUpOwpAQCAtNzUsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBnZXRPcGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7CiAKICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlKik7Cisg
ICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2UqKTsKIAogcHJpdmF0ZToKICAgICBEYXRh
YmFzZVRyYWNrZXIoKTsKQEAgLTExMCwxMyArMTEwLDkgQEAgcHVibGljOgogICAgIC8vIEZyb20g
YSBzZWNvbmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKICAg
ICB2b2lkIHNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIE9yaWdpblF1b3RhTWFuYWdlciYgb3JpZ2luUXVvdGFN
YW5hZ2VyKCk7Ci0KLQogICAgIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
KTsKIAogcHJpdmF0ZToKLSAgICBPcmlnaW5RdW90YU1hbmFnZXImIG9yaWdpblF1b3RhTWFuYWdl
ck5vTG9jaygpOwogICAgIGJvb2wgaGFzRW50cnlGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmln
aW4qIG9yaWdpbik7CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2VOb0xvY2soU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
OwogICAgIGJvb2wgZGF0YWJhc2VOYW1lc0Zvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0VmVjdG9yKTsKQEAgLTE0Miw4ICsxMzgsNiBA
QCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1
bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gUXVvdGFNYXA7CiAgICAgbXV0
YWJsZSBPd25QdHI8UXVvdGFNYXA+IG1fcXVvdGFNYXA7CiAKLSAgICBPd25QdHI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBtX3F1b3RhTWFuYWdlcjsKLQogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aDsKIAogICAgIERhdGFiYXNlVHJhY2tlckNsaWVudCogbV9jbGllbnQ7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDU3NjYzKQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJP
cmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb24uaCIKIApAQCAtNTYsOSArNTUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50
OjpkaWRDb21taXRUcmFuCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3Rh
dGVtZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIE9yaWdpblF1b3Rh
TWFuYWdlciYgbWFuYWdlcihEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5RdW90YU1h
bmFnZXIoKSk7Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG1hbmFnZXIp
OwotICAgIG1hbmFnZXIubWFya0RhdGFiYXNlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKTsKKyAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQodHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkpOwogfQogCiBib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRR
dW90YShTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCg==
</data>
<flag name="review"
          id="37217"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="37218"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>