<?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>68037</bug_id>
          
          <creation_ts>2011-09-13 15:51:21 -0700</creation_ts>
          <short_desc>Implement WebKit side of IDBFactory::getDatabaseNames</short_desc>
          <delta_ts>2011-09-21 21:05:42 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>hans</cc>
    
    <cc>michaeln</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>466634</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-13 15:51:21 -0700</bug_when>
    <thetext>Implement WebKit side of IDBFactory::databaseNames</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466642</commentid>
    <comment_count>1</comment_count>
      <attachid>107249</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-13 16:11:49 -0700</bug_when>
    <thetext>Created attachment 107249
Source changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466683</commentid>
    <comment_count>2</comment_count>
      <attachid>107257</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-13 16:45:43 -0700</bug_when>
    <thetext>Created attachment 107257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466758</commentid>
    <comment_count>3</comment_count>
      <attachid>107257</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-09-13 18:20:25 -0700</bug_when>
    <thetext>Comment on attachment 107257
Patch

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

It looks good.  You didn&apos;t miss the mark anywhere, just some small stuff.  The biggest is probably sync v async, we&apos;ll talk about it tomorrow.

&gt; ChangeLog:8
&gt; +        * ../../LayoutTests/storage/indexeddb/factory-basics-expected.txt: Added.

We&apos;ll have to figure out what&apos;s going on with the ../../

&gt; Source/WebCore/storage/IDBFactory.cpp:75
&gt; +    return m_factoryBackend-&gt;databaseNames(document-&gt;securityOrigin(), document-&gt;frame(), groupSettings-&gt;indexedDBDatabasePath(), groupSettings-&gt;indexedDBQuotaBytes(), IDBFactoryBackendInterface::DefaultBackingStore);

Remove the quota parameter from here and all the other databaseNames function signatures.

&gt; Source/WebCore/storage/IDBFactory.h:49
&gt; +class IDBFactory : public RefCounted&lt;IDBFactory&gt;, public ActiveDOMObject {

I&apos;m not 100% sure that this won&apos;t cause problems but we&apos;ll see.  Actually, what prompted you to make this an ActiveDOMObject?

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:103
&gt; +            backingStore = IDBLevelDBBackingStore::open(securityOrigin.get(), dataDir, maximumSize, fileIdentifier, this);

The code from open can probably be factored out to avoid the duplication.

&gt; Source/WebCore/storage/IDBLevelDBCoding.cpp:810
&gt; +    end.append(&quot;\x01&quot;); // just after origin in collation order

I see what you mean about the sketchiness. Hans might know a better way.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.h:-47
&gt; -    PassRefPtr&lt;WebCore::DOMStringList&gt; databases(void) const;

Hans, do you know any of the backstory here?

&gt; Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp:89
&gt; +            // Layout tests provide a temporary folder.

Same comment as elsewhere about reusing the code from open.  Basically: do it :)

&gt; LayoutTests/storage/indexeddb/factory-basics.html:35
&gt; +    // TODO: test indexedDB.deleteDatabase(databaseName)

Change this TODO to FIXME.  (In chromium we do &apos;TODO(username):&apos;, in webkit just &apos;FIXME:&apos;)

&gt; LayoutTests/storage/indexeddb/factory-basics.html:36
&gt; +    // TODO: test indexedDB.cmp(key1, key2)

What&apos;s cmp?

&gt; LayoutTests/storage/indexeddb/key-type-negative-zero-expected.txt:1
&gt; +Test IndexedDB key types

Put the zero stuff in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466761</commentid>
    <comment_count>4</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-09-13 18:21:33 -0700</bug_when>
    <thetext>Hans, can you take a look at this, especially the leveldb specific stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466971</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-09-14 04:31:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/storage/IDBFactory.h:49
&gt; &gt; +class IDBFactory : public RefCounted&lt;IDBFactory&gt;, public ActiveDOMObject {
&gt; 
&gt; I&apos;m not 100% sure that this won&apos;t cause problems but we&apos;ll see.  Actually, what prompted you to make this an ActiveDOMObject?

I&apos;m curious about that too.
 
&gt; &gt; Source/WebCore/storage/IDBLevelDBCoding.cpp:810
&gt; &gt; +    end.append(&quot;\x01&quot;); // just after origin in collation order
&gt; 
&gt; I see what you mean about the sketchiness. Hans might know a better way.

I think this is fine. I&apos;m not sure about the name though: encodeMaxKeyForOrigin(), since it&apos;s not really the max key for this origin, but rather the min key for the next one. Maybe you could just use encodeMinKeyForOrigin(origin + &quot;\x01&quot;) where you use this?

&gt; 
&gt; &gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.h:-47
&gt; &gt; -    PassRefPtr&lt;WebCore::DOMStringList&gt; databases(void) const;
&gt; 
&gt; Hans, do you know any of the backstory here?

Sorry, no. I think that function has been sitting there since before I started on this.

&gt; &gt; LayoutTests/storage/indexeddb/factory-basics.html:36
&gt; &gt; +    // TODO: test indexedDB.cmp(key1, key2)
&gt; 
&gt; What&apos;s cmp?

It&apos;s this guy: http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBFactory-cmp-int-any-first-any-second which we haven&apos;t implemented yet (crbug.com/92039).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466974</commentid>
    <comment_count>6</comment_count>
      <attachid>107257</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-09-14 04:47:50 -0700</bug_when>
    <thetext>Comment on attachment 107257
Patch

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

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:104
&gt; +#endif

Yeah, it would be nice if this code could be de-duplicated.

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:182
&gt; +    }

I think this looks fine.

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:202
&gt; +    ASSERT(foundNames.isEmpty());

maybe we should have this assert in the LevelDB code too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467141</commentid>
    <comment_count>7</comment_count>
      <attachid>107257</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-14 10:56:23 -0700</bug_when>
    <thetext>Comment on attachment 107257
Patch

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

&gt;&gt; Source/WebCore/storage/IDBFactory.cpp:75
&gt;&gt; +    return m_factoryBackend-&gt;databaseNames(document-&gt;securityOrigin(), document-&gt;frame(), groupSettings-&gt;indexedDBDatabasePath(), groupSettings-&gt;indexedDBQuotaBytes(), IDBFactoryBackendInterface::DefaultBackingStore);
&gt; 
&gt; Remove the quota parameter from here and all the other databaseNames function signatures.

I had it removed, but had to put it back in when I realized I needed to call IDBLevelDBBackingStore::open(securityOrigin.get(), dataDir, maximumSize, fileIdentifier, this) / IDBSQLiteBackingStore::open(securityOrigin.get(), dataDir, maximumSize, fileIdentifier, this) in the case where the the backing store hasn&apos;t been added to m_backingStoreMap yet in IDBFactoryBackendImpl::databaseNames - I believe that&apos;s the case when the backing store has not yet been accessed for this origin during this session.

If that parameter can be removed from IDBLevelDBBackingStore::open / IDBSQLiteBackingStore::open (move the constant to those implementations) then this is easy. Otherwise, I&apos;ll need more guidance. We could add a BackingStore::openIfExists() that doesn&apos;t create if not present, etc.

&gt;&gt; Source/WebCore/storage/IDBFactory.h:49
&gt;&gt; +class IDBFactory : public RefCounted&lt;IDBFactory&gt;, public ActiveDOMObject {
&gt; 
&gt; I&apos;m not 100% sure that this won&apos;t cause problems but we&apos;ll see.  Actually, what prompted you to make this an ActiveDOMObject?

IDBFactory::databaseNames() needed a ScriptExecutionContext. The two models I found are (1) annotate a method so that the method is passed a context for use within the method call, or (2) make the object an ActiveDOMObject which holds a handle to the document/SEC for the lifetime of the object. IDBFactory::open() was annotated in the IDL to take a SEC parameter, but IDBFactory::displayNames is an attribute in the IDL and those apparently can&apos;t be so annotated. I followed the ActiveDOMObject model used by some of the other IDB objects.

&gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:104
&gt;&gt; +#endif
&gt; 
&gt; Yeah, it would be nice if this code could be de-duplicated.

Absolutely! Wanted to ensure it was all correct/necessary before touching the rest of the code.

&gt;&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:202
&gt;&gt; +    ASSERT(foundNames.isEmpty());
&gt; 
&gt; maybe we should have this assert in the LevelDB code too?

Agreed, I can sprinkle those in. (That was a copy/paste from the SQLite getIndexes) - did the same for getIndexes and getObjectStores

&gt;&gt; LayoutTests/storage/indexeddb/key-type-negative-zero-expected.txt:1
&gt;&gt; +Test IndexedDB key types
&gt; 
&gt; Put the zero stuff in a separate bug.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467151</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-14 11:04:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; Source/WebCore/storage/IDBLevelDBCoding.cpp:810
&gt; &gt; &gt; +    end.append(&quot;\x01&quot;); // just after origin in collation order
&gt; &gt; 
&gt; &gt; I see what you mean about the sketchiness. Hans might know a better way.
&gt; 
&gt; I think this is fine. I&apos;m not sure about the name though: encodeMaxKeyForOrigin(), since it&apos;s not really the max key for this origin, but rather the min key for the next one. Maybe you could just use encodeMinKeyForOrigin(origin + &quot;\x01&quot;) where you use this?

Possible. I was trying to follow the model of the other LevelDB iterators, which generate a start key using encode() then a stop key using encodeMaxKey() - which is typically the MAX_INT64 value. I wanted to hide the min/max logic in the implementation in IDBLevelDBCoding rather than having IDBLevelDBBackingStore be aware of the storage details.

I will change the implementation to that (more readable)... but how about encodeStopKeyForOrigin() as a name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467156</commentid>
    <comment_count>9</comment_count>
      <attachid>107358</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-14 11:09:54 -0700</bug_when>
    <thetext>Created attachment 107358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467163</commentid>
    <comment_count>10</comment_count>
      <attachid>107358</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-14 11:22:01 -0700</bug_when>
    <thetext>Comment on attachment 107358
Patch

Trivial changes, mostly just testing the webkit-patch workflow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467318</commentid>
    <comment_count>11</comment_count>
      <attachid>107358</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-09-14 14:02:50 -0700</bug_when>
    <thetext>Comment on attachment 107358
Patch

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

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:86
&gt; +PassRefPtr&lt;DOMStringList&gt; IDBFactoryBackendImpl::databaseNames(PassRefPtr&lt;SecurityOrigin&gt; securityOrigin, Frame*, const String&amp; dataDir, int64_t maximumSize, BackingStoreType backingStoreType)

Josh walked me through the code - it&apos;s easier to pass the quota around instead of taking it out.  The issue is that databaseNames opens the backing store and the backing store caches itself in m_backingStoreMap.  1Instead of monkeying with the caching logic, we can just take the quota out when we remove sqlite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467853</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-09-15 09:28:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; I think this is fine. I&apos;m not sure about the name though: encodeMaxKeyForOrigin(), since it&apos;s not really the max key for this origin, but rather the min key for the next one. Maybe you could just use encodeMinKeyForOrigin(origin + &quot;\x01&quot;) where you use this?
&gt; 
&gt; Possible. I was trying to follow the model of the other LevelDB iterators, which generate a start key using encode() then a stop key using encodeMaxKey() - which is typically the MAX_INT64 value. I wanted to hide the min/max logic in the implementation in IDBLevelDBCoding rather than having IDBLevelDBBackingStore be aware of the storage details.
&gt; 
&gt; I will change the implementation to that (more readable)... but how about encodeStopKeyForOrigin() as a name?

Yes, that sounds fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467904</commentid>
    <comment_count>13</comment_count>
      <attachid>107510</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-15 10:54:24 -0700</bug_when>
    <thetext>Created attachment 107510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467913</commentid>
    <comment_count>14</comment_count>
      <attachid>107513</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-15 11:11:52 -0700</bug_when>
    <thetext>Created attachment 107513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467924</commentid>
    <comment_count>15</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-15 11:20:02 -0700</bug_when>
    <thetext>Latest patches still has duplicate code w/ IDBFactory::open. I will refactor once everything else looks correct.

Please review, and pay special attention to the result value in the callback, which I believe goes through this conversion on the way from browser to renderer: DOMStringList -&gt; WebDOMStringList -&gt; vector&lt;string16&gt; -&gt; IPC serialization -&gt; vector&lt;string16&gt; -&gt; WebDOMStringList -&gt; DOMStringList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468101</commentid>
    <comment_count>16</comment_count>
      <attachid>107513</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-09-15 14:54:51 -0700</bug_when>
    <thetext>Comment on attachment 107513
Patch

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

Looks good.

&gt; Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp:73
&gt; +    case IDBAny::DOMStringListType:

I don&apos;t understand the IDBAny/V8 stuff well enough to know if we have an alternative to this. Hans, do you know better?

&gt; Source/WebCore/storage/IDBFactory.cpp:64
&gt; +    if (!scriptExecutionContext()-&gt;isDocument()) {

If we do keep IDBFactory as an ActiveDOMObject, check !scriptExecutionContext() as well, it can go null from underneath us.

&gt; Source/WebCore/storage/IDBFactory.cpp:81
&gt; +    if (!scriptExecutionContext()-&gt;isDocument()) {

Same here.

&gt; Source/WebCore/storage/IDBFactory.h:49
&gt; +class IDBFactory : public RefCounted&lt;IDBFactory&gt;, public ActiveDOMObject {

Hans, do you know of disadvantages or costs to making something an ActiveDOMObject?

IDBFactory doesn&apos;t have to be an ActiveDOMObject now that databaseNames is async, but I asked Josh to leave it here so that I could ask this question :)  If you don&apos;t know we can ask japhet during the real review.

&gt; Source/WebKit/chromium/src/IDBFactoryBackendProxy.cpp:72
&gt; +    // FIXME: ensure blank name is not problematic

After tracing this parameter through to 

http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/chrome/browser/content_settings/tab_specific_content_settings.cc&amp;l=269
and
http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/chrome/browser/browsing_data_indexed_db_helper.h&amp;l=107

it looks like it is never used.  Maybe just change it to &quot;Database Listing&quot;?

&gt; LayoutTests/storage/indexeddb/factory-basics.html:20
&gt; +    indexedDB = evalAndLog(&quot;indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;&quot;);

Obiter dictum: in a separate CL we should probably update all of these to include msIndexedDB.

&gt; LayoutTests/storage/indexeddb/factory-basics.html:24
&gt; +    description = &quot;My Test Database&quot;;

Could you add a call to getDatabaseNames before the open call and test that the result is empty?  It&apos;s more to ensure that we don&apos;t crash than for correctness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468174</commentid>
    <comment_count>17</comment_count>
      <attachid>107569</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-15 17:29:01 -0700</bug_when>
    <thetext>Created attachment 107569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469491</commentid>
    <comment_count>18</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-09-19 10:26:31 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; Source/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp:73
&gt; &gt; +    case IDBAny::DOMStringListType:
&gt; 
&gt; I don&apos;t understand the IDBAny/V8 stuff well enough to know if we have an alternative to this. Hans, do you know better?

I think this is fine. IIRC, so far we haven&apos;t returned a request result which is a DOMStringList, and that&apos;s why this is needed.

&gt; &gt; Source/WebCore/storage/IDBFactory.h:49
&gt; &gt; +class IDBFactory : public RefCounted&lt;IDBFactory&gt;, public ActiveDOMObject {
&gt; 
&gt; Hans, do you know of disadvantages or costs to making something an ActiveDOMObject?
&gt; 
&gt; IDBFactory doesn&apos;t have to be an ActiveDOMObject now that databaseNames is async, but I asked Josh to leave it here so that I could ask this question :)  If you don&apos;t know we can ask japhet during the real review.

Sorry, I have no idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469696</commentid>
    <comment_count>19</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-09-19 14:40:07 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/storage/IDBFactory.h:49
&gt; &gt; &gt; +class IDBFactory : public RefCounted&lt;IDBFactory&gt;, public ActiveDOMObject {
&gt; &gt; 
&gt; &gt; Hans, do you know of disadvantages or costs to making something an ActiveDOMObject?
&gt; &gt; 
&gt; &gt; IDBFactory doesn&apos;t have to be an ActiveDOMObject now that databaseNames is async, but I asked Josh to leave it here so that I could ask this question :)  If you don&apos;t know we can ask japhet during the real review.

Since the factory hangs off of DOMWindow, I don&apos;t think ActiveDOMObject applies to this class.

ActiveDOMObject is mostly a means of keeping objects alive that have async behavior such that if the caller drops their js ref, the backing c++ impl doesn&apos;t disappear. But this doesn&apos;t apply to things that DOMWindow holds a reference to since the window will keep them alive for the duration.

        template&lt;class T&gt; void setPendingActivity(T* thisObject)
        {
            ASSERT(thisObject == this);
            thisObject-&gt;ref();   // &lt;---- This keeps things alive
            m_pendingActivityCount++;
        }

        template&lt;class T&gt; void unsetPendingActivity(T* thisObject)
        {
            ASSERT(m_pendingActivityCount &gt; 0);
            --m_pendingActivityCount;
            thisObject-&gt;deref();
        }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469699</commentid>
    <comment_count>20</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-19 14:43:38 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Since the factory hangs off of DOMWindow, I don&apos;t think ActiveDOMObject applies to this class.

Okay - I&apos;ll back that out. I initially added it when I was implementing this as a sync attribute which needed a ScriptExecutionContext and it wasn&apos;t apparent how to plumb that into an attribute call. Now that it&apos;s a method it&apos;s easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469728</commentid>
    <comment_count>21</comment_count>
      <attachid>107926</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-19 15:21:40 -0700</bug_when>
    <thetext>Created attachment 107926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471131</commentid>
    <comment_count>22</comment_count>
      <attachid>107926</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-09-21 13:54:29 -0700</bug_when>
    <thetext>Comment on attachment 107926
Patch

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

&gt; Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp:87
&gt; +    if (dataDir.isEmpty() &amp;&amp; backingStoreType == LevelDBBackingStore) {

This method looks identical to the open() method up to the point of calling thru to the m_idbFactoryBackend instance. Can that common code be shared?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471152</commentid>
    <comment_count>23</comment_count>
      <attachid>108233</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-21 14:16:28 -0700</bug_when>
    <thetext>Created attachment 108233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471153</commentid>
    <comment_count>24</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-21 14:18:08 -0700</bug_when>
    <thetext>Latest patch is just the &quot;part 1&quot; of a two-sided patch. Will be followed by a Chromium patch - see http://codereview.chromium.org/7889024/ - and the rest of the WebKit implementation as a separate submission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471195</commentid>
    <comment_count>25</comment_count>
      <attachid>108233</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-21 15:11:49 -0700</bug_when>
    <thetext>Comment on attachment 108233
Patch

Tony, can you review this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471214</commentid>
    <comment_count>26</comment_count>
      <attachid>108233</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-09-21 15:32:51 -0700</bug_when>
    <thetext>Comment on attachment 108233
Patch

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

&gt; Source/WebKit/chromium/public/WebIDBCallbacks.h:40
&gt; +class WebDOMStringList;

Nit: alphabetize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471287</commentid>
    <comment_count>27</comment_count>
      <attachid>108255</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-09-21 17:16:38 -0700</bug_when>
    <thetext>Created attachment 108255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471341</commentid>
    <comment_count>28</comment_count>
      <attachid>108255</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 21:05:37 -0700</bug_when>
    <thetext>Comment on attachment 108255
Patch

Clearing flags on attachment: 108255

Committed r95698: &lt;http://trac.webkit.org/changeset/95698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471342</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 21:05:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107249</attachid>
            <date>2011-09-13 16:11:49 -0700</date>
            <delta_ts>2011-09-13 16:13:07 -0700</delta_ts>
            <desc>Source changes</desc>
            <filename>databasenames_working_svn.patch</filename>
            <type>text/plain</type>
            <size>18255</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNw
cAkocmV2aXNpb24gOTQ5NDkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQAogewogfQogCitQ
YXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IElEQkZhY3RvcnlCYWNrZW5kUHJveHk6
OmRhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFt
ZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFj
a2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIFdlYlNlY3VyaXR5T3JpZ2lu
IG9yaWdpbihwcnBPcmlnaW4pOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFt
ZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CisKKyAgICByZXR1cm4gbV93ZWJJREJGYWN0b3J5LT5k
YXRhYmFzZU5hbWVzKG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIsIG1heGltdW1TaXplLCBzdGF0
aWNfY2FzdDxXZWJJREJGYWN0b3J5OjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBl
KSk7Cit9CisKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlw
ZSkKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCShyZXZpc2lvbiA5NDk0OSkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw2ICs3MSwzMyBAQAogewogfQogCisKK1dlYkRPTVN0cmluZ0xpc3QgV2ViSURC
RmFjdG9yeUltcGw6OmRhdGFiYXNlTmFtZXMoY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdp
biwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAg
IFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsKKworICAgIGlmIChvdmVycmlkZGVuQmFja2luZ1N0
b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3JlKSB7CisgICAgICAgIC8vIEJhY2tpbmcgc3Rv
cmUgdHlwZSBvdmVycmlkZGVuIGJ5IExheW91dFRlc3RDb250cm9sbGVyLgorICAgICAgICBiYWNr
aW5nU3RvcmVUeXBlID0gb3ZlcnJpZGRlbkJhY2tpbmdTdG9yZVR5cGU7CisgICAgfQorCisgICAg
aWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gRGVmYXVsdEJhY2tpbmdTdG9yZSkKKyAgICAgICAgYmFj
a2luZ1N0b3JlVHlwZSA9IExldmVsREJCYWNraW5nU3RvcmU7CisKKyAgICBpZiAoZGF0YURpci5p
c0VtcHR5KCkgJiYgYmFja2luZ1N0b3JlVHlwZSA9PSBMZXZlbERCQmFja2luZ1N0b3JlKSB7Cisg
ICAgICAgIGlmICghdGVtcERhdGFiYXNlRm9sZGVyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
Ly8gTGF5b3V0IHRlc3RzIHByb3ZpZGUgYSB0ZW1wb3JhcnkgZm9sZGVyLgorICAgICAgICAgICAg
cGF0aCA9IHRlbXBEYXRhYmFzZUZvbGRlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEZvciBpbmNvZ25pdG8gbW9kZSwgZmFsbCBiYWNrIHRvIFNRTGl0ZS4KKyAgICAgICAgICAg
IGJhY2tpbmdTdG9yZVR5cGUgPSBTUUxpdGVCYWNraW5nU3RvcmU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5QmFja2VuZC0+ZGF0YWJhc2VOYW1lcyhvcmlnaW4s
IDAsIHBhdGgsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOworfQorCisKIHZvaWQg
V2ViSURCRmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxs
YmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJh
bWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQogewogICAgIFdlYlN0cmlu
ZyBwYXRoID0gZGF0YURpcjsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJh
Y2tlbmRQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9y
eUJhY2tlbmRQcm94eS5oCShyZXZpc2lvbiA5NDk0OSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBA
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKIAot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gZGF0YWJhc2VzKHZvaWQpIGNv
bnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdMaXN0PiBkYXRh
YmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2lu
Z1N0b3JlVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50
NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6CkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCShyZXZpc2lvbiA5NDk0OSkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQAogICAgIFdlYklEQkZhY3RvcnlJbXBsKCk7CiAgICAgdmlydHVhbCB+
V2ViSURCRmFjdG9yeUltcGwoKTsKIAorICAgIHZpcnR1YWwgV2ViRE9NU3RyaW5nTGlzdCBkYXRh
YmFzZU5hbWVzKGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJT
dHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0
b3JlVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJh
Y2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJJREJGYWN0b3J5LmgJKHJldmlzaW9uIDk0OTQ5KQorKysgV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEyIEBACiAgICAg
ICAgIFNRTGl0ZUJhY2tpbmdTdG9yZQogICAgIH07CiAKKyAgICB2aXJ0dWFsIFdlYkRPTVN0cmlu
Z0xpc3QgZGF0YWJhc2VOYW1lcyhjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUs
IEJhY2tpbmdTdG9yZVR5cGUpCisgICAgeworICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nTGlzdCgpOworICAgIH0KKwogICAgIC8v
IFRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSog
cGFyYW1ldGVyLgogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
V2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNv
bnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBC
YWNraW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5NDk0OSkKKysrIFdlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QAogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OwogCisgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93
SWQpID0gMDsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgJKHJldmlzaW9uIDk0OTQ5KQorKysgV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDggQEAKICAgICAg
ICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2lu
Z1N0b3JlVHlwZSkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFj
a2luZ1N0b3JlVHlwZSkgPSAwOwogfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJDb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGlu
Zy5oCShyZXZpc2lvbiA5NDk0OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsOCBAQAogcHVibGljOgogICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0
LCBEYXRhYmFzZU5hbWVLZXkqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKKyAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbik7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXlGb3JPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW4pOwogICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbjsgfQogICAgIFN0cmluZyBkYXRhYmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2RhdGFiYXNlTmFtZTsgfQogICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtleSYg
b3RoZXIpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAkocmV2
aXNpb24gOTQ5NDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAKICAgICB2b2lkIGFkZElEQkJhY2tpbmdT
dG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKICAg
ICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVy
KTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVz
KFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
ciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisKICAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
LCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwJKHJldmlzaW9uIDk0OTQ5KQorKysgV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMiBAQAogbW9k
dWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5E
RVhFRF9EQVRBQkFTRQorICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAg
ICAgICBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgXSBJREJGYWN0b3J5IHsK
LSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3Bl
bihpbiBET01TdHJpbmcgbmFtZSkKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
Z0xpc3QgZGF0YWJhc2VOYW1lczsKKworICAgICAgICBJREJSZXF1ZXN0IG9wZW4oaW4gRE9NU3Ry
aW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCShyZXZpc2lvbiA5
NDk0OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzk5LDYgKzc5OSwxOCBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK1ZlY3Rvcjxj
aGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbikKK3sKKyAgICByZXR1cm4gZW5jb2RlKG9yaWdpbiwgIiIpOworfQorCitWZWN0b3I8
Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNYXhLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5n
JiBvcmlnaW4pCit7CisgICAgU3RyaW5nIGVuZChvcmlnaW4pOworICAgIGVuZC5hcHBlbmQoIlx4
MDEiKTsgLy8ganVzdCBhZnRlciBvcmlnaW4gaW4gY29sbGF0aW9uIG9yZGVyCisgICAgcmV0dXJu
IGVuY29kZShlbmQsICIiKTsKK30KKwogaW50IERhdGFiYXNlTmFtZUtleTo6Y29tcGFyZShjb25z
dCBEYXRhYmFzZU5hbWVLZXkmIG90aGVyKQogewogICAgIGlmIChpbnQgeCA9IGNvZGVQb2ludENv
bXBhcmUobV9vcmlnaW4sIG90aGVyLm1fb3JpZ2luKSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9J
REJTUUxpdGVCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvSURC
U1FMaXRlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDk0OTQ5KQorKysgV2ViQ29yZS9zdG9yYWdl
L0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3Qg
U3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgdmly
dHVhbCB+SURCU1FMaXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0
YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29s
IGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBm
b3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCShyZXZpc2lvbiA5NDk0OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUlEQkZhY3Rvcnk6OklEQkZhY3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uq
IGZhY3RvcnkpCi0gICAgOiBtX2ZhY3RvcnlCYWNrZW5kKGZhY3RvcnkpCitJREJGYWN0b3J5OjpJ
REJGYWN0b3J5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRo
aXMpCisgICAgLCBtX2ZhY3RvcnlCYWNrZW5kKGZhY3RvcnkpCiB7CiAgICAgLy8gV2UgcGFzcyBh
IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCiAgICAg
cmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CkBAIC01OCwxNyArNTksMzMgQEAKIHsKIH0KIAot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkZhY3Rvcnk6OmRhdGFiYXNlTmFtZXMoKQogewot
ICAgIGlmICghY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlz
IHdvcmsgd2l0aCB3b3JrZXJzLgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFn
ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGlu
Z3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKworICAgIHJl
dHVybiBtX2ZhY3RvcnlCYWNrZW5kLT5kYXRhYmFzZU5hbWVzKGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJh
c2VQYXRoKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwgSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2U6OkRlZmF1bHRCYWNraW5nU3RvcmUpOworfQorCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtlcnMu
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0
YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAo
IWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4g
MDsKKwogICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gOTQ5NDkpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw3IEBACiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBt
YXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKik7CiAgICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpOwogCisgICAg
dmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMp
OwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2
aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsK
IApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCShyZXZpc2lvbiA5NDk0OSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0NiwyMCBAQAogY2xh
c3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogCi1jbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4g
eworY2xhc3MgSURCRmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+LCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJG
YWN0b3J5PiBjcmVhdGUoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5KGZhY3RvcnkpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5KGNvbnRleHQsIGZhY3RvcnkpKTsKICAg
ICB9CiAgICAgfklEQkZhY3RvcnkoKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzKCk7CiAK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisKIHByaXZhdGU6Ci0gICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSopOworICAgIElEQkZhY3RvcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKik7CiAKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U+IG1fZmFjdG9yeUJhY2tlbmQ7CiB9OwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDk0OTQ5KQorKysgV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYg
KzU5LDggQEAKIHsKIH0KIAorCisKIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklEQkZhY3RvcnlC
YWNrZW5kSW1wbCgpCiB7CiB9CkBAIC04MSw2ICs4MywzOSBAQAogICAgIG1fYmFja2luZ1N0b3Jl
TWFwLnJlbW92ZShmaWxlSWRlbnRpZmllcik7CiB9CiAKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwg
aW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQor
eworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOwor
CisgICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVy
KHNlY3VyaXR5T3JpZ2luLmdldCgpLCBiYWNraW5nU3RvcmVUeXBlKTsKKworICAgIC8vIEZJWE1F
OiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFk
LgorCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOworICAgIElEQkJh
Y2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxl
SWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSAmJiAo
YmFja2luZ1N0b3JlVHlwZSA9PSBpdDItPnNlY29uZC0+YmFja2luZ1N0b3JlVHlwZSgpKSkKKyAg
ICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChiYWNraW5nU3RvcmVUeXBlID09IFNRTGl0ZUJhY2tpbmdTdG9yZSkKKyAgICAgICAgICAgIGJh
Y2tpbmdTdG9yZSA9IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5n
ZXQoKSwgZGF0YURpciwgbWF4aW11bVNpemUsIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyNpZiBF
TkFCTEUoTEVWRUxEQikKKyAgICAgICAgZWxzZSBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBMZXZl
bERCQmFja2luZ1N0b3JlKQorICAgICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpciwgbWF4aW11bVNp
emUsIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyNlbmRpZgorICAgIH0KKworICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisK
KyAgICBpZiAoYmFja2luZ1N0b3JlKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFt
ZXM7CisgICAgICAgIGJhY2tpbmdTdG9yZS0+Z2V0RGF0YWJhc2VOYW1lcyhmb3VuZE5hbWVzKTsK
KyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb3VuZE5h
bWVzLmJlZ2luKCk7IGl0ICE9IGZvdW5kTmFtZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBk
YXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YWJhc2VO
YW1lcy5yZWxlYXNlKCk7Cit9CisKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tp
bmdTdG9yZVR5cGUpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJh
Y2tpbmdTdG9yZSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3Jl
LmNwcAkocmV2aXNpb24gOTQ5NDkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2lu
Z1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYgKzE5NywyMCBAQAogICAgIHJldHVy
biBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwogfQogCit2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9y
ZTo6Z2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKK3sKKyAgICBB
U1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGIsICJTRUxFQ1QgbmFtZSBGUk9NIERhdGFiYXNlcyIpOworICAgIGlmIChxdWVyeS5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAocXVlcnkuc3RlcCgpID09IFNRTFJl
c3VsdFJvdykKKyAgICAgICAgZm91bmROYW1lcy5hcHBlbmQocXVlcnkuZ2V0Q29sdW1uVGV4dCgw
KSk7Cit9CisKIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90
JiBmb3VuZElkKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KG1fZGIsICJT
RUxFQ1QgaWQsIHZlcnNpb24gRlJPTSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8iKTsKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDk0
OTQ5KQorKysgV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDI0IEBACiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5y
ZWxlYXNlKCk7CiB9CiAKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VO
YW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gc3RhcnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihtX2lk
ZW50aWZpZXIpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VOYW1l
S2V5OjplbmNvZGVNYXhLZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKKworICAgIE93blB0cjxM
ZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0
LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICBjb25zdCBjaGFyICpwID0gaXQt
PmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVu
ZCgpOworCisgICAgICAgIERhdGFiYXNlTmFtZUtleSBkYXRhYmFzZU5hbWVLZXk7CisgICAgICAg
IHAgPSBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShwLCBsaW1pdCwgJmRhdGFiYXNlTmFtZUtleSk7
CisgICAgICAgIEFTU0VSVChwKTsKKworICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChkYXRhYmFz
ZU5hbWVLZXkuZGF0YWJhc2VOYW1lKCkpOworICAgIH0KK30KKwogYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQogewogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5h
bWUpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDk0OTQ5KQorKysgV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0Miw3ICs3NDIsNyBAQAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGlmICghbV9pZGJGYWN0b3J5KQotICAgICAgICBtX2lkYkZhY3Rv
cnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkpOworICAg
ICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUodGhpcy0+ZG9jdW1lbnQoKSwg
cGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkpOwogICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0
KCk7CiB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107257</attachid>
            <date>2011-09-13 16:45:43 -0700</date>
            <delta_ts>2011-09-14 11:09:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110913164542.patch</filename>
            <type>text/plain</type>
            <size>28126</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1MDU2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDkt
MTMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIC4uLy4uL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogLi4vLi4vTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mu
aHRtbDogQWRkZWQuCisgICAgICAgICogLi4vLi4vTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIva2V5LXR5cGUtbmVnYXRpdmUtemVyby1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IC4uLy4uL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleS10eXBlLW5lZ2F0aXZlLXpl
cm8uaHRtbDogQWRkZWQuCisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFj
a2luZ1N0b3JlLmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmNwcDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuaDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaWRsOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiAuLi8uLi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAg
ICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
OgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGlu
Zy5jcHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
Q29kaW5nLmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxp
dGVCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAqIC4uLy4uL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAg
ICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuaDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJG
YWN0b3J5SW1wbC5jcHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRmFjdG9yeUltcGwuaDoKKwogMjAxMS0wOS0xMyAgRXJpYyBTZWlkZWwgIDxlcmlj
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1Qg
YXMgaXQgaXMgYSByZXF1aXJlZCBwYXJ0IG9mIEhUTUw1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0Miw3IEBAIElEQkZhY3RvcnkqIERP
TVdpbmRvdzo6d2Via2l0SW5kZXhlZERCKCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAo
IW1faWRiRmFjdG9yeSkKLSAgICAgICAgbV9pZGJGYWN0b3J5ID0gSURCRmFjdG9yeTo6Y3JlYXRl
KHBhZ2UtPmdyb3VwKCkuaWRiRmFjdG9yeSgpKTsKKyAgICAgICAgbV9pZGJGYWN0b3J5ID0gSURC
RmFjdG9yeTo6Y3JlYXRlKHRoaXMtPmRvY3VtZW50KCksIHBhZ2UtPmdyb3VwKCkuaWRiRmFjdG9y
eSgpKTsKICAgICByZXR1cm4gbV9pZGJGYWN0b3J5LmdldCgpOwogfQogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDk1MDU1KQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291
bnRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CiAKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRS
b3dJZCkgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJl
dmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUlEQkZhY3Rvcnk6OklEQkZhY3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3Rv
cnkpCi0gICAgOiBtX2ZhY3RvcnlCYWNrZW5kKGZhY3RvcnkpCitJREJGYWN0b3J5OjpJREJGYWN0
b3J5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlKiBmYWN0b3J5KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisg
ICAgLCBtX2ZhY3RvcnlCYWNrZW5kKGZhY3RvcnkpCiB7CiAgICAgLy8gV2UgcGFzcyBhIHJlZmVy
ZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCiAgICAgcmVsYXhB
ZG9wdGlvblJlcXVpcmVtZW50KCk7CkBAIC01OCwxNCArNTksMzAgQEAgSURCRmFjdG9yeTo6fklE
QkZhY3RvcnkoKQogewogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9w
ZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRmFjdG9yeTo6
ZGF0YWJhc2VOYW1lcygpCiB7Ci0gICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtlcnMuCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4oY29udGV4dCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1l
KCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgR3JvdXBT
ZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBT
ZXR0aW5ncygpOworCisgICAgcmV0dXJuIG1fZmFjdG9yeUJhY2tlbmQtPmRhdGFiYXNlTmFtZXMo
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRp
bmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCUXVv
dGFCeXRlcygpLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6RGVmYXVsdEJhY2tpbmdTdG9y
ZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3Blbihjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhp
cyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdl
KCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaAkocmV2aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTggKzQ2LDIwIEBAIGNsYXNzIElEQktleVJhbmdl
OwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogCi1jbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFj
dG9yeT4geworY2xhc3MgSURCRmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJGYWN0b3J5PiBjcmVhdGUoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3Rvcnkp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5KGZhY3RvcnkpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5KGNvbnRleHQsIGZhY3Rvcnkp
KTsKICAgICB9CiAgICAgfklEQkZhY3RvcnkoKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVz
KCk7CisKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6Ci0gICAgSURCRmFjdG9yeShJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSopOworICAgIElEQkZhY3RvcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKik7CiAKICAgICBSZWZQdHI8SURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2U+IG1fZmFjdG9yeUJhY2tlbmQ7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDEy
IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCisgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICBdIElEQkZh
Y3RvcnkgewotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVx
dWVzdCBvcGVuKGluIERPTVN0cmluZyBuYW1lKQorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nTGlzdCBkYXRhYmFzZU5hbWVzOworCisgICAgICAgIElEQlJlcXVlc3Qgb3Blbihp
biBET01TdHJpbmcgbmFtZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSw4IEBAIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmQKIHsKIH0K
IAorCisKIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCiB7
CiB9CkBAIC04MSw2ICs4MywzOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3Zl
SURCQmFjCiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0K
IAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRhdGFi
YXNlTmFtZXMoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1l
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3Rv
cmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUg
IT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7CisKKyAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZp
ZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdT
dG9yZVR5cGUpOworCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxk
IGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmU7CisgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBt
X2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQyICE9IG1f
YmFja2luZ1N0b3JlTWFwLmVuZCgpICYmIChiYWNraW5nU3RvcmVUeXBlID09IGl0Mi0+c2Vjb25k
LT5iYWNraW5nU3RvcmVUeXBlKCkpKQorICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29u
ZDsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gU1FMaXRlQmFj
a2luZ1N0b3JlKQorICAgICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCU1FMaXRlQmFja2luZ1N0
b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmls
ZUlkZW50aWZpZXIsIHRoaXMpOworI2lmIEVOQUJMRShMRVZFTERCKQorICAgICAgICBlbHNlIGlm
IChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBi
YWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2Vu
ZGlmCisgICAgfQorCisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBE
T01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKworICAgIGlmIChiYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lczsKKyAgICAgICAgYmFja2luZ1N0b3JlLT5nZXRE
YXRhYmFzZU5hbWVzKGZvdW5kTmFtZXMpOworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGZvdW5kTmFtZXMuYmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5l
bmQoKTsgKytpdCkKKyAgICAgICAgICAgIGRhdGFiYXNlTmFtZXMtPmFwcGVuZCgqaXQpOworICAg
IH0KKworICAgIHJldHVybiBkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKTsKK30KKwogdm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0
eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNp
emUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKICAgICBBU1NFUlQoYmFj
a2luZ1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3JlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAkocmV2aXNpb24gOTUwNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZElEQkJhY2tp
bmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsK
ICAgICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlm
aWVyKTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5h
bWVzKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisKICAgICB2aXJ0
dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBt
YXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRf
dCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCShyZXZp
c2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsMjQgQEAgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYQogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVs
ZWFzZSgpOwogfQogCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFt
ZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0YXJ0S2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVu
dGlmaWVyKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtl
eTo6ZW5jb2RlTWF4S2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7CisKKyAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgZm9yIChpdC0+
c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBz
dG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5r
ZXkoKS5iZWdpbigpOworICAgICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQo
KTsKKworICAgICAgICBEYXRhYmFzZU5hbWVLZXkgZGF0YWJhc2VOYW1lS2V5OworICAgICAgICBw
ID0gRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhYmFzZU5hbWVLZXkpOwor
ICAgICAgICBBU1NFUlQocCk7CisKKyAgICAgICAgZm91bmROYW1lcy5hcHBlbmQoZGF0YWJhc2VO
YW1lS2V5LmRhdGFiYXNlTmFtZSgpKTsKKyAgICB9Cit9CisKIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkKIHsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1l
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlP
cmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25z
dCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKICAgICB2
aXJ0dWFsIH5JREJMZXZlbERCQmFja2luZ1N0b3JlKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBi
b29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5n
JiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHJldmlzaW9uIDk1MDU1KQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzk5LDYgKzc5OSwxOCBAQCBWZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5Ojpl
bmNvZGUoY29uCiAgICAgcmV0dXJuIHJldDsKIH0KIAorVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFt
ZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQoreworICAg
IHJldHVybiBlbmNvZGUob3JpZ2luLCAiIik7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5h
bWVLZXk6OmVuY29kZU1heEtleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikKK3sKKyAg
ICBTdHJpbmcgZW5kKG9yaWdpbik7CisgICAgZW5kLmFwcGVuZCgiXHgwMSIpOyAvLyBqdXN0IGFm
dGVyIG9yaWdpbiBpbiBjb2xsYXRpb24gb3JkZXIKKyAgICByZXR1cm4gZW5jb2RlKGVuZCwgIiIp
OworfQorCiBpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtl
eSYgb3RoZXIpCiB7CiAgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFyZShtX29yaWdpbiwg
b3RoZXIubV9vcmlnaW4pKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
Q29kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
Q29kaW5nLmgJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsOCBAQCBjbGFzcyBE
YXRhYmFzZU5hbWVLZXkgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVLZXkqIHJl
c3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoY29uc3QgU3RyaW5nJiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbik7CisgICAgc3RhdGlj
IFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4p
OwogICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgIFN0
cmluZyBkYXRhYmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlTmFtZTsgfQogICAg
IGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtleSYgb3RoZXIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAkocmV2aXNp
b24gOTUwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw2ICsxOTcsMjAgQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IElEQlNRTGl0ZUJhYwogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFz
ZSgpOwogfQogCit2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcyhW
ZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKK3sKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0Vt
cHR5KCkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1QgbmFtZSBG
Uk9NIERhdGFiYXNlcyIpOworICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB3aGlsZSAocXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgZm91
bmROYW1lcy5hcHBlbmQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSk7Cit9CisKIGJvb2wgSURCU1FM
aXRlQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQogewogICAgIFNR
TGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KG1fZGIsICJTRUxFQ1QgaWQsIHZlcnNpb24gRlJP
TSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gOTUwNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBp
bnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0
b3J5QmFja2VuZEltcGwqKTsKICAgICB2aXJ0dWFsIH5JREJTUUxpdGVCYWNraW5nU3RvcmUoKTsK
IAorICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3Vu
ZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7
CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRS
b3dJZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3Rv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJG
YWN0b3J5LmgJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMiBAQCBwdWJs
aWM6CiAgICAgICAgIFNRTGl0ZUJhY2tpbmdTdG9yZQogICAgIH07CiAKKyAgICB2aXJ0dWFsIFdl
YkRPTVN0cmluZ0xpc3QgZGF0YWJhc2VOYW1lcyhjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdl
YkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4
aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpCisgICAgeworICAgICAgIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nTGlzdCgpOworICAgIH0K
KwogICAgIC8vIFRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBX
ZWJGcmFtZSogcGFyYW1ldGVyLgogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0
b3J5QmFja2VuZFByb3h5LmNwcAkocmV2aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNiArNjQsMTQgQEAgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6fklEQkZhY3RvcnlCYWNrZQog
ewogfQogCitQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IElEQkZhY3RvcnlCYWNr
ZW5kUHJveHk6OmRhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3Jp
Z2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIFdlYlNlY3Vy
aXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUg
PSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CisKKyAgICByZXR1cm4gbV93ZWJJREJG
YWN0b3J5LT5kYXRhYmFzZU5hbWVzKG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIsIG1heGltdW1T
aXplLCBzdGF0aWNfY2FzdDxXZWJJREJGYWN0b3J5OjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5n
U3RvcmVUeXBlKSk7Cit9CisKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2lu
Z1N0b3JlVHlwZSkKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFj
a2VuZFByb3h5LmgJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRQ
cm94eSgpOwogCi0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdMaXN0PiBkYXRhYmFz
ZXModm9pZCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3Q+IGRhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4s
IFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5
SW1wbC5jcHAJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCRmFjdG9yeUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwzMyBAQCBX
ZWJJREJGYWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIHsKIH0KIAorCitXZWJET01T
dHJpbmdMaXN0IFdlYklEQkZhY3RvcnlJbXBsOjpkYXRhYmFzZU5hbWVzKGNvbnN0IFdlYlNlY3Vy
aXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1
bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0
b3JlVHlwZSkKK3sKKyAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CisKKyAgICBpZiAob3Zl
cnJpZGRlbkJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSkgeworICAgICAg
ICAvLyBCYWNraW5nIHN0b3JlIHR5cGUgb3ZlcnJpZGRlbiBieSBMYXlvdXRUZXN0Q29udHJvbGxl
ci4KKyAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IG92ZXJyaWRkZW5CYWNraW5nU3RvcmVUeXBl
OworICAgIH0KKworICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3Rv
cmUpCisgICAgICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBMZXZlbERCQmFja2luZ1N0b3JlOworCisg
ICAgaWYgKGRhdGFEaXIuaXNFbXB0eSgpICYmIGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJh
Y2tpbmdTdG9yZSkgeworICAgICAgICBpZiAoIXRlbXBEYXRhYmFzZUZvbGRlci5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIC8vIExheW91dCB0ZXN0cyBwcm92aWRlIGEgdGVtcG9yYXJ5IGZvbGRl
ci4KKyAgICAgICAgICAgIHBhdGggPSB0ZW1wRGF0YWJhc2VGb2xkZXI7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBGb3IgaW5jb2duaXRvIG1vZGUsIGZhbGwgYmFjayB0byBTUUxp
dGUuCisgICAgICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0gU1FMaXRlQmFja2luZ1N0b3JlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1faWRiRmFjdG9yeUJhY2tlbmQtPmRhdGFi
YXNlTmFtZXMob3JpZ2luLCAwLCBwYXRoLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUp
KTsKK30KKworCiB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2lu
JiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkK
IHsKICAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgJKHJldmlzaW9uIDk1MDU1KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiAgICAgV2ViSURCRmFjdG9yeUltcGwoKTsK
ICAgICB2aXJ0dWFsIH5XZWJJREJGYWN0b3J5SW1wbCgpOwogCisgICAgdmlydHVhbCBXZWJET01T
dHJpbmdMaXN0IGRhdGFiYXNlTmFtZXMoY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFt
ZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwg
V2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBt
YXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6CkluZGV4OiBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
ZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBA
CitUZXN0IHRoZSBiYXNpY3Mgb2YgSW5kZXhlZERCJ3MgSURCRmFjdG9yeS4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2lu
ZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVk
REIgPT0gbnVsbCBpcyBmYWxzZQoraW5kZXhlZERCLm9wZW4obmFtZSwgZGVzY3JpcHRpb24pCitQ
QVNTIGluZGV4ZWREQi5kYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9m
YWN0b3J5LWJhc2ljcycpIGlzIHRydWUKK1BBU1MgaW5kZXhlZERCLmRhdGFiYXNlTmFtZXMuY29u
dGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9u
KCJUZXN0IHRoZSBiYXNpY3Mgb2YgSW5kZXhlZERCJ3MgSURCRmFjdG9yeS4iKTsKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIAorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpbmRleGVkREIgPSBldmFs
QW5kTG9nKCJpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRl
eGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJpbmRl
eGVkREIgPT0gbnVsbCIpOworCisgICAgbmFtZSA9ICdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWJhc2ljcyc7CisgICAgZGVzY3JpcHRpb24gPSAiTXkgVGVzdCBEYXRhYmFzZSI7CisgICAgcmVx
dWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uKSIpOwor
ICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkK
K3sKKyAgICBzaG91bGRCZVRydWUoImluZGV4ZWREQi5kYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCci
ICsgbmFtZSArICInKSIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQi5kYXRhYmFzZU5h
bWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykiKTsKKworICAgIC8v
IFRPRE86IHRlc3QgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkKKyAgICAv
LyBUT0RPOiB0ZXN0IGluZGV4ZWREQi5jbXAoa2V5MSwga2V5MikKKyAgICBkb25lKCk7Cit9CisK
K3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5
LXR5cGUtbmVnYXRpdmUtemVyby1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LXR5cGUtbmVnYXRpdmUtemVyby1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktdHlwZS1u
ZWdhdGl2ZS16ZXJvLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAor
VGVzdCBJbmRleGVkREIga2V5IHR5cGVzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIg
fHwgd2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFsc2UK
K0lEQkRhdGFiYXNlRXhjZXB0aW9uID0gd2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdp
bmRvdy53ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbjsKK1BBU1MgSURCRGF0YWJhc2VFeGNlcHRp
b24gPT0gbnVsbCBpcyBmYWxzZQorSURCQ3Vyc29yID0gd2luZG93LklEQkN1cnNvciB8fCB3aW5k
b3cud2Via2l0SURCQ3Vyc29yOworUEFTUyBJREJDdXJzb3IgPT0gbnVsbCBpcyBmYWxzZQorSURC
S2V5UmFuZ2UgPSB3aW5kb3cuSURCS2V5UmFuZ2UgfHwgd2luZG93LndlYmtpdElEQktleVJhbmdl
OworUEFTUyBJREJLZXlSYW5nZSA9PSBudWxsIGlzIGZhbHNlCitpbmRleGVkREIub3BlbihuYW1l
LCBkZXNjcmlwdGlvbikKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorcmVxdWVzdCA9IGRiLnNl
dFZlcnNpb24oJzEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9iamVj
dFN0b3JlKCdmb28nKTsKK3Rlc3QgYWRkLCBrZXkgLTAKK3JlcXVlc3QgPSBvYmplY3RTdG9yZS5h
ZGQoJ3lheScsIC0wKTsKK3Rlc3QgYWRkLCBrZXkgKzAgKHNob3VsZCBmYWlsKQorcmVxdWVzdCA9
IG9iamVjdFN0b3JlLmFkZCgneWF5JywgKzApOworUEFTUyBldmVudC50YXJnZXQuZXJyb3JDb2Rl
IGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLkNPTlNUUkFJTlRfRVJSCitldmVudC5wcmV2
ZW50RGVmYXVsdCgpCit0ZXN0IGdldCwga2V5IC0wCityZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0
KC0wKTsKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAieWF5IgordGVzdCBnZXQsIGtleSAr
MAorcmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldCgrMCk7CitQQVNTIGV2ZW50LnRhcmdldC5yZXN1
bHQgaXMgInlheSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktdHlwZS1uZWdh
dGl2ZS16ZXJvLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIva2V5LXR5cGUtbmVnYXRpdmUtemVyby5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LXR5cGUtbmVnYXRpdmUtemVyby5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDk4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2Ny
aXB0aW9uKCJUZXN0IEluZGV4ZWREQiBrZXkgdHlwZXMiKTsKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBpbmRleGVkREIgPSBldmFsQW5kTG9nKCJpbmRleGVk
REIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93
Lm1vekluZGV4ZWREQjsiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIp
OworICAgIElEQkRhdGFiYXNlRXhjZXB0aW9uID0gZXZhbEFuZExvZygiSURCRGF0YWJhc2VFeGNl
cHRpb24gPSB3aW5kb3cuSURCRGF0YWJhc2VFeGNlcHRpb24gfHwgd2luZG93LndlYmtpdElEQkRh
dGFiYXNlRXhjZXB0aW9uOyIpOworICAgIHNob3VsZEJlRmFsc2UoIklEQkRhdGFiYXNlRXhjZXB0
aW9uID09IG51bGwiKTsKKyAgICBJREJDdXJzb3IgPSBldmFsQW5kTG9nKCJJREJDdXJzb3IgPSB3
aW5kb3cuSURCQ3Vyc29yIHx8IHdpbmRvdy53ZWJraXRJREJDdXJzb3I7Iik7CisgICAgc2hvdWxk
QmVGYWxzZSgiSURCQ3Vyc29yID09IG51bGwiKTsKKyAgICBJREJLZXlSYW5nZSA9IGV2YWxBbmRM
b2coIklEQktleVJhbmdlID0gd2luZG93LklEQktleVJhbmdlIHx8IHdpbmRvdy53ZWJraXRJREJL
ZXlSYW5nZTsiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJJREJLZXlSYW5nZSA9PSBudWxsIik7CisK
KyAgICBuYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOworICAgIGRlc2NyaXB0aW9uID0g
Ik15IFRlc3QgRGF0YWJhc2UiOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIu
b3BlbihuYW1lLCBkZXNjcmlwdGlvbikiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5T
dWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgZGIgPSBldmFsQW5kTG9nKCJkYiA9
IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1
ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB0ZXN0
R3JvdXAxOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiB0ZXN0R3JvdXAxKCkKK3sKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMo
ZGIpOworCisgICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9y
ZSgnZm9vJyk7Iik7CisgICAgZGVidWcoInRlc3QgYWRkLCBrZXkgLTAiKTsKKyAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IG9iamVjdFN0b3JlLmFkZCgneWF5JywgLTApOyIpOwor
ICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdGVzdEdyb3VwMjsKKyAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdGVzdEdyb3VwMigpCit7
CisgICAgZGVidWcoInRlc3QgYWRkLCBrZXkgKzAgKHNob3VsZCBmYWlsKSIpOworICAgIHJlcXVl
c3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gb2JqZWN0U3RvcmUuYWRkKCd5YXknLCArMCk7Iik7
CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOworICAg
IHJlcXVlc3Qub25lcnJvciA9IHRlc3RHcm91cDM7Cit9CisKK2Z1bmN0aW9uIHRlc3RHcm91cDMo
KQoreworICAgIHNob3VsZEJlKCJldmVudC50YXJnZXQuZXJyb3JDb2RlIiwgIndlYmtpdElEQkRh
dGFiYXNlRXhjZXB0aW9uLkNPTlNUUkFJTlRfRVJSIik7CisgICAgZXZhbEFuZExvZygiZXZlbnQu
cHJldmVudERlZmF1bHQoKSIpOworCisgICAgZGVidWcoInRlc3QgZ2V0LCBrZXkgLTAiKTsKKyAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldCgtMCk7Iik7
CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB0ZXN0R3JvdXA0OworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiB0ZXN0R3JvdXA0KCkK
K3sKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAieWF5
Iik7CisKKyAgICBkZWJ1ZygidGVzdCBnZXQsIGtleSArMCIpOworICAgIHJlcXVlc3QgPSBldmFs
QW5kTG9nKCJyZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0KCswKTsiKTsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IHRlc3RHcm91cDU7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHRlc3RHcm91cDUoKQoreworICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJ5YXkiKTsKKworICAgIGRvbmUo
KTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3QoKTsKKworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107358</attachid>
            <date>2011-09-14 11:09:54 -0700</date>
            <delta_ts>2011-09-15 10:54:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110914110953.patch</filename>
            <type>text/plain</type>
            <size>24514</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1MDU2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDkt
MTMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbDogQWRkZWQu
CisgICAgICAgICogTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LXR5cGUtbmVnYXRp
dmUtemVyby1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIExheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2tleS10eXBlLW5lZ2F0aXZlLXplcm8uaHRtbDogQWRkZWQuCisgICAgICAg
ICogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAqIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnkuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuaWRsOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgICogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAqIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAqIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAg
ICAgKiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHA6Cisg
ICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaDoK
KwogMjAxMS0wOS0xMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVtb3ZlIEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QgYXMgaXQgaXMgYSByZXF1aXJlZCBwYXJ0
IG9mIEhUTUw1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiA5NTA1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQyLDcgKzc0Miw3IEBAIElEQkZhY3RvcnkqIERPTVdpbmRvdzo6d2Via2l0SW5kZXhlZERC
KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1faWRiRmFjdG9yeSkKLSAgICAgICAg
bV9pZGJGYWN0b3J5ID0gSURCRmFjdG9yeTo6Y3JlYXRlKHBhZ2UtPmdyb3VwKCkuaWRiRmFjdG9y
eSgpKTsKKyAgICAgICAgbV9pZGJGYWN0b3J5ID0gSURCRmFjdG9yeTo6Y3JlYXRlKHRoaXMtPmRv
Y3VtZW50KCksIHBhZ2UtPmdyb3VwKCkuaWRiRmFjdG9yeSgpKTsKICAgICByZXR1cm4gbV9pZGJG
YWN0b3J5LmdldCgpOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
QmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFz
cyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlCiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SURCQmFja2luZ1N0b3JlKCkge307CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VO
YW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBl
eHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91
bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldElE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCkgPSAwOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDk1MDU1KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCAr
NDcsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkZhY3Rvcnk6OklEQkZhY3Rvcnko
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCi0gICAgOiBtX2ZhY3RvcnlCYWNr
ZW5kKGZhY3RvcnkpCitJREJGYWN0b3J5OjpJREJGYWN0b3J5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQorICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX2ZhY3RvcnlCYWNrZW5kKGZh
Y3RvcnkpCiB7CiAgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZv
cmUgaXQgY2FuIGJlIGFkb3B0ZWQuCiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CkBA
IC01OCwxNCArNTksMzAgQEAgSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQogewogfQogCi1QYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcygpCiB7Ci0gICAg
aWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29y
ayB3aXRoIHdvcmtlcnMuCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9
IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworCisgICAgcmV0dXJu
IG1fZmFjdG9yeUJhY2tlbmQtPmRhdGFiYXNlTmFtZXMoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBh
dGgoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCUXVvdGFCeXRlcygpLCBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZTo6RGVmYXVsdEJhY2tpbmdTdG9yZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCRmFjdG9yeTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAkocmV2aXNpb24gOTUwNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTggKzQ2LDIwIEBAIGNsYXNzIElEQktleVJhbmdlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBJREJG
YWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4geworY2xhc3MgSURCRmFjdG9y
eSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBjcmVhdGUoSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCRmFjdG9yeT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJGYWN0b3J5KGZhY3RvcnkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJGYWN0b3J5KGNvbnRleHQsIGZhY3RvcnkpKTsKICAgICB9CiAgICAgfklEQkZhY3Rv
cnkoKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1Jl
ZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzKCk7CisKKyAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKIHBy
aXZhdGU6Ci0gICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOworICAg
IElEQkZhY3RvcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlKik7CiAKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1fZmFj
dG9yeUJhY2tlbmQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRs
CShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDEyIEBACiBtb2R1bGUgc3RvcmFnZSB7CiAK
ICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisg
ICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIENhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICBdIElEQkZhY3RvcnkgewotICAgICAgICBbQ2FsbFdp
dGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuKGluIERPTVN0cmluZyBu
YW1lKQorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBkYXRhYmFzZU5h
bWVzOworCisgICAgICAgIElEQlJlcXVlc3Qgb3BlbihpbiBET01TdHJpbmcgbmFtZSkKICAgICAg
ICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHJl
dmlzaW9uIDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2Vu
ZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmQKIHsKIH0KIAorCisKIElEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCiB7CiB9CkBAIC04MSw2ICs4MywzOSBAQCB2
b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFjCiAgICAgbV9iYWNraW5nU3Rv
cmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0KIAorUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
LCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUp
Cit7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7
CisKKyAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZp
ZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdTdG9yZVR5cGUpOworCisgICAgLy8gRklY
TUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJl
YWQuCisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAgSURC
QmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZp
bGVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICYm
IChiYWNraW5nU3RvcmVUeXBlID09IGl0Mi0+c2Vjb25kLT5iYWNraW5nU3RvcmVUeXBlKCkpKQor
ICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICBlbHNlIHsKKyAgICAgICAg
aWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gU1FMaXRlQmFja2luZ1N0b3JlKQorICAgICAgICAgICAg
YmFja2luZ1N0b3JlID0gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2lm
IEVOQUJMRShMRVZFTERCKQorICAgICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExl
dmVsREJCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVt
U2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2VuZGlmCisgICAgfQorCisgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
KworICAgIGlmIChiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZm91bmRO
YW1lczsKKyAgICAgICAgYmFja2luZ1N0b3JlLT5nZXREYXRhYmFzZU5hbWVzKGZvdW5kTmFtZXMp
OworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvdW5k
TmFtZXMuYmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsgKytpdCkKKyAgICAgICAgICAg
IGRhdGFiYXNlTmFtZXMtPmFwcGVuZCgqaXQpOworICAgIH0KKworICAgIHJldHVybiBkYXRhYmFz
ZU5hbWVzLnJlbGVhc2UoKTsKK30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFj
a2luZ1N0b3JlVHlwZSkKIHsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHlwZSAhPSBEZWZhdWx0
QmFja2luZ1N0b3JlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuaAkocmV2aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZp
bGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKICAgICB2b2lkIHJlbW92ZUlEQkJhY2tp
bmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKIAorICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6
ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXpl
LCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDk1
MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU1FM
aXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiBkYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3Jl
VHlwZSkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0
b3JlVHlwZSkgPSAwOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NCw2ICsxNjQsMjYgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVs
REJCYQogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwogfQogCit2b2lkIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJhc2VOYW1l
S2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWF4S2V5Rm9yT3JpZ2lu
KG1faWRlbnRpZmllcik7CisKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworCisg
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwor
ICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlz
KGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAgIGNvbnN0IGNo
YXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29uc3QgY2hhciAqbGltaXQgPSBp
dC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgRGF0YWJhc2VOYW1lS2V5IGRhdGFiYXNlTmFtZUtl
eTsKKyAgICAgICAgcCA9IERhdGFiYXNlTmFtZUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YWJh
c2VOYW1lS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisgICAgICAgIGZvdW5kTmFtZXMuYXBw
ZW5kKGRhdGFiYXNlTmFtZUtleS5kYXRhYmFzZU5hbWUoKSk7CisgICAgfQorfQorCiBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpCiB7CiAg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRl
bnRpZmllciwgbmFtZSk7CkBAIC0yMTcsNiArMjM3LDExIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3QKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVN
YXhLZXkoZGF0YWJhc2VJZCk7CiAKKyAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZEtleVBhdGhz
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0b0luY3JlbWVudEZsYWdzLmlzRW1wdHko
KSk7CisKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJh
dG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29t
cGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAgICAg
Y29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwpAQCAtNTY5LDYgKzU5NCwxMSBAQCB2
b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5k
ZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAw
KTsKIAorICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE5h
bWVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOworCiAgICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNl
ZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3Rv
cEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5
KCkuYmVnaW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4o
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBpbnQ2NF90IG1heGltdW1T
aXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwq
KTsKICAgICB2aXJ0dWFsIH5JREJMZXZlbERCQmFja2luZ1N0b3JlKCk7CiAKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CiAgICAg
dmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwg
Ym9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAJKHJldmlzaW9u
IDk1MDU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzk5LDYgKzc5OSwxNyBAQCBWZWN0b3I8Y2hhcj4gRGF0YWJhc2VO
YW1lS2V5OjplbmNvZGUoY29uCiAgICAgcmV0dXJuIHJldDsKIH0KIAorVmVjdG9yPGNoYXI+IERh
dGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
KQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAiIik7Cit9CisKK1ZlY3RvcjxjaGFyPiBE
YXRhYmFzZU5hbWVLZXk6OmVuY29kZU1heEtleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdp
bikKK3sKKyAgICAvLyBqdXN0IGFmdGVyIG9yaWdpbiBpbiBjb2xsYXRpb24gb3JkZXIKKyAgICBy
ZXR1cm4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG9yaWdpbiArICJceDAxIik7Cit9CisKIGludCBE
YXRhYmFzZU5hbWVLZXk6OmNvbXBhcmUoY29uc3QgRGF0YWJhc2VOYW1lS2V5JiBvdGhlcikKIHsK
ICAgICBpZiAoaW50IHggPSBjb2RlUG9pbnRDb21wYXJlKG1fb3JpZ2luLCBvdGhlci5tX29yaWdp
bikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAkocmV2
aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2Rpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBAIGNsYXNzIERhdGFiYXNlTmFtZUtl
eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBz
dGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYXNlTmFtZUtleSogcmVzdWx0KTsKICAgICBz
dGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUpOworICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5
Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZU1heEtleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbik7CiAgICAgU3RyaW5n
IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAgICAgU3RyaW5nIGRhdGFiYXNl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VOYW1lOyB9CiAgICAgaW50IGNvbXBhcmUo
Y29uc3QgRGF0YWJhc2VOYW1lS2V5JiBvdGhlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiA5NTA1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk3LDYgKzE5NywyMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
SURCU1FMaXRlQmFjCiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CiB9CiAKK3Zv
aWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKQoreworICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2Vz
Iik7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxl
IChxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KQorICAgICAgICBmb3VuZE5hbWVzLmFwcGVu
ZChxdWVyeS5nZXRDb2x1bW5UZXh0KDApKTsKK30KKwogYm9vbCBJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OmV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5n
JiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50
IGRhdGFiYXNlUXVlcnkobV9kYiwgIlNFTEVDVCBpZCwgdmVyc2lvbiBGUk9NIERhdGFiYXNlcyBX
SEVSRSBuYW1lID0gPyIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNR
TGl0ZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3Bl
bihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4aW11
bVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1w
bCopOwogICAgIHZpcnR1YWwgfklEQlNRTGl0ZUJhY2tpbmdTdG9yZSgpOwogCisgICAgdmlydHVh
bCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAg
IHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFs
IGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAkocmV2
aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0
b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
U1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAorICAgIHZpcnR1YWwgV2ViRE9NU3RyaW5nTGlz
dCBkYXRhYmFzZU5hbWVzKGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFj
a2luZ1N0b3JlVHlwZSkKKyAgICB7CisgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgIHJldHVybiBXZWJET01TdHJpbmdMaXN0KCk7CisgICAgfQorCiAgICAgLy8gVGhl
IFdlYktpdCBpbXBsZW1lbnRhdGlvbiBvZiBvcGVuIGlnbm9yZXMgdGhlIFdlYkZyYW1lKiBwYXJh
bWV0ZXIuCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJ
REJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3Qg
V2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tp
bmdTdG9yZVR5cGUpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwCShyZXZpc2lvbiA5NTA1NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBA
QCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojp+SURCRmFjdG9yeUJhY2tlCiB7CiB9CiAKK1Bhc3NS
ZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6ZGF0
YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5n
U3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3Jp
Z2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1w
bDo6ZnJvbUZyYW1lKGZyYW1lKTsKKworICAgIHJldHVybiBtX3dlYklEQkZhY3RvcnktPmRhdGFi
YXNlTmFtZXMob3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0YXRpY19j
YXN0PFdlYklEQkZhY3Rvcnk6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsK
K30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwg
aW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQog
ewogICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAko
cmV2aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5
QmFja2VuZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
PiBjcmVhdGUoKTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlcyh2b2lkKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gZGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdT
dG9yZVR5cGUpOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0
X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAkocmV2
aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDMzIEBAIFdlYklEQkZhY3RvcnlJ
bXBsOjp+V2ViSURCRmFjdG9yeUltcGwoKQogewogfQogCisKK1dlYkRPTVN0cmluZ0xpc3QgV2Vi
SURCRmFjdG9yeUltcGw6OmRhdGFiYXNlTmFtZXMoY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9y
aWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcg
bG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQorewor
ICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsKKworICAgIGlmIChvdmVycmlkZGVuQmFja2lu
Z1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3JlKSB7CisgICAgICAgIC8vIEJhY2tpbmcg
c3RvcmUgdHlwZSBvdmVycmlkZGVuIGJ5IExheW91dFRlc3RDb250cm9sbGVyLgorICAgICAgICBi
YWNraW5nU3RvcmVUeXBlID0gb3ZlcnJpZGRlbkJhY2tpbmdTdG9yZVR5cGU7CisgICAgfQorCisg
ICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gRGVmYXVsdEJhY2tpbmdTdG9yZSkKKyAgICAgICAg
YmFja2luZ1N0b3JlVHlwZSA9IExldmVsREJCYWNraW5nU3RvcmU7CisKKyAgICBpZiAoZGF0YURp
ci5pc0VtcHR5KCkgJiYgYmFja2luZ1N0b3JlVHlwZSA9PSBMZXZlbERCQmFja2luZ1N0b3JlKSB7
CisgICAgICAgIGlmICghdGVtcERhdGFiYXNlRm9sZGVyLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgLy8gTGF5b3V0IHRlc3RzIHByb3ZpZGUgYSB0ZW1wb3JhcnkgZm9sZGVyLgorICAgICAgICAg
ICAgcGF0aCA9IHRlbXBEYXRhYmFzZUZvbGRlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIEZvciBpbmNvZ25pdG8gbW9kZSwgZmFsbCBiYWNrIHRvIFNRTGl0ZS4KKyAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBTUUxpdGVCYWNraW5nU3RvcmU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5QmFja2VuZC0+ZGF0YWJhc2VOYW1lcyhvcmln
aW4sIDAsIHBhdGgsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOworfQorCisKIHZv
aWQgV2ViSURCRmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJD
YWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2Vi
RnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhp
bXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQogewogICAgIFdlYlN0
cmluZyBwYXRoID0gZGF0YURpcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkZhY3RvcnlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRmFjdG9yeUltcGwuaAkocmV2aXNpb24gOTUwNTUpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw3IEBAIHB1YmxpYzoKICAgICBXZWJJREJGYWN0b3J5SW1wbCgpOwogICAgIHZpcnR1YWwg
fldlYklEQkZhY3RvcnlJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIFdlYkRPTVN0cmluZ0xpc3QgZGF0
YWJhc2VOYW1lcyhjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2Vi
U3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdT
dG9yZVR5cGUpOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
V2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNv
bnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBC
YWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2lj
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3QgdGhlIGJh
c2ljcyBvZiBJbmRleGVkREIncyBJREJGYWN0b3J5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5k
ZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlz
IGZhbHNlCitpbmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikKK1BBU1MgaW5kZXhlZERC
LmRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNz
JykgaXMgdHJ1ZQorUEFTUyBpbmRleGVkREIuZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJB
U0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVu
Y3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIGJh
c2ljcyBvZiBJbmRleGVkREIncyBJREJGYWN0b3J5LiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4
ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5k
b3cubW96SW5kZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxs
Iik7CisKKyAgICBuYW1lID0gJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJzsKKyAg
ICBkZXNjcmlwdGlvbiA9ICJNeSBUZXN0IERhdGFiYXNlIjsKKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygiaW5kZXhlZERCLm9wZW4obmFtZSwgZGVzY3JpcHRpb24pIik7CisgICAgcmVxdWVzdC5v
bnN1Y2Nlc3MgPSBvcGVuU3VjY2VzczsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQoreworICAgIHNob3Vs
ZEJlVHJ1ZSgiaW5kZXhlZERCLmRhdGFiYXNlTmFtZXMuY29udGFpbnMoJyIgKyBuYW1lICsgIicp
Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCLmRhdGFiYXNlTmFtZXMuY29udGFpbnMo
J0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOworCisgICAgLy8gVE9ETzogdGVzdCBp
bmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKQorICAgIC8vIFRPRE86IHRlc3Qg
aW5kZXhlZERCLmNtcChrZXkxLCBrZXkyKQorICAgIGRvbmUoKTsKK30KKwordGVzdCgpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107510</attachid>
            <date>2011-09-15 10:54:24 -0700</date>
            <delta_ts>2011-09-15 11:11:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110915105423.patch</filename>
            <type>text/plain</type>
            <size>34386</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1MTEx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDkt
MTMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbDogQWRkZWQu
CisgICAgICAgICogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAq
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnkuaWRsOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgICogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgICogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAqIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAg
ICAgICAqIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHku
aDoKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1w
bC5jcHA6CisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9y
eUltcGwuaDoKKwogMjAxMS0wOS0xMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIEVOQUJMRV9TVkdfVVNFIGFzIDx1c2U+IGlzIHJlcXVpcmVkIGJ5IEhU
TUw1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OElEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIlY4SURCQW55LmgiCiAKICNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJWOERPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJW
OElEQkN1cnNvci5oIgogI2luY2x1ZGUgIlY4SURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAjaW5jbHVk
ZSAiVjhJREJEYXRhYmFzZS5oIgpAQCAtNjksNiArNzAsOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChJREJBbnkqIGltcGwpCiAgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYk9iamVj
dFN0b3JlKCkpOwogICAgIGNhc2UgSURCQW55OjpJREJUcmFuc2FjdGlvblR5cGU6CiAgICAgICAg
IHJldHVybiB0b1Y4KGltcGwtPmlkYlRyYW5zYWN0aW9uKCkpOworICAgIGNhc2UgSURCQW55OjpE
T01TdHJpbmdMaXN0VHlwZToKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+ZG9tU3RyaW5nTGlz
dCgpKTsKICAgICBjYXNlIElEQkFueTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZToKICAgICAg
ICAgcmV0dXJuIGltcGwtPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDk1MTExKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NDIsNyArNzQyLDcgQEAgSURCRmFjdG9yeSogRE9NV2luZG93Ojp3ZWJraXRJbmRleGVkREIoKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9pZGJGYWN0b3J5KQotICAgICAgICBtX2lk
YkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkp
OworICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUodGhpcy0+ZG9jdW1l
bnQoKSwgcGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkpOwogICAgIHJldHVybiBtX2lkYkZhY3Rv
cnkuZ2V0KCk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAJKHJl
dmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBJREJBbnkKICAgICByZXR1cm4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7CiB9CiAK
K1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkKK3sKKyAg
ICBBU1NFUlQobV90eXBlID09IERPTVN0cmluZ0xpc3RUeXBlKTsKKyAgICByZXR1cm4gbV9kb21T
dHJpbmdMaXN0OworfQorCiB2b2lkIElEQkFueTo6c2V0TnVsbCgpCiB7CiAgICAgQVNTRVJUKG1f
dHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKQEAgLTE4Miw2ICsxODgsMTMgQEAgdm9pZCBJREJBbnk6
OnNldChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTYwogICAgIG1fc2VyaWFsaXplZFNjcmlwdFZhbHVl
ID0gdmFsdWU7CiB9CiAKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1f
dHlwZSA9IERPTVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9tU3RyaW5nTGlzdCA9IHZhbHVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJBbnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkFueS5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
QW55LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3MgSURCQ3Vyc29yOwogY2xhc3MgSURC
Q3Vyc29yV2l0aFZhbHVlOwogY2xhc3MgSURCRGF0YWJhc2U7CkBAIC03NSw2ICs3Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgSURCS2V5VHlwZSwKICAgICAgICAgSURCT2JqZWN0U3RvcmVUeXBlLAog
ICAgICAgICBJREJUcmFuc2FjdGlvblR5cGUsCisgICAgICAgIERPTVN0cmluZ0xpc3RUeXBlLAog
ICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlCiAgICAgfTsKIApAQCAtODgsNiArOTAs
NyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgpOwogICAgIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CiAgICAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAgICBQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IGRvbVN0cmluZ0xpc3QoKTsKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAKICAgICAvLyBTZXQgY2FuIG9ubHkgYmUg
Y2FsbGVkIG9uY2UuCkBAIC0xMDAsNiArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0KFBh
c3NSZWZQdHI8SURCS2V5Pik7CiAgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4pOwogICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+KTsKKyAgICB2b2lk
IHNldChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKICAgICB2b2lkIHNldChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwogCiBwcml2YXRlOgpAQCAtMTE2LDYgKzEyMCw3IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPElEQktleT4gbV9pZGJLZXk7CiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
bV9pZGJUcmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9kb21TdHJpbmdM
aXN0OwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSURCQmFja2lu
Z1N0b3JlIDogcHVibGljIFJlZkNvdW50ZQogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkJhY2tp
bmdTdG9yZSgpIHt9OwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwg
aW50NjRfdCYgZm91bmRJZCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDYWxsYmFja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPElEQktleT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpID0gMDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkZhY3Rvcnk6OklEQkZhY3RvcnkoSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCi0gICAgOiBtX2ZhY3RvcnlCYWNrZW5kKGZhY3Rvcnkp
CitJREJGYWN0b3J5OjpJREJGYWN0b3J5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQorICAgIDogQWN0aXZlRE9NT2Jq
ZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX2ZhY3RvcnlCYWNrZW5kKGZhY3RvcnkpCiB7CiAg
ICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJl
IGFkb3B0ZWQuCiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CkBAIC01OCwxNCArNTks
MzEgQEAgSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQogewogfQogCi1QYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcygpCiB7Ci0gICAgaWYgKCFjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNE
b2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtl
cnMuCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAg
IGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKKyAgICBHcm91cFNldHRp
bmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRp
bmdzKCk7CisgICAgbV9mYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGlu
Z3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJRdW90
YUJ5dGVzKCksIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpEZWZhdWx0QmFja2luZ1N0b3Jl
KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJG
YWN0b3J5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUo
KSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOCArNDYsMjAg
QEAgY2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKLWNsYXNzIElEQkZhY3RvcnkgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJGYWN0b3J5PiB7CitjbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJl
ZkNvdW50ZWQ8SURCRmFjdG9yeT4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSogZmFjdG9yeSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UqIGZhY3RvcnkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElE
QkZhY3RvcnkoZmFjdG9yeSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkZhY3Rv
cnkoY29udGV4dCwgZmFjdG9yeSkpOwogICAgIH0KICAgICB+SURCRmFjdG9yeSgpOwogCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGdldERhdGFiYXNlTmFtZXMoKTsKKworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKLSAgICBJ
REJGYWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKik7CisgICAgSURCRmFjdG9yeShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqKTsKIAog
ICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gbV9mYWN0b3J5QmFja2VuZDsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwJKHJldmlzaW9uIDk1
MTExKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOSArMjYsMTIgQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFj
ZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dAogICAgIF0gSURCRmFjdG9yeSB7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVj
dXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAg
IElEQlJlcXVlc3QgZ2V0RGF0YWJhc2VOYW1lcygpOworCisgICAgICAgIElEQlJlcXVlc3Qgb3Bl
bihpbiBET01TdHJpbmcgbmFtZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw4IEBAIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmQKIHsK
IH0KIAorCisKIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgp
CiB7CiB9CkBAIC04MSw2ICs4Myw0MyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVt
b3ZlSURCQmFjCiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsK
IH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
c2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1h
eGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgQVNT
RVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7CisKKyAgICBjb25z
dCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlP
cmlnaW4uZ2V0KCksIGJhY2tpbmdTdG9yZVR5cGUpOworCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhp
bmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisKKyAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAgSURCQmFja2luZ1N0b3Jl
TWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVy
KTsKKyAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICYmIChiYWNraW5nU3Rv
cmVUeXBlID09IGl0Mi0+c2Vjb25kLT5iYWNraW5nU3RvcmVUeXBlKCkpKQorICAgICAgICBiYWNr
aW5nU3RvcmUgPSBpdDItPnNlY29uZDsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGJhY2tpbmdT
dG9yZVR5cGUgPT0gU1FMaXRlQmFja2luZ1N0b3JlKQorICAgICAgICAgICAgYmFja2luZ1N0b3Jl
ID0gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRh
RGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2lmIEVOQUJMRShMRVZF
TERCKQorICAgICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5n
U3RvcmUpCisgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlk
ZW50aWZpZXIsIHRoaXMpOworI2VuZGlmCisgICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7Cisg
ICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBkYXRhYmFzZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisKKyAgICBp
ZiAoYmFja2luZ1N0b3JlKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXM7Cisg
ICAgICAgIGJhY2tpbmdTdG9yZS0+Z2V0RGF0YWJhc2VOYW1lcyhmb3VuZE5hbWVzKTsKKyAgICAg
ICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb3VuZE5hbWVzLmJl
Z2luKCk7IGl0ICE9IGZvdW5kTmFtZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBkYXRhYmFz
ZU5hbWVzLT5hcHBlbmQoKml0KTsKKyAgICB9CisKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyhk
YXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7Cit9CisKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVU
eXBlIGJhY2tpbmdTdG9yZVR5cGUpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0g
RGVmYXVsdEJhY2tpbmdTdG9yZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3Ry
aW5nJiBmaWxlSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlKik7CiAgICAgdm9pZCByZW1vdmVJ
REJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50
NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisKICAgICB2aXJ0dWFsIHZvaWQg
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2
NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAorICAgIHZpcnR1YWwgdm9p
ZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1h
eGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90
IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHJldmlz
aW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCwyNiBAQCBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhCiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxl
YXNlKCk7CiB9CiAKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1l
cyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RhcnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihtX2lkZW50
aWZpZXIpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VOYW1lS2V5
OjplbmNvZGVTdG9wS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7CisKKyAgICBBU1NFUlQoZm91
bmROYW1lcy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBt
X2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+
aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4
dCgpKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAg
ICAgY29uc3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgRGF0YWJh
c2VOYW1lS2V5IGRhdGFiYXNlTmFtZUtleTsKKyAgICAgICAgcCA9IERhdGFiYXNlTmFtZUtleTo6
ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YWJhc2VOYW1lS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOwor
CisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKGRhdGFiYXNlTmFtZUtleS5kYXRhYmFzZU5hbWUo
KSk7CisgICAgfQorfQorCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFi
YXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CkBAIC0yMTcsNiArMjM3LDEx
IEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3QKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgMSwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CiAKKyAgICBBU1NFUlQo
Zm91bmRJZHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChmb3VuZEtleVBhdGhzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0
b0luY3JlbWVudEZsYWdzLmlzRW1wdHkoKSk7CisKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhzdGFydEtl
eSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7
IGl0LT5uZXh0KCkpIHsKICAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigp
OwpAQCAtNTY5LDYgKzU5NCwxMSBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElu
ZGV4ZXMoCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKIAorICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5
KCkpOworICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5k
S2V5UGF0aHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5
KCkpOworCiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVy
YXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNv
bXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CiAgICAgICAg
IGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5NTExMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBh
dGhCYXNlLCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVy
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKICAgICB2aXJ0dWFsIH5JREJMZXZlbERCQmFja2lu
Z1N0b3JlKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3Ry
aW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3Qm
IGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9v
bCBpbnZhbGlkUm93SWQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJDb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkNvZGluZy5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk5LDYgKzc5OSwxNyBA
QCBWZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUoY29uCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAorVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAi
Iik7Cit9CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCit7CisgICAgLy8ganVzdCBhZnRlciBvcmlnaW4g
aW4gY29sbGF0aW9uIG9yZGVyCisgICAgcmV0dXJuIGVuY29kZU1pbktleUZvck9yaWdpbihvcmln
aW4gKyAiXHgwMSIpOworfQorCiBpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERh
dGFiYXNlTmFtZUtleSYgb3RoZXIpCiB7CiAgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFy
ZShtX29yaWdpbiwgb3RoZXIubV9vcmlnaW4pKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQ29kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQ29kaW5nLmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQ29kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYs
OCBAQCBjbGFzcyBEYXRhYmFzZU5hbWVLZXkgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFz
ZU5hbWVLZXkqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoY29uc3Qg
U3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGNoYXI+IGVuY29kZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbik7
CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVTdG9wS2V5Rm9yT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luKTsKICAgICBTdHJpbmcgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmln
aW47IH0KICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFz
ZU5hbWU7IH0KICAgICBpbnQgY29tcGFyZShjb25zdCBEYXRhYmFzZU5hbWVLZXkmIG90aGVyKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTUxMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzQsNiArMjM0LDEzIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQ
dHI8SUQKICAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwogfQogCit2b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmlu
Z0xpc3QpCit7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051
bGwoKSAmJiAhbV9yZXN1bHQpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZG9tU3Ry
aW5nTGlzdCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwog
dm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkKIHsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYm
IG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTc4LDYgKzc5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNz
UmVmUHRyPElEQktleT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2aXJ0dWFsIHZvaWQg
b25CbG9ja2VkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFj
a2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNR
TGl0ZUJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcs
NiArMTk3LDIwIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJTUUxpdGVCYWMKICAg
ICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKIH0KIAordm9pZCBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCit7
CisgICAgQVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RiLCAiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMiKTsKKyAgICBpZiAocXVl
cnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9
PSBTUUxSZXN1bHRSb3cpCisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKHF1ZXJ5LmdldENvbHVt
blRleHQoMCkpOworfQorCiBib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZXh0cmFjdElEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwg
aW50NjRfdCYgZm91bmRJZCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YWJhc2VRdWVyeSht
X2RiLCAiU0VMRUNUIGlkLCB2ZXJzaW9uIEZST00gRGF0YWJhc2VzIFdIRVJFIG5hbWUgPSA/Iik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3Jl
LmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2lu
KiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3Ry
aW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgdmlydHVh
bCB+SURCU1FMaXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJh
c2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGV4
dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3Vu
ZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAkocmV2aXNpb24gOTUxMTEp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBXZWJJREJLZXk7CiBjbGFzcyBXZWJJ
REJJbmRleDsKIGNsYXNzIFdlYklEQk9iamVjdFN0b3JlOwogY2xhc3MgV2ViSURCVHJhbnNhY3Rp
b247CitjbGFzcyBXZWJET01TdHJpbmdMaXN0OwogY2xhc3MgV2ViU2VyaWFsaXplZFNjcmlwdFZh
bHVlOwogCiBjbGFzcyBXZWJJREJDYWxsYmFja3MgewpAQCAtNTAsNiArNTEsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJJREJEYXRhYmFzZSopIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBX
ZWJJREJLZXkmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoV2ViSURCVHJhbnNhY3Rpb24qKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoY29uc3QgV2ViRE9NU3RyaW5n
TGlzdCYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2Vzcyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSB7IFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAg
fTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRh
dGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkg
eyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIC8vIFRoZSBXZWJLaXQgaW1w
bGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSogcGFyYW1ldGVyLgogICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tz
KiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYg
ZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
KSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCShyZXZpc2lvbiA5NTEx
MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTEgQEAgdm9pZCBJREJDYWxsYmFja3NQcm94eTo6
b25TdWNjZXNzKFBhc3NSZQogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobmV3IFdlYklEQlRy
YW5zYWN0aW9uSW1wbChiYWNrZW5kKSk7CiB9CiAKK3ZvaWQgSURCQ2FsbGJhY2tzUHJveHk6Om9u
U3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCit7CisgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcyhXZWJET01TdHJpbmdMaXN0KGRvbVN0cmluZ0xpc3QpKTsK
K30KKwogdm9pZCBJREJDYWxsYmFja3NQcm94eTo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCiB7CiAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUoc2VyaWFsaXplZFNjcmlwdFZh
bHVlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNr
c1Byb3h5LmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCQ2FsbGJhY2tzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+
KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlPik7CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
MjAgQEAgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6fklEQkZhY3RvcnlCYWNrZQogewogfQogCit2
b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3Jp
Z2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIFdlYlNlY3Vy
aXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUg
PSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CisgICAgV2ViVmlld0ltcGwqIHdlYlZp
ZXcgPSB3ZWJGcmFtZS0+dmlld0ltcGwoKTsKKyAgICAvLyBGSVhNRTogZW5zdXJlIGJsYW5rIG5h
bWUgaXMgbm90IHByb2JsZW1hdGljCisgICAgaWYgKHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQo
KSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0luZGV4ZWREQih3ZWJGcmFt
ZSwgIiIsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFi
YXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0
YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJGYWN0b3J5
LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9y
aWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxXZWJJREJG
YWN0b3J5OjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7Cit9CisKIHZvaWQg
SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBy
cE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4
aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKICAgICBXZWJT
ZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgJKHJldmlzaW9uIDk1
MTExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gY3JlYXRlKCk7
CiAgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwogCi0gICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpET01TdHJpbmdMaXN0PiBkYXRhYmFzZXModm9pZCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9y
ZVR5cGUpOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3Qg
bWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5jcHAJKHJl
dmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJh
Y2tzSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25CYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJXZWJET01TdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiV2ViSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUVycm9yLmgiCkBAIC03OSw2ICs4MCwxMSBAQCB2b2lk
IFdlYklEQkNhbGxiYWNrc0ltcGw6Om9uU3VjY2VzcyhXZWJJCiAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKHdlYktp
dEluc3RhbmNlKSkpOwogfQogCit2b2lkIFdlYklEQkNhbGxiYWNrc0ltcGw6Om9uU3VjY2Vzcyhj
b25zdCBXZWJET01TdHJpbmdMaXN0JiBkb21TdHJpbmdMaXN0KQoreworICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoZG9tU3RyaW5nTGlzdCk7Cit9CisKIHZvaWQgV2ViSURCQ2FsbGJhY2tzSW1w
bDo6b25TdWNjZXNzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2VyaWFsaXplZFNj
cmlwdFZhbHVlKQogewogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc2VyaWFsaXplZFNjcmlw
dFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNr
c0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJD
YWxsYmFja3NJbXBsLmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFdlYklEQkRhdGFiYXNlKik7
CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJJREJLZXkmKTsKICAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzKFdlYklEQlRyYW5zYWN0aW9uKik7CisgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2Vzcyhjb25zdCBXZWJET01TdHJpbmdMaXN0Jik7CiAgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2Vzcyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgb25CbG9ja2VkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkZhY3RvcnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJGYWN0b3J5SW1wbC5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw2ICs3MSwzMyBAQCBXZWJJREJGYWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIHsK
IH0KIAorCit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgV2ViU3Ry
aW5nIHBhdGggPSBkYXRhRGlyOworCisgICAgaWYgKG92ZXJyaWRkZW5CYWNraW5nU3RvcmVUeXBl
ICE9IERlZmF1bHRCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgLy8gQmFja2luZyBzdG9yZSB0eXBl
IG92ZXJyaWRkZW4gYnkgTGF5b3V0VGVzdENvbnRyb2xsZXIuCisgICAgICAgIGJhY2tpbmdTdG9y
ZVR5cGUgPSBvdmVycmlkZGVuQmFja2luZ1N0b3JlVHlwZTsKKyAgICB9CisKKyAgICBpZiAoYmFj
a2luZ1N0b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQorICAgICAgICBiYWNraW5nU3Rv
cmVUeXBlID0gTGV2ZWxEQkJhY2tpbmdTdG9yZTsKKworICAgIGlmIChkYXRhRGlyLmlzRW1wdHko
KSAmJiBiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUpIHsKKyAgICAgICAg
aWYgKCF0ZW1wRGF0YWJhc2VGb2xkZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBMYXlv
dXQgdGVzdHMgcHJvdmlkZSBhIHRlbXBvcmFyeSBmb2xkZXIuCisgICAgICAgICAgICBwYXRoID0g
dGVtcERhdGFiYXNlRm9sZGVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRm9y
IGluY29nbml0byBtb2RlLCBmYWxsIGJhY2sgdG8gU1FMaXRlLgorICAgICAgICAgICAgYmFja2lu
Z1N0b3JlVHlwZSA9IFNRTGl0ZUJhY2tpbmdTdG9yZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1faWRiRmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6
OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBwYXRoLCBtYXhpbXVtU2l6
ZSwgc3RhdGljX2Nhc3Q8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5
cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKK30KKworCiB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpv
cGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNv
bnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5n
JiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKICAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgJ
KHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFj
dG9yeUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiAgICAg
V2ViSURCRmFjdG9yeUltcGwoKTsKICAgICB2aXJ0dWFsIH5XZWJJREJGYWN0b3J5SW1wbCgpOwog
CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
ciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcm
IGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlw
ZSk7CiAKIHByaXZhdGU6CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0
b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoZSBiYXNpY3Mgb2YgSW5kZXhl
ZERCJ3MgSURCRmFjdG9yeS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4
ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5k
b3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQoraW5kZXhl
ZERCLm9wZW4obmFtZSwgZGVzY3JpcHRpb24pCitpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygp
CitkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyBkYXRhYmFzZU5hbWVz
LmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIHRydWUKK1BB
U1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcp
IGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWJhc2ljcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIGJhc2ljcyBvZiBJbmRleGVkREIncyBJREJG
YWN0b3J5LiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIg
fHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAg
IHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICBuYW1lID0gJ3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJzsKKyAgICBkZXNjcmlwdGlvbiA9ICJNeSBUZXN0
IERhdGFiYXNlIjsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4obmFt
ZSwgZGVzY3JpcHRpb24pIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvcGVuU3VjY2VzczsK
KyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVu
Y3Rpb24gb3BlblN1Y2Nlc3MoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVk
REIuZ2V0RGF0YWJhc2VOYW1lcygpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXREYXRh
YmFzZU5hbWVzU3VjY2VzczsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MoKQoreworICAg
IHZhciBkYXRhYmFzZU5hbWVzOworICAgIGV2YWxBbmRMb2coImRhdGFiYXNlTmFtZXMgPSBldmVu
dC50YXJnZXQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVUcnVlKCJkYXRhYmFzZU5hbWVzLmNvbnRh
aW5zKCciICsgbmFtZSArICInKSIpOworICAgIHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMu
Y29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOworCisgICAgLy8gRklY
TUU6IHRlc3QgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkKKyAgICAvLyBG
SVhNRTogdGVzdCBpbmRleGVkREIuY21wKGtleTEsIGtleTIpCisgICAgZG9uZSgpOworfQorCit0
ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107513</attachid>
            <date>2011-09-15 11:11:52 -0700</date>
            <delta_ts>2011-09-15 17:28:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110915111151.patch</filename>
            <type>text/plain</type>
            <size>35414</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1MjAx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDkt
MTUgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIC4uLy4uL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogLi4vLi4vTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mu
aHRtbDogQWRkZWQuCisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJBbnkuY3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQW55Lmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNh
bGxiYWNrcy5oOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5jcHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5Lmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmlkbDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogLi4vLi4vU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoK
KyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2Rpbmcu
Y3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNv
ZGluZy5oOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVz
dC5jcHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
Lmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNr
aW5nU3RvcmUuY3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
U1FMaXRlQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAqIC4uLy4uL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcDoKKyAgICAgICAg
KiAuLi8uLi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5oOgor
ICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuY3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcDoKKyAgICAgICAgKiAuLi8uLi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmg6CisgICAgICAg
ICogLi4vLi4vU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3Bw
OgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3Rv
cnlJbXBsLmg6CisKIDIwMTEtMDktMTQgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9w
ZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XSBSZXBsYWNlIFFUX0dDQ19YIGFzIHRoZXkgZG9u
J3QgZXhpc3QgaW4gUXQ1IGFueW1vcmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9uIDk1MTExKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlY4SURCQW55LmgiCiAK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJWOERPTVN0cmlu
Z0xpc3QuaCIKICNpbmNsdWRlICJWOElEQkN1cnNvci5oIgogI2luY2x1ZGUgIlY4SURCQ3Vyc29y
V2l0aFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhJREJEYXRhYmFzZS5oIgpAQCAtNjksNiArNzAsOCBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChJREJBbnkqIGltcGwpCiAgICAgICAgIHJldHVy
biB0b1Y4KGltcGwtPmlkYk9iamVjdFN0b3JlKCkpOwogICAgIGNhc2UgSURCQW55OjpJREJUcmFu
c2FjdGlvblR5cGU6CiAgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYlRyYW5zYWN0aW9uKCkp
OworICAgIGNhc2UgSURCQW55OjpET01TdHJpbmdMaXN0VHlwZToKKyAgICAgICAgcmV0dXJuIHRv
VjgoaW1wbC0+ZG9tU3RyaW5nTGlzdCgpKTsKICAgICBjYXNlIElEQkFueTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlVHlwZToKICAgICAgICAgcmV0dXJuIGltcGwtPnNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSgpLT5kZXNlcmlhbGl6ZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NDIsNyArNzQyLDcgQEAgSURCRmFjdG9yeSogRE9NV2luZG93
Ojp3ZWJraXRJbmRleGVkREIoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9pZGJG
YWN0b3J5KQotICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+
Z3JvdXAoKS5pZGJGYWN0b3J5KCkpOworICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5
OjpjcmVhdGUodGhpcy0+ZG9jdW1lbnQoKSwgcGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkpOwog
ICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0KCk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkFueS5jcHAJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJBbnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJBbnkKICAgICByZXR1cm4gbV9zZXJpYWxp
emVkU2NyaXB0VmFsdWU7CiB9CiAKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpk
b21TdHJpbmdMaXN0KCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IERPTVN0cmluZ0xpc3RUeXBl
KTsKKyAgICByZXR1cm4gbV9kb21TdHJpbmdMaXN0OworfQorCiB2b2lkIElEQkFueTo6c2V0TnVs
bCgpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKQEAgLTE4Miw2ICsx
ODgsMTMgQEAgdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTYwogICAgIG1f
c2VyaWFsaXplZFNjcmlwdFZhbHVlID0gdmFsdWU7CiB9CiAKK3ZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVu
ZGVmaW5lZFR5cGUpOworICAgIG1fdHlwZSA9IERPTVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9t
U3RyaW5nTGlzdCA9IHZhbHVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3Mg
SURCQ3Vyc29yOwogY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlOwogY2xhc3MgSURCRGF0YWJhc2U7
CkBAIC03NSw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgSURCS2V5VHlwZSwKICAgICAgICAg
SURCT2JqZWN0U3RvcmVUeXBlLAogICAgICAgICBJREJUcmFuc2FjdGlvblR5cGUsCisgICAgICAg
IERPTVN0cmluZ0xpc3RUeXBlLAogICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlCiAg
ICAgfTsKIApAQCAtODgsNiArOTAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+
IGlkYktleSgpOwogICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3Jl
KCk7CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAg
ICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QoKTsKICAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAKICAg
ICAvLyBTZXQgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCkBAIC0xMDAsNiArMTAzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCS2V5Pik7CiAgICAgdm9pZCBzZXQoUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4pOwogICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+KTsKKyAgICB2b2lkIHNldChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKICAg
ICB2b2lkIHNldChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwogCiBwcml2YXRl
OgpAQCAtMTE2LDYgKzEyMCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQktleT4gbV9pZGJL
ZXk7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOwogICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gbV9pZGJUcmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gbV9kb21TdHJpbmdMaXN0OwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG1fc2VyaWFsaXplZFNjcmlwdFZhbHVlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2
LDcgQEAgY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZQogcHVibGljOgog
ICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OwogCisgICAgdmlydHVhbCB2b2lkIGdl
dERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpID0gMDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oCShyZXZpc2lvbiA5NTExMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgSURCQ2FsbGJhY2tzX2gKICNkZWZpbmUgSURCQ2Fs
bGJhY2tzX2gKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgpAQCAtNTIsNiArNTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NS
ZWZQdHI8SURCS2V5PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgPSAwOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmNwcAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRmFjdG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSkKLSAgICA6IG1fZmFjdG9yeUJhY2tlbmQoZmFjdG9y
eSkKK0lEQkZhY3Rvcnk6OklEQkZhY3RvcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnkpCisgICAgOiBBY3RpdmVET01P
YmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fZmFjdG9yeUJhY2tlbmQoZmFjdG9yeSkKIHsK
ICAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4g
YmUgYWRvcHRlZC4KICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTU4LDE0ICs1
OSwzMSBAQCBJREJGYWN0b3J5Ojp+SURCRmFjdG9yeSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKCkKIHsKLSAgICBpZiAoIWNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0RvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29y
a2Vycy4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cisg
ICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOworICAgIEdyb3VwU2V0
dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0
dGluZ3MoKTsKKyAgICBtX2ZhY3RvcnlCYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3Qs
IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0
aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQlF1
b3RhQnl0ZXMoKSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkRlZmF1bHRCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkZhY3Rvcnk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRoIHdvcmtlcnMuCisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFt
ZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgJKHJldmlzaW9uIDk1MTExKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0Niwy
MCBAQCBjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotY2xhc3MgSURCRmFjdG9yeSA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKK2NsYXNzIElEQkZhY3RvcnkgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJGYWN0b3J5PiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gY3JlYXRlKElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3Rvcnk+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSogZmFjdG9yeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCRmFjdG9yeShmYWN0b3J5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFj
dG9yeShjb250ZXh0LCBmYWN0b3J5KSk7CiAgICAgfQogICAgIH5JREJGYWN0b3J5KCk7CiAKLSAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gZ2V0RGF0YWJhc2VOYW1lcygpOworCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgotICAg
IElEQkZhY3RvcnkoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICBJREJGYWN0b3J5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOwog
CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3RvcnlCYWNrZW5k
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAkocmV2aXNpb24g
OTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw5ICsyNiwxMiBAQAogbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJm
YWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgICAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0CiAgICAgXSBJREJGYWN0b3J5IHsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbihpbiBET01TdHJpbmcgbmFtZSkKKyAgICAg
ICAgSURCUmVxdWVzdCBnZXREYXRhYmFzZU5hbWVzKCk7CisKKyAgICAgICAgSURCUmVxdWVzdCBv
cGVuKGluIERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4
Y2VwdGlvbik7CiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDggQEAgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2VuZAog
ewogfQogCisKKwogSURCRmFjdG9yeUJhY2tlbmRJbXBsOjp+SURCRmFjdG9yeUJhY2tlbmRJbXBs
KCkKIHsKIH0KQEAgLTgxLDYgKzgzLDQzIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpy
ZW1vdmVJREJCYWMKICAgICBtX2JhY2tpbmdTdG9yZU1hcC5yZW1vdmUoZmlsZUlkZW50aWZpZXIp
OwogfQogCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3Qg
bWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sKKyAgICBB
U1NFUlQoYmFja2luZ1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3JlKTsKKworICAgIGNv
bnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0
eU9yaWdpbi5nZXQoKSwgYmFja2luZ1N0b3JlVHlwZSk7CisKKyAgICAvLyBGSVhNRTogRXZlcnl0
aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBJREJCYWNraW5nU3Rv
cmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZp
ZXIpOworICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkgJiYgKGJhY2tpbmdT
dG9yZVR5cGUgPT0gaXQyLT5zZWNvbmQtPmJhY2tpbmdTdG9yZVR5cGUoKSkpCisgICAgICAgIGJh
Y2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgIGVsc2UgeworICAgICAgICBpZiAoYmFja2lu
Z1N0b3JlVHlwZSA9PSBTUUxpdGVCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBiYWNraW5nU3Rv
cmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRh
dGFEaXIsIG1heGltdW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisjaWYgRU5BQkxFKExF
VkVMREIpCisgICAgICAgIGVsc2UgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tp
bmdTdG9yZSkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1TaXplLCBmaWxl
SWRlbnRpZmllciwgdGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKworICAg
IGlmIChiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lczsK
KyAgICAgICAgYmFja2luZ1N0b3JlLT5nZXREYXRhYmFzZU5hbWVzKGZvdW5kTmFtZXMpOworICAg
ICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvdW5kTmFtZXMu
YmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGRhdGFi
YXNlTmFtZXMtPmFwcGVuZCgqaXQpOworICAgIH0KKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9y
ZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHlwZSAh
PSBEZWZhdWx0QmFja2luZ1N0b3JlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBT
dHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKICAgICB2b2lkIHJlbW92
ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBp
bnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKwogICAgIHZpcnR1YWwgdm9p
ZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGlu
dDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDggQEAgcHVi
bGljOgogICAgICAgICBTUUxpdGVCYWNraW5nU3RvcmUKICAgICB9OwogCisgICAgdmlydHVhbCB2
b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3Qg
bWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0
X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpID0gMDsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2
aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDI2IEBAIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmEKICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJl
bGVhc2UoKTsKIH0KIAordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdGFydEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRl
bnRpZmllcik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU5hbWVL
ZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKKworICAgIEFTU0VSVChm
b3VuZE5hbWVzLmlzRW1wdHkoKSk7CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9
IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0
LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5u
ZXh0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOworICAg
ICAgICBjb25zdCBjaGFyICpsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKKworICAgICAgICBEYXRh
YmFzZU5hbWVLZXkgZGF0YWJhc2VOYW1lS2V5OworICAgICAgICBwID0gRGF0YWJhc2VOYW1lS2V5
OjpkZWNvZGUocCwgbGltaXQsICZkYXRhYmFzZU5hbWVLZXkpOworICAgICAgICBBU1NFUlQocCk7
CisKKyAgICAgICAgZm91bmROYW1lcy5hcHBlbmQoZGF0YWJhc2VOYW1lS2V5LmRhdGFiYXNlTmFt
ZSgpKTsKKyAgICB9Cit9CisKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdElE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lv
biwgaW50NjRfdCYgZm91bmRJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0
YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKQEAgLTIxNyw2ICsyMzcs
MTEgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdAogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCAxLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkKTsKIAorICAgIEFTU0VS
VChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmRB
dXRvSW5jcmVtZW50RmxhZ3MuaXNFbXB0eSgpKTsKKwogICAgIE93blB0cjxMZXZlbERCSXRlcmF0
b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0
S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwg
MDsgaXQtPm5leHQoKSkgewogICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2lu
KCk7CkBAIC01NjksNiArNTk0LDExIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
SW5kZXhlcygKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCk7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCArIDEsIDAsIDApOwogCisgICAgQVNTRVJUKGZvdW5kSWRzLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91
bmRLZXlQYXRocy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZFVuaXF1ZUZsYWdzLmlzRW1w
dHkoKSk7CisKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0
ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYg
Y29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKICAgICAg
ICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDk1MTEx
KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
cGF0aEJhc2UsIGludDY0X3QgbWF4aW11bVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZp
ZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwogICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNr
aW5nU3RvcmUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxT
dHJpbmc+JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRf
dCYgZm91bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBi
b29sIGludmFsaWRSb3dJZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmNwcAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJDb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTksNiArNzk5LDE3
IEBAIFZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShjb24KICAgICByZXR1cm4g
cmV0OwogfQogCitWZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCit7CisgICAgcmV0dXJuIGVuY29kZShvcmlnaW4s
ICIiKTsKK30KKworVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlU3RvcEtleUZv
ck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikKK3sKKyAgICAvLyBqdXN0IGFmdGVyIG9yaWdp
biBpbiBjb2xsYXRpb24gb3JkZXIKKyAgICByZXR1cm4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG9y
aWdpbiArICJceDAxIik7Cit9CisKIGludCBEYXRhYmFzZU5hbWVLZXk6OmNvbXBhcmUoY29uc3Qg
RGF0YWJhc2VOYW1lS2V5JiBvdGhlcikKIHsKICAgICBpZiAoaW50IHggPSBjb2RlUG9pbnRDb21w
YXJlKG1fb3JpZ2luLCBvdGhlci5tX29yaWdpbikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJDb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJDb2RpbmcuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJDb2RpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzEx
Niw4IEBAIGNsYXNzIERhdGFiYXNlTmFtZUtleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFi
YXNlTmFtZUtleSogcmVzdWx0KTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShjb25z
dCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpOworICAgIHN0YXRp
YyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
KTsKKyAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZVN0b3BLZXlGb3JPcmlnaW4oY29uc3Qg
U3RyaW5nJiBvcmlnaW4pOwogICAgIFN0cmluZyBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbjsgfQogICAgIFN0cmluZyBkYXRhYmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFi
YXNlTmFtZTsgfQogICAgIGludCBjb21wYXJlKGNvbnN0IERhdGFiYXNlTmFtZUtleSYgb3RoZXIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCShyZXZpc2lvbiA5NTEx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw2ICsyMzQsMTMgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxJRAogICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7CiB9CiAKK3Zv
aWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3Ry
aW5nTGlzdCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpICYmICFtX3Jlc3VsdCk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShkb21T
dHJpbmdMaXN0KTsKKyAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOworfQor
CiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQogewogICAgIEFTU0VSVCghbV9lcnJvckNvZGUg
JiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCUmVxdWVzdC5oCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNzgsNiAr
NzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCS2V5Pik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1
Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3Vj
Y2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwogICAgIHZpcnR1YWwgdm9p
ZCBvbkJsb2NrZWQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
U1FMaXRlQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Nyw2ICsxOTcsMjAgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQlNRTGl0ZUJhYwog
ICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwogfQogCit2b2lkIElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykK
K3sKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworCisgICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1QgbmFtZSBGUk9NIERhdGFiYXNlcyIpOworICAgIGlmIChx
dWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAocXVlcnkuc3RlcCgp
ID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgZm91bmROYW1lcy5hcHBlbmQocXVlcnkuZ2V0Q29s
dW1uVGV4dCgwKSk7Cit9CisKIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpleHRyYWN0SURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9u
LCBpbnQ2NF90JiBmb3VuZElkKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5
KG1fZGIsICJTRUxFQ1QgaWQsIHZlcnNpb24gRlJPTSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8i
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3Rv
cmUuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0
ZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBT
dHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKICAgICB2aXJ0
dWFsIH5JREJTUUxpdGVCYWNraW5nU3RvcmUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZXREYXRh
YmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJvb2wg
ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZv
dW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24s
IGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCShyZXZpc2lvbiA5NTEx
MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFdlYklEQktleTsKIGNsYXNzIFdl
YklEQkluZGV4OwogY2xhc3MgV2ViSURCT2JqZWN0U3RvcmU7CiBjbGFzcyBXZWJJREJUcmFuc2Fj
dGlvbjsKK2NsYXNzIFdlYkRPTVN0cmluZ0xpc3Q7CiBjbGFzcyBXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWU7CiAKIGNsYXNzIFdlYklEQkNhbGxiYWNrcyB7CkBAIC01MCw2ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFdlYklEQkRhdGFiYXNlKikgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0
IFdlYklEQktleSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhXZWJJREJUcmFuc2FjdGlvbiopIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJET01TdHJp
bmdMaXN0JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgICAgICBTUUxpdGVCYWNraW5nU3RvcmUKICAg
ICB9OwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tz
KiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYg
ZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
KSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgLy8gVGhlIFdlYktpdCBp
bXBsZW1lbnRhdGlvbiBvZiBvcGVuIGlnbm9yZXMgdGhlIFdlYkZyYW1lKiBwYXJhbWV0ZXIuCiAg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFj
a3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5n
JiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAJKHJldmlzaW9uIDk1
MTExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMSBAQCB2b2lkIElEQkNhbGxiYWNrc1Byb3h5
OjpvblN1Y2Nlc3MoUGFzc1JlCiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhuZXcgV2ViSURC
VHJhbnNhY3Rpb25JbXBsKGJhY2tlbmQpKTsKIH0KIAordm9pZCBJREJDYWxsYmFja3NQcm94eTo6
b25TdWNjZXNzKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCkKK3sKKyAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFdlYkRPTVN0cmluZ0xpc3QoZG9tU3RyaW5nTGlzdCkp
OworfQorCiB2b2lkIElEQkNhbGxiYWNrc1Byb3h5OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkKIHsKICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShzZXJpYWxpemVkU2NyaXB0
VmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJh
Y2tzUHJveHkuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJDYWxsYmFja3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlz
dD4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuY3BwCShyZXZpc2lvbiA5NTExMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCwyMCBAQCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojp+SURCRmFjdG9yeUJhY2tlCiB7CiB9CiAK
K3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBP
cmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgV2ViU2Vj
dXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFt
ZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2Vi
VmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIC8vIEZJWE1FOiBlbnN1cmUgYmxhbmsg
bmFtZSBpcyBub3QgcHJvYmxlbWF0aWMKKyAgICBpZiAod2ViVmlldy0+cGVybWlzc2lvbkNsaWVu
dCgpICYmICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhlZERCKHdlYkZy
YW1lLCAiIiwgb3JpZ2luKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoV2ViSURCRGF0
YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBk
YXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3dlYklEQkZhY3Rv
cnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwg
b3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PFdlYklE
QkZhY3Rvcnk6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKK30KKwogdm9p
ZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
cHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBt
YXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQogewogICAgIFdl
YlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAkocmV2aXNpb24g
OTUxMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUo
KTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CiAKLSAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlcyh2b2lkKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0
b3JlVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRf
dCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAko
cmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxs
YmFja3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZ0xpc3QuaCIK
ICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZS5o
IgogI2luY2x1ZGUgIldlYklEQkRhdGFiYXNlRXJyb3IuaCIKQEAgLTc5LDYgKzgwLDExIEBAIHZv
aWQgV2ViSURCQ2FsbGJhY2tzSW1wbDo6b25TdWNjZXNzKFdlYkkKICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUoYWRvcHRQdHIod2Vi
S2l0SW5zdGFuY2UpKSk7CiB9CiAKK3ZvaWQgV2ViSURCQ2FsbGJhY2tzSW1wbDo6b25TdWNjZXNz
KGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmIGRvbVN0cmluZ0xpc3QpCit7CisgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2Vzcyhkb21TdHJpbmdMaXN0KTsKK30KKwogdm9pZCBXZWJJREJDYWxsYmFja3NJ
bXBsOjpvblN1Y2Nlc3MoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzZXJpYWxpemVk
U2NyaXB0VmFsdWUpCiB7CiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzZXJpYWxpemVkU2Ny
aXB0VmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJh
Y2tzSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoV2ViSURCRGF0YWJhc2Uq
KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYklEQktleSYpOwogICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoV2ViSURCVHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBvbkJsb2NrZWQoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCRmFjdG9yeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDYgKzcxLDMzIEBAIFdlYklEQkZhY3RvcnlJbXBsOjp+V2ViSURCRmFjdG9yeUltcGwoKQog
ewogfQogCisKK3ZvaWQgV2ViSURCRmFjdG9yeUltcGw6OmdldERhdGFiYXNlTmFtZXMoV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdl
YkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4
aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sKKyAgICBXZWJT
dHJpbmcgcGF0aCA9IGRhdGFEaXI7CisKKyAgICBpZiAob3ZlcnJpZGRlbkJhY2tpbmdTdG9yZVR5
cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSkgeworICAgICAgICAvLyBCYWNraW5nIHN0b3JlIHR5
cGUgb3ZlcnJpZGRlbiBieSBMYXlvdXRUZXN0Q29udHJvbGxlci4KKyAgICAgICAgYmFja2luZ1N0
b3JlVHlwZSA9IG92ZXJyaWRkZW5CYWNraW5nU3RvcmVUeXBlOworICAgIH0KKworICAgIGlmIChi
YWNraW5nU3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3RvcmUpCisgICAgICAgIGJhY2tpbmdT
dG9yZVR5cGUgPSBMZXZlbERCQmFja2luZ1N0b3JlOworCisgICAgaWYgKGRhdGFEaXIuaXNFbXB0
eSgpICYmIGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tpbmdTdG9yZSkgeworICAgICAg
ICBpZiAoIXRlbXBEYXRhYmFzZUZvbGRlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIExh
eW91dCB0ZXN0cyBwcm92aWRlIGEgdGVtcG9yYXJ5IGZvbGRlci4KKyAgICAgICAgICAgIHBhdGgg
PSB0ZW1wRGF0YWJhc2VGb2xkZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBG
b3IgaW5jb2duaXRvIG1vZGUsIGZhbGwgYmFjayB0byBTUUxpdGUuCisgICAgICAgICAgICBiYWNr
aW5nU3RvcmVUeXBlID0gU1FMaXRlQmFja2luZ1N0b3JlOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJREJDYWxsYmFja3NQcm94
eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgsIG1heGltdW1T
aXplLCBzdGF0aWNfY2FzdDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3Jl
VHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOworfQorCisKIHZvaWQgV2ViSURCRmFjdG9yeUltcGw6
Om9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJp
bmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3Jl
VHlwZSBiYWNraW5nU3RvcmVUeXBlKQogewogICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwu
aAkocmV2aXNpb24gOTUxMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJG
YWN0b3J5SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICBXZWJJREJGYWN0b3J5SW1wbCgpOwogICAgIHZpcnR1YWwgfldlYklEQkZhY3RvcnlJbXBsKCk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRh
RGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwog
ICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVU
eXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2Zh
Y3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhlIGJhc2ljcyBvZiBJbmRl
eGVkREIncyBJREJGYWN0b3J5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5k
ZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdp
bmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCitpbmRl
eGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikKK2luZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVz
KCkKK2RhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIGRhdGFiYXNlTmFt
ZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgdHJ1ZQor
UEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNU
JykgaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2lj
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktYmFzaWNzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgYmFzaWNzIG9mIEluZGV4ZWREQidzIElE
QkZhY3RvcnkuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSAKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKworZnVuY3Rpb24gdGVzdCgpCit7
CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWRE
QiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7Cisg
ICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsKKworICAgIG5hbWUgPSAnc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnOworICAgIGRlc2NyaXB0aW9uID0gIk15IFRl
c3QgRGF0YWJhc2UiOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3Blbihu
YW1lLCBkZXNjcmlwdGlvbikiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNz
OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitm
dW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4
ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldERh
dGFiYXNlTmFtZXNTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzcygpCit7Cisg
ICAgdmFyIGRhdGFiYXNlTmFtZXM7CisgICAgZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoImRhdGFiYXNlTmFtZXMuY29u
dGFpbnMoJyIgKyBuYW1lICsgIicpIik7CisgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VOYW1l
cy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CisKKyAgICAvLyBG
SVhNRTogdGVzdCBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKQorICAgIC8v
IEZJWE1FOiB0ZXN0IGluZGV4ZWREQi5jbXAoa2V5MSwga2V5MikKKyAgICBkb25lKCk7Cit9CisK
K3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107569</attachid>
            <date>2011-09-15 17:29:01 -0700</date>
            <delta_ts>2011-09-19 15:21:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110915172900.patch</filename>
            <type>text/plain</type>
            <size>37950</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1MjQw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDkt
MTUgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbDogQWRkZWQu
CisgICAgICAgICogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHA6Cisg
ICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwOgorICAgICAgICAqIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55Lmg6CisgICAgICAgICogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5jcHA6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
Lmg6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbDoKKyAg
ICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
aDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmg6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxl
dmVsREJDb2RpbmcuY3BwOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkNvZGluZy5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVz
dC5jcHA6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0Lmg6Cisg
ICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3Bw
OgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3Jl
Lmg6CisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJh
Y2tzLmg6CisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFj
dG9yeS5oOgorICAgICAgICAqIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNr
c1Byb3h5LmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxs
YmFja3NQcm94eS5oOgorICAgICAgICAqIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAqIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmg6CisgICAgICAgICogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAgICAqIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmg6CisKIDIwMTEtMDkt
MTUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBFTkFC
TEUoU1ZHX0FTX0lNQUdFKSBzaW5jZSBhbGwgbWFqb3IgcG9ydHMgaGF2ZSBpdCBvbiBieSBkZWZh
dWx0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OElEQkFueUN1c3RvbS5jcHAJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIlY4SURCQW55LmgiCiAKICNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJWOERPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJW
OElEQkN1cnNvci5oIgogI2luY2x1ZGUgIlY4SURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAjaW5jbHVk
ZSAiVjhJREJEYXRhYmFzZS5oIgpAQCAtNjksNiArNzAsOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChJREJBbnkqIGltcGwpCiAgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYk9iamVj
dFN0b3JlKCkpOwogICAgIGNhc2UgSURCQW55OjpJREJUcmFuc2FjdGlvblR5cGU6CiAgICAgICAg
IHJldHVybiB0b1Y4KGltcGwtPmlkYlRyYW5zYWN0aW9uKCkpOworICAgIGNhc2UgSURCQW55OjpE
T01TdHJpbmdMaXN0VHlwZToKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+ZG9tU3RyaW5nTGlz
dCgpKTsKICAgICBjYXNlIElEQkFueTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZToKICAgICAg
ICAgcmV0dXJuIGltcGwtPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDk1MjQwKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NDIsNyArNzQyLDcgQEAgSURCRmFjdG9yeSogRE9NV2luZG93Ojp3ZWJraXRJbmRleGVkREIoKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9pZGJGYWN0b3J5KQotICAgICAgICBtX2lk
YkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkp
OworICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUodGhpcy0+ZG9jdW1l
bnQoKSwgcGFnZS0+Z3JvdXAoKS5pZGJGYWN0b3J5KCkpOwogICAgIHJldHVybiBtX2lkYkZhY3Rv
cnkuZ2V0KCk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAJKHJl
dmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBJREJBbnkKICAgICByZXR1cm4gbV9zZXJpYWxpemVkU2NyaXB0VmFsdWU7CiB9CiAK
K1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkKK3sKKyAg
ICBBU1NFUlQobV90eXBlID09IERPTVN0cmluZ0xpc3RUeXBlKTsKKyAgICByZXR1cm4gbV9kb21T
dHJpbmdMaXN0OworfQorCiB2b2lkIElEQkFueTo6c2V0TnVsbCgpCiB7CiAgICAgQVNTRVJUKG1f
dHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKQEAgLTE4Miw2ICsxODgsMTMgQEAgdm9pZCBJREJBbnk6
OnNldChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTYwogICAgIG1fc2VyaWFsaXplZFNjcmlwdFZhbHVl
ID0gdmFsdWU7CiB9CiAKK3ZvaWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IFVuZGVmaW5lZFR5cGUpOworICAgIG1f
dHlwZSA9IERPTVN0cmluZ0xpc3RUeXBlOworICAgIG1fZG9tU3RyaW5nTGlzdCA9IHZhbHVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJBbnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkFueS5oCShyZXZpc2lvbiA5NTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
QW55LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3MgSURCQ3Vyc29yOwogY2xhc3MgSURC
Q3Vyc29yV2l0aFZhbHVlOwogY2xhc3MgSURCRGF0YWJhc2U7CkBAIC03NSw2ICs3Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgSURCS2V5VHlwZSwKICAgICAgICAgSURCT2JqZWN0U3RvcmVUeXBlLAog
ICAgICAgICBJREJUcmFuc2FjdGlvblR5cGUsCisgICAgICAgIERPTVN0cmluZ0xpc3RUeXBlLAog
ICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlCiAgICAgfTsKIApAQCAtODgsNiArOTAs
NyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgpOwogICAgIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CiAgICAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKKyAgICBQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IGRvbVN0cmluZ0xpc3QoKTsKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAKICAgICAvLyBTZXQgY2FuIG9ubHkgYmUg
Y2FsbGVkIG9uY2UuCkBAIC0xMDAsNiArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0KFBh
c3NSZWZQdHI8SURCS2V5Pik7CiAgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4pOwogICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+KTsKKyAgICB2b2lk
IHNldChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKICAgICB2b2lkIHNldChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwogCiBwcml2YXRlOgpAQCAtMTE2LDYgKzEyMCw3IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPElEQktleT4gbV9pZGJLZXk7CiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBtX2lkYk9iamVjdFN0b3JlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
bV9pZGJUcmFuc2FjdGlvbjsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9kb21TdHJpbmdM
aXN0OwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCShyZXZpc2lvbiA5NTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSURCQmFja2lu
Z1N0b3JlIDogcHVibGljIFJlZkNvdW50ZQogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkJhY2tp
bmdTdG9yZSgpIHt9OwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwg
aW50NjRfdCYgZm91bmRJZCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDYWxsYmFja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oCShyZXZpc2lvbiA5NTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
Zm5kZWYgSURCQ2FsbGJhY2tzX2gKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAorI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURC
RGF0YWJhc2VFcnJvci5oIgpAQCAtNTIsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4pID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25CbG9j
a2VkKCkgPSAwOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAko
cmV2aXNpb24gOTUyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSURCRmFjdG9yeTo6SURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFj
dG9yeSkKLSAgICA6IG1fZmFjdG9yeUJhY2tlbmQoZmFjdG9yeSkKK0lEQkZhY3Rvcnk6OklEQkZh
Y3RvcnkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UqIGZhY3RvcnkpCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykK
KyAgICAsIG1fZmFjdG9yeUJhY2tlbmQoZmFjdG9yeSkKIHsKICAgICAvLyBXZSBwYXNzIGEgcmVm
ZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KICAgICByZWxh
eEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKQEAgLTU4LDE0ICs1OSwzMSBAQCBJREJGYWN0b3J5Ojp+
SURCRmFjdG9yeSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6
b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5Ojpn
ZXREYXRhYmFzZU5hbWVzKCkKIHsKLSAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHx8ICFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsg
d2l0aCB3b3JrZXJzLgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CisgICAg
R3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCku
Z3JvdXBTZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMo
cmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBn
cm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSwgZ3JvdXBTZXR0aW5ncy0+aW5k
ZXhlZERCUXVvdGFCeXRlcygpLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6RGVmYXVsdEJh
Y2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCRmFjdG9yeTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHx8ICFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPnBh
Z2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5oCShyZXZpc2lvbiA5NTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOCArNDYsMjAgQEAgY2xhc3MgSURCS2V5UmFu
Z2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKIGNsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CiAKLWNsYXNzIElEQkZhY3RvcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJG
YWN0b3J5PiB7CitjbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9y
eT4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9y
eSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3Rvcnkp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkZhY3RvcnkoZmFjdG9yeSkp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkZhY3RvcnkoY29udGV4dCwgZmFjdG9y
eSkpOwogICAgIH0KICAgICB+SURCRmFjdG9yeSgpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldERhdGFiYXNlTmFt
ZXMoKTsKKworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKLSAgICBJREJGYWN0b3J5KElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlKik7CisgICAgSURCRmFjdG9yeShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqKTsKIAogICAgIFJlZlB0cjxJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZT4gbV9mYWN0b3J5QmFja2VuZDsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYs
MTIgQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRp
dGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRB
QkFTRSwKKyAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dAogICAgIF0gSURC
RmFjdG9yeSB7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJS
ZXF1ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAgIElEQlJlcXVlc3QgZ2V0RGF0
YWJhc2VOYW1lcygpOworCisgICAgICAgIElEQlJlcXVlc3Qgb3BlbihpbiBET01TdHJpbmcgbmFt
ZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmQKIHsKIH0KIAorCisKIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCiB7CiB9CkBAIC04MSw2ICs4
MywyNiBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFjCiAgICAgbV9i
YWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0KIAordm9pZCBJREJGYWN0
b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5n
U3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5
cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGly
LCBtYXhpbXVtU2l6ZSwgYmFja2luZ1N0b3JlVHlwZSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUp
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZGF0YWJh
c2VOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4g
Zm91bmROYW1lczsKKyAgICBiYWNraW5nU3RvcmUtPmdldERhdGFiYXNlTmFtZXMoZm91bmROYW1l
cyk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb3VuZE5h
bWVzLmJlZ2luKCk7IGl0ICE9IGZvdW5kTmFtZXMuZW5kKCk7ICsraXQpCisgICAgICAgIGRhdGFi
YXNlTmFtZXMtPmFwcGVuZCgqaXQpOworCisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJh
c2VOYW1lcy5yZWxlYXNlKCkpOworfQorCiB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBi
YWNraW5nU3RvcmVUeXBlKQogewogICAgIEFTU0VSVChiYWNraW5nU3RvcmVUeXBlICE9IERlZmF1
bHRCYWNraW5nU3RvcmUpOwpAQCAtOTQsOCArMTE2LDYgQEAgdm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6Om9wZW4oY29uc3QgUwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJl
YWQuCi0KICNpZiBFTkFCTEUoTEVWRUxEQikKICAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBM
ZXZlbERCQmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGJvb2wgaGFzU1FMQmFja2luZ1N0b3JlID0g
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoc2VjdXJpdHlPcmlnaW4u
Z2V0KCksIG5hbWUsIGRhdGFEaXIpOwpAQCAtMTEyLDYgKzEzMiwyNSBAQCB2b2lkIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTCiAgICAgfQogI2VuZGlmCiAKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5
T3JpZ2luLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgYmFja2luZ1N0b3JlVHlwZSk7CisgICAgaWYg
KCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5h
bCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNl
dCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworfQorCitQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0
b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2lu
Z1N0b3JlVHlwZSkKK3sKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFj
a2luZ1N0b3JlKTsKKworICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVG
aWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSwgYmFja2luZ1N0b3JlVHlwZSk7CisK
KyAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBh
bm90aGVyIHRocmVhZC4KKwogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZTsKICAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3Jl
TWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwogICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVN
YXAuZW5kKCkgJiYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gaXQyLT5zZWNvbmQtPmJhY2tpbmdTdG9y
ZVR5cGUoKSkpCkBAIC0xMjMsMTUgKzE2MiwxMiBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6b3Blbihjb25zdCBTCiAgICAgICAgIGVsc2UgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2
ZWxEQkJhY2tpbmdTdG9yZSkKICAgICAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1T
aXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFiYWNraW5n
U3RvcmUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJy
b3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgfQogCi0gICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAg
ICBpZiAoYmFja2luZ1N0b3JlKQorICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2Uo
KTsKKworICAgIHJldHVybiAwOwogfQogCiAjaWYgRU5BQkxFKExFVkVMREIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHJldmlzaW9u
IDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTAgKzU1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5n
U3RvcmUqKTsKICAgICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZp
bGVJZGVudGlmaWVyKTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVU
eXBlKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
KTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKKyAgICBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNr
aW5nU3RvcmVUeXBlKTsKICAgICBib29sIG1pZ3JhdGVGcm9tU1FMaXRlVG9MZXZlbERCKGNvbnN0
IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGlu
dDY0X3QgbWF4aW11bVNpemUpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJKHJl
dmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZXRE
YXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDk1
MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCwyNiBAQCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gSURCTGV2ZWxEQkJhCiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7
CiB9CiAKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcyhWZWN0
b3I8U3RyaW5nPiYgZm91bmROYW1lcykKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRL
ZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihtX2lkZW50aWZpZXIp
OworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNv
ZGVTdG9wS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7CisKKyAgICBBU1NFUlQoZm91bmROYW1l
cy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5j
cmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxp
ZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7
CisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29u
c3QgY2hhciAqbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgRGF0YWJhc2VOYW1l
S2V5IGRhdGFiYXNlTmFtZUtleTsKKyAgICAgICAgcCA9IERhdGFiYXNlTmFtZUtleTo6ZGVjb2Rl
KHAsIGxpbWl0LCAmZGF0YWJhc2VOYW1lS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworCisgICAg
ICAgIGZvdW5kTmFtZXMuYXBwZW5kKGRhdGFiYXNlTmFtZUtleS5kYXRhYmFzZU5hbWUoKSk7Cisg
ICAgfQorfQorCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0
X3QmIGZvdW5kSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFt
ZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CkBAIC0yMTcsNiArMjM3LDExIEBAIHZv
aWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3QKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgMSwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CiAKKyAgICBBU1NFUlQoZm91bmRJ
ZHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFT
U0VSVChmb3VuZEtleVBhdGhzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kQXV0b0luY3Jl
bWVudEZsYWdzLmlzRW1wdHkoKSk7CisKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9
IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0
LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5u
ZXh0KCkpIHsKICAgICAgICAgY29uc3QgY2hhciAqcCA9IGl0LT5rZXkoKS5iZWdpbigpOwpAQCAt
NTY5LDYgKzU5NCwxMSBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMo
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQgKyAxLCAwLCAwKTsKIAorICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0
aHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOwor
CiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigp
OwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVL
ZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CiAgICAgICAgIGNvbnN0
IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5NTI0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNl
LCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJG
YWN0b3J5QmFja2VuZEltcGwqKTsKICAgICB2aXJ0dWFsIH5JREJMZXZlbERCQmFja2luZ1N0b3Jl
KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYg
Zm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5k
SWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZh
bGlkUm93SWQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJDb2Rp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkNv
ZGluZy5jcHAJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk5LDYgKzc5OSwxNyBAQCBWZWN0
b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUoY29uCiAgICAgcmV0dXJuIHJldDsKIH0K
IAorVmVjdG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luKQoreworICAgIHJldHVybiBlbmNvZGUob3JpZ2luLCAiIik7Cit9
CisKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW4pCit7CisgICAgLy8ganVzdCBhZnRlciBvcmlnaW4gaW4gY29s
bGF0aW9uIG9yZGVyCisgICAgcmV0dXJuIGVuY29kZU1pbktleUZvck9yaWdpbihvcmlnaW4gKyAi
XHgwMSIpOworfQorCiBpbnQgRGF0YWJhc2VOYW1lS2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNl
TmFtZUtleSYgb3RoZXIpCiB7CiAgICAgaWYgKGludCB4ID0gY29kZVBvaW50Q29tcGFyZShtX29y
aWdpbiwgb3RoZXIubV9vcmlnaW4pKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQ29kaW5nLmgJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQ29kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsOCBAQCBj
bGFzcyBEYXRhYmFzZU5hbWVLZXkgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBk
ZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVL
ZXkqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoY29uc3QgU3RyaW5n
JiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKKyAgICBzdGF0aWMgVmVjdG9y
PGNoYXI+IGVuY29kZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbik7CisgICAg
c3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVTdG9wS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luKTsKICAgICBTdHJpbmcgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0K
ICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZU5hbWU7
IH0KICAgICBpbnQgY29tcGFyZShjb25zdCBEYXRhYmFzZU5hbWVLZXkmIG90aGVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTUyNDApCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzQsNiArMjM0LDEzIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SUQK
ICAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwogfQogCit2b2lkIElEQlJl
cXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3Qp
Cit7CisgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAm
JiAhbV9yZXN1bHQpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZG9tU3RyaW5nTGlz
dCk7CisgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKK30KKwogdm9pZCBJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSkKIHsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJy
b3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlJlcXVlc3QuaAkocmV2aXNpb24gOTUyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5j
bHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTc4LDYgKzc5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlPik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PElEQktleT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25CbG9j
a2VkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJh
Y2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3
LDIwIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJTUUxpdGVCYWMKICAgICByZXR1
cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKIH0KIAordm9pZCBJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OmdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCit7CisgICAg
QVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RiLCAiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMiKTsKKyAgICBpZiAocXVlcnkucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9PSBTUUxS
ZXN1bHRSb3cpCisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKHF1ZXJ5LmdldENvbHVtblRleHQo
MCkpOworfQorCiBib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZXh0cmFjdElEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRf
dCYgZm91bmRJZCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YWJhc2VRdWVyeShtX2RiLCAi
U0VMRUNUIGlkLCB2ZXJzaW9uIEZST00gRGF0YWJhc2VzIFdIRVJFIG5hbWUgPSA/Iik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgJKHJl
dmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5n
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBm
aWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgdmlydHVhbCB+SURC
U1FMaXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNp
b24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAkocmV2aXNpb24gOTUyNDApCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFzcyBXZWJJREJLZXk7CiBjbGFzcyBXZWJJREJJbmRl
eDsKIGNsYXNzIFdlYklEQk9iamVjdFN0b3JlOwogY2xhc3MgV2ViSURCVHJhbnNhY3Rpb247Citj
bGFzcyBXZWJET01TdHJpbmdMaXN0OwogY2xhc3MgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOwog
CiBjbGFzcyBXZWJJREJDYWxsYmFja3MgewpAQCAtNTAsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJJREJEYXRhYmFzZSopIHsgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJJREJL
ZXkmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoV2ViSURCVHJhbnNhY3Rpb24qKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYp
IHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3Vj
Y2Vzcyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQkZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJJREJGYWN0b3J5LmgJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2
ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIs
IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIC8vIFRoZSBXZWJLaXQgaW1wbGVtZW50
YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSogcGFyYW1ldGVyLgogICAgIHZpcnR1
YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
ciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCShyZXZpc2lvbiA5NTI0MCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsNiArODQsMTEgQEAgdm9pZCBJREJDYWxsYmFja3NQcm94eTo6b25TdWNj
ZXNzKFBhc3NSZQogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobmV3IFdlYklEQlRyYW5zYWN0
aW9uSW1wbChiYWNrZW5kKSk7CiB9CiAKK3ZvaWQgSURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2Vz
cyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCit7CisgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcyhXZWJET01TdHJpbmdMaXN0KGRvbVN0cmluZ0xpc3QpKTsKK30KKwog
dm9pZCBJREJDYWxsYmFja3NQcm94eTo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCiB7CiAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUoc2VyaWFsaXplZFNjcmlwdFZhbHVlKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5
LmgJKHJldmlzaW9uIDk1MjQwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2Fs
bGJhY2tzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXk+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+KTsKICAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlPik7CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmNwcAkocmV2aXNpb24gOTUyNDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMjAgQEAg
SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6fklEQkZhY3RvcnlCYWNrZQogewogfQogCit2b2lkIElE
QkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwg
QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIFdlYlNlY3VyaXR5T3Jp
Z2luIG9yaWdpbihwcnBPcmlnaW4pOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJG
cmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CisgICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSB3
ZWJGcmFtZS0+dmlld0ltcGwoKTsKKworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50
KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJh
bWUsICJEYXRhYmFzZSBMaXN0aW5nIiwgb3JpZ2luKSkgeworICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24g
dG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3dlYklEQkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0
YXRpY19jYXN0PFdlYklEQkZhY3Rvcnk6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5
cGUpKTsKK30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0
YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVU
eXBlKQogewogICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuaAkocmV2aXNpb24gOTUyNDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGUoKTsKICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZFByb3h5KCk7
CiAKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlcyh2b2lk
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdl
YkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+
LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxs
YmFja3NJbXBsLmNwcAkocmV2aXNpb24gOTUyNDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJLZXkuaCIK
ICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIldlYkRP
TVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJX
ZWJJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIldlYklEQkRhdGFiYXNlRXJyb3IuaCIKQEAgLTc5
LDYgKzgwLDExIEBAIHZvaWQgV2ViSURCQ2FsbGJhY2tzSW1wbDo6b25TdWNjZXNzKFdlYkkKICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVh
dGUoYWRvcHRQdHIod2ViS2l0SW5zdGFuY2UpKSk7CiB9CiAKK3ZvaWQgV2ViSURCQ2FsbGJhY2tz
SW1wbDo6b25TdWNjZXNzKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmIGRvbVN0cmluZ0xpc3QpCit7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhkb21TdHJpbmdMaXN0KTsKK30KKwogdm9pZCBX
ZWJJREJDYWxsYmFja3NJbXBsOjpvblN1Y2Nlc3MoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCiB7CiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhzZXJpYWxpemVkU2NyaXB0VmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gOTUyNDApCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
V2ViSURCRGF0YWJhc2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYklE
QktleSYpOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoV2ViSURCVHJhbnNhY3Rpb24qKTsK
KyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAkocmV2aXNpb24gOTUyNDAp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDMzIEBAIFdlYklEQkZhY3RvcnlJbXBsOjp+V2ViSURC
RmFjdG9yeUltcGwoKQogewogfQogCisKK3ZvaWQgV2ViSURCRmFjdG9yeUltcGw6OmdldERhdGFi
YXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3Jp
Z2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlw
ZSkKK3sKKyAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CisKKyAgICBpZiAob3ZlcnJpZGRl
bkJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSkgeworICAgICAgICAvLyBC
YWNraW5nIHN0b3JlIHR5cGUgb3ZlcnJpZGRlbiBieSBMYXlvdXRUZXN0Q29udHJvbGxlci4KKyAg
ICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IG92ZXJyaWRkZW5CYWNraW5nU3RvcmVUeXBlOworICAg
IH0KKworICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3RvcmUpCisg
ICAgICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBMZXZlbERCQmFja2luZ1N0b3JlOworCisgICAgaWYg
KGRhdGFEaXIuaXNFbXB0eSgpICYmIGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tpbmdT
dG9yZSkgeworICAgICAgICBpZiAoIXRlbXBEYXRhYmFzZUZvbGRlci5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIC8vIExheW91dCB0ZXN0cyBwcm92aWRlIGEgdGVtcG9yYXJ5IGZvbGRlci4KKyAg
ICAgICAgICAgIHBhdGggPSB0ZW1wRGF0YWJhc2VGb2xkZXI7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBGb3IgaW5jb2duaXRvIG1vZGUsIGZhbGwgYmFjayB0byBTUUxpdGUuCisg
ICAgICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0gU1FMaXRlQmFja2luZ1N0b3JlOworICAgICAg
ICB9CisgICAgfQorCisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAs
IHBhdGgsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOworfQorCisKIHZvaWQgV2Vi
SURCRmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUq
LCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6
ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQogewogICAgIFdlYlN0cmluZyBw
YXRoID0gZGF0YURpcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZh
Y3RvcnlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCRmFjdG9yeUltcGwuaAkocmV2aXNpb24gOTUyNDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBXZWJJREJGYWN0b3J5SW1wbCgpOwogICAgIHZpcnR1YWwgfldlYklE
QkZhY3RvcnlJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJ
REJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3Qg
V2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tp
bmdTdG9yZVR5cGUpOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXpl
LCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IExheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJh
c2ljcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdGhl
IGJhc2ljcyBvZiBJbmRleGVkREIncyBJREJGYWN0b3J5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0
SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxs
IGlzIGZhbHNlCitpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpCitkYXRhYmFzZU5hbWVzID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIGZhbHNlCitQQVNTIGRhdGFiYXNlTmFtZXMu
Y29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhl
ZERCLm9wZW4obmFtZSwgZGVzY3JpcHRpb24pCitpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygp
CitkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyBkYXRhYmFzZU5hbWVz
LmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIHRydWUKK1BB
U1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcp
IGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWJhc2ljcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIGJhc2ljcyBvZiBJbmRleGVkREIncyBJREJG
YWN0b3J5LiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIg
fHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAg
IHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICBuYW1lID0gJ3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJzsKKyAgICBkZXNjcmlwdGlvbiA9ICJNeSBUZXN0
IERhdGFiYXNlIjsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIuZ2V0RGF0
YWJhc2VOYW1lcygpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXREYXRhYmFzZU5hbWVz
U3VjY2VzczE7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
Cit9CisKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMSgpCit7CisgICAgdmFyIGRh
dGFiYXNlTmFtZXM7CisgICAgZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCci
ICsgbmFtZSArICInKSIpOworICAgIHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMuY29udGFp
bnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOworCisgICAgcmVxdWVzdCA9IGV2
YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uKSIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICBy
ZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKSIpOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyOworICAgIHJlcXVl
c3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBnZXRE
YXRhYmFzZU5hbWVzU3VjY2VzczIoKQoreworICAgIHZhciBkYXRhYmFzZU5hbWVzOworICAgIGV2
YWxBbmRMb2coImRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgc2hv
dWxkQmVUcnVlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOworICAg
IHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9F
UyBOT1QgRVhJU1QnKSIpOworCisgICAgLy8gRklYTUU6IHRlc3QgaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKGRhdGFiYXNlTmFtZSkKKyAgICAvLyBGSVhNRTogdGVzdCBpbmRleGVkREIuY21wKGtl
eTEsIGtleTIpCisgICAgZG9uZSgpOworfQorCit0ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107926</attachid>
            <date>2011-09-19 15:21:40 -0700</date>
            <delta_ts>2011-09-21 14:16:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110919152139.patch</filename>
            <type>text/plain</type>
            <size>35782</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1NDI4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMDkt
MTUgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6ZGF0YWJhc2VOYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbDogQWRkZWQu
CisgICAgICAgICogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHA6Cisg
ICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaDoKKyAgICAgICAgKiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmg6CisgICAgICAgICogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnkuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaWRsOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJl
cXVlc3QuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tp
bmdTdG9yZS5jcHA6CisgICAgICAgICogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJJREJDYWxsYmFja3MuaDoKKyAgICAgICAgKiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJGYWN0b3J5Lmg6CisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCQ2FsbGJhY2tzUHJveHkuY3BwOgorICAgICAgICAqIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkNhbGxiYWNrc1Byb3h5Lmg6CisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgICogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorICAgICAgICAqIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwOgorICAgICAgICAq
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuaDoKKyAgICAg
ICAgKiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHA6Cisg
ICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaDoK
KwogMjAxMS0wOS0xNyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgW0VGTF0gQnVtcCBtaW5pbXVtIHJlcXVpcmVtZW50IGZvciBjYWlybyB0byAxLjEwLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJB
bnlDdXN0b20uY3BwCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOElEQkFueUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJWOElEQkFueS5oIgogCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSAiVjhET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiVjhJREJD
dXJzb3IuaCIKICNpbmNsdWRlICJWOElEQkN1cnNvcldpdGhWYWx1ZS5oIgogI2luY2x1ZGUgIlY4
SURCRGF0YWJhc2UuaCIKQEAgLTUzLDYgKzU0LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoSURCQW55KiBpbXBsKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIGNh
c2UgSURCQW55OjpOdWxsVHlwZToKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgY2Fz
ZSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBlOgorICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5k
b21TdHJpbmdMaXN0KCkpOwogICAgIGNhc2UgSURCQW55OjpJREJDdXJzb3JUeXBlOgogICAgICAg
ICByZXR1cm4gdG9WOChpbXBsLT5pZGJDdXJzb3IoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkN1
cnNvcldpdGhWYWx1ZVR5cGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCShyZXZp
c2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTMgKzU4LDE4IEBAIElEQkFueTo6fklEQkFueSgpCiB7CiB9CiAKK1Bh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkKK3sKKyAgICBB
U1NFUlQobV90eXBlID09IERPTVN0cmluZ0xpc3RUeXBlKTsKKyAgICByZXR1cm4gbV9kb21TdHJp
bmdMaXN0OworfQorCiBQYXNzUmVmUHRyPElEQkN1cnNvcj4gSURCQW55OjppZGJDdXJzb3IoKQog
ewogICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQ3Vyc29yVHlwZSk7CiAgICAgcmV0dXJuIG1faWRi
Q3Vyc29yOwogfQogCi0KIFBhc3NSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJBbnk6Omlk
YkN1cnNvcldpdGhWYWx1ZSgpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJDdXJzb3JXaXRo
VmFsdWVUeXBlKTsKQEAgLTExOSw2ICsxMjQsMTMgQEAgdm9pZCBJREJBbnk6OnNldE51bGwoKQog
ICAgIG1fdHlwZSA9IE51bGxUeXBlOwogfQogCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gdmFsdWUpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRU
eXBlKTsKKyAgICBtX3R5cGUgPSBET01TdHJpbmdMaXN0VHlwZTsKKyAgICBtX2RvbVN0cmluZ0xp
c3QgPSB2YWx1ZTsKK30KKwogdm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkN1cnNvcldp
dGhWYWx1ZT4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAkocmV2aXNpb24gOTU0MjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NU3RyaW5nTGlzdDsKIGNsYXNzIElE
QkN1cnNvcjsKIGNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZTsKIGNsYXNzIElEQkRhdGFiYXNlOwpA
QCAtNjcsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgVW5kZWZp
bmVkVHlwZSA9IDAsCiAgICAgICAgIE51bGxUeXBlLAorICAgICAgICBET01TdHJpbmdMaXN0VHlw
ZSwKICAgICAgICAgSURCQ3Vyc29yVHlwZSwKICAgICAgICAgSURCQ3Vyc29yV2l0aFZhbHVlVHlw
ZSwKICAgICAgICAgSURCRGF0YWJhc2VUeXBlLApAQCAtODAsNiArODIsNyBAQCBwdWJsaWM6CiAK
ICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICAvLyBVc2UgdHlw
ZSgpIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZXNlIHlvdSdyZSBhbGxvd2VkIHRvIGNh
bGwuCisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCk7CiAgICAg
UGFzc1JlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNvcigpOwogICAgIFBhc3NSZWZQdHI8SURCQ3Vy
c29yV2l0aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKTsKICAgICBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlPiBpZGJEYXRhYmFzZSgpOwpAQCAtOTIsNiArOTUsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBTZXQgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCiAgICAgdm9pZCBzZXROdWxsKCk7CisgICAg
dm9pZCBzZXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CiAgICAgdm9pZCBzZXQoUGFzc1Jl
ZlB0cjxJREJDdXJzb3I+KTsKICAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkN1cnNvcldpdGhW
YWx1ZT4pOwogICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KTsKQEAgLTEwOCw2
ICsxMTIsNyBAQCBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwogCiAgICAgLy8gT25seSBvbmUg
b2YgdGhlIGZvbGxvd2luZyBzaG91bGQgZXZlciBiZSBpbiB1c2UgYXQgYW55IGdpdmVuIHRpbWUu
CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fZG9tU3RyaW5nTGlzdDsKICAgICBSZWZQdHI8
SURCQ3Vyc29yPiBtX2lkYkN1cnNvcjsKICAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBt
X2lkYkN1cnNvcldpdGhWYWx1ZTsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1faWRiRGF0YWJh
c2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgJKHJldmlz
aW9uIDk1NDI4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBw
dWJsaWMgUmVmQ291bnRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkg
e307CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYg
Zm91bmROYW1lcykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBi
b29sIGludmFsaWRSb3dJZCkgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkNhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ2Fs
bGJhY2tzLmgJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJD
YWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBJREJD
YWxsYmFja3NfaAogI2RlZmluZSBJREJDYWxsYmFja3NfaAogCisjaW5jbHVkZSAiRE9NU3RyaW5n
TGlzdC5oIgogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVy
cm9yLmgiCkBAIC00OCw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJDYWxsYmFj
a3MoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsMjMgQEAgSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQogewogfQogCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50
LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCAwKTsKKyAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2Uo
KS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7CisgICAgbV9mYWN0b3J5QmFja2VuZC0+Z2V0RGF0
YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQt
PmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpLCBncm91cFNl
dHRpbmdzLT5pbmRleGVkREJRdW90YUJ5dGVzKCksIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
OjpEZWZhdWx0QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwogUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5oCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgfklEQkZhY3RvcnkoKTsKIAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0
YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnkuaWRsCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAgbW9kdWxl
IHN0b3JhZ2UgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURf
REFUQUJBU0UKICAgICBdIElEQkZhY3RvcnkgeworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBnZXREYXRhYmFzZU5hbWVzKCk7CisKICAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbihpbiBET01T
dHJpbmcgbmFtZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBA
QCBJREJGYWN0b3J5QmFja2VuZEltcGw6OklEQkZhY3RvcnlCYWNrZW5kCiB7CiB9CiAKKworCiBJ
REJGYWN0b3J5QmFja2VuZEltcGw6On5JREJGYWN0b3J5QmFja2VuZEltcGwoKQogewogfQpAQCAt
ODEsNiArODMsMjYgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhYwog
ICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92ZShmaWxlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQg
SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwg
QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIEFTU0VSVChiYWNraW5n
U3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOworCisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwg
ZGF0YURpciwgbWF4aW11bVNpemUsIGJhY2tpbmdTdG9yZVR5cGUpOworICAgIGlmICghYmFja2lu
Z1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3Iu
IikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKworICAgIFZlY3RvcjxT
dHJpbmc+IGZvdW5kTmFtZXM7CisgICAgYmFja2luZ1N0b3JlLT5nZXREYXRhYmFzZU5hbWVzKGZv
dW5kTmFtZXMpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Zm91bmROYW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5hbWVzLmVuZCgpOyArK2l0KQorICAgICAg
ICBkYXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwogdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9y
ZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHlwZSAh
PSBEZWZhdWx0QmFja2luZ1N0b3JlKTsKQEAgLTk0LDggKzExNiw2IEBAIHZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3Ro
ZXIgdGhyZWFkLgotCiAjaWYgVVNFKExFVkVMREIpCiAgICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUg
PT0gTGV2ZWxEQkJhY2tpbmdTdG9yZSkgewogICAgICAgICBib29sIGhhc1NRTEJhY2tpbmdTdG9y
ZSA9IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKHNlY3VyaXR5T3Jp
Z2luLmdldCgpLCBuYW1lLCBkYXRhRGlyKTsKQEAgLTExMiw2ICsxMzIsMjUgQEAgdm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgUwogICAgIH0KICNlbmRpZgogCisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1
cml0eU9yaWdpbiwgZGF0YURpciwgbWF4aW11bVNpemUsIGJhY2tpbmdTdG9yZVR5cGUpOworICAg
IGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50
ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29y
ZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1h
cC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKK30KKworUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tp
bmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJh
Y2tpbmdTdG9yZVR5cGUpCit7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVs
dEJhY2tpbmdTdG9yZSk7CisKKyAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21w
dXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdTdG9yZVR5cGUp
OworCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUg
b24gYW5vdGhlciB0aHJlYWQuCisKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdT
dG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0
b3JlTWFwLmVuZCgpICYmIChiYWNraW5nU3RvcmVUeXBlID09IGl0Mi0+c2Vjb25kLT5iYWNraW5n
U3RvcmVUeXBlKCkpKQpAQCAtMTIzLDE1ICsxNjIsMTIgQEAgdm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6Om9wZW4oY29uc3QgUwogICAgICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09
IExldmVsREJCYWNraW5nU3RvcmUpCiAgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhp
bXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogI2VuZGlmCi0gICAgICAgIGlmICghYmFj
a2luZ1N0b3JlKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFs
IGVycm9yLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgIH0KIAotICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Ci0gICAgbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7
CisgICAgaWYgKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxl
YXNlKCk7CisKKyAgICByZXR1cm4gMDsKIH0KIAogI2lmIFVTRShMRVZFTERCKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCShyZXZpc2lv
biA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCQmFja2lu
Z1N0b3JlKik7CiAgICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBm
aWxlSWRlbnRpZmllcik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3Jl
VHlwZSk7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlw
ZSk7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7CisgICAgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFj
a2luZ1N0b3JlVHlwZSk7CiAgICAgYm9vbCBtaWdyYXRlRnJvbVNRTGl0ZVRvTGV2ZWxEQihjb25z
dCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBp
bnQ2NF90IG1heGltdW1TaXplKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqPiBJREJEYXRhYmFzZUJhY2tlbmRNYXA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCShy
ZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIFNRTGl0ZUJhY2tpbmdTdG9yZQogICAgIH07CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhp
bXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiA5
NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsMjYgQEAgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IElEQkxldmVsREJCYQogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgp
OwogfQogCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVudGlmaWVy
KTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5j
b2RlU3RvcEtleUZvck9yaWdpbihtX2lkZW50aWZpZXIpOworCisgICAgQVNTRVJUKGZvdW5kTmFt
ZXMuaXNFbXB0eSgpKTsKKworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+
Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFs
aWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkg
eworICAgICAgICBjb25zdCBjaGFyICpwID0gaXQtPmtleSgpLmJlZ2luKCk7CisgICAgICAgIGNv
bnN0IGNoYXIgKmxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIERhdGFiYXNlTmFt
ZUtleSBkYXRhYmFzZU5hbWVLZXk7CisgICAgICAgIHAgPSBEYXRhYmFzZU5hbWVLZXk6OmRlY29k
ZShwLCBsaW1pdCwgJmRhdGFiYXNlTmFtZUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKworICAg
ICAgICBmb3VuZE5hbWVzLmFwcGVuZChkYXRhYmFzZU5hbWVLZXkuZGF0YWJhc2VOYW1lKCkpOwor
ICAgIH0KK30KKwogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2
NF90JiBmb3VuZElkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5h
bWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwpAQCAtMjE3LDYgKzIzNywxMSBAQCB2
b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0CiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIDEsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQpOwogCisgICAgQVNTRVJUKGZvdW5k
SWRzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoZm91bmRLZXlQYXRocy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZEF1dG9JbmNy
ZW1lbnRGbGFncy5pc0VtcHR5KCkpOworCiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQg
PSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBp
dC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+
bmV4dCgpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKQEAg
LTU2OSw2ICs1OTQsMTEgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVz
KAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RvcEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkICsgMSwgMCwgMCk7CiAKKyAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChmb3VuZEtleVBh
dGhzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kVW5pcXVlRmxhZ3MuaXNFbXB0eSgpKTsK
KwogICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3Io
KTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJl
S2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewogICAgICAgICBjb25z
dCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAkocmV2aXNpb24gOTU0MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFz
ZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZSgpOwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4m
IGZvdW5kTmFtZXMpOwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3Vu
ZElkKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52
YWxpZFJvd0lkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQ29k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJD
b2RpbmcuY3BwCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5OSw2ICs3OTksMTcgQEAgVmVj
dG9yPGNoYXI+IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKGNvbgogICAgIHJldHVybiByZXQ7CiB9
CiAKK1ZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbikKK3sKKyAgICByZXR1cm4gZW5jb2RlKG9yaWdpbiwgIiIpOwor
fQorCitWZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVTdG9wS2V5Rm9yT3JpZ2lu
KGNvbnN0IFN0cmluZyYgb3JpZ2luKQoreworICAgIC8vIGp1c3QgYWZ0ZXIgb3JpZ2luIGluIGNv
bGxhdGlvbiBvcmRlcgorICAgIHJldHVybiBlbmNvZGVNaW5LZXlGb3JPcmlnaW4ob3JpZ2luICsg
Ilx4MDEiKTsKK30KKwogaW50IERhdGFiYXNlTmFtZUtleTo6Y29tcGFyZShjb25zdCBEYXRhYmFz
ZU5hbWVLZXkmIG90aGVyKQogewogICAgIGlmIChpbnQgeCA9IGNvZGVQb2ludENvbXBhcmUobV9v
cmlnaW4sIG90aGVyLm1fb3JpZ2luKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkNvZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkNvZGluZy5oCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAg
Y2xhc3MgRGF0YWJhc2VOYW1lS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgY2hhciog
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VOYW1l
S2V5KiByZXN1bHQpOwogICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CisgICAgc3RhdGljIFZlY3Rv
cjxjaGFyPiBlbmNvZGVNaW5LZXlGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pOworICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlU3RvcEtleUZvck9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbik7CiAgICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9
CiAgICAgU3RyaW5nIGRhdGFiYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VOYW1l
OyB9CiAgICAgaW50IGNvbXBhcmUoY29uc3QgRGF0YWJhc2VOYW1lS2V5JiBvdGhlcik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAJKHJldmlzaW9uIDk1NDI4KQorKysg
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDYgKzE4NiwxMyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlU3VjY2Vzc0V2
CiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgZmFs
c2UsIGZhbHNlKTsKIH0KIAordm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQoreworICAgIEFTU0VSVCghbV9lcnJvckNvZGUg
JiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsKKyAgICBtX3Jlc3VsdCA9
IElEQkFueTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOworICAgIGVucXVldWVFdmVudChjcmVhdGVT
dWNjZXNzRXZlbnQoKSk7Cit9CisKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKICAgICBBU1NFUlQoIW1f
ZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX3Jlc3VsdCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAkocmV2aXNpb24gOTU0MjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
QEAgLTc0LDYgKzc1LDcgQEAgcHVibGljOgogCiAgICAgLy8gSURCQ2FsbGJhY2tzCiAgICAgdmly
dHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CisgICAgdmly
dHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKICAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
Pik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURC
S2V5Pik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNr
aW5nU3RvcmUuY3BwCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYgKzE5Nywy
MCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCU1FMaXRlQmFjCiAgICAgcmV0dXJu
IGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKQoreworICAgIEFT
U0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYiwgIlNFTEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIik7CisgICAgaWYgKHF1ZXJ5LnByZXBh
cmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlIChxdWVyeS5zdGVwKCkgPT0gU1FMUmVz
dWx0Um93KQorICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChxdWVyeS5nZXRDb2x1bW5UZXh0KDAp
KTsKK30KKwogYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3Qm
IGZvdW5kSWQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IGRhdGFiYXNlUXVlcnkobV9kYiwgIlNF
TEVDVCBpZCwgdmVyc2lvbiBGUk9NIERhdGFiYXNlcyBXSEVSRSBuYW1lID0gPyIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCShyZXZp
c2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0
b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0
IFN0cmluZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4aW11bVNpemUsIGNvbnN0IFN0cmluZyYgZmls
ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwogICAgIHZpcnR1YWwgfklEQlNR
TGl0ZUJhY2tpbmdTdG9yZSgpOwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMo
VmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9u
LCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYg
cm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgJKHJldmlzaW9uIDk1NDI4KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgV2ViSURCS2V5OwogY2xhc3MgV2ViSURCSW5kZXg7
CiBjbGFzcyBXZWJJREJPYmplY3RTdG9yZTsKIGNsYXNzIFdlYklEQlRyYW5zYWN0aW9uOworY2xh
c3MgV2ViRE9NU3RyaW5nTGlzdDsKIGNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAog
Y2xhc3MgV2ViSURCQ2FsbGJhY2tzIHsKQEAgLTUwLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoV2ViSURCRGF0YWJhc2UqKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoY29uc3QgV2ViSURCS2V5
JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFdlYklEQlRyYW5zYWN0aW9uKikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3QmKSB7
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCkgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRmFjdG9yeS5oCShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr
NTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNRTGl0ZUJhY2tpbmdTdG9yZQogICAgIH07CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBjb25zdCBX
ZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1
bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICAvLyBUaGUgV2ViS2l0IGltcGxlbWVudGF0
aW9uIG9mIG9wZW4gaWdub3JlcyB0aGUgV2ViRnJhbWUqIHBhcmFtZXRlci4KICAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIs
IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcAkocmV2aXNpb24gOTU0MjgpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDYgKzg0LDExIEBAIHZvaWQgSURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2Vz
cyhQYXNzUmUKICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKG5ldyBXZWJJREJUcmFuc2FjdGlv
bkltcGwoYmFja2VuZCkpOwogfQogCit2b2lkIElEQkNhbGxiYWNrc1Byb3h5OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQoreworICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoV2ViRE9NU3RyaW5nTGlzdChkb21TdHJpbmdMaXN0KSk7Cit9CisKIHZv
aWQgSURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQogewogICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkpOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5o
CShyZXZpc2lvbiA5NTQyOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxi
YWNrc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCS2V5Pik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdMaXN0Pik7CiAgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4pOwogICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKTsKIApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5j
cHAJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFj
dG9yeUJhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDIwIEBAIElE
QkZhY3RvcnlCYWNrZW5kUHJveHk6On5JREJGYWN0b3J5QmFja2UKIHsKIH0KIAordm9pZCBJREJG
YWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJh
Y2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdp
biBvcmlnaW4ocHJwT3JpZ2luKTsKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJh
bWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2Vi
RnJhbWUtPnZpZXdJbXBsKCk7CisKKyAgICBpZiAod2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgp
ICYmICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhlZERCKHdlYkZyYW1l
LCAiRGF0YWJhc2UgTGlzdGluZyIsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRv
IGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV93ZWJJREJGYWN0b3J5LT5nZXREYXRhYmFzZU5hbWVzKG5ldyBXZWJJREJDYWxsYmFja3NJbXBs
KGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIsIG1heGltdW1TaXplLCBzdGF0
aWNfY2FzdDxXZWJJREJGYWN0b3J5OjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBl
KSk7Cit9CisKIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlw
ZSkKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmgJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFj
dG9yeUJhY2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwog
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdMaXN0PiBkYXRhYmFzZXModm9pZCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwg
V2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNp
emUsIEJhY2tpbmdTdG9yZVR5cGUpOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJh
Y2tzSW1wbC5jcHAJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJXZWJET01T
dHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiV2ViSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiV2Vi
SURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUVycm9yLmgiCkBAIC03OSw2
ICs4MCwxMSBAQCB2b2lkIFdlYklEQkNhbGxiYWNrc0ltcGw6Om9uU3VjY2VzcyhXZWJJCiAgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcyhJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRl
KGFkb3B0UHRyKHdlYktpdEluc3RhbmNlKSkpOwogfQogCit2b2lkIFdlYklEQkNhbGxiYWNrc0lt
cGw6Om9uU3VjY2Vzcyhjb25zdCBXZWJET01TdHJpbmdMaXN0JiBkb21TdHJpbmdMaXN0KQorewor
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZG9tU3RyaW5nTGlzdCk7Cit9CisKIHZvaWQgV2Vi
SURCQ2FsbGJhY2tzSW1wbDo6b25TdWNjZXNzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYgc2VyaWFsaXplZFNjcmlwdFZhbHVlKQogewogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
c2VyaWFsaXplZFNjcmlwdFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQkNhbGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmgJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFdl
YklEQkRhdGFiYXNlKik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJJREJL
ZXkmKTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFdlYklEQlRyYW5zYWN0aW9uKik7Cisg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJET01TdHJpbmdMaXN0Jik7CiAgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAJKHJldmlzaW9uIDk1NDI4KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw2ICs3MSwzMyBAQCBXZWJJREJGYWN0b3J5SW1wbDo6fldlYklEQkZh
Y3RvcnlJbXBsKCkKIHsKIH0KIAorCit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpnZXREYXRhYmFz
ZU5hbWVzKFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdp
biYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQg
bG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUp
Cit7CisgICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOworCisgICAgaWYgKG92ZXJyaWRkZW5C
YWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgLy8gQmFj
a2luZyBzdG9yZSB0eXBlIG92ZXJyaWRkZW4gYnkgTGF5b3V0VGVzdENvbnRyb2xsZXIuCisgICAg
ICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBvdmVycmlkZGVuQmFja2luZ1N0b3JlVHlwZTsKKyAgICB9
CisKKyAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQorICAg
ICAgICBiYWNraW5nU3RvcmVUeXBlID0gTGV2ZWxEQkJhY2tpbmdTdG9yZTsKKworICAgIGlmIChk
YXRhRGlyLmlzRW1wdHkoKSAmJiBiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3Rv
cmUpIHsKKyAgICAgICAgaWYgKCF0ZW1wRGF0YWJhc2VGb2xkZXIuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAvLyBMYXlvdXQgdGVzdHMgcHJvdmlkZSBhIHRlbXBvcmFyeSBmb2xkZXIuCisgICAg
ICAgICAgICBwYXRoID0gdGVtcERhdGFiYXNlRm9sZGVyOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gRm9yIGluY29nbml0byBtb2RlLCBmYWxsIGJhY2sgdG8gU1FMaXRlLgorICAg
ICAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IFNRTGl0ZUJhY2tpbmdTdG9yZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMoSURC
Q2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBw
YXRoLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6
OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKK30KKworCiB2b2lkIFdlYklE
QkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUs
IEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKICAgICBXZWJTdHJpbmcgcGF0
aCA9IGRhdGFEaXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0
b3J5SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkZhY3RvcnlJbXBsLmgJKHJldmlzaW9uIDk1NDI4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QCBwdWJsaWM6CiAgICAgV2ViSURCRmFjdG9yeUltcGwoKTsKICAgICB2aXJ0dWFsIH5XZWJJREJG
YWN0b3J5SW1wbCgpOwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURC
Q2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdl
YlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5n
U3RvcmVUeXBlKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBj
b25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwg
QmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNp
Y3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACitUZXN0IHRoZSBi
YXNpY3Mgb2YgSW5kZXhlZERCJ3MgSURCRmFjdG9yeS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdElu
ZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBp
cyBmYWxzZQoraW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQorZGF0YWJhc2VOYW1lcyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyBmYWxzZQorUEFTUyBkYXRhYmFzZU5hbWVzLmNv
bnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKK2luZGV4ZWRE
Qi5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uKQoraW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQor
ZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgZGF0YWJhc2VOYW1lcy5j
b250YWlucygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyB0cnVlCitQQVNT
IGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBp
cyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1i
YXNpY3MuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktYmFzaWNzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBiYXNpY3Mgb2YgSW5kZXhlZERCJ3MgSURCRmFj
dG9yeS4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIAorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBpbmRleGVkREIgPSBldmFsQW5kTG9nKCJpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8
IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsiKTsKKyAgICBz
aG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOworCisgICAgbmFtZSA9ICdzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcyc7CisgICAgZGVzY3JpcHRpb24gPSAiTXkgVGVzdCBE
YXRhYmFzZSI7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmdldERhdGFi
YXNlTmFtZXMoKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0RGF0YWJhc2VOYW1lc1N1
Y2Nlc3MxOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczEoKQoreworICAgIHZhciBkYXRh
YmFzZU5hbWVzOworICAgIGV2YWxBbmRMb2coImRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQu
cmVzdWx0Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygnIiAr
IG5hbWUgKyAiJykiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5z
KCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykiKTsKKworICAgIHJlcXVlc3QgPSBldmFs
QW5kTG9nKCJpbmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikiKTsKKyAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgcmVx
dWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkiKTsKKyAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMjsKKyAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0RGF0
YWJhc2VOYW1lc1N1Y2Nlc3MyKCkKK3sKKyAgICB2YXIgZGF0YWJhc2VOYW1lczsKKyAgICBldmFs
QW5kTG9nKCJkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsKKyAgICBz
aG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMg
Tk9UIEVYSVNUJykiKTsKKworICAgIC8vIEZJWE1FOiB0ZXN0IGluZGV4ZWREQi5kZWxldGVEYXRh
YmFzZShkYXRhYmFzZU5hbWUpCisgICAgLy8gRklYTUU6IHRlc3QgaW5kZXhlZERCLmNtcChrZXkx
LCBrZXkyKQorICAgIGRvbmUoKTsKK30KKwordGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108233</attachid>
            <date>2011-09-21 14:16:28 -0700</date>
            <delta_ts>2011-09-21 17:16:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110921141627.patch</filename>
            <type>text/plain</type>
            <size>2547</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk1NjY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDkt
MjEgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgV2ViS2l0IHNpZGUgb2YgSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcmZhY2UgY2hhbmdlcyBh
bmQgc3R1YiBpbXBsZW1lbnRhdGlvbnMgZm9yCisgICAgICAgIG5ldyBJbmRleGVkREIgSURCRmFj
dG9yeS5nZXREYXRhYmFzZU5hbWVzLiBUaGlzIGlzCisgICAgICAgIHBhcnQgb25lIG9mIGEgdHdv
LXNpZGVkIHBhdGNoLgorCisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSURCQ2FsbGJhY2tzLmg6CisgICAgICAgICogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCRmFjdG9yeS5oOgorCiAyMDExLTA5LTIxICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFu
ZHJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJlbW92ZSB1bnVzZWQg
RU5BQkxFX0FTX0lNQUdFIGZsYWcgYWZ0ZXIgcjk1MjM0IGZyb20KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCShyZXZpc2lvbiA5NTU4
MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFdlYklEQktleTsKIGNsYXNzIFdl
YklEQkluZGV4OwogY2xhc3MgV2ViSURCT2JqZWN0U3RvcmU7CiBjbGFzcyBXZWJJREJUcmFuc2Fj
dGlvbjsKK2NsYXNzIFdlYkRPTVN0cmluZ0xpc3Q7CiBjbGFzcyBXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWU7CiAKIGNsYXNzIFdlYklEQkNhbGxiYWNrcyB7CkBAIC01MCw2ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFdlYklEQkRhdGFiYXNlKikgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0
IFdlYklEQktleSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhXZWJJREJUcmFuc2FjdGlvbiopIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJET01TdHJp
bmdMaXN0JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAkocmV2aXNpb24gOTU1ODApCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgICAgICBTUUxpdGVCYWNraW5nU3RvcmUKICAg
ICB9OwogCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tz
KiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYg
ZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
KSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgLy8gVGhlIFdlYktpdCBp
bXBsZW1lbnRhdGlvbiBvZiBvcGVuIGlnbm9yZXMgdGhlIFdlYkZyYW1lKiBwYXJhbWV0ZXIuCiAg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFj
a3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5n
JiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108255</attachid>
            <date>2011-09-21 17:16:38 -0700</date>
            <delta_ts>2011-09-21 21:05:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68037-20110921171637.patch</filename>
            <type>text/plain</type>
            <size>2830</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2NjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MTkxMTk5MjUxZGE4Y2FmZmI4YjkxZjc0ZmE2MzRhNDQ4NzQ0YzM1MC4uMTRlNTgzNDA5NzdlNWNm
ODI2N2M1ZTE3MWI2NGZmMWZjMTUxNjI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAxMS0wOS0yMSAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIEltcGxlbWVudCBXZWJLaXQgc2lkZSBvZiBJREJGYWN0b3J5OjpnZXRE
YXRhYmFzZU5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODAzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEludGVyZmFjZSBjaGFuZ2VzIGFuZCBzdHViIGltcGxlbWVudGF0aW9ucyBmb3IKKyAgICAg
ICAgbmV3IEluZGV4ZWREQiBJREJGYWN0b3J5LmdldERhdGFiYXNlTmFtZXMuIFRoaXMgaXMKKyAg
ICAgICAgcGFydCBvbmUgb2YgYSB0d28tc2lkZWQgcGF0Y2guCisKKyAgICAgICAgKiBwdWJsaWMv
V2ViSURCQ2FsbGJhY2tzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkNhbGxiYWNrczo6b25T
dWNjZXNzKToKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKwogMjAxMS0wOS0yMSAgQWFy
b24gQm9vZG1hbiAgPGFhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgb2xkIGFuZCBi
dXN0ZWQgY29udGV4dCBub3RpZmljYXRpb24gQVBJcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaAppbmRleCBhNjQ0OGI0ZjI3NmU4NzcxZDU3ZjU3
OGY0Nzk0ZDA5OTdkODJiMGFlLi43OWRlNDIyZDIzM2NiNWY5NmMwOTNlYWJkMGIyZjEwYTg3NDIx
MjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxs
YmFja3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFj
a3MuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgV2Vi
RE9NU3RyaW5nTGlzdDsKIGNsYXNzIFdlYklEQkN1cnNvcjsKIGNsYXNzIFdlYklEQkRhdGFiYXNl
OwogY2xhc3MgV2ViSURCRGF0YWJhc2VFcnJvcjsKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgog
ICAgIC8vIEZvciBjbGFzc2VzIHRoYXQgZm9sbG93IHRoZSBQSW1wbCBwYXR0ZXJuLCBwYXNzIGEg
Y29uc3QgcmVmZXJlbmNlLgogICAgIC8vIEZvciB0aGUgcmVzdCwgcGFzcyBvd25lcnNoaXAgdG8g
dGhlIGNhbGxlZSB2aWEgYSBwb2ludGVyLgogICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKGNvbnN0
IFdlYklEQkRhdGFiYXNlRXJyb3ImKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoY29uc3QgV2ViRE9NU3RyaW5nTGlzdCYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhX
ZWJJREJDdXJzb3IqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoV2ViSURCRGF0YWJhc2UqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoY29uc3QgV2ViSURCS2V5Jikg
eyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAppbmRleCBmMTFmZmQ0OGE1MjQ5ZGIzYmNjNWI0NmVj
MGNlYjcwOGMxODZkZTUwLi5iMWE3MDhiYzRmYjNjYzU2NjQ1ZjZlNDRhMWRjNWJhODkzYmM5MWM3
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCkBA
IC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAgICAg
fTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRh
dGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkg
eyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIC8vIFRoZSBXZWJLaXQgaW1w
bGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSogcGFyYW1ldGVyLgogICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tz
KiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYg
ZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
KSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>