<?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>29115</bug_id>
          
          <creation_ts>2009-09-09 18:27:19 -0700</creation_ts>
          <short_desc>Allow multiple read transactions to run concurrently on the same DB thread</short_desc>
          <delta_ts>2009-09-22 15:25:09 -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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>146046</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-09 18:27:19 -0700</bug_when>
    <thetext>Now that we have a notion of read only transactions and a way to deny all write operations they might attempt (bug 28918), we can change the transaction coordinator to allow multiple read transactions on the same DB thread to run concurrently, without risking running into deadlocks (no write operations == no exclusive locks on DB files). We should do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146797</commentid>
    <comment_count>1</comment_count>
      <attachid>39490</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-11 16:40:47 -0700</bug_when>
    <thetext>Created attachment 39490
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147723</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-16 19:46:05 -0700</bug_when>
    <thetext>&gt; m_pendingTransactions.add(dbIdentifier, pendingTransactions);
&gt; it = m_pendingTransactions.find(dbIdentifier);

Looks like map.add() will return an iterator for you. So you don&apos;t have to call find() again.

        // does nothing if key is already present
        // return value is a pair of the iterator to the key location, 
        // and a boolean that&apos;s true if a new value was actually added
        pair&lt;iterator, bool&gt; add(const KeyType&amp;, const MappedType&amp;); 

&gt; while ((pt_it-&gt;get() != transaction) &amp;&amp; (pt_it-&gt;get()-&gt;isReadOnly()) &amp;&amp; (++pt_it, 1));
&gt; ASSERT(pt_it-&gt;get() == transaction);

Since the iteration can&apos;t fail to find your transaction, according to the ASSERT, I don&apos;t think you need to test for end() in your while loop. Also, that while loop is a bit much to parse... (hmmm, what does (foo, 1) mean :)

while ((pt_it-&gt;get() != transaction) &amp;&amp; pt_it-&gt;get()-&gt;isReadOnly())
  ++pt_it

The logic looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147850</commentid>
    <comment_count>3</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-17 11:05:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; m_pendingTransactions.add(dbIdentifier, pendingTransactions);
&gt; &gt; it = m_pendingTransactions.find(dbIdentifier);
&gt; 
&gt; Looks like map.add() will return an iterator for you. So you don&apos;t have to call
&gt; find() again.

good catch! fixed.

&gt; &gt; while ((pt_it-&gt;get() != transaction) &amp;&amp; (pt_it-&gt;get()-&gt;isReadOnly()) &amp;&amp; (++pt_it, 1));
&gt; &gt; ASSERT(pt_it-&gt;get() == transaction);
&gt; 
&gt; Since the iteration can&apos;t fail to find your transaction, according to the
&gt; ASSERT, I don&apos;t think you need to test for end() in your while loop. Also, that
&gt; while loop is a bit much to parse... (hmmm, what does (foo, 1) mean :)

i don&apos;t think checking for end() is redundant. if we have a bug in this code and the transaction was somehow deleted before releaseLock() is called, i think it&apos;s better to fail the assertion than to get an unexpected crash in the while loop.

(a, b, ..., y, z) is equivalent to

a;
b;
...
y;
return z;

don&apos;t you love C++? :)

&gt; while ((pt_it-&gt;get() != transaction) &amp;&amp; pt_it-&gt;get()-&gt;isReadOnly())
&gt;   ++pt_it
&gt; 
&gt; The logic looks good to me.

i changed it to this, but i kept the (pt_it != pendingTransactions.end()) check too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147875</commentid>
    <comment_count>4</comment_count>
      <attachid>39716</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-17 11:58:47 -0700</bug_when>
    <thetext>Created attachment 39716
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147897</commentid>
    <comment_count>5</comment_count>
      <attachid>39717</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-17 12:47:36 -0700</bug_when>
    <thetext>Created attachment 39717
patch

Same patch, but combined 2 hash maps into 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147930</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-17 13:48:59 -0700</bug_when>
    <thetext>Getting there... the introduction of the CoordinationInfo struct is good, the algorithm is easier to follow as a result... please rename the data members and types used for even greater clarity...

 50         typedef HashMap&lt;String, TransactionsQueue&gt; TransactionsHashMap;
 51         struct CoordinationInfo {
 52             TransactionsQueue pendingTransactions;
 53             int numPendingWriteTransactions;
 54         };
 55         typedef HashMap&lt;String, CoordinationInfo&gt; TransactionsHashMap;
 56         TransactionsHashMap m_pendingTransactions;

on the new struct, add a default ctor that zero-inits numPendingWriteTransactions 

add a code comment that indicates the String identifies a database file

typedef HashMap&lt;String, CoordinationInfo&gt; CoordinationInfoMap;
CoordinationInfoMap m_coordinationInfoMap;

89     CoordinationInfo&amp; cInfo = it-&gt;second;

I think webkit style would have you call this either &apos;info&apos; or &apos;coordinationInfo&apos;, the cJazz has a hungarian sounds to it.

57         CoordinationInfo cInfo;
58         cInfo.numPendingWriteTransactions = 0;
59         it = m_pendingTransactions.add(dbIdentifier, cInfo).first;

subtract two lines

it = m_coordinationInfoMap.add(dbIdentifier, CoordinationInfo()).first;


 131             if (!cInfo.pendingTransactions.first()-&gt;isReadOnly())
 132                 cInfo.pendingTransactions.first()-&gt;lockAcquired();
 133             else {
 134                 TransactionsQueue::iterator pt_it = cInfo.pendingTransactions.begin();
 135                 while ((pt_it != cInfo.pendingTransactions.end()) &amp;&amp; (pt_it-&gt;get()-&gt;isReadOnly())) {
 136                     pt_it-&gt;get()-&gt;lockAcquired();
 137                     ++pt_it;
 138                 }
 139             }

Since the else clause requires braces, put them around the if clause too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147942</commentid>
    <comment_count>7</comment_count>
      <attachid>39725</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-17 14:35:34 -0700</bug_when>
    <thetext>Created attachment 39725
patch

(In reply to comment #6)
&gt; on the new struct, add a default ctor that zero-inits
&gt; numPendingWriteTransactions 

done.

&gt; add a code comment that indicates the String identifies a database file

done.

&gt; typedef HashMap&lt;String, CoordinationInfo&gt; CoordinationInfoMap;
&gt; CoordinationInfoMap m_coordinationInfoMap;

done.

&gt; 89     CoordinationInfo&amp; cInfo = it-&gt;second;
&gt; 
&gt; I think webkit style would have you call this either &apos;info&apos; or
&gt; &apos;coordinationInfo&apos;, the cJazz has a hungarian sounds to it.

changed to &apos;info&apos;.

&gt; 57         CoordinationInfo cInfo;
&gt; 58         cInfo.numPendingWriteTransactions = 0;
&gt; 59         it = m_pendingTransactions.add(dbIdentifier, cInfo).first;
&gt; 
&gt; subtract two lines

done.

&gt;  131             if (!cInfo.pendingTransactions.first()-&gt;isReadOnly())
&gt;  132                 cInfo.pendingTransactions.first()-&gt;lockAcquired();
&gt;  133             else {
&gt;  134                 TransactionsQueue::iterator pt_it =
&gt; cInfo.pendingTransactions.begin();
&gt;  135                 while ((pt_it != cInfo.pendingTransactions.end()) &amp;&amp;
&gt; (pt_it-&gt;get()-&gt;isReadOnly())) {
&gt;  136                     pt_it-&gt;get()-&gt;lockAcquired();
&gt;  137                     ++pt_it;
&gt;  138                 }
&gt;  139             }
&gt; 
&gt; Since the else clause requires braces, put them around the if clause too.

i&apos;m not sure the webkit style allows this. at the very least, they have this example that is correct according to the webkit guide:

if (condition)
    doSomething();
else {
    ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147951</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-17 15:15:18 -0700</bug_when>
    <thetext>lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147953</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-17 15:18:45 -0700</bug_when>
    <thetext>... and sorry for the bum brack steer

(buganizer, lord only knows what random bug that got posted too before)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148013</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-17 21:54:24 -0700</bug_when>
    <thetext>&gt; &gt; &gt; while ((pt_it-&gt;get() != transaction) &amp;&amp; (pt_it-&gt;get()-&gt;isReadOnly()) &amp;&amp; (++pt_it, 1));
&gt; &gt; &gt; ASSERT(pt_it-&gt;get() == transaction);
&gt; &gt; 
&gt; &gt; Since the iteration can&apos;t fail to find your transaction, according to the
&gt; &gt; ASSERT, I don&apos;t think you need to test for end() in your while loop. Also, that
&gt; &gt; while loop is a bit much to parse... (hmmm, what does (foo, 1) mean :)
&gt; 
&gt; i don&apos;t think checking for end() is redundant. if we have a bug in this code
&gt; and the transaction was somehow deleted before releaseLock() is called, i think
&gt; it&apos;s better to fail the assertion than to get an unexpected crash in the while
&gt; loop.

oh... wait... i missed this.

If there&apos;s a bug, we should fix it. Either the assertion holds or it doesn&apos;t, which is it? And if it doesn&apos;t hold than shouldn&apos;t there be code for that case?

 92         TransactionsQueue::iterator pt_it = info.pendingTransactions.begin();
 93         while ((pt_it != info.pendingTransactions.end()) &amp;&amp; (pt_it-&gt;get() != transaction) &amp;&amp; (pt_it-&gt;get()-&gt;isReadOnly()))
 94             ++pt_it;
 95         ASSERT(pt_it-&gt;get() == transaction);
 96         info.pendingTransactions.remove(pt_it);

Also webkit style issues. I&apos;m not sure what webkit style says about parens, certainly that last condition doesn&apos;t need them. I am sure webkit style frowns upon abbr_undbr naming. I think you need to take a pass thru this patch for style&apos;isms.  What does webkit style say about non-const references like this?
CoordinationInfo&amp; info = it-&gt;second;

If you had a private helper method to return a CoordiationInfoMap* given a dbIdentifier, I think that could help because you&apos;d only have one it(erator) to be concerned with, and no non-const references involved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148016</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-17 22:22:44 -0700</bug_when>
    <thetext>You know, in looking at this more closely, maybe you should take a stab at modifying your data structures to better match the type of logic that needs to be applied to them. Iterating over a wanna be FIFO queue is just not quite right. I think you&apos;ve managed to implement the desired behavior despite the data structures, but they&apos;re not working in your favor.

struct CoordinationInfo {
  Q pendingTransactions;
  Set activeReadTransactions;
  Transaction* activeReadWriteTransaction;
};

That may be easier to reason about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148267</commentid>
    <comment_count>12</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-18 11:47:58 -0700</bug_when>
    <thetext>&gt; If there&apos;s a bug, we should fix it. Either the assertion holds or it doesn&apos;t,
&gt; which is it? And if it doesn&apos;t hold than shouldn&apos;t there be code for that case?
&gt; 
&gt;  92         TransactionsQueue::iterator pt_it =
&gt; info.pendingTransactions.begin();
&gt;  93         while ((pt_it != info.pendingTransactions.end()) &amp;&amp; (pt_it-&gt;get()
&gt; != transaction) &amp;&amp; (pt_it-&gt;get()-&gt;isReadOnly()))
&gt;  94             ++pt_it;
&gt;  95         ASSERT(pt_it-&gt;get() == transaction);
&gt;  96         info.pendingTransactions.remove(pt_it);

removed the check for pt_it != info.pendingTransactions.end(). i&apos;m not very happy about this: if at a later time we somehow introduce a bug in this code, it will result in seg faults. however, ASSERTs are no-ops in release builds and i&apos;m not sure if there&apos;s anything better than crashing the app that we can do when we don&apos;t find the transaction in this list.

&gt; Also webkit style issues. I&apos;m not sure what webkit style says about parens,
&gt; certainly that last condition doesn&apos;t need them.

removed.

&gt; I am sure webkit style frowns upon abbr_undbr naming. I think you need to take a pass thru this patch for
&gt; style&apos;isms.

done.

&lt; What does webkit style say about non-const references like this?
&gt; CoordinationInfo&amp; info = it-&gt;second;
&gt; 
&gt; If you had a private helper method to return a CoordiationInfoMap* given a
&gt; dbIdentifier, I think that could help because you&apos;d only have one it(erator) to
&gt; be concerned with, and no non-const references involved.

un-abbreviated the iterator variables.

i don&apos;t think webkit&apos;s style guide says anything about non-const references. in any case, it seems to me like a legitimate way to modify some data &quot;in place&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148275</commentid>
    <comment_count>13</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-18 11:54:05 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; You know, in looking at this more closely, maybe you should take a stab at
&gt; modifying your data structures to better match the type of logic that needs to
&gt; be applied to them. Iterating over a wanna be FIFO queue is just not quite
&gt; right. I think you&apos;ve managed to implement the desired behavior despite the
&gt; data structures, but they&apos;re not working in your favor.
&gt; 
&gt; struct CoordinationInfo {
&gt;   Q pendingTransactions;
&gt;   Set activeReadTransactions;
&gt;   Transaction* activeReadWriteTransaction;
&gt; };
&gt; 
&gt; That may be easier to reason about.

let&apos;s talk a bit about this offline. ideally (performance-wise), i might want a list of sets of transactions: each write transaction would have its own set and all read transactions that are supposed to run concurrently would be put into the same set. and the list would really be a linked list (or similar) to allow O(1) removeFirst() operations. but that might be a bit of an overkill.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148312</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-18 12:35:48 -0700</bug_when>
    <thetext>&gt; let&apos;s talk a bit about this offline. ideally (performance-wise), i might want a
&gt; list of sets of transactions: each write transaction would have its own set and
&gt; all read transactions that are supposed to run concurrently would be put into
&gt; the same set. and the list would really be a linked list (or similar) to allow
&gt; O(1) removeFirst() operations. but that might be a bit of an overkill.

That sounds like a way to organize the data structures too, I think you&apos;d lose the ordering in which reads arrive when more than one piles up while waiting on a write to complete, but not sure that really matters since they&apos;d all get started when the write completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148405</commentid>
    <comment_count>15</comment_count>
      <attachid>39793</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-18 15:02:23 -0700</bug_when>
    <thetext>Created attachment 39793
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148439</commentid>
    <comment_count>16</comment_count>
      <attachid>39803</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-18 16:35:42 -0700</bug_when>
    <thetext>Created attachment 39803
patch

Same patch, but without the recursion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148454</commentid>
    <comment_count>17</comment_count>
      <attachid>39809</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-18 18:44:22 -0700</bug_when>
    <thetext>Created attachment 39809
patch

Same patch with minor style changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148566</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-20 11:17:10 -0700</bug_when>
    <thetext>The SQLTransactionCoordinator logic LGTM, much clearer.

My first look at the layout tests...

// Hack: wait for these transactions to finish running before terminating the test
Is this empty transaction guaranteed to finish last?

The two new layout tests start &lt;n&gt; transactions back to back. Would a valid way to wait for completion be to observe &lt;n&gt;th completion callback and signal &apos;done&apos; at that point? Something like bump a  &apos;transactionsStarted&apos; count prior to calling db.transaction() or readTransaction(), and bump a &apos;transactionComplte&apos; count in the success callback, and test if (started == complete) for done&apos;ness.


Incidentally, unrelated to this patch, looks like sync Database.tableNames() method is a wedge-ladden land-mine waiting to get stepped on. Runs a select statement without an explicit transaction, so that puts the statement in an implicit transaction. Depending on the lock applied to the file, and on the connection which holds that lock... this can wedge the system. Database.tableNames() is only used by the inpspector, so webapp code can&apos;t get wedged by this, but the inspector can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148838</commentid>
    <comment_count>19</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-21 14:42:47 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; The SQLTransactionCoordinator logic LGTM, much clearer.
&gt; 
&gt; My first look at the layout tests...
&gt; 
&gt; // Hack: wait for these transactions to finish running before terminating the
&gt; test
&gt; Is this empty transaction guaranteed to finish last?

It is (because it is a write transactions, and the transaction coordinator will wait for all other transactions to finish executing before scheduling this one), but it is a pretty hacky way to assert termination.

&gt; The two new layout tests start &lt;n&gt; transactions back to back. Would a valid way
&gt; to wait for completion be to observe &lt;n&gt;th completion callback and signal
&gt; &apos;done&apos; at that point? Something like bump a  &apos;transactionsStarted&apos; count prior
&gt; to calling db.transaction() or readTransaction(), and bump a
&gt; &apos;transactionComplte&apos; count in the success callback, and test if (started ==
&gt; complete) for done&apos;ness.

replaced the hack in both layout tests with something nicer.

&gt; Incidentally, unrelated to this patch, looks like sync Database.tableNames()
&gt; method is a wedge-ladden land-mine waiting to get stepped on. Runs a select
&gt; statement without an explicit transaction, so that puts the statement in an
&gt; implicit transaction. Depending on the lock applied to the file, and on the
&gt; connection which holds that lock... this can wedge the system.
&gt; Database.tableNames() is only used by the inpspector, so webapp code can&apos;t get
&gt; wedged by this, but the inspector can.

you&apos;re right, we (or somebody else?) will have to take a look at this at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148839</commentid>
    <comment_count>20</comment_count>
      <attachid>39880</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-21 14:43:22 -0700</bug_when>
    <thetext>Created attachment 39880
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148844</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-21 14:49:12 -0700</bug_when>
    <thetext>lgtm... but i&apos;m not a webkit reviewer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149147</commentid>
    <comment_count>22</comment_count>
      <attachid>39880</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-22 12:24:46 -0700</bug_when>
    <thetext>Comment on attachment 39880
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149160</commentid>
    <comment_count>23</comment_count>
      <attachid>39880</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 13:09:11 -0700</bug_when>
    <thetext>Comment on attachment 39880
patch

Rejecting patch 39880 from commit-queue.

Failed to run &quot;WebKitTools/Scripts/build-webkit&quot; exit_code: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149162</commentid>
    <comment_count>24</comment_count>
      <attachid>39880</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 13:16:20 -0700</bug_when>
    <thetext>Comment on attachment 39880
patch

Rejecting patch 39880 from commit-queue.

Failed to run &quot;WebKitTools/Scripts/build-webkit&quot; exit_code: 1
Last 1000 characters of output:
sr/include/libxml2 -I/Users/eseidel/Projects/build/Release/WebCoreSQLite3 -I/Users/eseidel/Projects/build/Release/DerivedSources/WebCore -I/Users/eseidel/Projects/build/WebCore.build/Release/WebCore.build/DerivedSources/i386 -I/Users/eseidel/Projects/build/WebCore.build/Release/WebCore.build/DerivedSources -include /var/folders/zz/zzzivhrRnAmviuee++2Pvk+-4yw/-Caches-/com.apple.Xcode.72687/SharedPrecompiledHeaders/WebCorePrefix-bbyywajvccdtusbqnmzotlpadxhk/WebCorePrefix.h -c /Users/eseidel/Projects/build/Release/DerivedSources/WebCore/JSDOMWindow.cpp -o /Users/eseidel/Projects/build/WebCore.build/Release/WebCore.build/Objects-normal/i386/JSDOMWindow.o
** BUILD FAILED **

The following build commands failed:
WebCore:
	Distributed-CompileC /Users/eseidel/Projects/build/WebCore.build/Release/WebCore.build/Objects-normal/i386/SQLTransactionCoordinator.o /Users/eseidel/Projects/CommitQueue/WebCore/storage/SQLTransactionCoordinator.cpp normal i386 c++ com.apple.compilers.gcc.4_2
(1 failure)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149163</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-22 13:19:02 -0700</bug_when>
    <thetext>Sorry for the double-rejection, that&apos;s bug 28239.  At least the second one included helpful output! (Which is what I was trying to test here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149165</commentid>
    <comment_count>26</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-22 13:20:21 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Sorry for the double-rejection, that&apos;s bug 28239.

no problem. patching this patch on a mac now and will build it in release mode before re-uploading it. sorry it failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149205</commentid>
    <comment_count>27</comment_count>
      <attachid>39946</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-22 14:50:14 -0700</bug_when>
    <thetext>Created attachment 39946
patch

Same patch. Removed the unused &apos;readOnly&apos; parameter to SQLTransactionCoordinator::acquireLock(). Should make all builders happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149212</commentid>
    <comment_count>28</comment_count>
      <attachid>39946</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-22 15:03:40 -0700</bug_when>
    <thetext>Comment on attachment 39946
patch

Still r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149220</commentid>
    <comment_count>29</comment_count>
      <attachid>39946</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 15:25:03 -0700</bug_when>
    <thetext>Comment on attachment 39946
patch

Clearing flags on attachment: 39946

Committed r48653: &lt;http://trac.webkit.org/changeset/48653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149221</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 15:25:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39490</attachid>
            <date>2009-09-11 16:40:47 -0700</date>
            <delta_ts>2009-09-17 11:58:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18639</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODMyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IENsZWFuaW5nIHVwIHRoZQorICAgICAgICBuZXcgaGFz
aCBtYXAuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6CisK
IDIwMDktMDktMTEgIE1pY2hlbGFuZ2VsbyBEZSBTaW1vbmUgIDxtaWNkZXNpbUBnbWFpbC5jb20+
CiAKICAgICAgICAgRml4IHRoZSBidWlsZC4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
CShyZXZpc2lvbiA0ODMyMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBlcmZvcm1Q
ZW5kaW5nQ2FsbGJhY2soKTsKIAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1f
ZGF0YWJhc2UuZ2V0KCk7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX3JlYWRP
bmx5OyB9CiAKIHByaXZhdGU6CiAgICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaz4sCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwCShyZXZpc2lvbiA0ODMyMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTUwLDIzICs0OSwzNiBAQCBzdGF0aWMgU3RyaW5nIGdldERhdGFi
YXNlSWRlbnRpZmllcihTUUxUCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNx
dWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIHJlYWRPbmx5KQogewot
ICAgIFVOVVNFRF9QQVJBTShyZWFkT25seSk7Ci0KICAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0g
Z2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKIAogICAgIFRyYW5zYWN0aW9uc0hh
c2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmZpbmQoZGJJZGVudGlm
aWVyKTsKICAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKSB7CiAgICAg
ICAgIC8vIE5vIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciB0aGlzIERCCiAgICAgICAgIFRyYW5z
YWN0aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2FjdGlvbnM7Ci0gICAgICAgIHBlbmRpbmdUcmFuc2Fj
dGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKICAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25z
LmFkZChkYklkZW50aWZpZXIsIHBlbmRpbmdUcmFuc2FjdGlvbnMpOworICAgICAgICBpdCA9IG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7CisgICAgfQogCi0gICAgICAg
IC8vIFN0YXJ0IHRoZSB0cmFuc2FjdGlvbgotICAgICAgICB0cmFuc2FjdGlvbi0+bG9ja0FjcXVp
cmVkKCk7CisgICAgVHJhbnNhY3Rpb25zUXVldWUmIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBpdC0+
c2Vjb25kOworICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKKyAg
ICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICAvLyBSZWFkLW9ubHkg
dHJhbnNhY3Rpb247IHNjaGVkdWxlIG9ubHkgaWYgdGhlcmUncyBubyBwZW5kaW5nIHJlYWQtd3Jp
dGUgdHJhbnNhY3Rpb24KKyAgICAgICAgaWYgKG1fbnVtV3JpdGVUcmFuc2FjdGlvbnMuZmluZChk
YklkZW50aWZpZXIpID09IG1fbnVtV3JpdGVUcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAg
ICAgIHRyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEFub3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZyBvbiB0aGlzIERCOyBw
dXQgdGhpcyBvbmUgaW4gdGhlIHF1ZXVlCi0gICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5k
aW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29uZDsKLSAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9u
cy5hcHBlbmQodHJhbnNhY3Rpb24pOworICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIG51bWJlciBv
ZiBwZW5kaW5nIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb25zIGZvciB0aGlzIGRhdGFiYXNlCisgICAg
ICAgIE51bVdyaXRlVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3Igbnd0X2l0ID0gbV9udW1X
cml0ZVRyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7CisgICAgICAgIGlmIChud3RfaXQg
PT0gbV9udW1Xcml0ZVRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgbV9udW1Xcml0
ZVRyYW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG1fbnVtV3JpdGVUcmFuc2FjdGlvbnMuc2V0KGRiSWRlbnRpZmllciwgbnd0X2l0
LT5zZWNvbmQgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlYWQtd3JpdGUgdHJhbnNh
Y3Rpb247IHNjaGVkdWxlIG9ubHkgaWYgbm8gb3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZwor
ICAgICAgICBpZiAocGVuZGluZ1RyYW5zYWN0aW9ucy5zaXplKCkgPT0gMSkgeworICAgICAgICAg
ICAgdHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOworICAgICAgICB9CiAgICAgfQogfQogCkBA
IC04MiwxNyArOTQsNTggQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNl
TAogICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29u
ZDsKICAgICBBU1NFUlQoIXBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKIAotICAgIC8v
ICd0cmFuc2FjdGlvbicgc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4g
dGhpcyBxdWV1ZQotICAgIEFTU0VSVChwZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCkuZ2V0KCkg
PT0gdHJhbnNhY3Rpb24pOwotCi0gICAgLy8gUmVtb3ZlICd0cmFuc2FjdGlvbicgZnJvbSB0aGUg
cXVldWUgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMKLSAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLnJl
bW92ZUZpcnN0KCk7Ci0gICAgaWYgKHBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIE5vIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7IGRlbGV0ZSBkYklkZW50aWZp
ZXIncyBxdWV1ZQotICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlKGl0KTsKKyAg
ICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICAvLyBJZiAndHJhbnNh
Y3Rpb24nIGlzIHJlYWQtb25seSwgaXQgc2hvdWxkIGFsd2F5cyBiZSBiZWZvcmUgdGhlIGZpcnN0
IHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24gaW4gdGhlIHF1ZXVlCisgICAgICAgIFRyYW5zYWN0aW9u
c1F1ZXVlOjppdGVyYXRvciBwdF9pdCA9IHBlbmRpbmdUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAg
ICAgICAgd2hpbGUgKChwdF9pdCAhPSBwZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKSAmJiAocHRf
aXQtPmdldCgpICE9IHRyYW5zYWN0aW9uKSAmJiAocHRfaXQtPmdldCgpLT5pc1JlYWRPbmx5KCkp
ICYmICgrK3B0X2l0LCAxKSk7CisgICAgICAgIEFTU0VSVChwdF9pdC0+Z2V0KCkgPT0gdHJhbnNh
Y3Rpb24pOworICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShwdF9pdCk7CisKKyAg
ICAgICAgaWYgKHBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBt
X3BlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlKGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIElmIGF0IHRoaXMgcG9pbnQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBx
dWV1ZSBpcyBhIHJlYWQtb25seSB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgIC8vIHRoZW4gaXQg
d2FzIGFscmVhZHkgc2NoZWR1bGVkIHRvIHJ1biBieSB0aGUgYWNxdWlyZUxvY2soKSBtZXRob2Qu
IERvIG5vdGhpbmcuCisgICAgICAgICAgICAvLyBIb3dldmVyLCBpZiB0aGUgZmlyc3QgdHJhbnNh
Y3Rpb24gaW4gdGhlIHF1ZXVlIGlzIGEgcmVhZC13cml0ZSB0cmFuc2FjdGlvbiwKKyAgICAgICAg
ICAgIC8vIHRoZW4gaXQgbWVhbnMgd2UndmUgcHJvY2Vzc2VkIGFsbCByZWFkLW9ubHkgdHJhbnNh
Y3Rpb25zIHRoYXQgd2VyZSBwZW5kaW5nIGF0CisgICAgICAgICAgICAvLyB0aGUgdGltZSB3aGVu
IHRoYXQgcmVhZC13cml0ZSB0cmFuc2FjdGlvbiBhcnJpdmVkLCBhbmQgd2Ugc2hvdWxkIHNjaGVk
dWxlIHRoYXQKKyAgICAgICAgICAgIC8vIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24gbm93CisgICAg
ICAgICAgICBpZiAoIXBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+aXNSZWFkT25seSgpKSB7
CisgICAgICAgICAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5sb2NrQWNxdWly
ZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IFdlIGhhdmUgbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgc3RhcnQgdGhlIG5leHQgb25lCi0g
ICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+bG9ja0FjcXVpcmVkKCk7CisgICAg
ICAgIC8vIElmICd0cmFuc2FjdGlvbicgaXMgcmVhZC13cml0ZSwgaXQgc2hvdWxkIGFsd2F5cyBi
ZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4gdGhlIHF1ZXVlCisgICAgICAgIEFTU0VSVChwZW5k
aW5nVHJhbnNhY3Rpb25zLmZpcnN0KCkuZ2V0KCkgPT0gdHJhbnNhY3Rpb24pOworICAgICAgICBw
ZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZUZpcnN0KCk7CisKKyAgICAgICAgLy8gRGVjcmVtZW50
IHRoZSBudW1iZXIgb2YgcGVuZGluZyByZWFkLXdyaXRlIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBk
YXRhYmFzZQorICAgICAgICBOdW1Xcml0ZVRyYW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIG53
dF9pdCA9IG1fbnVtV3JpdGVUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIpOworICAgICAg
ICBBU1NFUlQobnd0X2l0ICE9IG1fbnVtV3JpdGVUcmFuc2FjdGlvbnMuZW5kKCkpOworICAgICAg
ICBpZiAobnd0X2l0LT5zZWNvbmQgPT0gMSkgeworICAgICAgICAgICAgbV9udW1Xcml0ZVRyYW5z
YWN0aW9ucy5yZW1vdmUobnd0X2l0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
bnVtV3JpdGVUcmFuc2FjdGlvbnMuc2V0KGRiSWRlbnRpZmllciwgbnd0X2l0LT5zZWNvbmQgLSAx
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShpdCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBhdCB0aGlzIHBvaW50IHRoZSBmaXJzdCB0
cmFuc2FjdGlvbiBpbiB0aGUgcXVldWUgaXMgYSByZWFkLXdyaXRlIHRyYW5zYWN0aW9uLAorICAg
ICAgICAgICAgLy8gdGhlbiB3ZSBzaG91bGQgc2NoZWR1bGUgdGhhdCB0cmFuc2FjdGlvbiBhbmQg
YmUgZG9uZS4gSG93ZXZlciwgaWYgdGhlIGZpcnN0CisgICAgICAgICAgICAvLyB0cmFuc2FjdGlv
biBpbiB0aGUgcXVldWUgaXMgcmVhZC1vbmx5LCB0aGVuIHdlIHNob3VsZCBzY2hlZHVsZSBhbGwg
cmVhZC1vbmx5CisgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbnMgYXQgdGhlIHRvcCBvZiB0aGUg
cXVldWUgdW50aWwgd2UgcmVhY2ggYSByZWFkLXdyaXRlIHRyYW5zYWN0aW9uCisgICAgICAgICAg
ICAvLyBvciB0aGUgZW5kIG9mIHRoZSBxdWV1ZQorICAgICAgICAgICAgaWYgKCFwZW5kaW5nVHJh
bnNhY3Rpb25zLmZpcnN0KCktPmlzUmVhZE9ubHkoKSkgeworICAgICAgICAgICAgICAgIHBlbmRp
bmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+bG9ja0FjcXVpcmVkKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlOjppdGVyYXRvciBwdF9pdCA9
IHBlbmRpbmdUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHB0
X2l0ICE9IHBlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpICYmIChwdF9pdC0+Z2V0KCktPmlzUmVh
ZE9ubHkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHRfaXQtPmdldCgpLT5sb2NrQWNxdWly
ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgKytwdF9pdDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTEwMCw2ICsxNTMsNyBAQCB2
b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duCiB7CiAgICAgLy8gQ2xlYW4g
dXAgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0YWJhc2VzCiAgICAgbV9wZW5k
aW5nVHJhbnNhY3Rpb25zLmNsZWFyKCk7CisgICAgbV9udW1Xcml0ZVRyYW5zYWN0aW9ucy5jbGVh
cigpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgJKHJldmlzaW9uIDQ4MzIwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiA+IFRyYW5zYWN0aW9uc1F1ZXVlOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBU
cmFuc2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKICAgICAgICAgVHJhbnNhY3Rp
b25zSGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgaW50PiBOdW1Xcml0ZVRyYW5zYWN0aW9uc0hhc2hNYXA7CisgICAgICAgIE51
bVdyaXRlVHJhbnNhY3Rpb25zSGFzaE1hcCBtX251bVdyaXRlVHJhbnNhY3Rpb25zOwogICAgIH07
CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4MzIwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFu
aWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAxLiBBZGRpbmcgdHdvIHRlc3RzIGZvciB0aGUgdHJhbnNhY3Rp
b24gY29vcmRpbmF0b3IuCisgICAgICAgIDIuIEZpeGluZyBhbiBpbmNvcnJlY3QgPGhlYWQ+IHRh
ZyBpbiBzb21lIHRlc3RzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yOTExNQorCisgICAgICAgICogc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlv
bnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogRml4ZWQgYQorICAgICAgICA8aGVhZD4gdGFn
IChzaG91bGQndmUgYmVlbiA8L2hlYWQ+KS4KKyAgICAgICAgKiBzdG9yYWdlL29wZW4tZGF0YWJh
c2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbDogRml4ZWQKKyAgICAgICAgYSA8
aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbiA8L2hlYWQ+KS4KKyAgICAgICAgKiBzdG9yYWdlL3Jl
YWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRv
bnQtcnVuLXRvZ2V0aGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC10cmFu
c2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWw6IEZpeGVkIGEg
PGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4KKyAgICAgICAgPC9oZWFkPikuCisKIDIwMDktMDkt
MTEgIE1pY2hlbGFuZ2VsbyBEZSBTaW1vbmUgIDxtaWNkZXNpbUBnbWFpbC5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZl
cmVudC1oYW5kbGVzLmh0bWwJKHJldmlzaW9uIDQ4MzIwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgIH0gY2F0
Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVhZD4KIDxib2R5IG9ubG9hZD0i
cnVuVGVzdCgpOyI+CiBUaGlzIGlzIGEgdGVzdCB0byBzZWUgaWYgcXVldWVpbmcgdXAgbXVsdGlw
bGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNl
IHJlc3VsdHMgaW4gYSBkZWFkbG9jay48YnI+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9z
dG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJh
bnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbAkocmV2aXNpb24gNDgzMjApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKICAg
ICB9IGNhdGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKTsiPgogVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIG9wZW5pbmcgYSBk
YXRhYmFzZSB3aGlsZSBhIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgaGFu
ZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay48YnI+CiA8L2Jv
ZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9u
cy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFu
ZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3QgdGVzdHMgdGhhdCByZWFkIGFuZCB3
cml0ZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgZGF0YWJh
c2UgZG9uJ3QgcnVuIHRvZ2V0aGVyLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0
aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3Vj
Y2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVs
LgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFu
c2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KKwpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9n
ZXRoZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdy
aXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4t
dG9nZXRoZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0
ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gb3BlblRl
c3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRhYmFzZSgiUmVhZEFuZFdyaXRlVHJh
bnNhY3Rpb25zRG9udFJ1blRvZ2V0aGVyVGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAi
MS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHJl
YWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIgaGFuZGxlcyB0byB0aGUg
c2FtZSBEQiBkb24ndCBydW4gYXQgdGhlIHNhbWUgdGltZS4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPSAwOwor
dmFyIHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9IDA7CisKK2Z1bmN0aW9uIHJ1blRyYW5z
YWN0aW9uKGRiLCByZWFkT25seSkKK3sKKyAgICB2YXIgdHJhbnNhY3Rpb25GdW5jdGlvbiA9IChy
ZWFkT25seSA/IGRiLnJlYWRUcmFuc2FjdGlvbiA6IGRiLnRyYW5zYWN0aW9uKTsKKyAgICB0cmFu
c2FjdGlvbkZ1bmN0aW9uLmNhbGwoZGIsIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBpZiAo
cmVhZE9ubHkpIHsKKyAgICAgICAgICAgICAgICBpZiAod3JpdGVUcmFuc2FjdGlvbnNJblByb2dy
ZXNzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJSZWFkIHRyYW5zYWN0aW9uIHN0
YXJ0aW5nIHdoaWxlIHdyaXRlIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOworICAgICAgICAg
ICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzKys7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChyZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyAhPSAwKSB7
CisgICAgICAgICAgICAgICAgICAgIGxvZygiV3JpdGUgdHJhbnNhY3Rpb24gc3RhcnRpbmcgd2hp
bGUgcmVhZCB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4iKTsKKyAgICAgICAgICAgICAgICAgICAg
dGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cml0
ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR4
LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIEZST00gVGVzdDsiKTsKKyAgICAgICAgfSwgZnVuY3Rpb24o
ZXJyb3IpIHsKKyAgICAgICAgICAgIGxvZygocmVhZE9ubHkgPyAiUmVhZCIgOiAiV3JpdGUiKSAr
ICIgdHJhbnNhY3Rpb24gZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICB0
ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgIGlm
IChyZWFkT25seSkKKyAgICAgICAgICAgICAgICAgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3Mt
LTsKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIHdyaXRlVHJhbnNhY3Rpb25z
SW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4i
KTsKKyAgICAgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1blJlYWRBbmRXcml0ZVRyYW5zYWN0aW9u
cyhkYjEsIGRiMiwgZGIzKQoreworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAg
cnVuVHJhbnNhY3Rpb24oZGIyLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIGZhbHNl
KTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRi
MiwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIzLCB0cnVlKTsKKyAgICBydW5UcmFuc2Fj
dGlvbihkYjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjIsIGZhbHNlKTsKKyAgICBy
dW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMywgdHJ1ZSk7
Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAg
ICB0cnkgeworICAgICAgICB2YXIgZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICB2
YXIgZGIyID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICB2YXIgZGIzID0gb3BlblRlc3RE
YXRhYmFzZSgpOworICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAg
ICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0
IChGb28gaW50KTsiKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAg
ICAgICAgICAgbG9nKCJDYW5ub3QgY3JlYXRlIHRoZSBUZXN0IHRhYmxlOiAiICsgZXJyb3IubWVz
c2FnZSk7CisgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcnVuUmVhZEFuZFdyaXRlVHJhbnNhY3Rpb25z
KGRiMSwgZGIyLCBkYjMpOworCisgICAgICAgICAgICAgICAgLy8gSGFjazogd2FpdCBmb3IgdGhl
c2UgdHJhbnNhY3Rpb25zIHRvIGZpbmlzaCBydW5uaW5nIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUg
dGVzdAorICAgICAgICAgICAgICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeyB9LCBm
dW5jdGlvbihlcnJvcikgeyB9LCBmdW5jdGlvbigpIHsgdGVybWluYXRlVGVzdCgpOyB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHJlYWQg
YW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBk
YXRhYmFzZSBkb24ndCBydW4gdG9nZXRoZXIuPGJyPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRs
eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRy
YW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3Vy
cmVudGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRl
c3QgdGVzdHMgdGhhdCB0d28gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFu
ZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBydW4gY29uY3VycmVudGx5LgorUmVhZCB0cmFuc2Fj
dGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uv
cmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVu
dGx5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNh
Y3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkK
K3sKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQor
CitmdW5jdGlvbiB0ZXJtaW5hdGVUZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVuRGF0YWJh
c2UoIlJlYWRUcmFuc2FjdGlvbnNSdW5uaW5nQ29uY3VycmVudGx5VGVzdCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1h
a2Ugc3VyZSB0aGF0IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBEQiBo
YW5kbGVzIHRvIHRoZSBzYW1lIERCIHJ1biBjb25jdXJyZW50bHkuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIDMyNzY4KTsKK30KKwordmFyIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzID0g
MDsKKworZnVuY3Rpb24gcnVuUmVhZFRyYW5zYWN0aW9uKGRiKQoreworICAgIGRiLnJlYWRUcmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgcmVhZFRyYW5zYWN0aW9uc0luUHJv
Z3Jlc3MrKzsKKyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgIGxvZygi
UmVhZCB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAg
IHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBp
ZiAocmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPT0gMikgeworICAgICAgICAgICAgICAgIGxv
ZygiUmVhZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAgICB9
KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKwor
ICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAg
IHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiMS50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworICAgICAgICAgICAgfSwgZnVuY3Rp
b24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coIkNhbm5vdCBjcmVhdGUgdGhlIFRlc3Qg
dGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0
KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBydW5SZWFk
VHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgICAgICAgICBydW5SZWFkVHJhbnNhY3Rpb24oZGIy
KTsKKworICAgICAgICAgICAgICAgIC8vIEhhY2s6IHdhaXQgZm9yIHRoZXNlIHRyYW5zYWN0aW9u
cyB0byBmaW5pc2ggcnVubmluZyBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHRlc3QKKyAgICAgICAg
ICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSwgZnVuY3Rpb24oZXJyb3Ip
IHsgfSwgZnVuY3Rpb24oKSB7IHRlcm1pbmF0ZVRlc3QoKTsgfSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgfSBjYXRjaChlcnIpIHsgbG9nKGVycik7IH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHR3byByZWFk
LW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFi
YXNlIHJ1biBjb25jdXJyZW50bHkuPGJyPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lvbiA0ODMyMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTE2OCw3ICsxNjgsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKICAgICB9IGNhdGNoKGVycikge30K
IH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsi
PgogVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLjxicj4KIDwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39716</attachid>
            <date>2009-09-17 11:58:47 -0700</date>
            <delta_ts>2009-09-17 12:47:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18572</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODQ3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IENsZWFuaW5nIHVwIHRoZQorICAgICAgICBuZXcgaGFz
aCBtYXAuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6CisK
IDIwMDktMDktMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAko
cmV2aXNpb24gNDg0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtUGVu
ZGluZ0NhbGxiYWNrKCk7CiAKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2Rh
dGFiYXNlLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gbV9yZWFkT25s
eTsgfQogCiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+LApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcAkocmV2aXNpb24gNDg0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01MCwyMyArNDksMzIgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFz
ZUlkZW50aWZpZXIoU1FMVAogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVp
cmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCByZWFkT25seSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0ocmVhZE9ubHkpOwotCiAgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdl
dERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CiAKICAgICBUcmFuc2FjdGlvbnNIYXNo
TWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmll
cik7CiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5lbmQoKSkgewogICAgICAg
ICAvLyBObyBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBEQgogICAgICAgICBUcmFuc2Fj
dGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rp
b25zLmFwcGVuZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5h
ZGQoZGJJZGVudGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25zKTsKKyAgICAgICAgaXQgPSBtX3Bl
bmRpbmdUcmFuc2FjdGlvbnMuYWRkKGRiSWRlbnRpZmllciwgcGVuZGluZ1RyYW5zYWN0aW9ucyku
Zmlyc3Q7CisgICAgfQogCi0gICAgICAgIC8vIFN0YXJ0IHRoZSB0cmFuc2FjdGlvbgotICAgICAg
ICB0cmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAgVHJhbnNhY3Rpb25zUXVldWUmIHBl
bmRpbmdUcmFuc2FjdGlvbnMgPSBpdC0+c2Vjb25kOworICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMu
YXBwZW5kKHRyYW5zYWN0aW9uKTsKKyAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkg
eworICAgICAgICAvLyBSZWFkLW9ubHkgdHJhbnNhY3Rpb247IHNjaGVkdWxlIG9ubHkgaWYgdGhl
cmUncyBubyBwZW5kaW5nIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24KKyAgICAgICAgaWYgKG1fbnVt
V3JpdGVUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIpID09IG1fbnVtV3JpdGVUcmFuc2Fj
dGlvbnMuZW5kKCkpCisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQW5vdGhlciB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9u
IHRoaXMgREI7IHB1dCB0aGlzIG9uZSBpbiB0aGUgcXVldWUKLSAgICAgICAgVHJhbnNhY3Rpb25z
UXVldWUmIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBpdC0+c2Vjb25kOwotICAgICAgICBwZW5kaW5n
VHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CisgICAgICAgIC8vIEluY3JlbWVudCB0
aGUgbnVtYmVyIG9mIHBlbmRpbmcgcmVhZC13cml0ZSB0cmFuc2FjdGlvbnMgZm9yIHRoaXMgZGF0
YWJhc2UKKyAgICAgICAgTnVtV3JpdGVUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRvciBud3Rf
aXQgPSBtX251bVdyaXRlVHJhbnNhY3Rpb25zLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICAgICAg
aWYgKG53dF9pdCA9PSBtX251bVdyaXRlVHJhbnNhY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAg
bV9udW1Xcml0ZVRyYW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCAxKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9udW1Xcml0ZVRyYW5zYWN0aW9ucy5zZXQoZGJJZGVudGlmaWVyLCBu
d3RfaXQtPnNlY29uZCArIDEpOworCisgICAgICAgIC8vIFJlYWQtd3JpdGUgdHJhbnNhY3Rpb247
IHNjaGVkdWxlIG9ubHkgaWYgbm8gb3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZworICAgICAg
ICBpZiAocGVuZGluZ1RyYW5zYWN0aW9ucy5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHRyYW5z
YWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKICAgICB9CiB9CiAKQEAgLTgyLDE3ICs5MCw1NyBAQCB2
b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMCiAgICAgVHJhbnNhY3Rpb25z
UXVldWUmIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBpdC0+c2Vjb25kOwogICAgIEFTU0VSVCghcGVu
ZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwogCi0gICAgLy8gJ3RyYW5zYWN0aW9uJyBzaG91
bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGlzIHF1ZXVlCi0gICAgQVNT
RVJUKHBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS5nZXQoKSA9PSB0cmFuc2FjdGlvbik7Ci0K
LSAgICAvLyBSZW1vdmUgJ3RyYW5zYWN0aW9uJyBmcm9tIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIHRy
YW5zYWN0aW9ucwotICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlRmlyc3QoKTsKLSAgICBp
ZiAocGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gTm8gbW9yZSBw
ZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRpZmllcidzIHF1ZXVlCi0gICAgICAg
IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUoaXQpOworICAgIGlmICh0cmFuc2FjdGlvbi0+
aXNSZWFkT25seSgpKSB7CisgICAgICAgIC8vIElmICd0cmFuc2FjdGlvbicgaXMgcmVhZC1vbmx5
LCBpdCBzaG91bGQgYWx3YXlzIGJlIGJlZm9yZSB0aGUgZmlyc3QgcmVhZC13cml0ZSB0cmFuc2Fj
dGlvbiBpbiB0aGUgcXVldWUKKyAgICAgICAgVHJhbnNhY3Rpb25zUXVldWU6Oml0ZXJhdG9yIHB0
X2l0ID0gcGVuZGluZ1RyYW5zYWN0aW9ucy5iZWdpbigpOworICAgICAgICB3aGlsZSAoKHB0X2l0
ICE9IHBlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpICYmIChwdF9pdC0+Z2V0KCkgIT0gdHJhbnNh
Y3Rpb24pICYmIChwdF9pdC0+Z2V0KCktPmlzUmVhZE9ubHkoKSkpCisgICAgICAgICAgICArK3B0
X2l0OworICAgICAgICBBU1NFUlQocHRfaXQtPmdldCgpID09IHRyYW5zYWN0aW9uKTsKKyAgICAg
ICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUocHRfaXQpOworCisgICAgICAgIGlmIChwZW5k
aW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5yZW1vdmUoaXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIGF0IHRo
aXMgcG9pbnQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBpcyBhIHJlYWQtb25s
eSB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgIC8vIHRoZW4gaXQgd2FzIGFscmVhZHkgc2NoZWR1
bGVkIHRvIHJ1biBieSB0aGUgYWNxdWlyZUxvY2soKSBtZXRob2QuIERvIG5vdGhpbmcuCisgICAg
ICAgICAgICAvLyBIb3dldmVyLCBpZiB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4gdGhlIHF1ZXVl
IGlzIGEgcmVhZC13cml0ZSB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgIC8vIHRoZW4gaXQgbWVh
bnMgd2UndmUgcHJvY2Vzc2VkIGFsbCByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBw
ZW5kaW5nIGF0CisgICAgICAgICAgICAvLyB0aGUgdGltZSB3aGVuIHRoYXQgcmVhZC13cml0ZSB0
cmFuc2FjdGlvbiBhcnJpdmVkLCBhbmQgd2Ugc2hvdWxkIHNjaGVkdWxlIHRoYXQKKyAgICAgICAg
ICAgIC8vIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24gbm93CisgICAgICAgICAgICBpZiAoIXBlbmRp
bmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+aXNSZWFkT25seSgpKQorICAgICAgICAgICAgICAgIHBl
bmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+bG9ja0FjcXVpcmVkKCk7CisgICAgICAgIH0KICAg
ICB9IGVsc2UgewotICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7
IHN0YXJ0IHRoZSBuZXh0IG9uZQotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCkt
PmxvY2tBY3F1aXJlZCgpOworICAgICAgICAvLyBJZiAndHJhbnNhY3Rpb24nIGlzIHJlYWQtd3Jp
dGUsIGl0IHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1
ZQorICAgICAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLmdldCgpID09IHRy
YW5zYWN0aW9uKTsKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgpOwor
CisgICAgICAgIC8vIERlY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgcmVhZC13cml0ZSB0
cmFuc2FjdGlvbnMgZm9yIHRoaXMgZGF0YWJhc2UKKyAgICAgICAgTnVtV3JpdGVUcmFuc2FjdGlv
bnNIYXNoTWFwOjppdGVyYXRvciBud3RfaXQgPSBtX251bVdyaXRlVHJhbnNhY3Rpb25zLmZpbmQo
ZGJJZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKG53dF9pdCAhPSBtX251bVdyaXRlVHJhbnNh
Y3Rpb25zLmVuZCgpKTsKKyAgICAgICAgaWYgKG53dF9pdC0+c2Vjb25kID09IDEpCisgICAgICAg
ICAgICBtX251bVdyaXRlVHJhbnNhY3Rpb25zLnJlbW92ZShud3RfaXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX251bVdyaXRlVHJhbnNhY3Rpb25zLnNldChkYklkZW50aWZpZXIsIG53
dF9pdC0+c2Vjb25kIC0gMSk7CisKKyAgICAgICAgaWYgKHBlbmRpbmdUcmFuc2FjdGlvbnMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShpdCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gSWYgYXQgdGhpcyBwb2ludCB0aGUgZmlyc3Qg
dHJhbnNhY3Rpb24gaW4gdGhlIHF1ZXVlIGlzIGEgcmVhZC13cml0ZSB0cmFuc2FjdGlvbiwKKyAg
ICAgICAgICAgIC8vIHRoZW4gd2Ugc2hvdWxkIHNjaGVkdWxlIHRoYXQgdHJhbnNhY3Rpb24gYW5k
IGJlIGRvbmUuIEhvd2V2ZXIsIGlmIHRoZSBmaXJzdAorICAgICAgICAgICAgLy8gdHJhbnNhY3Rp
b24gaW4gdGhlIHF1ZXVlIGlzIHJlYWQtb25seSwgdGhlbiB3ZSBzaG91bGQgc2NoZWR1bGUgYWxs
IHJlYWQtb25seQorICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb25zIGF0IHRoZSB0b3Agb2YgdGhl
IHF1ZXVlIHVudGlsIHdlIHJlYWNoIGEgcmVhZC13cml0ZSB0cmFuc2FjdGlvbgorICAgICAgICAg
ICAgLy8gb3IgdGhlIGVuZCBvZiB0aGUgcXVldWUKKyAgICAgICAgICAgIGlmICghcGVuZGluZ1Ry
YW5zYWN0aW9ucy5maXJzdCgpLT5pc1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAgcGVuZGlu
Z1RyYW5zYWN0aW9ucy5maXJzdCgpLT5sb2NrQWNxdWlyZWQoKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlOjppdGVyYXRvciBwdF9pdCA9IHBl
bmRpbmdUcmFuc2FjdGlvbnMuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHB0X2l0
ICE9IHBlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpICYmIChwdF9pdC0+Z2V0KCktPmlzUmVhZE9u
bHkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHRfaXQtPmdldCgpLT5sb2NrQWNxdWlyZWQo
KTsKKyAgICAgICAgICAgICAgICAgICAgKytwdF9pdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTEwMCw2ICsxNDgsNyBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duCiB7CiAgICAgLy8gQ2xlYW4gdXAg
YWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0YWJhc2VzCiAgICAgbV9wZW5kaW5n
VHJhbnNhY3Rpb25zLmNsZWFyKCk7CisgICAgbV9udW1Xcml0ZVRyYW5zYWN0aW9ucy5jbGVhcigp
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgJKHJldmlzaW9uIDQ4NDc1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+
IFRyYW5zYWN0aW9uc1F1ZXVlOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBUcmFu
c2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKICAgICAgICAgVHJhbnNhY3Rpb25z
SGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgaW50PiBOdW1Xcml0ZVRyYW5zYWN0aW9uc0hhc2hNYXA7CisgICAgICAgIE51bVdy
aXRlVHJhbnNhY3Rpb25zSGFzaE1hcCBtX251bVdyaXRlVHJhbnNhY3Rpb25zOwogICAgIH07CiB9
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4NDc1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFuaWxp
dWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAxLiBBZGRpbmcgdHdvIHRlc3RzIGZvciB0aGUgdHJhbnNhY3Rpb24g
Y29vcmRpbmF0b3IuCisgICAgICAgIDIuIEZpeGluZyBhbiBpbmNvcnJlY3QgPGhlYWQ+IHRhZyBp
biBzb21lIHRlc3RzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yOTExNQorCisgICAgICAgICogc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMt
b24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogRml4ZWQgYQorICAgICAgICA8aGVhZD4gdGFnIChz
aG91bGQndmUgYmVlbiA8L2hlYWQ+KS4KKyAgICAgICAgKiBzdG9yYWdlL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbDogRml4ZWQKKyAgICAgICAgYSA8aGVh
ZD4gdGFnIChzaG91bGQndmUgYmVlbiA8L2hlYWQ+KS4KKyAgICAgICAgKiBzdG9yYWdlL3JlYWQt
YW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQt
cnVuLXRvZ2V0aGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC10cmFuc2Fj
dGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWw6IEZpeGVkIGEgPGhl
YWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4KKyAgICAgICAgPC9oZWFkPikuCisKIDIwMDktMDktMTYg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRs
ZXMuaHRtbAkocmV2aXNpb24gNDg0NzUpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgfSBjYXRjaChlcnIpIHt9
CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9oZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7
Ij4KIFRoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBxdWV1ZWluZyB1cCBtdWx0aXBsZSB0cmFuc2Fj
dGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBp
biBhIGRlYWRsb2NrLjxicj4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1p
bi1wcm9ncmVzcy5odG1sCShyZXZpc2lvbiA0ODQ3NSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgIH0gY2F0Y2go
ZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVhZD4KIDxib2R5IG9ubG9hZD0icnVu
VGVzdCgpOyI+CiBUaGlzIGlzIGEgdGVzdCB0byBzZWUgaWYgb3BlbmluZyBhIGRhdGFiYXNlIHdo
aWxlIGEgdHJhbnNhY3Rpb24gaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBoYW5kbGUgdG8gdGhl
IHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KIDwvYm9keT4KSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVu
LXRvZ2V0aGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdl
L3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRy
YW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHJlYWQgYW5kIHdyaXRlIHRyYW5z
YWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb24ndCBy
dW4gdG9nZXRoZXIuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vz
c2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgor
VHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2Fj
dGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1
Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorCkluZGV4OiBMYXlvdXRUZXN0cy9z
dG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNh
Y3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gdGVybWluYXRlVGVzdCgpCit7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBvcGVuVGVzdERhdGFiYXNl
KCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlKCJSZWFkQW5kV3JpdGVUcmFuc2FjdGlvbnNE
b250UnVuVG9nZXRoZXJUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgcmVhZCBhbmQgd3Jp
dGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVzIHRvIHRoZSBzYW1lIERCIGRv
bid0IHJ1biBhdCB0aGUgc2FtZSB0aW1lLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAzMjc2
OCk7Cit9CisKK3ZhciByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9IDA7Cit2YXIgd3JpdGVU
cmFuc2FjdGlvbnNJblByb2dyZXNzID0gMDsKKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb24oZGIs
IHJlYWRPbmx5KQoreworICAgIHZhciB0cmFuc2FjdGlvbkZ1bmN0aW9uID0gKHJlYWRPbmx5ID8g
ZGIucmVhZFRyYW5zYWN0aW9uIDogZGIudHJhbnNhY3Rpb24pOworICAgIHRyYW5zYWN0aW9uRnVu
Y3Rpb24uY2FsbChkYiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIGlmIChyZWFkT25seSkg
eworICAgICAgICAgICAgICAgIGlmICh3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgIT0gMCkg
eworICAgICAgICAgICAgICAgICAgICBsb2coIlJlYWQgdHJhbnNhY3Rpb24gc3RhcnRpbmcgd2hp
bGUgd3JpdGUgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MuIik7CisgICAgICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVh
ZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzICE9IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbG9nKCJXcml0ZSB0cmFuc2FjdGlvbiBzdGFydGluZyB3aGlsZSByZWFkIHRy
YW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOworICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVU
ZXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyaXRlVHJhbnNhY3Rp
b25zSW5Qcm9ncmVzcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHguZXhlY3V0ZVNx
bCgiU0VMRUNUICogRlJPTSBUZXN0OyIpOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgewor
ICAgICAgICAgICAgbG9nKChyZWFkT25seSA/ICJSZWFkIiA6ICJXcml0ZSIpICsgIiB0cmFuc2Fj
dGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVRl
c3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgaWYgKHJlYWRPbmx5
KQorICAgICAgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgd3JpdGVUcmFuc2FjdGlvbnNJblByb2dyZXNz
LS07CisgICAgICAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLiIpOworICAgICAg
ICB9KTsKK30KKworZnVuY3Rpb24gcnVuUmVhZEFuZFdyaXRlVHJhbnNhY3Rpb25zKGRiMSwgZGIy
LCBkYjMpCit7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIxLCB0cnVlKTsKKyAgICBydW5UcmFuc2Fj
dGlvbihkYjIsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgZmFsc2UpOworICAgIHJ1
blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIyLCB0cnVlKTsK
KyAgICBydW5UcmFuc2FjdGlvbihkYjMsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwg
ZmFsc2UpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMiwgZmFsc2UpOworICAgIHJ1blRyYW5zYWN0
aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIzLCB0cnVlKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHRyeSB7Cisg
ICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIHZhciBkYjIgPSBv
cGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIHZhciBkYjMgPSBvcGVuVGVzdERhdGFiYXNlKCk7
CisgICAgICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAg
IHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQp
OyIpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBs
b2coIkNhbm5vdCBjcmVhdGUgdGhlIFRlc3QgdGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAg
ICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBydW5SZWFkQW5kV3JpdGVUcmFuc2FjdGlvbnMoZGIxLCBkYjIs
IGRiMyk7CisKKyAgICAgICAgICAgICAgICAvLyBIYWNrOiB3YWl0IGZvciB0aGVzZSB0cmFuc2Fj
dGlvbnMgdG8gZmluaXNoIHJ1bm5pbmcgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSB0ZXN0CisgICAg
ICAgICAgICAgICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7IH0sIGZ1bmN0aW9uKGVy
cm9yKSB7IH0sIGZ1bmN0aW9uKCkgeyB0ZXJtaW5hdGVUZXN0KCk7IH0pOworICAgICAgICAgICAg
fSk7CisgICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgcmVhZCBhbmQgd3JpdGUg
dHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRv
bid0IHJ1biB0b2dldGhlci48YnI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25z
LXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdCB0ZXN0cyB0
aGF0IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRo
ZSBzYW1lIGRhdGFiYXNlIHJ1biBjb25jdXJyZW50bHkuCitSZWFkIHRyYW5zYWN0aW9ucyBydW5u
aW5nIGNvbmN1cnJlbnRseS4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5z
YWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVu
bmluZy1jb25jdXJyZW50bHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9u
IHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rp
b24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRhYmFzZSgiUmVhZFRy
YW5zYWN0aW9uc1J1bm5pbmdDb25jdXJyZW50bHlUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRo
YXQgbXVsdGlwbGUgcmVhZCB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IERCIGhhbmRsZXMgdG8g
dGhlIHNhbWUgREIgcnVuIGNvbmN1cnJlbnRseS4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
MzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPSAwOworCitmdW5j
dGlvbiBydW5SZWFkVHJhbnNhY3Rpb24oZGIpCit7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGZ1
bmN0aW9uKHR4KSB7CisgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOwor
ICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgbG9nKCJSZWFkIHRyYW5z
YWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgdGVybWluYXRl
VGVzdCgpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChyZWFkVHJh
bnNhY3Rpb25zSW5Qcm9ncmVzcyA9PSAyKSB7CisgICAgICAgICAgICAgICAgbG9nKCJSZWFkIHRy
YW5zYWN0aW9ucyBydW5uaW5nIGNvbmN1cnJlbnRseS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzLS07CisgICAgICAgIH0pOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdHJ5IHsK
KyAgICAgICAgdmFyIGRiMSA9IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAgICAgdmFyIGRiMiA9
IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAgICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4
KSB7CisgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBF
WElTVFMgVGVzdCAoRm9vIGludCk7Iik7CisgICAgICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikg
eworICAgICAgICAgICAgICAgIGxvZygiQ2Fubm90IGNyZWF0ZSB0aGUgVGVzdCB0YWJsZTogIiAr
IGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJ1blJlYWRUcmFuc2FjdGlv
bihkYjEpOworICAgICAgICAgICAgICAgIHJ1blJlYWRUcmFuc2FjdGlvbihkYjIpOworCisgICAg
ICAgICAgICAgICAgLy8gSGFjazogd2FpdCBmb3IgdGhlc2UgdHJhbnNhY3Rpb25zIHRvIGZpbmlz
aCBydW5uaW5nIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgdGVzdAorICAgICAgICAgICAgICAgIGRi
MS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeyB9LCBmdW5jdGlvbihlcnJvcikgeyB9LCBmdW5j
dGlvbigpIHsgdGVybWluYXRlVGVzdCgpOyB9KTsKKyAgICAgICAgICAgIH0pOworICAgICB9IGNh
dGNoKGVycikgeyBsb2coZXJyKTsgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgdHdvIHJlYWQtb25seSB0cmFu
c2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcnVuIGNv
bmN1cnJlbnRseS48YnI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9y
YWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9uIDQ4NDc1KQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2
OCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3Jp
cHQ+Ci08aGVhZD4KKzwvaGVhZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIHRl
c3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuPGJyPgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39717</attachid>
            <date>2009-09-17 12:47:36 -0700</date>
            <delta_ts>2009-09-17 14:35:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18536</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODQ3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IENsZWFuaW5nIHVwIHRoZQorICAgICAgICBuZXcgaGFz
aCBtYXAuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6CisK
IDIwMDktMDktMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAko
cmV2aXNpb24gNDg0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtUGVu
ZGluZ0NhbGxiYWNrKCk7CiAKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2Rh
dGFiYXNlLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gbV9yZWFkT25s
eTsgfQogCiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+LApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcAkocmV2aXNpb24gNDg0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01MCwyMyArNDksMzEgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFz
ZUlkZW50aWZpZXIoU1FMVAogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVp
cmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCByZWFkT25seSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0ocmVhZE9ubHkpOwotCiAgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdl
dERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CiAKICAgICBUcmFuc2FjdGlvbnNIYXNo
TWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmll
cik7CiAgICAgaWYgKGl0ID09IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5lbmQoKSkgewogICAgICAg
ICAvLyBObyBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBEQgotICAgICAgICBUcmFuc2Fj
dGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rp
b25zLmFwcGVuZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5h
ZGQoZGJJZGVudGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25zKTsKKyAgICAgICAgQ29vcmRpbmF0
aW9uSW5mbyBjSW5mbzsKKyAgICAgICAgY0luZm8ubnVtUGVuZGluZ1dyaXRlVHJhbnNhY3Rpb25z
ID0gMDsKKyAgICAgICAgaXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuYWRkKGRiSWRlbnRpZmll
ciwgY0luZm8pLmZpcnN0OworICAgIH0KIAotICAgICAgICAvLyBTdGFydCB0aGUgdHJhbnNhY3Rp
b24KLSAgICAgICAgdHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOworICAgIENvb3JkaW5hdGlv
bkluZm8mIGNJbmZvID0gaXQtPnNlY29uZDsKKyAgICBjSW5mby5wZW5kaW5nVHJhbnNhY3Rpb25z
LmFwcGVuZCh0cmFuc2FjdGlvbik7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkp
IHsKKyAgICAgICAgLy8gUmVhZC1vbmx5IHRyYW5zYWN0aW9uOyBzY2hlZHVsZSBvbmx5IGlmIHRo
ZXJlJ3Mgbm8gcGVuZGluZyByZWFkLXdyaXRlIHRyYW5zYWN0aW9uCisgICAgICAgIGlmICghY0lu
Zm8ubnVtUGVuZGluZ1dyaXRlVHJhbnNhY3Rpb25zKQorICAgICAgICAgICAgdHJhbnNhY3Rpb24t
PmxvY2tBY3F1aXJlZCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFub3RoZXIgdHJhbnNh
Y3Rpb24gaXMgcnVubmluZyBvbiB0aGlzIERCOyBwdXQgdGhpcyBvbmUgaW4gdGhlIHF1ZXVlCi0g
ICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29u
ZDsKLSAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOworICAg
ICAgICAvLyBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlYWQtd3JpdGUgdHJhbnNh
Y3Rpb25zIGZvciB0aGlzIGRhdGFiYXNlCisgICAgICAgIGNJbmZvLm51bVBlbmRpbmdXcml0ZVRy
YW5zYWN0aW9ucysrOworCisgICAgICAgIC8vIFJlYWQtd3JpdGUgdHJhbnNhY3Rpb247IHNjaGVk
dWxlIG9ubHkgaWYgbm8gb3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZworICAgICAgICBpZiAo
Y0luZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgQVNT
RVJUKGNJbmZvLm51bVBlbmRpbmdXcml0ZVRyYW5zYWN0aW9ucyA9PSAxKTsKKyAgICAgICAgICAg
IHRyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAt
NzksMjAgKzg2LDU4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUwK
IAogICAgIFRyYW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNh
Y3Rpb25zLmZpbmQoZGJJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nVHJh
bnNhY3Rpb25zLmVuZCgpKTsKLSAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0
aW9ucyA9IGl0LT5zZWNvbmQ7Ci0gICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1w
dHkoKSk7Ci0KLSAgICAvLyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0
IHRyYW5zYWN0aW9uIGluIHRoaXMgcXVldWUKLSAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9u
cy5maXJzdCgpLmdldCgpID09IHRyYW5zYWN0aW9uKTsKKyAgICBDb29yZGluYXRpb25JbmZvJiBj
SW5mbyA9IGl0LT5zZWNvbmQ7CisgICAgQVNTRVJUKCFjSW5mby5wZW5kaW5nVHJhbnNhY3Rpb25z
LmlzRW1wdHkoKSk7CiAKLSAgICAvLyBSZW1vdmUgJ3RyYW5zYWN0aW9uJyBmcm9tIHRoZSBxdWV1
ZSBvZiBwZW5kaW5nIHRyYW5zYWN0aW9ucwotICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3Zl
Rmlyc3QoKTsKLSAgICBpZiAocGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgLy8gTm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRpZmllcidz
IHF1ZXVlCi0gICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUoaXQpOworICAgIGlm
ICh0cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIC8vIElmICd0cmFuc2FjdGlv
bicgaXMgcmVhZC1vbmx5LCBpdCBzaG91bGQgYWx3YXlzIGJlIGJlZm9yZSB0aGUgZmlyc3QgcmVh
ZC13cml0ZSB0cmFuc2FjdGlvbiBpbiB0aGUgcXVldWUKKyAgICAgICAgVHJhbnNhY3Rpb25zUXVl
dWU6Oml0ZXJhdG9yIHB0X2l0ID0gY0luZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5iZWdpbigpOwor
ICAgICAgICB3aGlsZSAoKHB0X2l0ICE9IGNJbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkp
ICYmIChwdF9pdC0+Z2V0KCkgIT0gdHJhbnNhY3Rpb24pICYmIChwdF9pdC0+Z2V0KCktPmlzUmVh
ZE9ubHkoKSkpCisgICAgICAgICAgICArK3B0X2l0OworICAgICAgICBBU1NFUlQocHRfaXQtPmdl
dCgpID09IHRyYW5zYWN0aW9uKTsKKyAgICAgICAgY0luZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5y
ZW1vdmUocHRfaXQpOworCisgICAgICAgIGlmIChjSW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjSW5mby5udW1QZW5kaW5nV3JpdGVUcmFu
c2FjdGlvbnMpOworICAgICAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShpdCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBhdCB0aGlzIHBvaW50IHRoZSBm
aXJzdCB0cmFuc2FjdGlvbiBpbiB0aGUgcXVldWUgaXMgYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24s
CisgICAgICAgICAgICAvLyB0aGVuIGl0IHdhcyBhbHJlYWR5IHNjaGVkdWxlZCB0byBydW4gYnkg
dGhlIGFjcXVpcmVMb2NrKCkgbWV0aG9kLiBEbyBub3RoaW5nLgorICAgICAgICAgICAgLy8gSG93
ZXZlciwgaWYgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBpcyBhIHJlYWQtd3Jp
dGUgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAvLyB0aGVuIGl0IG1lYW5zIHdlJ3ZlIHByb2Nl
c3NlZCBhbGwgcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyB0aGF0IHdlcmUgcGVuZGluZyBhdAorICAg
ICAgICAgICAgLy8gdGhlIHRpbWUgd2hlbiB0aGF0IHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24gYXJy
aXZlZCwgYW5kIHdlIHNob3VsZCBzY2hlZHVsZSB0aGF0CisgICAgICAgICAgICAvLyByZWFkLXdy
aXRlIHRyYW5zYWN0aW9uIG5vdworICAgICAgICAgICAgaWYgKCFjSW5mby5wZW5kaW5nVHJhbnNh
Y3Rpb25zLmZpcnN0KCktPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgICAgICBjSW5mby5wZW5k
aW5nVHJhbnNhY3Rpb25zLmZpcnN0KCktPmxvY2tBY3F1aXJlZCgpOworICAgICAgICB9CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBz
dGFydCB0aGUgbmV4dCBvbmUKLSAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5s
b2NrQWNxdWlyZWQoKTsKKyAgICAgICAgLy8gSWYgJ3RyYW5zYWN0aW9uJyBpcyByZWFkLXdyaXRl
LCBpdCBzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGUgcXVldWUK
KyAgICAgICAgQVNTRVJUKGNJbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS5nZXQoKSA9
PSB0cmFuc2FjdGlvbik7CisgICAgICAgIGNJbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3Zl
Rmlyc3QoKTsKKworICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIG51bWJlciBvZiBwZW5kaW5nIHJl
YWQtd3JpdGUgdHJhbnNhY3Rpb25zIGZvciB0aGlzIGRhdGFiYXNlCisgICAgICAgIEFTU0VSVChj
SW5mby5udW1QZW5kaW5nV3JpdGVUcmFuc2FjdGlvbnMgPiAwKTsKKyAgICAgICAgY0luZm8ubnVt
UGVuZGluZ1dyaXRlVHJhbnNhY3Rpb25zLS07CisKKyAgICAgICAgaWYgKGNJbmZvLnBlbmRpbmdU
cmFuc2FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNJbmZvLm51bVBl
bmRpbmdXcml0ZVRyYW5zYWN0aW9ucyk7CisgICAgICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlv
bnMucmVtb3ZlKGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIGF0IHRo
aXMgcG9pbnQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBpcyBhIHJlYWQtd3Jp
dGUgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAvLyB0aGVuIHdlIHNob3VsZCBzY2hlZHVsZSB0
aGF0IHRyYW5zYWN0aW9uIGFuZCBiZSBkb25lLiBIb3dldmVyLCBpZiB0aGUgZmlyc3QKKyAgICAg
ICAgICAgIC8vIHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBpcyByZWFkLW9ubHksIHRoZW4gd2Ug
c2hvdWxkIHNjaGVkdWxlIGFsbCByZWFkLW9ubHkKKyAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9u
cyBhdCB0aGUgdG9wIG9mIHRoZSBxdWV1ZSB1bnRpbCB3ZSByZWFjaCBhIHJlYWQtd3JpdGUgdHJh
bnNhY3Rpb24KKyAgICAgICAgICAgIC8vIG9yIHRoZSBlbmQgb2YgdGhlIHF1ZXVlCisgICAgICAg
ICAgICBpZiAoIWNJbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+aXNSZWFkT25seSgp
KQorICAgICAgICAgICAgICAgIGNJbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+bG9j
a0FjcXVpcmVkKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBUcmFuc2Fj
dGlvbnNRdWV1ZTo6aXRlcmF0b3IgcHRfaXQgPSBjSW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmJl
Z2luKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChwdF9pdCAhPSBjSW5mby5wZW5kaW5nVHJh
bnNhY3Rpb25zLmVuZCgpKSAmJiAocHRfaXQtPmdldCgpLT5pc1JlYWRPbmx5KCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHB0X2l0LT5nZXQoKS0+bG9ja0FjcXVpcmVkKCk7CisgICAgICAgICAg
ICAgICAgICAgICsrcHRfaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4NDc1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNodXRkb3duKCk7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gVHJhbnNh
Y3Rpb25zUXVldWU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFRyYW5zYWN0aW9u
c1F1ZXVlPiBUcmFuc2FjdGlvbnNIYXNoTWFwOworICAgICAgICBzdHJ1Y3QgQ29vcmRpbmF0aW9u
SW5mbyB7CisgICAgICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25z
OworICAgICAgICAgICAgaW50IG51bVBlbmRpbmdXcml0ZVRyYW5zYWN0aW9uczsKKyAgICAgICAg
fTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ29vcmRpbmF0aW9uSW5mbz4gVHJh
bnNhY3Rpb25zSGFzaE1hcDsKICAgICAgICAgVHJhbnNhY3Rpb25zSGFzaE1hcCBtX3BlbmRpbmdU
cmFuc2FjdGlvbnM7CiAgICAgfTsKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4NDc1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDkt
MDktMTEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBBZGRpbmcgdHdvIHRlc3Rz
IGZvciB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IuCisgICAgICAgIDIuIEZpeGluZyBhbiBp
bmNvcnJlY3QgPGhlYWQ+IHRhZyBpbiBzb21lIHRlc3RzLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTExNQorCisgICAgICAgICogc3RvcmFnZS9t
dWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogRml4ZWQgYQor
ICAgICAgICA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbiA8L2hlYWQ+KS4KKyAgICAgICAgKiBz
dG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbDog
Rml4ZWQKKyAgICAgICAgYSA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbiA8L2hlYWQ+KS4KKyAg
ICAgICAgKiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dl
dGhlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC1hbmQtd3Jp
dGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmct
Y29uY3VycmVudGx5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvdGVzdC1hdXRob3Jp
emVyLmh0bWw6IEZpeGVkIGEgPGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4KKyAgICAgICAgPC9o
ZWFkPikuCisKIDIwMDktMDktMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlv
bnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAkocmV2aXNpb24gNDg0NzUpCisrKyBMYXlvdXRU
ZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7
CiAgICAgfSBjYXRjaChlcnIpIHt9CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9oZWFkPgogPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KIFRoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBxdWV1ZWlu
ZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNh
bWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KIDwvYm9keT4KSW5kZXg6IExh
eW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9n
cmVzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5odG1sCShyZXZpc2lvbiA0ODQ3NSkKKysr
IExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1w
cm9ncmVzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGZ1bmN0aW9uIHJ1
blRlc3QoKQogICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVh
ZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIGlzIGEgdGVzdCB0byBzZWUgaWYg
b3BlbmluZyBhIGRhdGFiYXNlIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgcnVubmluZyBvbiBhIGRp
ZmZlcmVudCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2Nr
Ljxicj4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUt
dHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1
bi10b2dldGhlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0
IHJlYWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUg
c2FtZSBkYXRhYmFzZSBkb24ndCBydW4gdG9nZXRoZXIuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVs
LgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFu
c2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9u
IHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vz
c2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1k
b250LXJ1bi10b2dldGhlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uv
cmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9u
cy1kb250LXJ1bi10b2dldGhlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rp
b24gdGVybWluYXRlVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5j
dGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlKCJSZWFk
QW5kV3JpdGVUcmFuc2FjdGlvbnNEb250UnVuVG9nZXRoZXJUZXN0IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBz
dXJlIHRoYXQgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5k
bGVzIHRvIHRoZSBzYW1lIERCIGRvbid0IHJ1biBhdCB0aGUgc2FtZSB0aW1lLiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAzMjc2OCk7Cit9CisKK3ZhciByZWFkVHJhbnNhY3Rpb25zSW5Qcm9n
cmVzcyA9IDA7Cit2YXIgd3JpdGVUcmFuc2FjdGlvbnNJblByb2dyZXNzID0gMDsKKworZnVuY3Rp
b24gcnVuVHJhbnNhY3Rpb24oZGIsIHJlYWRPbmx5KQoreworICAgIHZhciB0cmFuc2FjdGlvbkZ1
bmN0aW9uID0gKHJlYWRPbmx5ID8gZGIucmVhZFRyYW5zYWN0aW9uIDogZGIudHJhbnNhY3Rpb24p
OworICAgIHRyYW5zYWN0aW9uRnVuY3Rpb24uY2FsbChkYiwgZnVuY3Rpb24odHgpIHsKKyAgICAg
ICAgICAgIGlmIChyZWFkT25seSkgeworICAgICAgICAgICAgICAgIGlmICh3cml0ZVRyYW5zYWN0
aW9uc0luUHJvZ3Jlc3MgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBsb2coIlJlYWQgdHJh
bnNhY3Rpb24gc3RhcnRpbmcgd2hpbGUgd3JpdGUgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MuIik7
CisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlYWRUcmFuc2FjdGlvbnNJblByb2dy
ZXNzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJXcml0ZSB0cmFuc2FjdGlvbiBz
dGFydGluZyB3aGlsZSByZWFkIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOworICAgICAgICAg
ICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogRlJPTSBUZXN0OyIpOworICAgICAgICB9
LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgbG9nKChyZWFkT25seSA/ICJSZWFkIiA6
ICJXcml0ZSIpICsgIiB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgaWYgKHJlYWRPbmx5KQorICAgICAgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25z
SW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgd3JpdGVU
cmFuc2FjdGlvbnNJblByb2dyZXNzLS07CisgICAgICAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiBz
dWNjZXNzZnVsLiIpOworICAgICAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuUmVhZEFuZFdyaXRl
VHJhbnNhY3Rpb25zKGRiMSwgZGIyLCBkYjMpCit7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIxLCB0
cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjIsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9u
KGRiMSwgZmFsc2UpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJh
bnNhY3Rpb24oZGIyLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjMsIHRydWUpOworICAg
IHJ1blRyYW5zYWN0aW9uKGRiMSwgZmFsc2UpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMiwgZmFs
c2UpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24o
ZGIzLCB0cnVlKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7
CisgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIHZhciBkYjMg
PSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0
eCkgeworICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICBsb2coIkNhbm5vdCBjcmVhdGUgdGhlIFRlc3QgdGFibGU6ICIg
KyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAg
ICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBydW5SZWFkQW5kV3JpdGVU
cmFuc2FjdGlvbnMoZGIxLCBkYjIsIGRiMyk7CisKKyAgICAgICAgICAgICAgICAvLyBIYWNrOiB3
YWl0IGZvciB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gZmluaXNoIHJ1bm5pbmcgYmVmb3JlIHRlcm1p
bmF0aW5nIHRoZSB0ZXN0CisgICAgICAgICAgICAgICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9u
KHR4KSB7IH0sIGZ1bmN0aW9uKGVycm9yKSB7IH0sIGZ1bmN0aW9uKCkgeyB0ZXJtaW5hdGVUZXN0
KCk7IH0pOworICAgICAgICAgICAgfSk7CisgICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3Rz
IHRoYXQgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRv
IHRoZSBzYW1lIGRhdGFiYXNlIGRvbid0IHJ1biB0b2dldGhlci48YnI+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmct
Y29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9y
YWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVu
bmluZy1jb25jdXJyZW50bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRp
ZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJ1biBjb25jdXJyZW50bHkuCitS
ZWFkIHRyYW5zYWN0aW9ucyBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwpJbmRleDogTGF5b3V0VGVz
dHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmlu
Zy1jb25jdXJyZW50bHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
cmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAi
PGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJu
IG9wZW5EYXRhYmFzZSgiUmVhZFRyYW5zYWN0aW9uc1J1bm5pbmdDb25jdXJyZW50bHlUZXN0IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAg
IlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgbXVsdGlwbGUgcmVhZCB0cmFuc2FjdGlvbnMgb24gZGlm
ZmVyZW50IERCIGhhbmRsZXMgdG8gdGhlIHNhbWUgREIgcnVuIGNvbmN1cnJlbnRseS4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0aW9uc0lu
UHJvZ3Jlc3MgPSAwOworCitmdW5jdGlvbiBydW5SZWFkVHJhbnNhY3Rpb24oZGIpCit7CisgICAg
ZGIucmVhZFRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICByZWFkVHJhbnNh
Y3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAg
ICAgICAgbG9nKCJSZWFkIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOwor
ICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGlmIChyZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9PSAyKSB7CisgICAgICAg
ICAgICAgICAgbG9nKCJSZWFkIHRyYW5zYWN0aW9ucyBydW5uaW5nIGNvbmN1cnJlbnRseS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzLS07
CisgICAgICAgIH0pOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGRiMSA9IG9wZW5UZXN0RGF0YWJhc2Uo
KTsKKyAgICAgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAgICAgZGIxLnRy
YW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIGludCk7Iik7CisgICAgICAgICAg
ICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxvZygiQ2Fubm90IGNyZWF0
ZSB0aGUgVGVzdCB0YWJsZTogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHRl
cm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHJ1blJlYWRUcmFuc2FjdGlvbihkYjEpOworICAgICAgICAgICAgICAgIHJ1blJlYWRUcmFu
c2FjdGlvbihkYjIpOworCisgICAgICAgICAgICAgICAgLy8gSGFjazogd2FpdCBmb3IgdGhlc2Ug
dHJhbnNhY3Rpb25zIHRvIGZpbmlzaCBydW5uaW5nIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgdGVz
dAorICAgICAgICAgICAgICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeyB9LCBmdW5j
dGlvbihlcnJvcikgeyB9LCBmdW5jdGlvbigpIHsgdGVybWluYXRlVGVzdCgpOyB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikgeyBsb2coZXJyKTsgfQorfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRo
YXQgdHdvIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhl
IHNhbWUgZGF0YWJhc2UgcnVuIGNvbmN1cnJlbnRseS48YnI+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9uIDQ4
NDc1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgIH0gY2F0
Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVhZD4KIDxib2R5IG9ubG9hZD0i
cnVuVGVzdCgpOyI+CiBUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuPGJy
PgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39725</attachid>
            <date>2009-09-17 14:35:34 -0700</date>
            <delta_ts>2009-09-18 15:02:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19287</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODQ3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IENsZWFuaW5nIHVwIHRoZQorICAgICAgICBuZXcgaGFz
aCBtYXAuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6CisK
IDIwMDktMDktMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAko
cmV2aXNpb24gNDg0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtUGVu
ZGluZ0NhbGxiYWNrKCk7CiAKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2Rh
dGFiYXNlLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gbV9yZWFkT25s
eTsgfQogCiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+LApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcAkocmV2aXNpb24gNDg0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01MCw1NiArNDksMTAwIEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJh
c2VJZGVudGlmaWVyKFNRTFQKIAogdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1
aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgcmVhZE9ubHkpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHJlYWRPbmx5KTsKLQogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBn
ZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCi0gICAgVHJhbnNhY3Rpb25zSGFz
aE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZp
ZXIpOwotICAgIGlmIChpdCA9PSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICBD
b29yZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBpdCA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5m
aW5kKGRiSWRlbnRpZmllcik7CisgICAgaWYgKGl0ID09IG1fY29vcmRpbmF0aW9uSW5mb01hcC5l
bmQoKSkgewogICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBEQgot
ICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwotICAgICAgICBw
ZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcGVuZGlu
Z1RyYW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25zKTsKKyAg
ICAgICAgaXQgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwgQ29vcmRp
bmF0aW9uSW5mbygpKS5maXJzdDsKKyAgICB9CiAKLSAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5z
YWN0aW9uCi0gICAgICAgIHRyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKKyAgICBDb29yZGlu
YXRpb25JbmZvJiBpbmZvID0gaXQtPnNlY29uZDsKKyAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlv
bnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKKyAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgeworICAgICAgICAvLyBSZWFkLW9ubHkgdHJhbnNhY3Rpb247IHNjaGVkdWxlIG9ubHkgaWYg
dGhlcmUncyBubyBwZW5kaW5nIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24KKyAgICAgICAgaWYgKCFp
bmZvLm51bVBlbmRpbmdXcml0ZVRyYW5zYWN0aW9ucykKKyAgICAgICAgICAgIHRyYW5zYWN0aW9u
LT5sb2NrQWNxdWlyZWQoKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBBbm90aGVyIHRyYW5z
YWN0aW9uIGlzIHJ1bm5pbmcgb24gdGhpcyBEQjsgcHV0IHRoaXMgb25lIGluIHRoZSBxdWV1ZQot
ICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0aW9ucyA9IGl0LT5zZWNv
bmQ7Ci0gICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKKyAg
ICAgICAgLy8gSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGVuZGluZyByZWFkLXdyaXRlIHRyYW5z
YWN0aW9ucyBmb3IgdGhpcyBkYXRhYmFzZQorICAgICAgICBpbmZvLm51bVBlbmRpbmdXcml0ZVRy
YW5zYWN0aW9ucysrOworCisgICAgICAgIC8vIFJlYWQtd3JpdGUgdHJhbnNhY3Rpb247IHNjaGVk
dWxlIG9ubHkgaWYgbm8gb3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZworICAgICAgICBpZiAo
aW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICBBU1NF
UlQoaW5mby5udW1QZW5kaW5nV3JpdGVUcmFuc2FjdGlvbnMgPT0gMSk7CisgICAgICAgICAgICB0
cmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQg
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uKQogewotICAgIGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQor
ICAgIGlmIChtX2Nvb3JkaW5hdGlvbkluZm9NYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5z
YWN0aW9uKTsKIAotICAgIFRyYW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5k
aW5nVHJhbnNhY3Rpb25zLmZpbmQoZGJJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9w
ZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKTsKLSAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGlu
Z1RyYW5zYWN0aW9ucyA9IGl0LT5zZWNvbmQ7Ci0gICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rp
b25zLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUg
dGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoaXMgcXVldWUKLSAgICBBU1NFUlQocGVuZGluZ1Ry
YW5zYWN0aW9ucy5maXJzdCgpLmdldCgpID09IHRyYW5zYWN0aW9uKTsKLQotICAgIC8vIFJlbW92
ZSAndHJhbnNhY3Rpb24nIGZyb20gdGhlIHF1ZXVlIG9mIHBlbmRpbmcgdHJhbnNhY3Rpb25zCi0g
ICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgpOwotICAgIGlmIChwZW5kaW5nVHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBObyBtb3JlIHBlbmRpbmcgdHJhbnNh
Y3Rpb25zOyBkZWxldGUgZGJJZGVudGlmaWVyJ3MgcXVldWUKLSAgICAgICAgbV9wZW5kaW5nVHJh
bnNhY3Rpb25zLnJlbW92ZShpdCk7CisgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOworICAgIEFTU0VS
VChpdCAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCkpOworICAgIENvb3JkaW5hdGlvbklu
Zm8mIGluZm8gPSBpdC0+c2Vjb25kOworICAgIEFTU0VSVCghaW5mby5wZW5kaW5nVHJhbnNhY3Rp
b25zLmlzRW1wdHkoKSk7CisKKyAgICBpZiAodHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewor
ICAgICAgICAvLyBJZiAndHJhbnNhY3Rpb24nIGlzIHJlYWQtb25seSwgaXQgc2hvdWxkIGFsd2F5
cyBiZSBiZWZvcmUgdGhlIGZpcnN0IHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24gaW4gdGhlIHF1ZXVl
CisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlOjppdGVyYXRvciBwdF9pdCA9IGluZm8ucGVuZGlu
Z1RyYW5zYWN0aW9ucy5iZWdpbigpOworICAgICAgICB3aGlsZSAoKHB0X2l0ICE9IGluZm8ucGVu
ZGluZ1RyYW5zYWN0aW9ucy5lbmQoKSkgJiYgKHB0X2l0LT5nZXQoKSAhPSB0cmFuc2FjdGlvbikg
JiYgKHB0X2l0LT5nZXQoKS0+aXNSZWFkT25seSgpKSkKKyAgICAgICAgICAgICsrcHRfaXQ7Cisg
ICAgICAgIEFTU0VSVChwdF9pdC0+Z2V0KCkgPT0gdHJhbnNhY3Rpb24pOworICAgICAgICBpbmZv
LnBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlKHB0X2l0KTsKKworICAgICAgICBpZiAoaW5mby5w
ZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFpbmZv
Lm51bVBlbmRpbmdXcml0ZVRyYW5zYWN0aW9ucyk7CisgICAgICAgICAgICBtX2Nvb3JkaW5hdGlv
bkluZm9NYXAucmVtb3ZlKGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElm
IGF0IHRoaXMgcG9pbnQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBpcyBhIHJl
YWQtb25seSB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgIC8vIHRoZW4gaXQgd2FzIGFscmVhZHkg
c2NoZWR1bGVkIHRvIHJ1biBieSB0aGUgYWNxdWlyZUxvY2soKSBtZXRob2QuIERvIG5vdGhpbmcu
CisgICAgICAgICAgICAvLyBIb3dldmVyLCBpZiB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4gdGhl
IHF1ZXVlIGlzIGEgcmVhZC13cml0ZSB0cmFuc2FjdGlvbiwKKyAgICAgICAgICAgIC8vIHRoZW4g
aXQgbWVhbnMgd2UndmUgcHJvY2Vzc2VkIGFsbCByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIHRoYXQg
d2VyZSBwZW5kaW5nIGF0CisgICAgICAgICAgICAvLyB0aGUgdGltZSB3aGVuIHRoYXQgcmVhZC13
cml0ZSB0cmFuc2FjdGlvbiBhcnJpdmVkLCBhbmQgd2Ugc2hvdWxkIHNjaGVkdWxlIHRoYXQKKyAg
ICAgICAgICAgIC8vIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24gbm93CisgICAgICAgICAgICBpZiAo
IWluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5pc1JlYWRPbmx5KCkpCisgICAgICAg
ICAgICAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCktPmxvY2tBY3F1aXJlZCgp
OworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHBlbmRp
bmcgdHJhbnNhY3Rpb25zOyBzdGFydCB0aGUgbmV4dCBvbmUKLSAgICAgICAgcGVuZGluZ1RyYW5z
YWN0aW9ucy5maXJzdCgpLT5sb2NrQWNxdWlyZWQoKTsKKyAgICAgICAgLy8gSWYgJ3RyYW5zYWN0
aW9uJyBpcyByZWFkLXdyaXRlLCBpdCBzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCB0cmFuc2Fj
dGlvbiBpbiB0aGUgcXVldWUKKyAgICAgICAgQVNTRVJUKGluZm8ucGVuZGluZ1RyYW5zYWN0aW9u
cy5maXJzdCgpLmdldCgpID09IHRyYW5zYWN0aW9uKTsKKyAgICAgICAgaW5mby5wZW5kaW5nVHJh
bnNhY3Rpb25zLnJlbW92ZUZpcnN0KCk7CisKKyAgICAgICAgLy8gRGVjcmVtZW50IHRoZSBudW1i
ZXIgb2YgcGVuZGluZyByZWFkLXdyaXRlIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBkYXRhYmFzZQor
ICAgICAgICBBU1NFUlQoaW5mby5udW1QZW5kaW5nV3JpdGVUcmFuc2FjdGlvbnMgPiAwKTsKKyAg
ICAgICAgaW5mby5udW1QZW5kaW5nV3JpdGVUcmFuc2FjdGlvbnMtLTsKKworICAgICAgICBpZiAo
aW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFpbmZvLm51bVBlbmRpbmdXcml0ZVRyYW5zYWN0aW9ucyk7CisgICAgICAgICAgICBtX2Nvb3Jk
aW5hdGlvbkluZm9NYXAucmVtb3ZlKGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIElmIGF0IHRoaXMgcG9pbnQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBp
cyBhIHJlYWQtd3JpdGUgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAvLyB0aGVuIHdlIHNob3Vs
ZCBzY2hlZHVsZSB0aGF0IHRyYW5zYWN0aW9uIGFuZCBiZSBkb25lLiBIb3dldmVyLCBpZiB0aGUg
Zmlyc3QKKyAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSBpcyByZWFkLW9u
bHksIHRoZW4gd2Ugc2hvdWxkIHNjaGVkdWxlIGFsbCByZWFkLW9ubHkKKyAgICAgICAgICAgIC8v
IHRyYW5zYWN0aW9ucyBhdCB0aGUgdG9wIG9mIHRoZSBxdWV1ZSB1bnRpbCB3ZSByZWFjaCBhIHJl
YWQtd3JpdGUgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgIC8vIG9yIHRoZSBlbmQgb2YgdGhlIHF1
ZXVlCisgICAgICAgICAgICBpZiAoIWluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5p
c1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZp
cnN0KCktPmxvY2tBY3F1aXJlZCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgVHJhbnNhY3Rpb25zUXVldWU6Oml0ZXJhdG9yIHB0X2l0ID0gaW5mby5wZW5kaW5nVHJhbnNh
Y3Rpb25zLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChwdF9pdCAhPSBpbmZvLnBl
bmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpICYmIChwdF9pdC0+Z2V0KCktPmlzUmVhZE9ubHkoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHRfaXQtPmdldCgpLT5sb2NrQWNxdWlyZWQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgKytwdF9pdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6c2h1dGRvd24oKQogewogICAgIC8vIENsZWFuIHVwIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9u
cyBmb3IgYWxsIGRhdGFiYXNlcwotICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5jbGVhcigpOwor
ICAgIG1fY29vcmRpbmF0aW9uSW5mb01hcC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4NDc1KQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOCArNDgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHNodXRkb3duKCk7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8
U1FMVHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25zUXVldWU7Ci0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFRyYW5zYWN0aW9uc1F1ZXVlPiBUcmFuc2FjdGlvbnNIYXNoTWFwOwotICAg
ICAgICBUcmFuc2FjdGlvbnNIYXNoTWFwIG1fcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICAgICAg
c3RydWN0IENvb3JkaW5hdGlvbkluZm8geworICAgICAgICAgICAgQ29vcmRpbmF0aW9uSW5mbygp
CisgICAgICAgICAgICAgICAgOiBudW1QZW5kaW5nV3JpdGVUcmFuc2FjdGlvbnMoMCkgeyB9Cisg
ICAgICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOworICAgICAg
ICAgICAgaW50IG51bVBlbmRpbmdXcml0ZVRyYW5zYWN0aW9uczsKKyAgICAgICAgfTsKKyAgICAg
ICAgLy8gTWFwcyBkYXRhYmFzZSBuYW1lcyB0byBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIHRy
YW5zYWN0aW9ucworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDb29yZGluYXRpb25J
bmZvPiBDb29yZGluYXRpb25JbmZvTWFwOworICAgICAgICBDb29yZGluYXRpb25JbmZvTWFwIG1f
Y29vcmRpbmF0aW9uSW5mb01hcDsKICAgICB9OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODQ3
NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDA5LTA5LTExICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gQWRkaW5n
IHR3byB0ZXN0cyBmb3IgdGhlIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9yLgorICAgICAgICAyLiBG
aXhpbmcgYW4gaW5jb3JyZWN0IDxoZWFkPiB0YWcgaW4gc29tZSB0ZXN0cy4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkxMTUKKworICAgICAgICAq
IHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWw6
IEZpeGVkIGEKKyAgICAgICAgPGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4gPC9oZWFkPikuCisg
ICAgICAgICogc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dy
ZXNzLmh0bWw6IEZpeGVkCisgICAgICAgIGEgPGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4gPC9o
ZWFkPikuCisgICAgICAgICogc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9u
dC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3Jl
YWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBzdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9u
cy1ydW5uaW5nLWNvbmN1cnJlbnRseS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3Rl
c3QtYXV0aG9yaXplci5odG1sOiBGaXhlZCBhIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuCisg
ICAgICAgIDwvaGVhZD4pLgorCiAyMDA5LTA5LTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFz
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHJldmlzaW9uIDQ4NDc1KQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBmdW5jdGlvbiBy
dW5UZXN0KCkgewogICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwv
aGVhZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIGlzIGEgdGVzdCB0byBzZWUg
aWYgcXVldWVpbmcgdXAgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVz
IHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay48YnI+CiA8L2JvZHk+
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rp
b24taW4tcHJvZ3Jlc3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbAkocmV2aXNpb24g
NDg0NzUpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNh
Y3Rpb24taW4tcHJvZ3Jlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBm
dW5jdGlvbiBydW5UZXN0KCkKICAgICB9IGNhdGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhl
YWQ+Cis8L2hlYWQ+CiA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgogVGhpcyBpcyBhIHRlc3Qg
dG8gc2VlIGlmIG9wZW5pbmcgYSBkYXRhYmFzZSB3aGlsZSBhIHRyYW5zYWN0aW9uIGlzIHJ1bm5p
bmcgb24gYSBkaWZmZXJlbnQgaGFuZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4g
YSBkZWFkbG9jay48YnI+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQt
YW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlv
bnMtZG9udC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRo
ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3Qg
dGVzdHMgdGhhdCByZWFkIGFuZCB3cml0ZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRs
ZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZG9uJ3QgcnVuIHRvZ2V0aGVyLgorVHJhbnNhY3Rpb24g
c3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNz
ZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitU
cmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0
aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3Vj
Y2Vzc2Z1bC4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFu
c2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10
cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdl
KQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9
CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRh
YmFzZSgiUmVhZEFuZFdyaXRlVHJhbnNhY3Rpb25zRG9udFJ1blRvZ2V0aGVyVGVzdCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRvIG1ha2Ugc3VyZSB0aGF0IHJlYWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJl
bnQgREIgaGFuZGxlcyB0byB0aGUgc2FtZSBEQiBkb24ndCBydW4gYXQgdGhlIHNhbWUgdGltZS4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0
aW9uc0luUHJvZ3Jlc3MgPSAwOwordmFyIHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9IDA7
CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uKGRiLCByZWFkT25seSkKK3sKKyAgICB2YXIgdHJh
bnNhY3Rpb25GdW5jdGlvbiA9IChyZWFkT25seSA/IGRiLnJlYWRUcmFuc2FjdGlvbiA6IGRiLnRy
YW5zYWN0aW9uKTsKKyAgICB0cmFuc2FjdGlvbkZ1bmN0aW9uLmNhbGwoZGIsIGZ1bmN0aW9uKHR4
KSB7CisgICAgICAgICAgICBpZiAocmVhZE9ubHkpIHsKKyAgICAgICAgICAgICAgICBpZiAod3Jp
dGVUcmFuc2FjdGlvbnNJblByb2dyZXNzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9n
KCJSZWFkIHRyYW5zYWN0aW9uIHN0YXJ0aW5nIHdoaWxlIHdyaXRlIHRyYW5zYWN0aW9uIGluIHBy
b2dyZXNzLiIpOworICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzKys7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZWFkVHJhbnNhY3Rp
b25zSW5Qcm9ncmVzcyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiV3JpdGUgdHJh
bnNhY3Rpb24gc3RhcnRpbmcgd2hpbGUgcmVhZCB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4iKTsK
KyAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIEZST00gVGVzdDsiKTsK
KyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgIGxvZygocmVhZE9ubHkg
PyAiUmVhZCIgOiAiV3JpdGUiKSArICIgdHJhbnNhY3Rpb24gZmFpbGVkOiAiICsgZXJyb3IubWVz
c2FnZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgIGlmIChyZWFkT25seSkKKyAgICAgICAgICAgICAgICAgcmVhZFRy
YW5zYWN0aW9uc0luUHJvZ3Jlc3MtLTsKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgIHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgIGxvZygiVHJh
bnNhY3Rpb24gc3VjY2Vzc2Z1bC4iKTsKKyAgICAgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1blJl
YWRBbmRXcml0ZVRyYW5zYWN0aW9ucyhkYjEsIGRiMiwgZGIzKQoreworICAgIHJ1blRyYW5zYWN0
aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIyLCB0cnVlKTsKKyAgICBydW5U
cmFuc2FjdGlvbihkYjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOwor
ICAgIHJ1blRyYW5zYWN0aW9uKGRiMiwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIzLCB0
cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlv
bihkYjIsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOworICAgIHJ1blRy
YW5zYWN0aW9uKGRiMywgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICB2YXIgZGIxID0gb3BlblRlc3RE
YXRhYmFzZSgpOworICAgICAgICB2YXIgZGIyID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAg
ICB2YXIgZGIzID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICBkYjEudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KTsiKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0
aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDYW5ub3QgY3JlYXRlIHRoZSBUZXN0
IHRhYmxlOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgdGVybWluYXRlVGVz
dCgpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcnVuUmVh
ZEFuZFdyaXRlVHJhbnNhY3Rpb25zKGRiMSwgZGIyLCBkYjMpOworCisgICAgICAgICAgICAgICAg
Ly8gSGFjazogd2FpdCBmb3IgdGhlc2UgdHJhbnNhY3Rpb25zIHRvIGZpbmlzaCBydW5uaW5nIGJl
Zm9yZSB0ZXJtaW5hdGluZyB0aGUgdGVzdAorICAgICAgICAgICAgICAgIGRiMS50cmFuc2FjdGlv
bihmdW5jdGlvbih0eCkgeyB9LCBmdW5jdGlvbihlcnJvcikgeyB9LCBmdW5jdGlvbigpIHsgdGVy
bWluYXRlVGVzdCgpOyB9KTsKKyAgICAgICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikge30K
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMg
dGVzdCB0ZXN0cyB0aGF0IHJlYWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQg
aGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb24ndCBydW4gdG9nZXRoZXIuPGJyPgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9u
cy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNh
Y3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0d28gcmVhZC1vbmx5IHRyYW5zYWN0
aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBydW4gY29uY3Vy
cmVudGx5LgorUmVhZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuCisKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50
bHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rp
b25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitm
dW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBt
ZXNzYWdlICsgIjxicj4iOworfQorCitmdW5jdGlvbiB0ZXJtaW5hdGVUZXN0KCkKK3sKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQorewor
ICAgIHJldHVybiBvcGVuRGF0YWJhc2UoIlJlYWRUcmFuc2FjdGlvbnNSdW5uaW5nQ29uY3VycmVu
dGx5VGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rp
b25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVzIHRvIHRoZSBzYW1lIERCIHJ1biBjb25jdXJyZW50
bHkuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDMyNzY4KTsKK30KKwordmFyIHJlYWRUcmFu
c2FjdGlvbnNJblByb2dyZXNzID0gMDsKKworZnVuY3Rpb24gcnVuUmVhZFRyYW5zYWN0aW9uKGRi
KQoreworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAg
cmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3Ip
IHsKKyAgICAgICAgICAgIGxvZygiUmVhZCB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5t
ZXNzYWdlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBpZiAocmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPT0gMikg
eworICAgICAgICAgICAgICAgIGxvZygiUmVhZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJy
ZW50bHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Q
cm9ncmVzcy0tOworICAgICAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVz
dERhdGFiYXNlKCk7CisgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAg
ICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIHR4LmV4
ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOwor
ICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coIkNh
bm5vdCBjcmVhdGUgdGhlIFRlc3QgdGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAg
ICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBydW5SZWFkVHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgICAgICAgICBy
dW5SZWFkVHJhbnNhY3Rpb24oZGIyKTsKKworICAgICAgICAgICAgICAgIC8vIEhhY2s6IHdhaXQg
Zm9yIHRoZXNlIHRyYW5zYWN0aW9ucyB0byBmaW5pc2ggcnVubmluZyBiZWZvcmUgdGVybWluYXRp
bmcgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgp
IHsgfSwgZnVuY3Rpb24oZXJyb3IpIHsgfSwgZnVuY3Rpb24oKSB7IHRlcm1pbmF0ZVRlc3QoKTsg
fSk7CisgICAgICAgICAgICB9KTsKKyAgICAgfSBjYXRjaChlcnIpIHsgbG9nKGVycik7IH0KK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVz
dCB0ZXN0cyB0aGF0IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5k
bGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJ1biBjb25jdXJyZW50bHkuPGJyPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShy
ZXZpc2lvbiA0ODQ3NSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkK
ICAgICB9IGNhdGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoKTsiPgogVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBhdXRo
b3JpemVyLjxicj4KIDwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39793</attachid>
            <date>2009-09-18 15:02:23 -0700</date>
            <delta_ts>2009-09-18 16:35:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17508</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODUzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDktMTggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmg6CisKIDIwMDktMDktMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbiBhbmQgQnJhZHkgRWlkc29u
LgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDQ4NTM0KQorKysgV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOwogCiAgICAg
RGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorICAgIGJv
b2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KIAogcHJpdmF0ZToKICAgICBT
UUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFj
az4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDQ4
NTM0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24u
aCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDU4ICs0
OCw2NyBAQCBzdGF0aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRpZmllcihTUUxUCiAgICAgcmV0
dXJuIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBi
b29sIHJlYWRPbmx5KQordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzRmly
c3RQZW5kaW5nVHJhbnNhY3Rpb24oQ29vcmRpbmF0aW9uSW5mbyYgaW5mbykKIHsKLSAgICBVTlVT
RURfUEFSQU0ocmVhZE9ubHkpOworICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24g
fHwgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGlu
Zm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpOworICAgIGlmIChmaXJzdFBlbmRpbmdUcmFu
c2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9u
cy5yZW1vdmVGaXJzdCgpOworICAgICAgICBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuYWRk
KGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKTsKKyAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rp
b24tPmxvY2tBY3F1aXJlZCgpOworICAgICAgICBwcm9jZXNzRmlyc3RQZW5kaW5nVHJhbnNhY3Rp
b24oaW5mbyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGluZm8uYWN0aXZlUmVhZFRyYW5z
YWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9u
cy5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9u
ID0gZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb247CisgICAgICAgICAgICBmaXJzdFBlbmRpbmdUcmFu
c2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAgICAgIH0KKyAgICB9Cit9CiAKK3ZvaWQgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBib29sIHJlYWRPbmx5KQorewogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXRE
YXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCi0gICAgVHJhbnNhY3Rpb25zSGFzaE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIp
OwotICAgIGlmIChpdCA9PSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICBDb29y
ZGluYXRpb25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nv
b3JkaW5hdGlvbkluZm9NYXAuZmluZChkYklkZW50aWZpZXIpOworICAgIGlmIChjb29yZGluYXRp
b25JbmZvSXRlcmF0b3IgPT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpKSB7CiAgICAgICAg
IC8vIE5vIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciB0aGlzIERCCi0gICAgICAgIFRyYW5zYWN0
aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2FjdGlvbnM7Ci0gICAgICAgIHBlbmRpbmdUcmFuc2FjdGlv
bnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKLSAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmFk
ZChkYklkZW50aWZpZXIsIHBlbmRpbmdUcmFuc2FjdGlvbnMpOwotCi0gICAgICAgIC8vIFN0YXJ0
IHRoZSB0cmFuc2FjdGlvbgotICAgICAgICB0cmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQW5vdGhlciB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9u
IHRoaXMgREI7IHB1dCB0aGlzIG9uZSBpbiB0aGUgcXVldWUKLSAgICAgICAgVHJhbnNhY3Rpb25z
UXVldWUmIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBpdC0+c2Vjb25kOwotICAgICAgICBwZW5kaW5n
VHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CisgICAgICAgIGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29y
ZGluYXRpb25JbmZvKCkpLmZpcnN0OwogICAgIH0KKworICAgIENvb3JkaW5hdGlvbkluZm8mIGlu
Zm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBpbmZvLnBlbmRpbmdU
cmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKKyAgICBwcm9jZXNzRmlyc3RQZW5kaW5n
VHJhbnNhY3Rpb24oaW5mbyk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogewotICAgIGlmIChtX3Bl
bmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Nvb3JkaW5hdGlvbkluZm9N
YXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgZGJJZGVudGlmaWVy
ID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKIAotICAgIFRyYW5zYWN0aW9u
c0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmZpbmQoZGJJZGVu
dGlmaWVyKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKTsK
LSAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0aW9ucyA9IGl0LT5zZWNvbmQ7
Ci0gICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyAn
dHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRo
aXMgcXVldWUKLSAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLmdldCgpID09
IHRyYW5zYWN0aW9uKTsKLQotICAgIC8vIFJlbW92ZSAndHJhbnNhY3Rpb24nIGZyb20gdGhlIHF1
ZXVlIG9mIHBlbmRpbmcgdHJhbnNhY3Rpb25zCi0gICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1v
dmVGaXJzdCgpOwotICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBObyBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBkZWxldGUgZGJJZGVudGlmaWVy
J3MgcXVldWUKLSAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShpdCk7CisgICAg
Q29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0g
bV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY29v
cmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSk7Cisg
ICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vj
b25kOworCisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgQVNT
RVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwor
ICAgICAgICBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsK
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlv
bnM7IHN0YXJ0IHRoZSBuZXh0IG9uZQotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0
KCktPmxvY2tBY3F1aXJlZCgpOworICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVXcml0ZVRyYW5z
YWN0aW9uID09IHRyYW5zYWN0aW9uKTsKKyAgICAgICAgaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0
aW9uID0gMDsKICAgICB9CisKKyAgICBwcm9jZXNzRmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24oaW5m
byk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24oKQogewog
ICAgIC8vIENsZWFuIHVwIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgYWxsIGRhdGFiYXNl
cwotICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5jbGVhcigpOworICAgIG1fY29vcmRpbmF0aW9u
SW5mb01hcC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4NTM0KQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw4ICs0OSwxNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKICAgICBwcml2
YXRlOgogICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBUcmFu
c2FjdGlvbnNRdWV1ZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVHJhbnNhY3Rp
b25zUXVldWU+IFRyYW5zYWN0aW9uc0hhc2hNYXA7Ci0gICAgICAgIFRyYW5zYWN0aW9uc0hhc2hN
YXAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zOworICAgICAgICBzdHJ1Y3QgQ29vcmRpbmF0aW9uSW5m
byB7CisgICAgICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwor
ICAgICAgICAgICAgSGFzaFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gYWN0aXZlUmVhZFRy
YW5zYWN0aW9uczsKKyAgICAgICAgICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gYWN0aXZlV3Jp
dGVUcmFuc2FjdGlvbjsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gTWFwcyBkYXRhYmFzZSBuYW1l
cyB0byBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIHRyYW5zYWN0aW9ucworICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBDb29yZGluYXRpb25JbmZvPiBDb29yZGluYXRpb25JbmZvTWFw
OworICAgICAgICBDb29yZGluYXRpb25JbmZvTWFwIG1fY29vcmRpbmF0aW9uSW5mb01hcDsKKwor
ICAgICAgICB2b2lkIHByb2Nlc3NGaXJzdFBlbmRpbmdUcmFuc2FjdGlvbihDb29yZGluYXRpb25J
bmZvJiBpbmZvKTsKICAgICB9OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODUzNCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDA5
LTA5LTExICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gQWRkaW5nIHR3byB0ZXN0
cyBmb3IgdGhlIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9yLgorICAgICAgICAyLiBGaXhpbmcgYW4g
aW5jb3JyZWN0IDxoZWFkPiB0YWcgaW4gc29tZSB0ZXN0cy4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkxMTUKKworICAgICAgICAqIHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWw6IEZpeGVkIGEK
KyAgICAgICAgPGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4gPC9oZWFkPikuCisgICAgICAgICog
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLmh0bWw6
IEZpeGVkCisgICAgICAgIGEgPGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4gPC9oZWFkPikuCisg
ICAgICAgICogc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9n
ZXRoZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3JlYWQtYW5kLXdy
aXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5n
LWNvbmN1cnJlbnRseS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sOiBGaXhlZCBhIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuCisgICAgICAgIDwv
aGVhZD4pLgorCiAyMDA5LTA5LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBMYXlvdXRUZXN0
cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25z
LW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHJldmlzaW9uIDQ4NTM0KQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkgewog
ICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVhZD4KIDxib2R5
IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIGlzIGEgdGVzdCB0byBzZWUgaWYgcXVldWVpbmcg
dXAgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1l
IGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay48YnI+CiA8L2JvZHk+CkluZGV4OiBMYXlv
dXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jl
c3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3MuaHRtbAkocmV2aXNpb24gNDg1MzQpCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJv
Z3Jlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBmdW5jdGlvbiBydW5U
ZXN0KCkKICAgICB9IGNhdGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+
CiA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgogVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIG9w
ZW5pbmcgYSBkYXRhYmFzZSB3aGlsZSBhIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gYSBkaWZm
ZXJlbnQgaGFuZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay48
YnI+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRy
YW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4t
dG9nZXRoZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3QgdGVzdHMgdGhhdCBy
ZWFkIGFuZCB3cml0ZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNh
bWUgZGF0YWJhc2UgZG9uJ3QgcnVuIHRvZ2V0aGVyLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4K
K1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNh
Y3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBz
dWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3Nm
dWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KKwpJ
bmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9u
dC1ydW4tdG9nZXRoZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jl
YWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMt
ZG9udC1ydW4tdG9nZXRoZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9u
IHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rp
b24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRhYmFzZSgiUmVhZEFu
ZFdyaXRlVHJhbnNhY3Rpb25zRG9udFJ1blRvZ2V0aGVyVGVzdCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3Vy
ZSB0aGF0IHJlYWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIgaGFuZGxl
cyB0byB0aGUgc2FtZSBEQiBkb24ndCBydW4gYXQgdGhlIHNhbWUgdGltZS4iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jl
c3MgPSAwOwordmFyIHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9IDA7CisKK2Z1bmN0aW9u
IHJ1blRyYW5zYWN0aW9uKGRiLCByZWFkT25seSkKK3sKKyAgICB2YXIgdHJhbnNhY3Rpb25GdW5j
dGlvbiA9IChyZWFkT25seSA/IGRiLnJlYWRUcmFuc2FjdGlvbiA6IGRiLnRyYW5zYWN0aW9uKTsK
KyAgICB0cmFuc2FjdGlvbkZ1bmN0aW9uLmNhbGwoZGIsIGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
ICAgICBpZiAocmVhZE9ubHkpIHsKKyAgICAgICAgICAgICAgICBpZiAod3JpdGVUcmFuc2FjdGlv
bnNJblByb2dyZXNzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJSZWFkIHRyYW5z
YWN0aW9uIHN0YXJ0aW5nIHdoaWxlIHdyaXRlIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzKys7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChyZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVz
cyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiV3JpdGUgdHJhbnNhY3Rpb24gc3Rh
cnRpbmcgd2hpbGUgcmVhZCB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIEZST00gVGVzdDsiKTsKKyAgICAgICAgfSwg
ZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgIGxvZygocmVhZE9ubHkgPyAiUmVhZCIgOiAi
V3JpdGUiKSArICIgdHJhbnNhY3Rpb24gZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAg
ICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgIGlmIChyZWFkT25seSkKKyAgICAgICAgICAgICAgICAgcmVhZFRyYW5zYWN0aW9uc0lu
UHJvZ3Jlc3MtLTsKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIHdyaXRlVHJh
bnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gc3Vj
Y2Vzc2Z1bC4iKTsKKyAgICAgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1blJlYWRBbmRXcml0ZVRy
YW5zYWN0aW9ucyhkYjEsIGRiMiwgZGIzKQoreworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1
ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIyLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihk
YjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOworICAgIHJ1blRyYW5z
YWN0aW9uKGRiMiwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIzLCB0cnVlKTsKKyAgICBy
dW5UcmFuc2FjdGlvbihkYjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjIsIGZhbHNl
KTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRi
MywgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICB9CisKKyAgICB0cnkgeworICAgICAgICB2YXIgZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOwor
ICAgICAgICB2YXIgZGIyID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICB2YXIgZGIzID0g
b3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgp
IHsKKyAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVY
SVNUUyBUZXN0IChGb28gaW50KTsiKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7
CisgICAgICAgICAgICAgICAgbG9nKCJDYW5ub3QgY3JlYXRlIHRoZSBUZXN0IHRhYmxlOiAiICsg
ZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAg
ICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcnVuUmVhZEFuZFdyaXRlVHJh
bnNhY3Rpb25zKGRiMSwgZGIyLCBkYjMpOworCisgICAgICAgICAgICAgICAgLy8gSGFjazogd2Fp
dCBmb3IgdGhlc2UgdHJhbnNhY3Rpb25zIHRvIGZpbmlzaCBydW5uaW5nIGJlZm9yZSB0ZXJtaW5h
dGluZyB0aGUgdGVzdAorICAgICAgICAgICAgICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0
eCkgeyB9LCBmdW5jdGlvbihlcnJvcikgeyB9LCBmdW5jdGlvbigpIHsgdGVybWluYXRlVGVzdCgp
OyB9KTsKKyAgICAgICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCB0ZXN0cyB0
aGF0IHJlYWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0
aGUgc2FtZSBkYXRhYmFzZSBkb24ndCBydW4gdG9nZXRoZXIuPGJyPgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNv
bmN1cnJlbnRseS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5p
bmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0d28gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvbiBkaWZm
ZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBydW4gY29uY3VycmVudGx5LgorUmVh
ZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuCisKSW5kZXg6IExheW91dFRlc3Rz
L3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmct
Y29uY3VycmVudGx5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jl
YWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBsb2co
bWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxi
cj4iOworfQorCitmdW5jdGlvbiB0ZXJtaW5hdGVUZXN0KCkKK3sKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBv
cGVuRGF0YWJhc2UoIlJlYWRUcmFuc2FjdGlvbnNSdW5uaW5nQ29uY3VycmVudGx5VGVzdCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJU
ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIGRpZmZl
cmVudCBEQiBoYW5kbGVzIHRvIHRoZSBzYW1lIERCIHJ1biBjb25jdXJyZW50bHkuIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIDMyNzY4KTsKK30KKwordmFyIHJlYWRUcmFuc2FjdGlvbnNJblBy
b2dyZXNzID0gMDsKKworZnVuY3Rpb24gcnVuUmVhZFRyYW5zYWN0aW9uKGRiKQoreworICAgIGRi
LnJlYWRUcmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgcmVhZFRyYW5zYWN0
aW9uc0luUHJvZ3Jlc3MrKzsKKyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAg
ICAgIGxvZygiUmVhZCB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBpZiAocmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPT0gMikgeworICAgICAgICAg
ICAgICAgIGxvZygiUmVhZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcy0tOwor
ICAgICAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7
CisgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiMS50cmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworICAgICAgICAgICAg
fSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coIkNhbm5vdCBjcmVhdGUg
dGhlIFRlc3QgdGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0ZXJt
aW5hdGVUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBydW5SZWFkVHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgICAgICAgICBydW5SZWFkVHJhbnNh
Y3Rpb24oZGIyKTsKKworICAgICAgICAgICAgICAgIC8vIEhhY2s6IHdhaXQgZm9yIHRoZXNlIHRy
YW5zYWN0aW9ucyB0byBmaW5pc2ggcnVubmluZyBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHRlc3QK
KyAgICAgICAgICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSwgZnVuY3Rp
b24oZXJyb3IpIHsgfSwgZnVuY3Rpb24oKSB7IHRlcm1pbmF0ZVRlc3QoKTsgfSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgfSBjYXRjaChlcnIpIHsgbG9nKGVycik7IH0KK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCB0ZXN0cyB0aGF0
IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBz
YW1lIGRhdGFiYXNlIHJ1biBjb25jdXJyZW50bHkuPGJyPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lvbiA0ODUz
NCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKICAgICB9IGNhdGNo
KGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9keSBvbmxvYWQ9InJ1
blRlc3QoKTsiPgogVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLjxicj4K
IDwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39803</attachid>
            <date>2009-09-18 16:35:42 -0700</date>
            <delta_ts>2009-09-18 18:44:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17785</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODUzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDktMTggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IFJlbmFtZWQgdGhlIG1hcC4KKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0xOCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVu
IGFuZCBCcmFkeSBFaWRzb24uCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNp
b24gNDg1MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtUGVuZGluZ0Nh
bGxiYWNrKCk7CiAKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNl
LmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gbV9yZWFkT25seTsgfQog
CiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+LApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAkocmV2aXNpb24gNDg1MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRl
ICJTUUxUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDgsNTggKzQ4LDcwIEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlm
aWVyKFNRTFQKICAgICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKIH0KIAot
dm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGJvb2wgcmVhZE9ubHkpCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OnByb2Nlc3NGaXJzdFBlbmRpbmdUcmFuc2FjdGlvbihDb29yZGluYXRpb25JbmZvJiBp
bmZvKQogewotICAgIFVOVVNFRF9QQVJBTShyZWFkT25seSk7CisgICAgaWYgKGluZm8uYWN0aXZl
V3JpdGVUcmFuc2FjdGlvbiB8fCBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGZpcnN0UGVuZGlu
Z1RyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7CisgICAgaWYg
KGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgd2hpbGUg
KCFpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpICYmIGZpcnN0UGVuZGluZ1RyYW5z
YWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0
aW9ucy5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rp
b25zLmFkZChmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbik7CisgICAgICAgICAgICBmaXJzdFBlbmRp
bmdUcmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAgICAgICAgICBpZiAoIWluZm8ucGVu
ZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZmlyc3RQZW5kaW5n
VHJhbnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3Zl
Rmlyc3QoKTsKKyAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9IGZpcnN0
UGVuZGluZ1RyYW5zYWN0aW9uOworICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24t
PmxvY2tBY3F1aXJlZCgpOworICAgICAgICB9CisgICAgfQorfQogCit2b2lkIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Ym9vbCByZWFkT25seSkKK3sKICAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJ
ZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKIAotICAgIFRyYW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmZpbmQoZGJJZGVudGlmaWVyKTsKLSAgICBp
ZiAoaXQgPT0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgpKSB7CisgICAgQ29vcmRpbmF0aW9u
SW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRp
b25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBpZiAoY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yID09IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKSkgewogICAgICAgICAvLyBObyBw
ZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBEQgotICAgICAgICBUcmFuc2FjdGlvbnNRdWV1
ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVu
ZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5hZGQoZGJJZGVu
dGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25zKTsKLQotICAgICAgICAvLyBTdGFydCB0aGUgdHJh
bnNhY3Rpb24KLSAgICAgICAgdHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIEFub3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZyBvbiB0aGlzIERC
OyBwdXQgdGhpcyBvbmUgaW4gdGhlIHF1ZXVlCi0gICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBw
ZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29uZDsKLSAgICAgICAgcGVuZGluZ1RyYW5zYWN0
aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOworICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0
b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRlbnRpZmllciwgQ29vcmRpbmF0aW9u
SW5mbygpKS5maXJzdDsKICAgICB9CisKKyAgICBDb29yZGluYXRpb25JbmZvJiBpbmZvID0gY29v
cmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rp
b25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CisgICAgcHJvY2Vzc0ZpcnN0UGVuZGluZ1RyYW5zYWN0
aW9uKGluZm8pOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VM
b2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKIHsKLSAgICBpZiAobV9wZW5kaW5nVHJh
bnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICBpZiAobV9jb29yZGluYXRpb25JbmZvTWFwLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERh
dGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CiAKLSAgICBUcmFuc2FjdGlvbnNIYXNoTWFw
OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7
Ci0gICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5lbmQoKSk7Ci0gICAgVHJh
bnNhY3Rpb25zUXVldWUmIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBpdC0+c2Vjb25kOwotICAgIEFT
U0VSVCghcGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwotCi0gICAgLy8gJ3RyYW5zYWN0
aW9uJyBzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGlzIHF1ZXVl
Ci0gICAgQVNTRVJUKHBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS5nZXQoKSA9PSB0cmFuc2Fj
dGlvbik7Ci0KLSAgICAvLyBSZW1vdmUgJ3RyYW5zYWN0aW9uJyBmcm9tIHRoZSBxdWV1ZSBvZiBw
ZW5kaW5nIHRyYW5zYWN0aW9ucwotICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlRmlyc3Qo
KTsKLSAgICBpZiAocGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8g
Tm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRpZmllcidzIHF1ZXVl
Ci0gICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUoaXQpOworICAgIENvb3JkaW5h
dGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRp
bmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmllcik7CisgICAgQVNTRVJUKGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCkpOworICAgIENvb3Jk
aW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIGlmICh0cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIEFTU0VSVChpbmZv
LmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKyAgICAgICAg
aW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBzdGFy
dCB0aGUgbmV4dCBvbmUKLSAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5sb2Nr
QWNxdWlyZWQoKTsKKyAgICAgICAgQVNTRVJUKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9
PSB0cmFuc2FjdGlvbik7CisgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9IDA7
CiAgICAgfQorCisgICAgcHJvY2Vzc0ZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uKGluZm8pOwogfQog
CiB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKCkKIHsKICAgICAvLyBD
bGVhbiB1cCBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIGFsbCBkYXRhYmFzZXMKLSAgICBt
X3BlbmRpbmdUcmFuc2FjdGlvbnMuY2xlYXIoKTsKKyAgICBtX2Nvb3JkaW5hdGlvbkluZm9NYXAu
Y2xlYXIoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oCShyZXZpc2lvbiA0ODUzNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsOCArNDksMTYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNodXRkb3duKCk7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25z
UXVldWU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFRyYW5zYWN0aW9uc1F1ZXVl
PiBUcmFuc2FjdGlvbnNIYXNoTWFwOwotICAgICAgICBUcmFuc2FjdGlvbnNIYXNoTWFwIG1fcGVu
ZGluZ1RyYW5zYWN0aW9uczsKKyAgICAgICAgc3RydWN0IENvb3JkaW5hdGlvbkluZm8geworICAg
ICAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUgcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IGFjdGl2ZVJlYWRUcmFuc2FjdGlv
bnM7CisgICAgICAgICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGFjdGl2ZVdyaXRlVHJhbnNh
Y3Rpb247CisgICAgICAgIH07CisgICAgICAgIC8vIE1hcHMgZGF0YWJhc2UgbmFtZXMgdG8gaW5m
b3JtYXRpb24gYWJvdXQgcGVuZGluZyB0cmFuc2FjdGlvbnMKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ29vcmRpbmF0aW9uSW5mbz4gQ29vcmRpbmF0aW9uSW5mb01hcDsKKyAgICAg
ICAgQ29vcmRpbmF0aW9uSW5mb01hcCBtX2Nvb3JkaW5hdGlvbkluZm9NYXA7CisKKyAgICAgICAg
dm9pZCBwcm9jZXNzRmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24oQ29vcmRpbmF0aW9uSW5mbyYgaW5m
byk7CiAgICAgfTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDg1MzQpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0wOS0xMSAg
RHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEFkZGluZyB0d28gdGVzdHMgZm9yIHRo
ZSB0cmFuc2FjdGlvbiBjb29yZGluYXRvci4KKyAgICAgICAgMi4gRml4aW5nIGFuIGluY29ycmVj
dCA8aGVhZD4gdGFnIGluIHNvbWUgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTE1CisKKyAgICAgICAgKiBzdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sOiBGaXhlZCBhCisgICAgICAg
IDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuIDwvaGVhZD4pLgorICAgICAgICAqIHN0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5odG1sOiBGaXhlZAor
ICAgICAgICBhIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuIDwvaGVhZD4pLgorICAgICAgICAq
IHN0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFu
c2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJy
ZW50bHkuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRt
bDogRml4ZWQgYSA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbgorICAgICAgICA8L2hlYWQ+KS4K
KwogMjAwOS0wOS0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiA0ODUzNCkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICB9IGNh
dGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoKTsiPgogVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIHF1ZXVlaW5nIHVwIG11bHRp
cGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFz
ZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRy
YW5zYWN0aW9uLWluLXByb2dyZXNzLmh0bWwJKHJldmlzaW9uIDQ4NTM0KQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpCiAg
ICAgfSBjYXRjaChlcnIpIHt9CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9oZWFkPgogPGJvZHkg
b25sb2FkPSJydW5UZXN0KCk7Ij4KIFRoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBvcGVuaW5nIGEg
ZGF0YWJhc2Ugd2hpbGUgYSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGhh
bmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgogPC9i
b2R5PgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlv
bnMtZG9udC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1h
bmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgcmVhZCBhbmQg
d3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFi
YXNlIGRvbid0IHJ1biB0b2dldGhlci4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2Fj
dGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1
Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1
bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJh
bnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCisKSW5kZXg6IExh
eW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRv
Z2V0aGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13
cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVu
LXRvZ2V0aGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTkgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5i
b2R5LmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCitmdW5jdGlvbiB0ZXJtaW5h
dGVUZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIG9wZW5U
ZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVuRGF0YWJhc2UoIlJlYWRBbmRXcml0ZVRy
YW5zYWN0aW9uc0RvbnRSdW5Ub2dldGhlclRlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAg
IjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBy
ZWFkIGFuZCB3cml0ZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IERCIGhhbmRsZXMgdG8gdGhl
IHNhbWUgREIgZG9uJ3QgcnVuIGF0IHRoZSBzYW1lIHRpbWUuIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDMyNzY4KTsKK30KKwordmFyIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzID0gMDsK
K3ZhciB3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPSAwOworCitmdW5jdGlvbiBydW5UcmFu
c2FjdGlvbihkYiwgcmVhZE9ubHkpCit7CisgICAgdmFyIHRyYW5zYWN0aW9uRnVuY3Rpb24gPSAo
cmVhZE9ubHkgPyBkYi5yZWFkVHJhbnNhY3Rpb24gOiBkYi50cmFuc2FjdGlvbik7CisgICAgdHJh
bnNhY3Rpb25GdW5jdGlvbi5jYWxsKGRiLCBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgaWYg
KHJlYWRPbmx5KSB7CisgICAgICAgICAgICAgICAgaWYgKHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9n
cmVzcyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiUmVhZCB0cmFuc2FjdGlvbiBz
dGFydGluZyB3aGlsZSB3cml0ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAocmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgIT0gMCkg
eworICAgICAgICAgICAgICAgICAgICBsb2coIldyaXRlIHRyYW5zYWN0aW9uIHN0YXJ0aW5nIHdo
aWxlIHJlYWQgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MuIik7CisgICAgICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3Jp
dGVUcmFuc2FjdGlvbnNJblByb2dyZXNzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBGUk9NIFRlc3Q7Iik7CisgICAgICAgIH0sIGZ1bmN0aW9u
KGVycm9yKSB7CisgICAgICAgICAgICBsb2coKHJlYWRPbmx5ID8gIlJlYWQiIDogIldyaXRlIikg
KyAiIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAg
dGVybWluYXRlVGVzdCgpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICBp
ZiAocmVhZE9ubHkpCisgICAgICAgICAgICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNz
LS07CisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICB3cml0ZVRyYW5zYWN0aW9u
c0luUHJvZ3Jlc3MtLTsKKyAgICAgICAgICAgICBsb2coIlRyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwu
Iik7CisgICAgICAgIH0pOworfQorCitmdW5jdGlvbiBydW5SZWFkQW5kV3JpdGVUcmFuc2FjdGlv
bnMoZGIxLCBkYjIsIGRiMykKK3sKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRydWUpOworICAg
IHJ1blRyYW5zYWN0aW9uKGRiMiwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIxLCBmYWxz
ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIxLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihk
YjIsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMywgdHJ1ZSk7CisgICAgcnVuVHJhbnNh
Y3Rpb24oZGIxLCBmYWxzZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIyLCBmYWxzZSk7CisgICAg
cnVuVHJhbnNhY3Rpb24oZGIxLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjMsIHRydWUp
OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisg
ICAgdHJ5IHsKKyAgICAgICAgdmFyIGRiMSA9IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAgICAg
dmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAgICAgdmFyIGRiMyA9IG9wZW5UZXN0
RGF0YWJhc2UoKTsKKyAgICAgICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAg
ICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVz
dCAoRm9vIGludCk7Iik7CisgICAgICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAg
ICAgICAgICAgIGxvZygiQ2Fubm90IGNyZWF0ZSB0aGUgVGVzdCB0YWJsZTogIiArIGVycm9yLm1l
c3NhZ2UpOworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJ1blJlYWRBbmRXcml0ZVRyYW5zYWN0aW9u
cyhkYjEsIGRiMiwgZGIzKTsKKworICAgICAgICAgICAgICAgIC8vIEhhY2s6IHdhaXQgZm9yIHRo
ZXNlIHRyYW5zYWN0aW9ucyB0byBmaW5pc2ggcnVubmluZyBiZWZvcmUgdGVybWluYXRpbmcgdGhl
IHRlc3QKKyAgICAgICAgICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSwg
ZnVuY3Rpb24oZXJyb3IpIHsgfSwgZnVuY3Rpb24oKSB7IHRlcm1pbmF0ZVRlc3QoKTsgfSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgfSBjYXRjaChlcnIpIHt9Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgdGVzdHMgdGhhdCByZWFk
IGFuZCB3cml0ZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUg
ZGF0YWJhc2UgZG9uJ3QgcnVuIHRvZ2V0aGVyLjxicj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50
bHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10
cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1
cnJlbnRseS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0
ZXN0IHRlc3RzIHRoYXQgdHdvIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhh
bmRsZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcnVuIGNvbmN1cnJlbnRseS4KK1JlYWQgdHJhbnNh
Y3Rpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJl
bnRseS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5z
YWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
Cit7CisgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30K
KworZnVuY3Rpb24gdGVybWluYXRlVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
fQorCitmdW5jdGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFi
YXNlKCJSZWFkVHJhbnNhY3Rpb25zUnVubmluZ0NvbmN1cnJlbnRseVRlc3QiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0byBt
YWtlIHN1cmUgdGhhdCBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIg
aGFuZGxlcyB0byB0aGUgc2FtZSBEQiBydW4gY29uY3VycmVudGx5LiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAzMjc2OCk7Cit9CisKK3ZhciByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9
IDA7CisKK2Z1bmN0aW9uIHJ1blJlYWRUcmFuc2FjdGlvbihkYikKK3sKKyAgICBkYi5yZWFkVHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblBy
b2dyZXNzKys7CisgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICBsb2co
IlJlYWQgdHJhbnNhY3Rpb24gZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAg
ICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
aWYgKHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzID09IDIpIHsKKyAgICAgICAgICAgICAgICBs
b2coIlJlYWQgdHJhbnNhY3Rpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MtLTsKKyAgICAgICAg
fSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisK
KyAgICB0cnkgeworICAgICAgICB2YXIgZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAg
ICB2YXIgZGIyID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICBkYjEudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KTsiKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0
aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDYW5ub3QgY3JlYXRlIHRoZSBUZXN0
IHRhYmxlOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgdGVybWluYXRlVGVz
dCgpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcnVuUmVh
ZFRyYW5zYWN0aW9uKGRiMSk7CisgICAgICAgICAgICAgICAgcnVuUmVhZFRyYW5zYWN0aW9uKGRi
Mik7CisKKyAgICAgICAgICAgICAgICAvLyBIYWNrOiB3YWl0IGZvciB0aGVzZSB0cmFuc2FjdGlv
bnMgdG8gZmluaXNoIHJ1bm5pbmcgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSB0ZXN0CisgICAgICAg
ICAgICAgICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7IH0sIGZ1bmN0aW9uKGVycm9y
KSB7IH0sIGZ1bmN0aW9uKCkgeyB0ZXJtaW5hdGVUZXN0KCk7IH0pOworICAgICAgICAgICAgfSk7
CisgICAgIH0gY2F0Y2goZXJyKSB7IGxvZyhlcnIpOyB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0d28gcmVh
ZC1vbmx5IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRh
YmFzZSBydW4gY29uY3VycmVudGx5Ljxicj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAkocmV2aXNpb24gNDg1MzQpCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjgsNyArMTY4LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpCiAgICAgfSBjYXRjaChlcnIpIHt9
CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9oZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7
Ij4KIFRoaXMgdGVzdCB0ZXN0cyB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci48YnI+CiA8L2JvZHk+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39809</attachid>
            <date>2009-09-18 18:44:22 -0700</date>
            <delta_ts>2009-09-21 14:43:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17690</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODUzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDktMTggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IFJlbmFtZWQgdGhlIG1hcC4KKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0xOCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVu
IGFuZCBCcmFkeSBFaWRzb24uCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNp
b24gNDg1MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtUGVuZGluZ0Nh
bGxiYWNrKCk7CiAKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNl
LmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gbV9yZWFkT25seTsgfQog
CiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+LApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAkocmV2aXNpb24gNDg1MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRl
ICJTUUxUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDgsNTggKzQ4LDY3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlm
aWVyKFNRTFQKICAgICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKIH0KIAot
dm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGJvb2wgcmVhZE9ubHkpCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OnByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5hdGlvbkluZm8mIGluZm8p
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHJlYWRPbmx5KTsKKyAgICBpZiAoaW5mby5hY3RpdmVXcml0
ZVRyYW5zYWN0aW9uIHx8IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gZmlyc3RQZW5kaW5nVHJh
bnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKTsKKyAgICBpZiAoZmly
c3RQZW5kaW5nVHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBkbyB7CisgICAg
ICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9u
cy5maXJzdCgpOworICAgICAgICAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZUZp
cnN0KCk7CisgICAgICAgICAgICBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuYWRkKGZpcnN0
UGVuZGluZ1RyYW5zYWN0aW9uKTsKKyAgICAgICAgICAgIGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9u
LT5sb2NrQWNxdWlyZWQoKTsKKyAgICAgICAgfSB3aGlsZSAoIWluZm8ucGVuZGluZ1RyYW5zYWN0
aW9ucy5pc0VtcHR5KCkgJiYgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCktPmlzUmVh
ZE9ubHkoKSk7CisgICAgfSBlbHNlIGlmIChpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgp
OworICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24gPSBmaXJzdFBlbmRpbmdUcmFu
c2FjdGlvbjsKKyAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgp
OworICAgIH0KK30KIAordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9j
ayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgcmVhZE9ubHkpCit7CiAgICAgU3Ry
aW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CiAK
LSAgICBUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5maW5kKGRiSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ID09IG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5lbmQoKSkgeworICAgIENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmll
cik7CisgICAgaWYgKGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9PSBtX2Nvb3JkaW5hdGlvbklu
Zm9NYXAuZW5kKCkpIHsKICAgICAgICAgLy8gTm8gcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIHRo
aXMgREIKLSAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUgcGVuZGluZ1RyYW5zYWN0aW9uczsKLSAg
ICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOwotICAgICAgICBt
X3BlbmRpbmdUcmFuc2FjdGlvbnMuYWRkKGRiSWRlbnRpZmllciwgcGVuZGluZ1RyYW5zYWN0aW9u
cyk7Ci0KLSAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5zYWN0aW9uCi0gICAgICAgIHRyYW5zYWN0
aW9uLT5sb2NrQWNxdWlyZWQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBbm90aGVyIHRy
YW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gdGhpcyBEQjsgcHV0IHRoaXMgb25lIGluIHRoZSBxdWV1
ZQotICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0aW9ucyA9IGl0LT5z
ZWNvbmQ7Ci0gICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsK
KyAgICAgICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFw
LmFkZChkYklkZW50aWZpZXIsIENvb3JkaW5hdGlvbkluZm8oKSkuZmlyc3Q7CiAgICAgfQorCisg
ICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+c2Vj
b25kOworICAgIGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOwor
ICAgIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKGluZm8pOwogfQogCiB2b2lkIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKIHsKLSAgICBpZiAobV9wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICBpZiAo
bV9jb29yZGluYXRpb25JbmZvTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
U3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7
CiAKLSAgICBUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RyYW5z
YWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGl0ICE9IG1fcGVuZGluZ1Ry
YW5zYWN0aW9ucy5lbmQoKSk7Ci0gICAgVHJhbnNhY3Rpb25zUXVldWUmIHBlbmRpbmdUcmFuc2Fj
dGlvbnMgPSBpdC0+c2Vjb25kOwotICAgIEFTU0VSVCghcGVuZGluZ1RyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpOwotCi0gICAgLy8gJ3RyYW5zYWN0aW9uJyBzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJz
dCB0cmFuc2FjdGlvbiBpbiB0aGlzIHF1ZXVlCi0gICAgQVNTRVJUKHBlbmRpbmdUcmFuc2FjdGlv
bnMuZmlyc3QoKS5nZXQoKSA9PSB0cmFuc2FjdGlvbik7Ci0KLSAgICAvLyBSZW1vdmUgJ3RyYW5z
YWN0aW9uJyBmcm9tIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIHRyYW5zYWN0aW9ucwotICAgIHBlbmRp
bmdUcmFuc2FjdGlvbnMucmVtb3ZlRmlyc3QoKTsKLSAgICBpZiAocGVuZGluZ1RyYW5zYWN0aW9u
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gTm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsg
ZGVsZXRlIGRiSWRlbnRpZmllcidzIHF1ZXVlCi0gICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9u
cy5yZW1vdmUoaXQpOworICAgIENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmll
cik7CisgICAgQVNTRVJUKGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAhPSBtX2Nvb3JkaW5hdGlv
bkluZm9NYXAuZW5kKCkpOworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRp
b25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKworICAgIGlmICh0cmFuc2FjdGlvbi0+aXNSZWFkT25s
eSgpKSB7CisgICAgICAgIEFTU0VSVChpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKTsKKyAgICAgICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLnJl
bW92ZSh0cmFuc2FjdGlvbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBtb3Jl
IHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBzdGFydCB0aGUgbmV4dCBvbmUKLSAgICAgICAgcGVuZGlu
Z1RyYW5zYWN0aW9ucy5maXJzdCgpLT5sb2NrQWNxdWlyZWQoKTsKKyAgICAgICAgQVNTRVJUKGlu
Zm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9PSB0cmFuc2FjdGlvbik7CisgICAgICAgIGluZm8u
YWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9IDA7CiAgICAgfQorCisgICAgcHJvY2Vzc1BlbmRpbmdU
cmFuc2FjdGlvbnMoaW5mbyk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
c2h1dGRvd24oKQogewogICAgIC8vIENsZWFuIHVwIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBm
b3IgYWxsIGRhdGFiYXNlcwotICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5jbGVhcigpOworICAg
IG1fY29vcmRpbmF0aW9uSW5mb01hcC5jbGVhcigpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4NTM0KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00OCw4ICs0OSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2h1dGRv
d24oKTsKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxTUUxUcmFu
c2FjdGlvbj4gPiBUcmFuc2FjdGlvbnNRdWV1ZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVHJhbnNhY3Rpb25zUXVldWU+IFRyYW5zYWN0aW9uc0hhc2hNYXA7Ci0gICAgICAgIFRy
YW5zYWN0aW9uc0hhc2hNYXAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zOworICAgICAgICBzdHJ1Y3Qg
Q29vcmRpbmF0aW9uSW5mbyB7CisgICAgICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5n
VHJhbnNhY3Rpb25zOworICAgICAgICAgICAgSGFzaFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+
ID4gYWN0aXZlUmVhZFRyYW5zYWN0aW9uczsKKyAgICAgICAgICAgIFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbj4gYWN0aXZlV3JpdGVUcmFuc2FjdGlvbjsKKyAgICAgICAgfTsKKyAgICAgICAgLy8gTWFw
cyBkYXRhYmFzZSBuYW1lcyB0byBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIHRyYW5zYWN0aW9u
cworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDb29yZGluYXRpb25JbmZvPiBDb29y
ZGluYXRpb25JbmZvTWFwOworICAgICAgICBDb29yZGluYXRpb25JbmZvTWFwIG1fY29vcmRpbmF0
aW9uSW5mb01hcDsKKworICAgICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENv
b3JkaW5hdGlvbkluZm8mIGluZm8pOwogICAgIH07CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4
NTM0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMDktMDktMTEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBBZGRp
bmcgdHdvIHRlc3RzIGZvciB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IuCisgICAgICAgIDIu
IEZpeGluZyBhbiBpbmNvcnJlY3QgPGhlYWQ+IHRhZyBpbiBzb21lIHRlc3RzLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTExNQorCisgICAgICAg
ICogc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRt
bDogRml4ZWQgYQorICAgICAgICA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbiA8L2hlYWQ+KS4K
KyAgICAgICAgKiBzdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJv
Z3Jlc3MuaHRtbDogRml4ZWQKKyAgICAgICAgYSA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbiA8
L2hlYWQ+KS4KKyAgICAgICAgKiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1k
b250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
cmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50
bHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3JlYWQtdHJhbnNhY3Rp
b25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
dGVzdC1hdXRob3JpemVyLmh0bWw6IEZpeGVkIGEgPGhlYWQ+IHRhZyAoc2hvdWxkJ3ZlIGJlZW4K
KyAgICAgICAgPC9oZWFkPikuCisKIDIwMDktMDktMTggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1o
YW5kbGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10
cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAkocmV2aXNpb24gNDg1MzQpCisr
KyBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIGZ1bmN0aW9uIHJ1
blRlc3QoKSB7CiAgICAgfSBjYXRjaChlcnIpIHt9CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9o
ZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KIFRoaXMgaXMgYSB0ZXN0IHRvIHNlZSBp
ZiBxdWV1ZWluZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMg
dG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KIDwvYm9keT4K
SW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlv
bi1pbi1wcm9ncmVzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5odG1sCShyZXZpc2lvbiA0
ODUzNCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2Fj
dGlvbi1pbi1wcm9ncmVzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGZ1
bmN0aW9uIHJ1blRlc3QoKQogICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVh
ZD4KKzwvaGVhZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIGlzIGEgdGVzdCB0
byBzZWUgaWYgb3BlbmluZyBhIGRhdGFiYXNlIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgcnVubmlu
ZyBvbiBhIGRpZmZlcmVudCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBh
IGRlYWRsb2NrLjxicj4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1h
bmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9u
cy1kb250LXJ1bi10b2dldGhlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhl
ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdCB0
ZXN0cyB0aGF0IHJlYWQgYW5kIHdyaXRlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxl
cyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb24ndCBydW4gdG9nZXRoZXIuCitUcmFuc2FjdGlvbiBz
dWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3Nm
dWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1Ry
YW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rp
b24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNj
ZXNzZnVsLgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5z
YWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRy
YW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
Cit7CisgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30K
KworZnVuY3Rpb24gdGVybWluYXRlVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
fQorCitmdW5jdGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFi
YXNlKCJSZWFkQW5kV3JpdGVUcmFuc2FjdGlvbnNEb250UnVuVG9nZXRoZXJUZXN0IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3Qg
dG8gbWFrZSBzdXJlIHRoYXQgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVu
dCBEQiBoYW5kbGVzIHRvIHRoZSBzYW1lIERCIGRvbid0IHJ1biBhdCB0aGUgc2FtZSB0aW1lLiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAzMjc2OCk7Cit9CisKK3ZhciByZWFkVHJhbnNhY3Rp
b25zSW5Qcm9ncmVzcyA9IDA7Cit2YXIgd3JpdGVUcmFuc2FjdGlvbnNJblByb2dyZXNzID0gMDsK
KworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb24oZGIsIHJlYWRPbmx5KQoreworICAgIHZhciB0cmFu
c2FjdGlvbkZ1bmN0aW9uID0gKHJlYWRPbmx5ID8gZGIucmVhZFRyYW5zYWN0aW9uIDogZGIudHJh
bnNhY3Rpb24pOworICAgIHRyYW5zYWN0aW9uRnVuY3Rpb24uY2FsbChkYiwgZnVuY3Rpb24odHgp
IHsKKyAgICAgICAgICAgIGlmIChyZWFkT25seSkgeworICAgICAgICAgICAgICAgIGlmICh3cml0
ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBsb2co
IlJlYWQgdHJhbnNhY3Rpb24gc3RhcnRpbmcgd2hpbGUgd3JpdGUgdHJhbnNhY3Rpb24gaW4gcHJv
Z3Jlc3MuIik7CisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MrKzsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHJlYWRUcmFuc2FjdGlv
bnNJblByb2dyZXNzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJXcml0ZSB0cmFu
c2FjdGlvbiBzdGFydGluZyB3aGlsZSByZWFkIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHdyaXRlVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogRlJPTSBUZXN0OyIpOwor
ICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgbG9nKChyZWFkT25seSA/
ICJSZWFkIiA6ICJXcml0ZSIpICsgIiB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNz
YWdlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgaWYgKHJlYWRPbmx5KQorICAgICAgICAgICAgICAgICByZWFkVHJh
bnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgd3JpdGVUcmFuc2FjdGlvbnNJblByb2dyZXNzLS07CisgICAgICAgICAgICAgbG9nKCJUcmFu
c2FjdGlvbiBzdWNjZXNzZnVsLiIpOworICAgICAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuUmVh
ZEFuZFdyaXRlVHJhbnNhY3Rpb25zKGRiMSwgZGIyLCBkYjMpCit7CisgICAgcnVuVHJhbnNhY3Rp
b24oZGIxLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjIsIHRydWUpOworICAgIHJ1blRy
YW5zYWN0aW9uKGRiMSwgZmFsc2UpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7Cisg
ICAgcnVuVHJhbnNhY3Rpb24oZGIyLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjMsIHRy
dWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgZmFsc2UpOworICAgIHJ1blRyYW5zYWN0aW9u
KGRiMiwgZmFsc2UpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJh
bnNhY3Rpb24oZGIzLCB0cnVlKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERh
dGFiYXNlKCk7CisgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAg
IHZhciBkYjMgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiMS50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworICAgICAgICAgICAgfSwgZnVuY3Rp
b24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coIkNhbm5vdCBjcmVhdGUgdGhlIFRlc3Qg
dGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGVUZXN0
KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBydW5SZWFk
QW5kV3JpdGVUcmFuc2FjdGlvbnMoZGIxLCBkYjIsIGRiMyk7CisKKyAgICAgICAgICAgICAgICAv
LyBIYWNrOiB3YWl0IGZvciB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gZmluaXNoIHJ1bm5pbmcgYmVm
b3JlIHRlcm1pbmF0aW5nIHRoZSB0ZXN0CisgICAgICAgICAgICAgICAgZGIxLnRyYW5zYWN0aW9u
KGZ1bmN0aW9uKHR4KSB7IH0sIGZ1bmN0aW9uKGVycm9yKSB7IH0sIGZ1bmN0aW9uKCkgeyB0ZXJt
aW5hdGVUZXN0KCk7IH0pOworICAgICAgICAgICAgfSk7CisgICAgIH0gY2F0Y2goZXJyKSB7fQor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0
ZXN0IHRlc3RzIHRoYXQgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBo
YW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRvbid0IHJ1biB0b2dldGhlci48YnI+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25z
LXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2Fj
dGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMgQEAKK1RoaXMgdGVzdCB0ZXN0cyB0aGF0IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rp
b25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJ1biBjb25jdXJy
ZW50bHkuCitSZWFkIHRyYW5zYWN0aW9ucyBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwpJbmRleDog
TGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRs
eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlv
bnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1
bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1l
c3NhZ2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7Cisg
ICAgcmV0dXJuIG9wZW5EYXRhYmFzZSgiUmVhZFRyYW5zYWN0aW9uc1J1bm5pbmdDb25jdXJyZW50
bHlUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgbXVsdGlwbGUgcmVhZCB0cmFuc2FjdGlv
bnMgb24gZGlmZmVyZW50IERCIGhhbmRsZXMgdG8gdGhlIHNhbWUgREIgcnVuIGNvbmN1cnJlbnRs
eS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5z
YWN0aW9uc0luUHJvZ3Jlc3MgPSAwOworCitmdW5jdGlvbiBydW5SZWFkVHJhbnNhY3Rpb24oZGIp
Cit7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBy
ZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikg
eworICAgICAgICAgICAgbG9nKCJSZWFkIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1l
c3NhZ2UpOworICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGlmIChyZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9PSAyKSB7
CisgICAgICAgICAgICAgICAgbG9nKCJSZWFkIHRyYW5zYWN0aW9ucyBydW5uaW5nIGNvbmN1cnJl
bnRseS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblBy
b2dyZXNzLS07CisgICAgICAgIH0pOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGRiMSA9IG9wZW5UZXN0
RGF0YWJhc2UoKTsKKyAgICAgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAg
ICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgdHguZXhl
Y3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIGludCk7Iik7Cisg
ICAgICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxvZygiQ2Fu
bm90IGNyZWF0ZSB0aGUgVGVzdCB0YWJsZTogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAg
ICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIHJ1blJlYWRUcmFuc2FjdGlvbihkYjEpOworICAgICAgICAgICAgICAgIHJ1
blJlYWRUcmFuc2FjdGlvbihkYjIpOworCisgICAgICAgICAgICAgICAgLy8gSGFjazogd2FpdCBm
b3IgdGhlc2UgdHJhbnNhY3Rpb25zIHRvIGZpbmlzaCBydW5uaW5nIGJlZm9yZSB0ZXJtaW5hdGlu
ZyB0aGUgdGVzdAorICAgICAgICAgICAgICAgIGRiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkg
eyB9LCBmdW5jdGlvbihlcnJvcikgeyB9LCBmdW5jdGlvbigpIHsgdGVybWluYXRlVGVzdCgpOyB9
KTsKKyAgICAgICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikgeyBsb2coZXJyKTsgfQorfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0
IHRlc3RzIHRoYXQgdHdvIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRs
ZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcnVuIGNvbmN1cnJlbnRseS48YnI+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJl
dmlzaW9uIDQ4NTM0KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQog
ICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVhZD4KIDxib2R5
IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhv
cml6ZXIuPGJyPgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39880</attachid>
            <date>2009-09-21 14:43:22 -0700</date>
            <delta_ts>2009-09-22 14:50:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17699</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDktMTggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IFJlbmFtZWQgdGhlIG1hcC4KKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0yMSAgRGFyaW4gRmlz
aGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA0ODU5MikK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsK
IAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0K
KyAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX3JlYWRPbmx5OyB9CiAKIHByaXZhdGU6
CiAgICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZp
c2lvbiA0ODU5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
OCw1OCArNDgsNjcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVAog
ICAgIHJldHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQogCi12b2lkIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgYm9vbCByZWFkT25seSkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJv
Y2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoQ29vcmRpbmF0aW9uSW5mbyYgaW5mbykKIHsKLSAgICBV
TlVTRURfUEFSQU0ocmVhZE9ubHkpOworICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rp
b24gfHwgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbiA9
IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpOworICAgIGlmIChmaXJzdFBlbmRpbmdU
cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZp
cnN0UGVuZGluZ1RyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7
CisgICAgICAgICAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlRmlyc3QoKTsKKyAg
ICAgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5hZGQoZmlyc3RQZW5kaW5nVHJh
bnNhY3Rpb24pOworICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb24tPmxvY2tBY3F1
aXJlZCgpOworICAgICAgICB9IHdoaWxlICghaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1w
dHkoKSAmJiBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+aXNSZWFkT25seSgpKTsK
KyAgICB9IGVsc2UgaWYgKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZUZpcnN0KCk7CisgICAgICAg
IGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiA9IGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uOwor
ICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAgfQor
fQogCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCByZWFkT25seSkKK3sKICAgICBTdHJpbmcgZGJJZGVu
dGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKIAotICAgIFRyYW5z
YWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmZpbmQo
ZGJJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgp
KSB7CisgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBp
ZiAoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yID09IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQo
KSkgewogICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhpcyBEQgotICAg
ICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOwotICAgICAgICBwZW5k
aW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgIG1fcGVuZGluZ1Ry
YW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25zKTsKLQotICAg
ICAgICAvLyBTdGFydCB0aGUgdHJhbnNhY3Rpb24KLSAgICAgICAgdHJhbnNhY3Rpb24tPmxvY2tB
Y3F1aXJlZCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFub3RoZXIgdHJhbnNhY3Rpb24g
aXMgcnVubmluZyBvbiB0aGlzIERCOyBwdXQgdGhpcyBvbmUgaW4gdGhlIHF1ZXVlCi0gICAgICAg
IFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOworICAgICAgICBj
b29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuYWRkKGRiSWRl
bnRpZmllciwgQ29vcmRpbmF0aW9uSW5mbygpKS5maXJzdDsKICAgICB9CisKKyAgICBDb29yZGlu
YXRpb25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisgICAg
aW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CisgICAgcHJvY2Vz
c1BlbmRpbmdUcmFuc2FjdGlvbnMoaW5mbyk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjo6cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogewotICAg
IGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Nvb3JkaW5h
dGlvbkluZm9NYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgZGJJ
ZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKIAotICAgIFRy
YW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmZp
bmQoZGJJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nVHJhbnNhY3Rpb25z
LmVuZCgpKTsKLSAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0aW9ucyA9IGl0
LT5zZWNvbmQ7Ci0gICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7Ci0K
LSAgICAvLyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRyYW5zYWN0
aW9uIGluIHRoaXMgcXVldWUKLSAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgp
LmdldCgpID09IHRyYW5zYWN0aW9uKTsKLQotICAgIC8vIFJlbW92ZSAndHJhbnNhY3Rpb24nIGZy
b20gdGhlIHF1ZXVlIG9mIHBlbmRpbmcgdHJhbnNhY3Rpb25zCi0gICAgcGVuZGluZ1RyYW5zYWN0
aW9ucy5yZW1vdmVGaXJzdCgpOwotICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHko
KSkgewotICAgICAgICAvLyBObyBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBkZWxldGUgZGJJ
ZGVudGlmaWVyJ3MgcXVldWUKLSAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShp
dCk7CisgICAgQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBB
U1NFUlQoY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5l
bmQoKSk7CisgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVy
YXRvci0+c2Vjb25kOworCisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAg
ICAgICAgQVNTRVJUKGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbikpOworICAgICAgICBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5z
YWN0aW9uKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGluZyB0
cmFuc2FjdGlvbnM7IHN0YXJ0IHRoZSBuZXh0IG9uZQotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rp
b25zLmZpcnN0KCktPmxvY2tBY3F1aXJlZCgpOworICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVX
cml0ZVRyYW5zYWN0aW9uID09IHRyYW5zYWN0aW9uKTsKKyAgICAgICAgaW5mby5hY3RpdmVXcml0
ZVRyYW5zYWN0aW9uID0gMDsKICAgICB9CisKKyAgICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9u
cyhpbmZvKTsKIH0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigp
CiB7CiAgICAgLy8gQ2xlYW4gdXAgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0
YWJhc2VzCi0gICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmNsZWFyKCk7CisgICAgbV9jb29yZGlu
YXRpb25JbmZvTWFwLmNsZWFyKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gNDg1OTIpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDggKzQ5
LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzaHV0ZG93bigpOwogICAg
IHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+
IFRyYW5zYWN0aW9uc1F1ZXVlOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBUcmFu
c2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKLSAgICAgICAgVHJhbnNhY3Rpb25z
SGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgICAgIHN0cnVjdCBDb29yZGluYXRp
b25JbmZvIHsKKyAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2FjdGlv
bnM7CisgICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBhY3RpdmVS
ZWFkVHJhbnNhY3Rpb25zOworICAgICAgICAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBhY3Rp
dmVXcml0ZVRyYW5zYWN0aW9uOworICAgICAgICB9OworICAgICAgICAvLyBNYXBzIGRhdGFiYXNl
IG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgdHJhbnNhY3Rpb25zCisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENvb3JkaW5hdGlvbklu
Zm9NYXA7CisgICAgICAgIENvb3JkaW5hdGlvbkluZm9NYXAgbV9jb29yZGluYXRpb25JbmZvTWFw
OworCisgICAgICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoQ29vcmRpbmF0aW9u
SW5mbyYgaW5mbyk7CiAgICAgfTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDg1OTIpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAw
OS0wOS0xMSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEFkZGluZyB0d28gdGVz
dHMgZm9yIHRoZSB0cmFuc2FjdGlvbiBjb29yZGluYXRvci4KKyAgICAgICAgMi4gRml4aW5nIGFu
IGluY29ycmVjdCA8aGVhZD4gdGFnIGluIHNvbWUgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTE1CisKKyAgICAgICAgKiBzdG9yYWdl
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sOiBGaXhlZCBh
CisgICAgICAgIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuIDwvaGVhZD4pLgorICAgICAgICAq
IHN0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5odG1s
OiBGaXhlZAorICAgICAgICBhIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuIDwvaGVhZD4pLgor
ICAgICAgICAqIHN0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRv
Z2V0aGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZWFkLWFuZC13
cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmlu
Zy1jb25jdXJyZW50bHkuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXIuaHRtbDogRml4ZWQgYSA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbgorICAgICAgICA8
L2hlYWQ+KS4KKwogMjAwOS0wOS0yMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpJbmRleDogTGF5b3V0VGVzdHMvc3Rv
cmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1k
aWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiA0ODU5MikKKysrIExheW91dFRlc3RzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICB9
IGNhdGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoKTsiPgogVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIHF1ZXVlaW5nIHVwIG11
bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRh
YmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVz
dHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxl
LXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLmh0bWwJKHJldmlzaW9uIDQ4NTkyKQorKysgTGF5b3V0
VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNz
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgp
CiAgICAgfSBjYXRjaChlcnIpIHt9CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9oZWFkPgogPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KIFRoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBvcGVuaW5n
IGEgZGF0YWJhc2Ugd2hpbGUgYSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50
IGhhbmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgog
PC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFuc2Fj
dGlvbnMtZG9udC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0
aGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVh
ZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgcmVhZCBh
bmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRh
dGFiYXNlIGRvbid0IHJ1biB0b2dldGhlci4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFu
c2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9u
IHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vz
c2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgor
VHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCisKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVu
LXRvZ2V0aGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFu
ZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQt
cnVuLXRvZ2V0aGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1l
bnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gdGVy
bWluYXRlVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBv
cGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlKCJSZWFkQW5kV3Jp
dGVUcmFuc2FjdGlvbnNEb250UnVuVG9nZXRoZXJUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRo
YXQgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVzIHRv
IHRoZSBzYW1lIERCIGRvbid0IHJ1biBhdCB0aGUgc2FtZSB0aW1lLiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAzMjc2OCk7Cit9CisKK3ZhciByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9
IDA7Cit2YXIgd3JpdGVUcmFuc2FjdGlvbnNJblByb2dyZXNzID0gMDsKK3ZhciB0b3RhbFRyYW5z
YWN0aW9ucyA9IDA7Cit2YXIgZmluaXNoZWRUcmFuc2FjdGlvbnMgPSAwOworCitmdW5jdGlvbiBy
dW5UcmFuc2FjdGlvbihkYiwgcmVhZE9ubHkpCit7CisgICAgdmFyIHRyYW5zYWN0aW9uRnVuY3Rp
b24gPSAocmVhZE9ubHkgPyBkYi5yZWFkVHJhbnNhY3Rpb24gOiBkYi50cmFuc2FjdGlvbik7Cisg
ICAgdHJhbnNhY3Rpb25GdW5jdGlvbi5jYWxsKGRiLCBmdW5jdGlvbih0eCkgeworICAgICAgICAg
ICAgaWYgKHJlYWRPbmx5KSB7CisgICAgICAgICAgICAgICAgaWYgKHdyaXRlVHJhbnNhY3Rpb25z
SW5Qcm9ncmVzcyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiUmVhZCB0cmFuc2Fj
dGlvbiBzdGFydGluZyB3aGlsZSB3cml0ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNz
ICE9IDApIHx8ICh3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgIT0gMCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbG9nKCJXcml0ZSB0cmFuc2FjdGlvbiBzdGFydGluZyB3aGlsZSBhbm90aGVy
IHRyYW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOworICAgICAgICAgICAgICAgICAgICB0ZXJtaW5h
dGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyaXRlVHJhbnNh
Y3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHguZXhlY3V0
ZVNxbCgiU0VMRUNUICogRlJPTSBUZXN0OyIpOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikg
eworICAgICAgICAgICAgbG9nKChyZWFkT25seSA/ICJSZWFkIiA6ICJXcml0ZSIpICsgIiB0cmFu
c2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0
ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgZmluaXNoZWRU
cmFuc2FjdGlvbnMrKzsKKyAgICAgICAgICAgICBpZiAocmVhZE9ubHkpCisgICAgICAgICAgICAg
ICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzLS07CisgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICB3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MtLTsKKyAgICAgICAgICAg
ICBsb2coIlRyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuIik7CisgICAgICAgICAgICAgaWYgKChmaW5p
c2hlZFRyYW5zYWN0aW9ucyA9PSB0b3RhbFRyYW5zYWN0aW9ucykgJiYgKHJlYWRUcmFuc2FjdGlv
bnNJblByb2dyZXNzID09IDApICYmICh3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPT0gMCkp
CisgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSk7Cit9CisKK2Z1
bmN0aW9uIHJ1blJlYWRBbmRXcml0ZVRyYW5zYWN0aW9ucyhkYjEsIGRiMiwgZGIzKQoreworICAg
IHRvdGFsVHJhbnNhY3Rpb25zID0gMTA7CisgICAgZmluaXNoZWRUcmFuc2FjdGlvbnMgPSAwOwor
ICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIyLCB0
cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlv
bihkYjEsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMiwgdHJ1ZSk7CisgICAgcnVuVHJh
bnNhY3Rpb24oZGIzLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIGZhbHNlKTsKKyAg
ICBydW5UcmFuc2FjdGlvbihkYjIsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIHRy
dWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMywgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICB2YXIg
ZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICB2YXIgZGIyID0gb3BlblRlc3REYXRh
YmFzZSgpOworICAgICAgICB2YXIgZGIzID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICBk
YjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICB0eC5leGVjdXRl
U3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KTsiKTsKKyAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDYW5ub3Qg
Y3JlYXRlIHRoZSBUZXN0IHRhYmxlOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICAg
ICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgcnVuUmVhZEFuZFdyaXRlVHJhbnNhY3Rpb25zKGRiMSwgZGIyLCBkYjMpOworICAg
ICAgICAgICAgfSk7CisgICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgcmVhZCBh
bmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRh
dGFiYXNlIGRvbid0IHJ1biB0b2dldGhlci48YnI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJh
bnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJy
ZW50bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVz
dCB0ZXN0cyB0aGF0IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5k
bGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJ1biBjb25jdXJyZW50bHkuCitSZWFkIHRyYW5zYWN0
aW9ucyBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9y
ZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50
bHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2Fj
dGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQor
eworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisK
K2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KworZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRhYmFz
ZSgiUmVhZFRyYW5zYWN0aW9uc1J1bm5pbmdDb25jdXJyZW50bHlUZXN0IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFr
ZSBzdXJlIHRoYXQgbXVsdGlwbGUgcmVhZCB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IERCIGhh
bmRsZXMgdG8gdGhlIHNhbWUgREIgcnVuIGNvbmN1cnJlbnRseS4iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPSAw
OworCitmdW5jdGlvbiBydW5SZWFkVHJhbnNhY3Rpb24oZGIpCit7CisgICAgZGIucmVhZFRyYW5z
YWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9n
cmVzcysrOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgbG9nKCJS
ZWFkIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAg
dGVybWluYXRlVGVzdCgpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlm
IChyZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9PSAyKQorICAgICAgICAgICAgICAgIGxvZygi
UmVhZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIik7CisgICAgICAgICAgICBy
ZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgaWYgKHJlYWRUcmFuc2Fj
dGlvbnNJblByb2dyZXNzID09IDApCisgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOwor
ICAgICAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7
CisgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiMS50cmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworICAgICAgICAgICAg
fSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coIkNhbm5vdCBjcmVhdGUg
dGhlIFRlc3QgdGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0ZXJt
aW5hdGVUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBydW5SZWFkVHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgICAgICAgICBydW5SZWFkVHJhbnNh
Y3Rpb24oZGIyKTsKKyAgICAgICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikgeyBsb2coZXJy
KTsgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgor
VGhpcyB0ZXN0IHRlc3RzIHRoYXQgdHdvIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb24gZGlmZmVy
ZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcnVuIGNvbmN1cnJlbnRseS48YnI+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXpl
ci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVy
Lmh0bWwJKHJldmlzaW9uIDQ4NTkyKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIGZ1bmN0aW9uIHJ1
blRlc3QoKQogICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwvaGVh
ZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFi
YXNlIGF1dGhvcml6ZXIuPGJyPgogPC9ib2R5Pgo=
</data>
<flag name="review"
          id="21023"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="21085"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39946</attachid>
            <date>2009-09-22 14:50:14 -0700</date>
            <delta_ts>2009-09-22 15:25:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18386</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDktMTggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2luZyB0aGUgdHJhbnNhY3Rpb24gY29vcmRpbmF0b3IgdG8gKHJlLSlhbGxvdyBtdWx0
aXBsZSByZWFkCisgICAgICAgIHRyYW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBkYXRhYmFzZSB0byBy
dW4gY29uY3VycmVudGx5ICh3aXRob3V0CisgICAgICAgIHJpc2tpbmcgYSBkZWFkbG9jayB0aGlz
IHRpbWUpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTExNQorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL3JlYWQtYW5kLXdyaXRlLXRyYW5zYWN0
aW9ucy1kb250LXJ1bi10b2dldGhlci5odG1sCisgICAgICAgICAgICAgICBzdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5Lmh0bWwKKworICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpp
c1JlYWRPbmx5KTogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKKyAgICAgICAgdHJhbnNhY3Rpb24u
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKTogQ2hh
bmdlZCB0bworICAgICAgICBhbGxvdyBtdWx0aXBsZSByZWFkIHRyYW5zYWN0aW9ucyBvbiB0aGUg
c2FtZSBEQiB0byBydW4KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVsZWFzZUxvY2spOiBDaGFuZ2VkIHRvCisgICAg
ICAgIGFsbG93IG11bHRpcGxlIHJlYWQgdHJhbnNhY3Rpb25zIG9uIHRoZSBzYW1lIERCIHRvIHJ1
bgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bik6IFJlbmFtZWQgdGhlIG1hcC4KKyAgICAgICAgKiBzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0yMSAgRGFyaW4gRmlz
aGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNDg1
OTIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdD
YWxsYgogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaygpCiB7Ci0gICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1aXJlTG9jayh0aGlzLCBtX3JlYWRP
bmx5KTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmFjcXVpcmVM
b2NrKHRoaXMpOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpsb2NrQWNxdWlyZWQoKQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDQ4NTkyKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOwogCiAgICAgRGF0YWJh
c2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorICAgIGJvb2wgaXNS
ZWFkT25seSgpIHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KIAogcHJpdmF0ZToKICAgICBTUUxUcmFu
c2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDQ4NTkyKQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDU4ICs0OCw2NyBA
QCBzdGF0aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRpZmllcihTUUxUCiAgICAgcmV0dXJuIGRh
dGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIHJl
YWRPbmx5KQordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzUGVuZGluZ1Ry
YW5zYWN0aW9ucyhDb29yZGluYXRpb25JbmZvJiBpbmZvKQogewotICAgIFVOVVNFRF9QQVJBTShy
ZWFkT25seSk7CisgICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbiB8fCBpbmZvLnBl
bmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKKyAgICBSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+IGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5n
VHJhbnNhY3Rpb25zLmZpcnN0KCk7CisgICAgaWYgKGZpcnN0UGVuZGluZ1RyYW5zYWN0aW9uLT5p
c1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZmlyc3RQZW5kaW5nVHJh
bnNhY3Rpb24gPSBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKTsKKyAgICAgICAgICAg
IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgaW5m
by5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmFkZChmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbik7Cisg
ICAgICAgICAgICBmaXJzdFBlbmRpbmdUcmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAg
ICAgIH0gd2hpbGUgKCFpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpICYmIGluZm8u
cGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5pc1JlYWRPbmx5KCkpOworICAgIH0gZWxzZSBp
ZiAoaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBpbmZv
LnBlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgaW5mby5hY3RpdmVX
cml0ZVRyYW5zYWN0aW9uID0gZmlyc3RQZW5kaW5nVHJhbnNhY3Rpb247CisgICAgICAgIGZpcnN0
UGVuZGluZ1RyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQorewogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZp
ZXIodHJhbnNhY3Rpb24pOwogCi0gICAgVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3IgaXQg
PSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIpOwotICAgIGlmIChpdCA9
PSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICBDb29yZGluYXRpb25JbmZvTWFw
OjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9N
YXAuZmluZChkYklkZW50aWZpZXIpOworICAgIGlmIChjb29yZGluYXRpb25JbmZvSXRlcmF0b3Ig
PT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpKSB7CiAgICAgICAgIC8vIE5vIHBlbmRpbmcg
dHJhbnNhY3Rpb25zIGZvciB0aGlzIERCCi0gICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRp
bmdUcmFuc2FjdGlvbnM7Ci0gICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5z
YWN0aW9uKTsKLSAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmFkZChkYklkZW50aWZpZXIs
IHBlbmRpbmdUcmFuc2FjdGlvbnMpOwotCi0gICAgICAgIC8vIFN0YXJ0IHRoZSB0cmFuc2FjdGlv
bgotICAgICAgICB0cmFuc2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gQW5vdGhlciB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9uIHRoaXMgREI7IHB1dCB0
aGlzIG9uZSBpbiB0aGUgcXVldWUKLSAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUmIHBlbmRpbmdU
cmFuc2FjdGlvbnMgPSBpdC0+c2Vjb25kOwotICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmFw
cGVuZCh0cmFuc2FjdGlvbik7CisgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1f
Y29vcmRpbmF0aW9uSW5mb01hcC5hZGQoZGJJZGVudGlmaWVyLCBDb29yZGluYXRpb25JbmZvKCkp
LmZpcnN0OwogICAgIH0KKworICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRp
b25JbmZvSXRlcmF0b3ItPnNlY29uZDsKKyAgICBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuYXBw
ZW5kKHRyYW5zYWN0aW9uKTsKKyAgICBwcm9jZXNzUGVuZGluZ1RyYW5zYWN0aW9ucyhpbmZvKTsK
IH0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCiB7Ci0gICAgaWYgKG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5p
c0VtcHR5KCkpCisgICAgaWYgKG1fY29vcmRpbmF0aW9uSW5mb01hcC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50
aWZpZXIodHJhbnNhY3Rpb24pOwogCi0gICAgVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIpOwotICAgIEFTU0VS
VChpdCAhPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpOwotICAgIFRyYW5zYWN0aW9uc1F1
ZXVlJiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29uZDsKLSAgICBBU1NFUlQoIXBlbmRp
bmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLQotICAgIC8vICd0cmFuc2FjdGlvbicgc2hvdWxk
IGFsd2F5cyBiZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4gdGhpcyBxdWV1ZQotICAgIEFTU0VS
VChwZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCkuZ2V0KCkgPT0gdHJhbnNhY3Rpb24pOwotCi0g
ICAgLy8gUmVtb3ZlICd0cmFuc2FjdGlvbicgZnJvbSB0aGUgcXVldWUgb2YgcGVuZGluZyB0cmFu
c2FjdGlvbnMKLSAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZUZpcnN0KCk7Ci0gICAgaWYg
KHBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE5vIG1vcmUgcGVu
ZGluZyB0cmFuc2FjdGlvbnM7IGRlbGV0ZSBkYklkZW50aWZpZXIncyBxdWV1ZQotICAgICAgICBt
X3BlbmRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlKGl0KTsKKyAgICBDb29yZGluYXRpb25JbmZvTWFw
OjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9N
YXAuZmluZChkYklkZW50aWZpZXIpOworICAgIEFTU0VSVChjb29yZGluYXRpb25JbmZvSXRlcmF0
b3IgIT0gbV9jb29yZGluYXRpb25JbmZvTWFwLmVuZCgpKTsKKyAgICBDb29yZGluYXRpb25JbmZv
JiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICBpZiAodHJh
bnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBBU1NFUlQoaW5mby5hY3RpdmVSZWFk
VHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgICAgIGluZm8uYWN0aXZl
UmVhZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIFdlIGhhdmUgbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgc3RhcnQgdGhlIG5leHQg
b25lCi0gICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuZmlyc3QoKS0+bG9ja0FjcXVpcmVkKCk7
CisgICAgICAgIEFTU0VSVChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rp
b24pOworICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24gPSAwOwogICAgIH0KKwor
ICAgIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKGluZm8pOwogfQogCiB2b2lkIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKCkKIHsKICAgICAvLyBDbGVhbiB1cCBhbGwgcGVu
ZGluZyB0cmFuc2FjdGlvbnMgZm9yIGFsbCBkYXRhYmFzZXMKLSAgICBtX3BlbmRpbmdUcmFuc2Fj
dGlvbnMuY2xlYXIoKTsKKyAgICBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuY2xlYXIoKTsKIH0KIAog
fQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShy
ZXZpc2lvbiA0ODU5MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTMgKzQ0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiosIGJvb2wgcmVhZE9ubHkpOwor
ICAgICAgICB2b2lkIGFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKik7CiAgICAgICAgIHZvaWQg
cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKICAgICAgICAgdm9pZCBzaHV0ZG93bigpOwog
ICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiA+IFRyYW5zYWN0aW9uc1F1ZXVlOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBU
cmFuc2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKLSAgICAgICAgVHJhbnNhY3Rp
b25zSGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgICAgIHN0cnVjdCBDb29yZGlu
YXRpb25JbmZvIHsKKyAgICAgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2Fj
dGlvbnM7CisgICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBhY3Rp
dmVSZWFkVHJhbnNhY3Rpb25zOworICAgICAgICAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBh
Y3RpdmVXcml0ZVRyYW5zYWN0aW9uOworICAgICAgICB9OworICAgICAgICAvLyBNYXBzIGRhdGFi
YXNlIG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgdHJhbnNhY3Rpb25zCisgICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENvb3JkaW5hdGlvbkluZm8+IENvb3JkaW5hdGlv
bkluZm9NYXA7CisgICAgICAgIENvb3JkaW5hdGlvbkluZm9NYXAgbV9jb29yZGluYXRpb25JbmZv
TWFwOworCisgICAgICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlvbnMoQ29vcmRpbmF0
aW9uSW5mbyYgaW5mbyk7CiAgICAgfTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDg1OTIpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAor
MjAwOS0wOS0xMSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEFkZGluZyB0d28g
dGVzdHMgZm9yIHRoZSB0cmFuc2FjdGlvbiBjb29yZGluYXRvci4KKyAgICAgICAgMi4gRml4aW5n
IGFuIGluY29ycmVjdCA8aGVhZD4gdGFnIGluIHNvbWUgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MTE1CisKKyAgICAgICAgKiBzdG9y
YWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sOiBGaXhl
ZCBhCisgICAgICAgIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuIDwvaGVhZD4pLgorICAgICAg
ICAqIHN0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy5o
dG1sOiBGaXhlZAorICAgICAgICBhIDxoZWFkPiB0YWcgKHNob3VsZCd2ZSBiZWVuIDwvaGVhZD4p
LgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVu
LXRvZ2V0aGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9yZWFkLWFu
ZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVu
bmluZy1jb25jdXJyZW50bHkuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS90ZXN0LWF1
dGhvcml6ZXIuaHRtbDogRml4ZWQgYSA8aGVhZD4gdGFnIChzaG91bGQndmUgYmVlbgorICAgICAg
ICA8L2hlYWQ+KS4KKwogMjAwOS0wOS0yMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiA0ODU5MikKKysrIExheW91dFRlc3Rz
L3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAg
ICB9IGNhdGNoKGVycikge30KIH0KIDwvc2NyaXB0PgotPGhlYWQ+Cis8L2hlYWQ+CiA8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKTsiPgogVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIHF1ZXVlaW5nIHVw
IG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBk
YXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgogPC9ib2R5PgpJbmRleDogTGF5b3V0
VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdo
aWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLmh0bWwJKHJldmlzaW9uIDQ4NTkyKQorKysgTGF5
b3V0VGVzdHMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dy
ZXNzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgZnVuY3Rpb24gcnVuVGVz
dCgpCiAgICAgfSBjYXRjaChlcnIpIHt9CiB9CiA8L3NjcmlwdD4KLTxoZWFkPgorPC9oZWFkPgog
PGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KIFRoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBvcGVu
aW5nIGEgZGF0YWJhc2Ugd2hpbGUgYSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9uIGEgZGlmZmVy
ZW50IGhhbmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJy
PgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFkLWFuZC13cml0ZS10cmFu
c2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRv
Z2V0aGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
cmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQtcnVuLXRvZ2V0aGVyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgcmVh
ZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1l
IGRhdGFiYXNlIGRvbid0IHJ1biB0b2dldGhlci4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitU
cmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0
aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVsLgorVHJhbnNhY3Rpb24gc3Vj
Y2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCitUcmFuc2FjdGlvbiBzdWNjZXNzZnVs
LgorVHJhbnNhY3Rpb24gc3VjY2Vzc2Z1bC4KK1RyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuCisKSW5k
ZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRvbnQt
cnVuLXRvZ2V0aGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZWFk
LWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXIuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rpb25zLWRv
bnQtcnVuLXRvZ2V0aGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9j
dW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rpb24g
dGVybWluYXRlVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlKCJSZWFkQW5k
V3JpdGVUcmFuc2FjdGlvbnNEb250UnVuVG9nZXRoZXJUZXN0IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJl
IHRoYXQgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVz
IHRvIHRoZSBzYW1lIERCIGRvbid0IHJ1biBhdCB0aGUgc2FtZSB0aW1lLiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAzMjc2OCk7Cit9CisKK3ZhciByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVz
cyA9IDA7Cit2YXIgd3JpdGVUcmFuc2FjdGlvbnNJblByb2dyZXNzID0gMDsKK3ZhciB0b3RhbFRy
YW5zYWN0aW9ucyA9IDA7Cit2YXIgZmluaXNoZWRUcmFuc2FjdGlvbnMgPSAwOworCitmdW5jdGlv
biBydW5UcmFuc2FjdGlvbihkYiwgcmVhZE9ubHkpCit7CisgICAgdmFyIHRyYW5zYWN0aW9uRnVu
Y3Rpb24gPSAocmVhZE9ubHkgPyBkYi5yZWFkVHJhbnNhY3Rpb24gOiBkYi50cmFuc2FjdGlvbik7
CisgICAgdHJhbnNhY3Rpb25GdW5jdGlvbi5jYWxsKGRiLCBmdW5jdGlvbih0eCkgeworICAgICAg
ICAgICAgaWYgKHJlYWRPbmx5KSB7CisgICAgICAgICAgICAgICAgaWYgKHdyaXRlVHJhbnNhY3Rp
b25zSW5Qcm9ncmVzcyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZygiUmVhZCB0cmFu
c2FjdGlvbiBzdGFydGluZyB3aGlsZSB3cml0ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcy4iKTsK
KyAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJlYWRUcmFuc2FjdGlvbnNJblByb2dy
ZXNzICE9IDApIHx8ICh3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgIT0gMCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbG9nKCJXcml0ZSB0cmFuc2FjdGlvbiBzdGFydGluZyB3aGlsZSBhbm90
aGVyIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzLiIpOworICAgICAgICAgICAgICAgICAgICB0ZXJt
aW5hdGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyaXRlVHJh
bnNhY3Rpb25zSW5Qcm9ncmVzcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHguZXhl
Y3V0ZVNxbCgiU0VMRUNUICogRlJPTSBUZXN0OyIpOworICAgICAgICB9LCBmdW5jdGlvbihlcnJv
cikgeworICAgICAgICAgICAgbG9nKChyZWFkT25seSA/ICJSZWFkIiA6ICJXcml0ZSIpICsgIiB0
cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIHRlcm1p
bmF0ZVRlc3QoKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgZmluaXNo
ZWRUcmFuc2FjdGlvbnMrKzsKKyAgICAgICAgICAgICBpZiAocmVhZE9ubHkpCisgICAgICAgICAg
ICAgICAgIHJlYWRUcmFuc2FjdGlvbnNJblByb2dyZXNzLS07CisgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICB3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MtLTsKKyAgICAgICAg
ICAgICBsb2coIlRyYW5zYWN0aW9uIHN1Y2Nlc3NmdWwuIik7CisgICAgICAgICAgICAgaWYgKChm
aW5pc2hlZFRyYW5zYWN0aW9ucyA9PSB0b3RhbFRyYW5zYWN0aW9ucykgJiYgKHJlYWRUcmFuc2Fj
dGlvbnNJblByb2dyZXNzID09IDApICYmICh3cml0ZVRyYW5zYWN0aW9uc0luUHJvZ3Jlc3MgPT0g
MCkpCisgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRlc3QoKTsKKyAgICAgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIHJ1blJlYWRBbmRXcml0ZVRyYW5zYWN0aW9ucyhkYjEsIGRiMiwgZGIzKQorewor
ICAgIHRvdGFsVHJhbnNhY3Rpb25zID0gMTA7CisgICAgZmluaXNoZWRUcmFuc2FjdGlvbnMgPSAw
OworICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgdHJ1ZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oZGIy
LCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIGZhbHNlKTsKKyAgICBydW5UcmFuc2Fj
dGlvbihkYjEsIHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMiwgdHJ1ZSk7CisgICAgcnVu
VHJhbnNhY3Rpb24oZGIzLCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEsIGZhbHNlKTsK
KyAgICBydW5UcmFuc2FjdGlvbihkYjIsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihkYjEs
IHRydWUpOworICAgIHJ1blRyYW5zYWN0aW9uKGRiMywgdHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICB2
YXIgZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICB2YXIgZGIyID0gb3BlblRlc3RE
YXRhYmFzZSgpOworICAgICAgICB2YXIgZGIzID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAg
ICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICB0eC5leGVj
dXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KTsiKTsKKyAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDYW5u
b3QgY3JlYXRlIHRoZSBUZXN0IHRhYmxlOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAg
ICAgICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgcnVuUmVhZEFuZFdyaXRlVHJhbnNhY3Rpb25zKGRiMSwgZGIyLCBkYjMpOwor
ICAgICAgICAgICAgfSk7CisgICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgcmVh
ZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1l
IGRhdGFiYXNlIGRvbid0IHJ1biB0b2dldGhlci48YnI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVu
dGx5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3JlYWQt
dHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25j
dXJyZW50bHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMg
dGVzdCB0ZXN0cyB0aGF0IHR3byByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBo
YW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJ1biBjb25jdXJyZW50bHkuCitSZWFkIHRyYW5z
YWN0aW9ucyBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9yZWFkLXRyYW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJy
ZW50bHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVhZC10cmFu
c2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdl
KQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9
CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRh
YmFzZSgiUmVhZFRyYW5zYWN0aW9uc1J1bm5pbmdDb25jdXJyZW50bHlUZXN0IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8g
bWFrZSBzdXJlIHRoYXQgbXVsdGlwbGUgcmVhZCB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IERC
IGhhbmRsZXMgdG8gdGhlIHNhbWUgREIgcnVuIGNvbmN1cnJlbnRseS4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMzI3NjgpOworfQorCit2YXIgcmVhZFRyYW5zYWN0aW9uc0luUHJvZ3Jlc3Mg
PSAwOworCitmdW5jdGlvbiBydW5SZWFkVHJhbnNhY3Rpb24oZGIpCit7CisgICAgZGIucmVhZFRy
YW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICByZWFkVHJhbnNhY3Rpb25zSW5Q
cm9ncmVzcysrOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgbG9n
KCJSZWFkIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAg
ICAgdGVybWluYXRlVGVzdCgpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGlmIChyZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcyA9PSAyKQorICAgICAgICAgICAgICAgIGxv
ZygiUmVhZCB0cmFuc2FjdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIik7CisgICAgICAgICAg
ICByZWFkVHJhbnNhY3Rpb25zSW5Qcm9ncmVzcy0tOworICAgICAgICAgICAgaWYgKHJlYWRUcmFu
c2FjdGlvbnNJblByb2dyZXNzID09IDApCisgICAgICAgICAgICAgICAgdGVybWluYXRlVGVzdCgp
OworICAgICAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNl
KCk7CisgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiMS50
cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworICAgICAgICAg
ICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coIkNhbm5vdCBjcmVh
dGUgdGhlIFRlc3QgdGFibGU6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0
ZXJtaW5hdGVUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBydW5SZWFkVHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgICAgICAgICBydW5SZWFkVHJh
bnNhY3Rpb24oZGIyKTsKKyAgICAgICAgICAgIH0pOworICAgICB9IGNhdGNoKGVycikgeyBsb2co
ZXJyKTsgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsi
PgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgdHdvIHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb24gZGlm
ZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcnVuIGNvbmN1cnJlbnRseS48YnI+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3Jp
emVyLmh0bWwJKHJldmlzaW9uIDQ4NTkyKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1
dGhvcml6ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIGZ1bmN0aW9u
IHJ1blRlc3QoKQogICAgIH0gY2F0Y2goZXJyKSB7fQogfQogPC9zY3JpcHQ+Ci08aGVhZD4KKzwv
aGVhZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CiBUaGlzIHRlc3QgdGVzdHMgdGhlIGRh
dGFiYXNlIGF1dGhvcml6ZXIuPGJyPgogPC9ib2R5Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>