<?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>164659</bug_id>
          
          <creation_ts>2016-11-11 15:36:36 -0800</creation_ts>
          <short_desc>Resource load statistics: Cover further data records, count removed data records, and only fire handler when needed</short_desc>
          <delta_ts>2016-11-17 19:33:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit 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>1</everconfirmed>
          <reporter name="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1250454</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-11 15:36:36 -0800</bug_when>
    <thetext>Resource load statistics: Cover further data records, count removed data records, and only fire handler when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250522</commentid>
    <comment_count>1</comment_count>
      <attachid>294569</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-11 17:04:45 -0800</bug_when>
    <thetext>Created attachment 294569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250538</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-11-11 17:52:20 -0800</bug_when>
    <thetext>Martin (or other GTK people) -- can anyone help us understand why GTK is failing to build here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251172</commentid>
    <comment_count>3</comment_count>
      <attachid>294755</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-14 15:05:24 -0800</bug_when>
    <thetext>Created attachment 294755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251174</commentid>
    <comment_count>4</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-14 15:06:36 -0800</bug_when>
    <thetext>Added an explicit this-&gt; to the call that the GTK build is complaining about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251217</commentid>
    <comment_count>5</comment_count>
      <attachid>294755</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-11-14 16:03:36 -0800</bug_when>
    <thetext>Comment on attachment 294755
Patch

Looks reasonable. Please get Andy to do final review due to WebKit2 content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251268</commentid>
    <comment_count>6</comment_count>
      <attachid>294755</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-11-14 17:14:59 -0800</bug_when>
    <thetext>Comment on attachment 294755
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +            All three functions now more conservative in calls to m_store-&gt;fireDataModificationHandler(). 

&quot;are now more conservative&quot;

&gt; Source/WebCore/ChangeLog:15
&gt; +            The only fire when an important statistic has changed or data records have previously been

&quot;They only fire&quot;

&gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:176
&gt; +    // Keys missing from earlier formats should not cause the function to return false
&gt; +    decoder.decodeUInt32(&quot;dataRecordsRemoved&quot;, dataRecordsRemoved);

This doesn&apos;t seem like a good idea. I believe ResourceLoadStatistics encoding/decoding happens in two places:

1. When reading from/writing to the plist on disk.
2. When communicating between the UI process and the Web process.

For #1, I suppose it&apos;s ok to decode an older format on disk by ignoring a missing key. But for #2 it&apos;s not ok, because a missing &quot;dataRecordsRemoved&quot; key could represent a corrupt message from a compromised process.

If we&apos;re going to support multiple formats, then we should add a &quot;version&quot; key to the structure so we can distinguish between an old format and a corrupted message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251482</commentid>
    <comment_count>7</comment_count>
      <attachid>294852</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-15 11:03:41 -0800</bug_when>
    <thetext>Created attachment 294852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251486</commentid>
    <comment_count>8</comment_count>
      <attachid>294853</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-15 11:06:25 -0800</bug_when>
    <thetext>Created attachment 294853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251490</commentid>
    <comment_count>9</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-15 11:08:50 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 294755 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294755&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +            All three functions now more conservative in calls to m_store-&gt;fireDataModificationHandler(). 
&gt; 
&gt; &quot;are now more conservative&quot;

Fixed.

&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +            The only fire when an important statistic has changed or data records have previously been
&gt; 
&gt; &quot;They only fire&quot;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:176
&gt; &gt; +    // Keys missing from earlier formats should not cause the function to return false
&gt; &gt; +    decoder.decodeUInt32(&quot;dataRecordsRemoved&quot;, dataRecordsRemoved);
&gt; 
&gt; This doesn&apos;t seem like a good idea. I believe ResourceLoadStatistics
&gt; encoding/decoding happens in two places:
&gt; 
&gt; 1. When reading from/writing to the plist on disk.
&gt; 2. When communicating between the UI process and the Web process.
&gt; 
&gt; For #1, I suppose it&apos;s ok to decode an older format on disk by ignoring a
&gt; missing key. But for #2 it&apos;s not ok, because a missing &quot;dataRecordsRemoved&quot;
&gt; key could represent a corrupt message from a compromised process.
&gt; 
&gt; If we&apos;re going to support multiple formats, then we should add a &quot;version&quot;
&gt; key to the structure so we can distinguish between an old format and a
&gt; corrupted message.

That is a very good idea! Fixed.

Thanks, Andy! Please see updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251944</commentid>
    <comment_count>10</comment_count>
      <attachid>294853</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-11-16 11:55:38 -0800</bug_when>
    <thetext>Comment on attachment 294853
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:176
&gt; +    if (!decoder.decodeUInt32(&quot;dataRecordsRemoved&quot;, dataRecordsRemoved) &amp;&amp; version &gt; 1)
&gt; +        return false;

I&apos;d prefer to see the version check broken out in its own statement for clarity:

    if (version &lt; 2)
        return true;

    if (!decoder.decodeUInt32(&quot;dataRecordsRemoved&quot;, dataRecordsRemoved))
        return false;

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:90
&gt; +    uint32_t version;

I&apos;d make this an unsigned for consistency.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:94
&gt; +    bool succeeded = decoder.decodeObjects(&quot;browsingStatistics&quot;, loadedStatistics, [this, version = WTFMove(version)](KeyedDecoder&amp; decoderInner, ResourceLoadStatistics&amp; statistics) {

You can just capture version by value (i.e. [this, version]). There&apos;s no benefit to moving a uint32_t.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:130
&gt; +    if (dataTypesToRemove.isEmpty()) {
&gt; +        dataTypesToRemove |= WebsiteDataType::Cookies;
&gt; +        dataTypesToRemove |= WebsiteDataType::LocalStorage;
&gt; +        dataTypesToRemove |= WebsiteDataType::IndexedDBDatabases;
&gt; +        dataTypesToRemove |= WebsiteDataType::DiskCache;
&gt; +        dataTypesToRemove |= WebsiteDataType::MemoryCache;
&gt; +    }

Since dataTypesToRemove is only used by this function, you should declare it as a local static:

    static OptionSet&lt;WebsiteDataType&gt; dataTypesToRemove {
        WebsiteDataType::Cookies,
        WebsiteDataType::LocalStorage,
        WebsiteDataType::IndexedDBDatabases,
        WebsiteDataType::DiskCache,
        WebsiteDataType::MemoryCache
    };

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:157
&gt; +            websiteDataStore.removeData(dataTypesToRemove, { WTFMove(dataRecords) }, [prevalentResourceDomainsWithDataRecords = WTFMove(prevalentResourceDomainsWithDataRecords), this] {

&quot;{ WTFMove(dataRecords) } &quot; is pretty contorted. The function takes a const reference, so it&apos;s ok to just pass dataRecords directly without moving it.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:158
&gt; +                this-&gt;coreStore().updateStatisticsForRemovedDataRecords(prevalentResourceDomainsWithDataRecords);

I don&apos;t think the &quot;this-&gt;&quot; is necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252548</commentid>
    <comment_count>11</comment_count>
      <attachid>295115</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-17 17:35:51 -0800</bug_when>
    <thetext>Created attachment 295115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252549</commentid>
    <comment_count>12</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-17 17:37:42 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 294853 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294853&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:176
&gt; &gt; +    if (!decoder.decodeUInt32(&quot;dataRecordsRemoved&quot;, dataRecordsRemoved) &amp;&amp; version &gt; 1)
&gt; &gt; +        return false;
&gt; 
&gt; I&apos;d prefer to see the version check broken out in its own statement for
&gt; clarity:
&gt; 
&gt;     if (version &lt; 2)
&gt;         return true;
&gt; 
&gt;     if (!decoder.decodeUInt32(&quot;dataRecordsRemoved&quot;, dataRecordsRemoved))
&gt;         return false;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:90
&gt; &gt; +    uint32_t version;
&gt; 
&gt; I&apos;d make this an unsigned for consistency.

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:94
&gt; &gt; +    bool succeeded = decoder.decodeObjects(&quot;browsingStatistics&quot;, loadedStatistics, [this, version = WTFMove(version)](KeyedDecoder&amp; decoderInner, ResourceLoadStatistics&amp; statistics) {
&gt; 
&gt; You can just capture version by value (i.e. [this, version]). There&apos;s no
&gt; benefit to moving a uint32_t.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:130
&gt; &gt; +    if (dataTypesToRemove.isEmpty()) {
&gt; &gt; +        dataTypesToRemove |= WebsiteDataType::Cookies;
&gt; &gt; +        dataTypesToRemove |= WebsiteDataType::LocalStorage;
&gt; &gt; +        dataTypesToRemove |= WebsiteDataType::IndexedDBDatabases;
&gt; &gt; +        dataTypesToRemove |= WebsiteDataType::DiskCache;
&gt; &gt; +        dataTypesToRemove |= WebsiteDataType::MemoryCache;
&gt; &gt; +    }
&gt; 
&gt; Since dataTypesToRemove is only used by this function, you should declare it
&gt; as a local static:
&gt; 
&gt;     static OptionSet&lt;WebsiteDataType&gt; dataTypesToRemove {
&gt;         WebsiteDataType::Cookies,
&gt;         WebsiteDataType::LocalStorage,
&gt;         WebsiteDataType::IndexedDBDatabases,
&gt;         WebsiteDataType::DiskCache,
&gt;         WebsiteDataType::MemoryCache
&gt;     };

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:157
&gt; &gt; +            websiteDataStore.removeData(dataTypesToRemove, { WTFMove(dataRecords) }, [prevalentResourceDomainsWithDataRecords = WTFMove(prevalentResourceDomainsWithDataRecords), this] {
&gt; 
&gt; &quot;{ WTFMove(dataRecords) } &quot; is pretty contorted. The function takes a const
&gt; reference, so it&apos;s ok to just pass dataRecords directly without moving it.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:158
&gt; &gt; +                this-&gt;coreStore().updateStatisticsForRemovedDataRecords(prevalentResourceDomainsWithDataRecords);
&gt; 
&gt; I don&apos;t think the &quot;this-&gt;&quot; is necessary.

Actually it is. Adding it fixed the GTK build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252553</commentid>
    <comment_count>13</comment_count>
      <attachid>295117</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-17 18:26:33 -0800</bug_when>
    <thetext>Created attachment 295117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252554</commentid>
    <comment_count>14</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-17 18:28:41 -0800</bug_when>
    <thetext>Moved dataTypesToRemove back out as a member variable since GTK didn&apos;t build with the local static one. Couldn&apos;t resolve it in the second lambda.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252569</commentid>
    <comment_count>15</comment_count>
      <attachid>295117</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-17 19:33:00 -0800</bug_when>
    <thetext>Comment on attachment 295117
Patch

Clearing flags on attachment: 295117

Committed r208874: &lt;http://trac.webkit.org/changeset/208874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252570</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-17 19:33:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294569</attachid>
            <date>2016-11-11 17:04:45 -0800</date>
            <delta_ts>2016-11-14 15:05:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164659-20161111170031.patch</filename>
            <type>text/plain</type>
            <size>19592</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE2LTExLTExICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIGxvYWQgc3Rh
dGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50IHJlbW92ZWQgZGF0YSBy
ZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBmZWF0
dXJlIGlzIGJlaGluZCBhIGZsYWcgYW5kIG9mZiBieSBkZWZhdWx0LiBUZXN0cyByZXF1aXJlIHJl
YWwgZG9tYWluIG5hbWVzLgorCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5h
dmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgICAgICBBbGwgdGhyZWUgZnVuY3Rpb25z
IG5vdyBtb3JlIGNvbnNlcnZhdGl2ZSBpbiBjYWxscyB0byBtX3N0b3JlLT5maXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIoKS4gCisgICAgICAgICAgICBUaGUgb25seSBmaXJlIHdoZW4gYW4gaW1w
b3J0YW50IHN0YXRpc3RpYyBoYXMgY2hhbmdlZCBvciBkYXRhIHJlY29yZHMgaGF2ZSBwcmV2aW91
c2x5IGJlZW4KKyAgICAgICAgICAgIHJlbW92ZWQgZm9yIHRoZSBkb21haW4gaW4gcXVlc3Rpb24u
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjph
cHBlbmRIYXNoQ291bnRlZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjptZXJnZSk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaDoK
KyAgICAgICAgICAgIEFkZGVkIHRoZSBkYXRhUmVjb3Jkc1JlbW92ZWQgc3RhdGlzdGljLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyk6
CisgICAgICAgICAgICBJdCBubyBsb25nZXIgZ2F0ZXMgcHJvY2Vzc2luZyBvbiB0aGUgbnVtYmVy
IG9mIGRhdGEgY2FwdHVyZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMpOgorICAgICAg
ICAgICAgVXBkYXRlIGZ1bmN0aW9uIGZvciB0aGUgbmV3IGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0
aXN0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhh
c0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJvY2Vzc2luZyk6IERlbGV0ZWQuCisgICAgICAgICAg
ICBObyBsb25nZXIgbmVlZGVkIHNpbmNlIHdlIG5vIGxvbmdlciBnYXRlIHByb2Nlc3Npbmcgb24g
dGhlIG51bWJlciBvZiBkYXRhIGNhcHR1cmVkLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNi0xMS0xMSAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KIAogICAgICAgICBbQ1NTIFBhcnNlcl0gRml4IGJhc2ljIHNoYXBlIHBhcnNpbmcK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNw
cAkocmV2aXNpb24gMjA4NjAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE3ICsxMDMsMjIgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZwogICAgIAogICAgIGlmICh0YXJnZXRQ
cmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURv
bWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAg
ICBhdXRvIHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodGFyZ2V0VVJMKTsK
ICAgICBhdXRvIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwotICAgIAorCisgICAg
Ly8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRz
IGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQgPiAwOworCiAgICAgaWYg
KGlzTWFpbkZyYW1lKQogICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5h
dmlnYXRlZFRvQmVmb3JlID0gdHJ1ZTsKICAgICBlbHNlIHsKICAgICAgICAgdGFyZ2V0U3RhdGlz
dGljcy5zdWJmcmFtZUhhc0JlZW5Mb2FkZWRCZWZvcmUgPSB0cnVlOwogCiAgICAgICAgIGF1dG8g
bWFpbkZyYW1lT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYWluRnJhbWVVUkwpOwot
ICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRk
KG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgICAgICBpZiAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hv
dWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAg
aWYgKGlzUmVkaXJlY3QpIHsKQEAgLTE1Miw3ICsxNTcsOCBAQCB2b2lkIFJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dGcmFtZU5hdmlnCiAgICAgfQogCiAgICAgbV9zdG9yZS0+c2V0UmVzb3VyY2VT
dGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRh
cmdldFN0YXRpc3RpY3MpKTsKLSAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKTsKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQorICAgICAg
ICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KICAgICAKIHZvaWQg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSog
ZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKQEAgLTE4NSw4ICsxOTEsMTMgQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyYwogCiAgICAgYXV0byYgdGFyZ2V0U3RhdGlz
dGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
dGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHBy
ZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisgICAgYm9vbCBz
aG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFS
ZWNvcmRzUmVtb3ZlZCA+IDA7CisKICAgICBhdXRvIG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKLSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOwor
ICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJp
bWFyeURvbWFpbik7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
ID0gdHJ1ZTsKIAogICAgIGlmIChpc1JlZGlyZWN0KSB7CiAgICAgICAgIGF1dG8mIHJlZGlyZWN0
aW5nT3JpZ2luU3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURvbWFpbik7CkBAIC0yMDAsNyArMjExLDkgQEAg
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyYwogICAgICAgICArK3JlZGly
ZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsK
ICAgICAgICAgKyt1cGRhdGVkVGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRp
cmVjdGVkVG87CiAKLSAgICAgICAgcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICBh
dXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9SZXN1bHQgPSByZWRpcmVjdGluZ09yaWdp
blN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFy
eURvbWFpbik7CisgICAgICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0cnVlOwogCiAgICAgICAgICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKIApAQCAtMjE0LDggKzIyNyw5IEBAIHZvaWQgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKICAgICAgICAgCiAgICAgICAgIHRhcmdl
dFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRv
dGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRl
ZDsKICAgICB9Ci0gICAgCi0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KCk7CisKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQorICAgICAg
ICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUs
IGNvbnN0IFVSTCYgdGFyZ2V0VVJMKQpAQCAtMjQ1LDE3ICsyNTksMjMgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
JiB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKKworICAgIC8vIEFsd2F5cyBmaXJl
IGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21h
aW4KKyAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0
YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKICAgICAKICAgICBhdXRvIG1haW5GcmFt
ZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKLSAgICB0YXJn
ZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFt
ZVByaW1hcnlEb21haW4pOwotICAgIAorICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgaWYgKHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2hvdWxkRmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKKwogICAgICsrdGFyZ2V0U3RhdGlzdGlj
cy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50OwogICAgIAogICAgIGF1dG8gdG90
YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRlZE1hcC5zaXplKCksIDFVKTsKICAg
ICAKICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291
bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkg
LyB0b3RhbFZpc2l0ZWQ7CiAKLSAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKTsKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKQorICAgICAg
ICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1
bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5jcHAJKHJldmlzaW9uIDIwODYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXllCiAgICAgLy8gUHJldmFs
ZW50IFJlc291cmNlCiAgICAgZW5jb2RlSGFzaENvdW50ZWRTZXQoZW5jb2RlciwgInJlZGlyZWN0
ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zIiwgcmVkaXJlY3RlZFRvT3RoZXJQcmV2
YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiaXNQcmV2YWxl
bnRSZXNvdXJjZSIsIGlzUHJldmFsZW50UmVzb3VyY2UpOworICAgIGVuY29kZXIuZW5jb2RlVUlu
dDMyKCJkYXRhUmVjb3Jkc1JlbW92ZWQiLCBkYXRhUmVjb3Jkc1JlbW92ZWQpOwogfQogCiBzdGF0
aWMgdm9pZCBkZWNvZGVIYXNoQ291bnRlZFNldChLZXllZERlY29kZXImIGRlY29kZXIsIGNvbnN0
IFN0cmluZyYgbGFiZWwsIEhhc2hDb3VudGVkU2V0PFN0cmluZz4mIGhhc2hDb3VudGVkU2V0KQpA
QCAtMTcxLDYgKzE3Miw5IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKEtl
eWUKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlQm9vbCgiaXNQcmV2YWxlbnRSZXNvdXJjZSIsIGlz
UHJldmFsZW50UmVzb3VyY2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgLy8g
S2V5cyBtaXNzaW5nIGZyb20gZWFybGllciBmb3JtYXRzIHNob3VsZCBub3QgY2F1c2UgdGhlIGZ1
bmN0aW9uIHRvIHJldHVybiBmYWxzZQorICAgIGRlY29kZXIuZGVjb2RlVUludDMyKCJkYXRhUmVj
b3Jkc1JlbW92ZWQiLCBkYXRhUmVjb3Jkc1JlbW92ZWQpOworICAgIAogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xOTgsNyArMjAyLDYgQEAgc3RhdGljIHZvaWQgYXBwZW5kSGFzaENvdW50ZWRT
ZXQoU3RyaW5nQgogICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihlbnRyeS52YWx1ZSk7CiAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KLSAgICAKIH0KIAogU3RyaW5nIFJl
c291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKCkgY29uc3QKQEAgLTI2OCw2ICsyNzEsMTAg
QEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogICAgIC8vIFByZXZh
bGVudCBSZXNvdXJjZQogICAgIGFwcGVuZEhhc2hDb3VudGVkU2V0KGJ1aWxkZXIsICJyZWRpcmVj
dGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucyIsIHJlZGlyZWN0ZWRUb090aGVyUHJl
dmFsZW50UmVzb3VyY2VPcmlnaW5zKTsKICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1By
ZXZhbGVudFJlc291cmNlIiwgaXNQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgICAgZGF0YVJlY29yZHNSZW1vdmVkOiAiKTsKKyAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihkYXRhUmVjb3Jkc1JlbW92ZWQpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwor
CiAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwpAQCAtMzE0LDYgKzMyMSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6bWVy
Z2UoY29uc3QKICAgICAvLyBQcmV2YWxlbnQgcmVzb3VyY2Ugc3RhdHMKICAgICBtZXJnZUhhc2hD
b3VudGVkU2V0KHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLCBvdGhl
ci5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucyk7CiAgICAgaXNQcmV2
YWxlbnRSZXNvdXJjZSB8PSBvdGhlci5pc1ByZXZhbGVudFJlc291cmNlOworICAgIGRhdGFSZWNv
cmRzUmVtb3ZlZCArPSBvdGhlci5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNp
b24gMjA4NjAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyB7CiAgICAgLy8gUHJldmFsZW50IHJlc291cmNlIHN0YXRzCiAgICAgSGFzaENv
dW50ZWRTZXQ8U3RyaW5nPiByZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lu
czsKICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgeyBmYWxzZSB9OworICAgIHVuc2lnbmVk
IGRhdGFSZWNvcmRzUmVtb3ZlZCB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMDg2MDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
OCArNDAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtaW5pbXVtT3JpZ2luc0xvYWRlZEZvclByb2Nlc3NpbmcgPSAxMDA7Ci0KIFJlZjxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRl
KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUoKSk7CkBAIC0xNDMsMTQgKzE0MSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpmaXJlRGEKICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7CiB9CiAKLWJvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nl
c3NpbmcoKQotewotICAgIHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPj0g
bWluaW11bU9yaWdpbnNMb2FkZWRGb3JQcm9jZXNzaW5nOwotfQotCiB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3Moc3RkOjpmdW5jdGlvbjx2b2lkKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmKT4mJiBwcm9jZXNzRnVuY3Rpb24pCiB7Ci0gICAgQVNTRVJU
KGhhc0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJvY2Vzc2luZygpKTsKICAgICBmb3IgKGF1dG8m
IHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCiAg
ICAgICAgIHByb2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7CiB9CkBAIC0xNjQsNCAr
MTU2LDEyIEBAIFZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG8KICAgICB9
CiAgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKIH0KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucykKK3sKKyAgICBmb3Ig
KGF1dG8mIHByZXZhbGVudFJlc291cmNlRG9tYWluIDogcHJldmFsZW50UmVzb3VyY2VEb21haW5z
KSB7CisgICAgICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc2ljID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7
CisgICAgICAgICsrc3RhdGlzaWMuZGF0YVJlY29yZHNSZW1vdmVkOworICAgIH0KK30KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgJKHJldmlzaW9uIDIwODYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAgKzYxLDEw
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJvY2Vz
c2luZygpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3Moc3RkOjpm
dW5jdGlvbjx2b2lkKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mJik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNl
ckludGVyYWN0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0aWNz
Rm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnMpOwogcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
KSA9IGRlZmF1bHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODYyOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE2
LTExLTExICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
c291cmNlIGxvYWQgc3RhdGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50
IHJlbW92ZWQgZGF0YSByZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAg
ICAgICAgICAgQ29uc2lzdGVudCBuYW1pbmcgd2l0aCAncmVtb3ZlJyByYXRoZXIgdGhhbiAnZGVs
ZXRlJy4gTm93IHJlbW92ZXMgbG9jYWxTdG9yYWdlLAorICAgICAgICAgICAgSW5kZXhEQiwgZGlz
ayBjYWNoZSwgYW5kIG1lbW9yeSBjYWNoZSB0b28uIFVwZGF0ZXMgc3RhdGlzdGljcyB3aXRoIG51
bWJlciBvZgorICAgICAgICAgICAgdGltZXMgaXQgaGFzIHJlbW92ZWQgZGF0YSByZWNvcmRzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0
YVJlY29yZHMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgICAgIENvbnNpc3RlbnQgbmFtaW5nIHdpdGggJ3Jl
bW92ZScgcmF0aGVyIHRoYW4gJ2RlbGV0ZScuCisKIDIwMTYtMTEtMTEgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gYXV0b2NvcnJlY3QgYW5k
IGF1dG9jYXBpdGFsaXplIGF0dHJpYnV0ZXMgZG8gbm90IHdvcmsgaW4gY29udGVudGVkaXRhYmxl
IGVsZW1lbnRzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjA4NjAwKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgY29uc3QgYXV0byBudW1iZXJP
ZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRhUmVjb3JkcyA9IDYwMDsKK3N0YXRpYyBjb25zdCBh
dXRvIG51bWJlck9mU2Vjb25kc0JldHdlZW5SZW1vdmluZ0RhdGFSZWNvcmRzID0gNjA7CiBzdGF0
aWMgY29uc3QgYXV0byBmZWF0dXJlVmVjdG9yTGVuZ3RoVGhyZXNob2xkID0gMzsKK3N0YXRpYyBP
cHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlc1RvUmVtb3ZlOwogCiBS
ZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkpCiB7CkBAIC05OSw5ICsxMDAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y2xhCiAgICAgfQogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Y2xlYXJEYXRhUmVjb3JkcygpCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMoKQogewotICAgIGlmIChtX2RhdGFTdG9yZUNsZWFyUGVu
ZGluZykKKyAgICBpZiAobV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nKQogICAgICAgICByZXR1
cm47CiAKICAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjb3Jl
U3RvcmUoKS5wcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7
CkBAIC0xMDksNDEgKzExMCw1MyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlCiAgICAgICAgIHJldHVybjsKIAogICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgp
OwotICAgIGlmICghbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQpIHsKLSAgICAgICAg
bV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgPSBub3c7CisgICAgaWYgKCFtX2xhc3RU
aW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCkgeworICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29y
ZHNXZXJlUmVtb3ZlZCA9IG5vdzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChu
b3cgPCAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgKyBudW1iZXJPZlNlY29uZHNC
ZXR3ZWVuQ2xlYXJpbmdEYXRhUmVjb3JkcykpCisgICAgaWYgKG5vdyA8IChtX2xhc3RUaW1lRGF0
YVJlY29yZHNXZXJlUmVtb3ZlZCArIG51bWJlck9mU2Vjb25kc0JldHdlZW5SZW1vdmluZ0RhdGFS
ZWNvcmRzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcg
PSB0cnVlOwotICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkID0gbm93OworICAg
IG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IHRydWU7CisgICAgbV9sYXN0VGltZURhdGFS
ZWNvcmRzV2VyZVJlbW92ZWQgPSBub3c7CisKKyAgICBpZiAoZGF0YVR5cGVzVG9SZW1vdmUuaXNF
bXB0eSgpKSB7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6
Q29va2llczsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2U7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJz
aXRlRGF0YVR5cGU6OkRpc2tDYWNoZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vi
c2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZTsKKyAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8gdGhl
IG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10gKCkgbXV0YWJsZSB7CiAgICAgICAg
IGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUuZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyB9LCBbcHJldmFsZW50UmVz
b3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShh
dXRvIHdlYnNpdGVEYXRhUmVjb3JkcykgeworICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNo
RGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgeyB9LCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0g
V1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRh
UmVjb3JkcykgewogICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVj
b3JkczsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhEYXRhUmVjb3JkczsKICAgICAgICAgICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFSZWNv
cmQgOiB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHBy
ZXZhbGVudFJlc291cmNlRG9tYWluIDogcHJldmFsZW50UmVzb3VyY2VEb21haW5zKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKHByZXZhbGVudFJlc291cmNlRG9tYWluKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBzdWZmaXhTdGFydCA9IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3Bs
YXlOYW1lLmxlbmd0aCgpIC0gcHJldmFsZW50UmVzb3VyY2VEb21haW4ubGVuZ3RoKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeFN0YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3Jk
LmRpc3BsYXlOYW1lW3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtz
dWZmaXhTdGFydCAtIDFdID09ICcuJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFSZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZChw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9k
YXRhU3RvcmVDbGVhclBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX2RhdGFSZWNv
cmRzUmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwot
ICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVEYXRhKFdlYnNpdGVEYXRhVHlwZTo6
Q29va2llcywgeyBXVEZNb3ZlKGRhdGFSZWNvcmRzKSB9LCBbdGhpc10gewotICAgICAgICAgICAg
ICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICB3ZWJzaXRl
RGF0YVN0b3JlLnJlbW92ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIHsgV1RGTW92ZShkYXRhUmVj
b3JkcykgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyA9IFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzKSwgdGhpc10geworICAg
ICAgICAgICAgICAgIGNvcmVTdG9yZSgpLnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJl
Y29yZHMocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzKTsKKyAgICAgICAg
ICAgICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE1MywxMyArMTY2LDExIEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXMKIHsKICAgICBjb3JlU3RvcmUoKS5tZXJn
ZVN0YXRpc3RpY3Mob3JpZ2lucyk7CiAKLSAgICBpZiAoY29yZVN0b3JlKCkuaGFzRW5vdWdoRGF0
YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCkpIHsKLSAgICAgICAgY29yZVN0b3JlKCkucHJvY2Vz
c1N0YXRpc3RpY3MoW3RoaXNdIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRp
c3RpYykgewotICAgICAgICAgICAgY2xhc3NpZnlSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYyk7
Ci0gICAgICAgICAgICBjbGVhckRhdGFSZWNvcmRzKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLQor
ICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKKyAgICAgICAgY2xhc3NpZnlSZXNvdXJjZShy
ZXNvdXJjZVN0YXRpc3RpYyk7CisgICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7CisgICAgfSk7
CisgICAgCiAgICAgYXV0byBlbmNvZGVyID0gY29yZVN0b3JlKCkuY3JlYXRlRW5jb2RlckZyb21E
YXRhKCk7CiAgICAgCiAgICAgd3JpdGVFbmNvZGVyVG9EaXNrKCplbmNvZGVyLmdldCgpLCAiZnVs
bF9icm93c2luZ19zZXNzaW9uIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAy
MDg2MDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQgY2xhc3NpZnlSZXNvdXJjZShX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBjbGVhckRhdGFSZWNv
cmRzKCk7CisgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcygpOwogCiAgICAgU3RyaW5nIHBlcnNp
c3RlbnRTdG9yYWdlUGF0aChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKIApAQCAtODksOCAr
ODksOCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3N0b3JhZ2VQYXRoOwogICAgIGJvb2wgbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07CiAKLSAgICBkb3VibGUgbV9s
YXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgeyAwIH07Ci0gICAgYm9vbCBtX2RhdGFTdG9y
ZUNsZWFyUGVuZGluZyB7IGZhbHNlIH07CisgICAgZG91YmxlIG1fbGFzdFRpbWVEYXRhUmVjb3Jk
c1dlcmVSZW1vdmVkIHsgMCB9OworICAgIGJvb2wgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5n
IHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294755</attachid>
            <date>2016-11-14 15:05:24 -0800</date>
            <delta_ts>2016-11-15 11:03:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164659-20161114150105.patch</filename>
            <type>text/plain</type>
            <size>19935</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE2LTExLTE0ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIGxvYWQgc3Rh
dGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50IHJlbW92ZWQgZGF0YSBy
ZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBmZWF0
dXJlIGlzIGJlaGluZCBhIGZsYWcgYW5kIG9mZiBieSBkZWZhdWx0LiBUZXN0cyByZXF1aXJlIHJl
YWwgZG9tYWluIG5hbWVzLgorCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5h
dmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgICAgICBBbGwgdGhyZWUgZnVuY3Rpb25z
IG5vdyBtb3JlIGNvbnNlcnZhdGl2ZSBpbiBjYWxscyB0byBtX3N0b3JlLT5maXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIoKS4gCisgICAgICAgICAgICBUaGUgb25seSBmaXJlIHdoZW4gYW4gaW1w
b3J0YW50IHN0YXRpc3RpYyBoYXMgY2hhbmdlZCBvciBkYXRhIHJlY29yZHMgaGF2ZSBwcmV2aW91
c2x5IGJlZW4KKyAgICAgICAgICAgIHJlbW92ZWQgZm9yIHRoZSBkb21haW4gaW4gcXVlc3Rpb24u
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjph
cHBlbmRIYXNoQ291bnRlZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjptZXJnZSk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaDoK
KyAgICAgICAgICAgIEFkZGVkIHRoZSBkYXRhUmVjb3Jkc1JlbW92ZWQgc3RhdGlzdGljLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyk6
CisgICAgICAgICAgICBJdCBubyBsb25nZXIgZ2F0ZXMgcHJvY2Vzc2luZyBvbiB0aGUgbnVtYmVy
IG9mIGRhdGEgY2FwdHVyZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMpOgorICAgICAg
ICAgICAgVXBkYXRlIGZ1bmN0aW9uIGZvciB0aGUgbmV3IGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0
aXN0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhh
c0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJvY2Vzc2luZyk6IERlbGV0ZWQuCisgICAgICAgICAg
ICBObyBsb25nZXIgbmVlZGVkIHNpbmNlIHdlIG5vIGxvbmdlciBnYXRlIHByb2Nlc3Npbmcgb24g
dGhlIG51bWJlciBvZiBkYXRhIGNhcHR1cmVkLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgICAgIEFkZGVkIGV4cG9ydGVkIHVwZGF0ZVN0
YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMgZnVuY3Rpb24uCisKIDIwMTYtMTEtMTIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbU1ZHXSBNb3ZpbmcgbW9yZSBz
cGVjaWFsIGNhc2luZyBvZiBTVkcgb3V0IG9mIHRoZSBiaW5kaW5ncyAtIFNWR051bWJlci9TVkdQ
b2ludC9TVkdSZWN0L1NWR0xlbmd0aC9TVkdUcmFuc2Zvcm0vU1ZHTWF0cml4CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9u
IDIwODcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNyArMTAzLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAKICAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFp
biA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291
cmNlUHJpbWFyeURvbWFpbikKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgYXV0byB0YXJn
ZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRhcmdldFVSTCk7CiAgICAgYXV0byB0
YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLSAgICAKKworICAgIC8vIEFsd2F5cyBm
aXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBk
b21haW4KKyAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRhcmdl
dFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKKwogICAgIGlmIChpc01haW5GcmFt
ZSkKICAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0Jl
Zm9yZSA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3ViZnJh
bWVIYXNCZWVuTG9hZGVkQmVmb3JlID0gdHJ1ZTsKIAogICAgICAgICBhdXRvIG1haW5GcmFtZU9y
aWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKLSAgICAgICAgdGFy
Z2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQ
cmltYXJ5RG9tYWluKTsKKyAgICAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
UmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFk
ZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGlmIChpc1JlZGly
ZWN0KSB7CkBAIC0xNTIsNyArMTU3LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
RnJhbWVOYXZpZwogICAgIH0KIAogICAgIG1fc3RvcmUtPnNldFJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbiwgV1RGTW92ZSh0YXJnZXRTdGF0aXN0
aWNzKSk7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAg
aWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCiB2b2lkIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpCkBAIC0xODUsOCArMTkxLDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1N1YnJlc291cmMKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0
b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1h
cnlEb21haW4pOwogCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHJl
bW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hvdWxkRmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92
ZWQgPiAwOworCiAgICAgYXV0byBtYWluRnJhbWVPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKG1haW5GcmFtZVVSTCk7Ci0gICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBhdXRvIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4p
OworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CiAK
ICAgICBpZiAoaXNSZWRpcmVjdCkgewogICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0
YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHNvdXJjZVByaW1hcnlEb21haW4pOwpAQCAtMjAwLDcgKzIxMSw5IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKICAgICAgICAgKytyZWRpcmVjdGluZ09yaWdp
blN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207CiAgICAgICAgICsr
dXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZFRvOwog
Ci0gICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgYXV0byBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21haW4pOwor
ICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsK
IAogICAgICAgICArK3VwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1
YnJlc291cmNlQ291bnQ7CiAKQEAgLTIxNCw4ICsyMjcsOSBAQCB2b2lkIFJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAgICAgIAogICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9m
T3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAgICAgfQot
ICAgIAotICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworCisgICAg
aWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwm
IHRhcmdldFVSTCkKQEAgLTI0NSwxNyArMjU5LDIzIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldEwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgdGFyZ2V0U3Rh
dGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZl
IHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisgICAgYm9v
bCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRh
dGFSZWNvcmRzUmVtb3ZlZCA+IDA7CiAgICAgCiAgICAgYXV0byBtYWluRnJhbWVPcmlnaW4gPSBT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7Ci0gICAgdGFyZ2V0U3RhdGlzdGlj
cy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9t
YWluKTsKLSAgICAKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1
bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRk
KG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlciA9IHRydWU7CisKICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKICAgICAKICAgICBhdXRvIHRvdGFsVmlzaXRlZCA9
IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CiAgICAgCiAgICAgdGFy
Z2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5
VG90YWxOdW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRT
dGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNp
dGVkOwogCi0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAg
aWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3Bw
CShyZXZpc2lvbiAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUoS2V5ZQogICAgIC8vIFByZXZhbGVudCBSZXNvdXJj
ZQogICAgIGVuY29kZUhhc2hDb3VudGVkU2V0KGVuY29kZXIsICJyZWRpcmVjdGVkVG9PdGhlclBy
ZXZhbGVudFJlc291cmNlT3JpZ2lucyIsIHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3Vy
Y2VPcmlnaW5zKTsKICAgICBlbmNvZGVyLmVuY29kZUJvb2woImlzUHJldmFsZW50UmVzb3VyY2Ui
LCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBlbmNvZGVyLmVuY29kZVVJbnQzMigiZGF0YVJl
Y29yZHNSZW1vdmVkIiwgZGF0YVJlY29yZHNSZW1vdmVkKTsKIH0KIAogc3RhdGljIHZvaWQgZGVj
b2RlSGFzaENvdW50ZWRTZXQoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBTdHJpbmcmIGxh
YmVsLCBIYXNoQ291bnRlZFNldDxTdHJpbmc+JiBoYXNoQ291bnRlZFNldCkKQEAgLTE3MSw2ICsx
NzIsOSBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUJvb2woImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJl
c291cmNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIC8vIEtleXMgbWlzc2lu
ZyBmcm9tIGVhcmxpZXIgZm9ybWF0cyBzaG91bGQgbm90IGNhdXNlIHRoZSBmdW5jdGlvbiB0byBy
ZXR1cm4gZmFsc2UKKyAgICBkZWNvZGVyLmRlY29kZVVJbnQzMigiZGF0YVJlY29yZHNSZW1vdmVk
IiwgZGF0YVJlY29yZHNSZW1vdmVkKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTk4LDcgKzIwMiw2IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEhhc2hDb3VudGVkU2V0KFN0cmluZ0IK
ICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoZW50cnkudmFsdWUpOwogICAgICAgICBidWls
ZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9Ci0gICAgCiB9CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzOjp0b1N0cmluZygpIGNvbnN0CkBAIC0yNjgsNiArMjcxLDEwIEBAIFN0cmluZyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0cmluZygKICAgICAvLyBQcmV2YWxlbnQgUmVzb3Vy
Y2UKICAgICBhcHBlbmRIYXNoQ291bnRlZFNldChidWlsZGVyLCAicmVkaXJlY3RlZFRvT3RoZXJQ
cmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMiLCByZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291
cmNlT3JpZ2lucyk7CiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaXNQcmV2YWxlbnRSZXNv
dXJjZSIsIGlzUHJldmFsZW50UmVzb3VyY2UpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
ICAgIGRhdGFSZWNvcmRzUmVtb3ZlZDogIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoZGF0
YVJlY29yZHNSZW1vdmVkKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKwogICAgIGJ1aWxk
ZXIuYXBwZW5kKCdcbicpOwogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTMx
NCw2ICszMjEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiAg
ICAgLy8gUHJldmFsZW50IHJlc291cmNlIHN0YXRzCiAgICAgbWVyZ2VIYXNoQ291bnRlZFNldChy
ZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucywgb3RoZXIucmVkaXJlY3Rl
ZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGlzUHJldmFsZW50UmVzb3Vy
Y2UgfD0gb3RoZXIuaXNQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICBkYXRhUmVjb3Jkc1JlbW92ZWQg
Kz0gb3RoZXIuZGF0YVJlY29yZHNSZW1vdmVkOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgJKHJldmlzaW9uIDIwODcwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAgc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
ewogICAgIC8vIFByZXZhbGVudCByZXNvdXJjZSBzdGF0cwogICAgIEhhc2hDb3VudGVkU2V0PFN0
cmluZz4gcmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnM7CiAgICAgYm9v
bCBpc1ByZXZhbGVudFJlc291cmNlIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBkYXRhUmVjb3Jk
c1JlbW92ZWQgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAkocmV2aXNpb24gMjA4NzA1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bU9y
aWdpbnNMb2FkZWRGb3JQcm9jZXNzaW5nID0gMTAwOwotCiBSZWY8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkpOwpAQCAt
MTQxLDE0ICsxMzksOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURh
CiAgICAgICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aGFzRW5vdWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCkKLXsK
LSAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpID49IG1pbmltdW1Pcmln
aW5zTG9hZGVkRm9yUHJvY2Vzc2luZzsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJik+JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewotICAgIEFTU0VSVChoYXNFbm91Z2hE
YXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSk7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0
YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQogICAgICAgICBwcm9j
ZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOwogfQpAQCAtMTYyLDQgKzE1NCwxMiBAQCBW
ZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvCiAgICAgfQogICAgIHJldHVy
biBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCit7CisgICAgZm9yIChhdXRvJiBwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgeworICAgICAg
ICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXNpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50UmVzb3VyY2VEb21haW4pOworICAgICAgICAr
K3N0YXRpc2ljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9Cit9CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShy
ZXZpc2lvbiAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlv
bigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWRE
YXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21haW5z
KTsKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkgPSBkZWZhdWx0
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg3MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxNi0xMS0xNCAgSm9o
biBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBsb2Fk
IHN0YXRpc3RpY3M6IENvdmVyIGZ1cnRoZXIgZGF0YSByZWNvcmRzLCBjb3VudCByZW1vdmVkIGRh
dGEgcmVjb3JkcywgYW5kIG9ubHkgZmlyZSBoYW5kbGVyIHdoZW4gbmVlZGVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ2NTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIENv
bnNpc3RlbnQgbmFtaW5nIHdpdGggJ3JlbW92ZScgcmF0aGVyIHRoYW4gJ2RlbGV0ZScuIE5vdyBy
ZW1vdmVzIGxvY2FsU3RvcmFnZSwKKyAgICAgICAgICAgIEluZGV4REIsIGRpc2sgY2FjaGUsIGFu
ZCBtZW1vcnkgY2FjaGUgdG9vLiBVcGRhdGVzIHN0YXRpc3RpY3Mgd2l0aCBudW1iZXIgb2YKKyAg
ICAgICAgICAgIHRpbWVzIGl0IGhhcyByZW1vdmVkIGRhdGEgcmVjb3Jkcy4KKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVXBkYXRlZCk6CisgICAgICAgICAgICBObyBsb25nZXIgY2hlY2tzIHdoZXRoZXIgaXQgaGFz
IGVub3VnaCBkYXRhIHNpbmNlIHRoZSBjbGFzc2lmaWNhdGlvbiBydWxlcworICAgICAgICAgICAg
YWJzb2x1dGUsIG5vdCByZWxhdGl2ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICAgICBD
b25zaXN0ZW50IG5hbWluZyB3aXRoICdyZW1vdmUnIHJhdGhlciB0aGFuICdkZWxldGUnLgorCiAy
MDE2LTExLTE0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAg
IFtNYWNdW2lPU11bV0syXSBUaWdodGVuIHBlcm1pc3Npb25zIHRvIGNoYW5nZSBDYXBzTG9jayBk
ZWxheQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIwODcwNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIGNvbnN0IGF1dG8gbnVtYmVyT2ZTZWNv
bmRzQmV0d2VlbkNsZWFyaW5nRGF0YVJlY29yZHMgPSA2MDA7CitzdGF0aWMgY29uc3QgYXV0byBu
dW1iZXJPZlNlY29uZHNCZXR3ZWVuUmVtb3ZpbmdEYXRhUmVjb3JkcyA9IDYwOwogc3RhdGljIGNv
bnN0IGF1dG8gZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZCA9IDM7CitzdGF0aWMgT3B0aW9u
U2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1JlbW92ZTsKIAogUmVmPFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KQogewpAQCAtOTksOSArMTAwLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNsYQogICAgIH0KIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyRGF0YVJlY29yZHMoKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnJlbW92ZURhdGFSZWNvcmRzKCkKIHsKLSAgICBpZiAobV9kYXRhU3RvcmVDbGVhclBlbmRpbmcp
CisgICAgaWYgKG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gY29yZVN0b3Jl
KCkucHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbigpOwpAQCAt
MTA5LDQxICsxMTAsNTMgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZQogICAgICAgICByZXR1cm47CiAKICAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKLSAg
ICBpZiAoIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkKSB7Ci0gICAgICAgIG1fbGFz
dFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkID0gbm93OworICAgIGlmICghbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQpIHsKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2Vy
ZVJlbW92ZWQgPSBub3c7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobm93IDwg
KG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkICsgbnVtYmVyT2ZTZWNvbmRzQmV0d2Vl
bkNsZWFyaW5nRGF0YVJlY29yZHMpKQorICAgIGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgKyBudW1iZXJPZlNlY29uZHNCZXR3ZWVuUmVtb3ZpbmdEYXRhUmVjb3Jk
cykpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nID0gdHJ1
ZTsKLSAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCA9IG5vdzsKKyAgICBtX2Rh
dGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSB0cnVlOworICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jk
c1dlcmVSZW1vdmVkID0gbm93OworCisgICAgaWYgKGRhdGFUeXBlc1RvUmVtb3ZlLmlzRW1wdHko
KSkgeworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkNvb2tp
ZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxT
dG9yYWdlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Oklu
ZGV4ZWREQkRhdGFiYXNlczsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURh
dGFUeXBlOjpEaXNrQ2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVE
YXRhVHlwZTo6TWVtb3J5Q2FjaGU7CisgICAgfQogCiAgICAgLy8gU3dpdGNoIHRvIHRoZSBtYWlu
IHRocmVhZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCiAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBXVEZNb3ZlKHBy
ZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXNdICgpIG11dGFibGUgewogICAgICAgICBhdXRv
JiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZl
dGNoRGF0YShXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMsIHsgfSwgW3ByZXZhbGVudFJlc291cmNl
RG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3
ZWJzaXRlRGF0YVJlY29yZHMpIHsKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEo
ZGF0YVR5cGVzVG9SZW1vdmUsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29y
ZHMpIHsKICAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0YVJlY29yZHM7
CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRo
RGF0YVJlY29yZHM7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVjb3JkIDog
d2Vic2l0ZURhdGFSZWNvcmRzKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgewogICAgICAgICAg
ICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gc3VmZml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFt
ZS5sZW5ndGgoKSAtIHByZXZhbGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNw
bGF5TmFtZVtzdWZmaXhTdGFydCAtIDFdID09ICcuJykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc3VmZml4U3RhcnQgfHwgd2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWVbc3VmZml4
U3RhcnQgLSAxXSA9PSAnLicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVj
b3Jkcy5hcHBlbmQod2Vic2l0ZURhdGFSZWNvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcy5hcHBlbmQocHJldmFs
ZW50UmVzb3VyY2VEb21haW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoIWRhdGFSZWNvcmRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIG1fZGF0YVN0
b3JlQ2xlYXJQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1Jl
bW92YWxQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAg
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YShXZWJzaXRlRGF0YVR5cGU6OkNvb2tp
ZXMsIHsgV1RGTW92ZShkYXRhUmVjb3JkcykgfSwgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICBt
X2RhdGFTdG9yZUNsZWFyUGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgd2Vic2l0ZURhdGFT
dG9yZS5yZW1vdmVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCB7IFdURk1vdmUoZGF0YVJlY29yZHMp
IH0sIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMgPSBXVEZNb3ZlKHBy
ZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyksIHRoaXNdIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFS
ZWNvcmRzKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7CisgICAgICAg
ICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xNTMsMTMgKzE2NiwxMSBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzCiB7CiAgICAgY29yZVN0b3JlKCkubWVy
Z2VTdGF0aXN0aWNzKG9yaWdpbnMpOwogCi0gICAgaWYgKGNvcmVTdG9yZSgpLmhhc0Vub3VnaERh
dGFGb3JTdGF0aXN0aWNzUHJvY2Vzc2luZygpKSB7Ci0gICAgICAgIGNvcmVTdG9yZSgpLnByb2Nl
c3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0
aXN0aWMpIHsKLSAgICAgICAgICAgIGNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMp
OwotICAgICAgICAgICAgY2xlYXJEYXRhUmVjb3JkcygpOwotICAgICAgICB9KTsKLSAgICB9Ci0K
KyAgICBjb3JlU3RvcmUoKS5wcm9jZXNzU3RhdGlzdGljcyhbdGhpc10gKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSB7CisgICAgICAgIGNsYXNzaWZ5UmVzb3VyY2Uo
cmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICByZW1vdmVEYXRhUmVjb3JkcygpOworICAgIH0p
OworICAgIAogICAgIGF1dG8gZW5jb2RlciA9IGNvcmVTdG9yZSgpLmNyZWF0ZUVuY29kZXJGcm9t
RGF0YSgpOwogICAgIAogICAgIHdyaXRlRW5jb2RlclRvRGlzaygqZW5jb2Rlci5nZXQoKSwgImZ1
bGxfYnJvd3Npbmdfc2Vzc2lvbiIpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24g
MjA4NzA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIGhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICB2b2lkIGNsYXNzaWZ5UmVzb3VyY2Uo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHZvaWQgY2xlYXJEYXRhUmVj
b3JkcygpOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoKTsKIAogICAgIFN0cmluZyBwZXJz
aXN0ZW50U3RvcmFnZVBhdGgoY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAKQEAgLTg5LDgg
Kzg5LDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zdG9yYWdlUGF0aDsKICAgICBib29sIG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgeyBmYWxzZSB9OwogCi0gICAgZG91YmxlIG1f
bGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkIHsgMCB9OwotICAgIGJvb2wgbV9kYXRhU3Rv
cmVDbGVhclBlbmRpbmcgeyBmYWxzZSB9OworICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29y
ZHNXZXJlUmVtb3ZlZCB7IDAgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGlu
ZyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294852</attachid>
            <date>2016-11-15 11:03:41 -0800</date>
            <delta_ts>2016-11-15 11:06:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164659-20161115110338.patch</filename>
            <type>text/plain</type>
            <size>22197</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTExLTE1ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIGxvYWQgc3Rh
dGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50IHJlbW92ZWQgZGF0YSBy
ZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBmZWF0
dXJlIGlzIGJlaGluZCBhIGZsYWcgYW5kIG9mZiBieSBkZWZhdWx0LiBUZXN0cyByZXF1aXJlIHJl
YWwgZG9tYWluIG5hbWVzLgorCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5h
dmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgICAgICBBbGwgdGhyZWUgZnVuY3Rpb25z
IGFyZSBub3cgbW9yZSBjb25zZXJ2YXRpdmUgaW4gY2FsbHMgdG8KKyAgICAgICAgICAgIG1fc3Rv
cmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpLiBUaGV5IG9ubHkgZmlyZSB3aGVuIGFu
IGltcG9ydGFudCBzdGF0aXN0aWMgaGFzCisgICAgICAgICAgICBjaGFuZ2VkIG9yIGRhdGEgcmVj
b3JkcyBoYXZlIHByZXZpb3VzbHkgYmVlbiByZW1vdmVkIGZvciB0aGUgZG9tYWluIGluIHF1ZXN0
aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgICAg
ICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZSk6CisgICAgICAgICAgICBOb3cgdGFr
ZXMgYSB2ZXJzaW9uIHBhcmFtZXRlciB0byBjb250cm9sIHdoaWNoIGtleXMgdG8gZXhwZWN0Lgor
ICAgICAgICAgICAgQWRkZWQgdGhlIGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0aXN0aWMuCisgICAg
ICAgIChXZWJDb3JlOjphcHBlbmRIYXNoQ291bnRlZFNldCk6CisgICAgICAgICAgICBSZW1vdmVk
IHN0cmF5IGxpbmVmZWVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6dG9TdHJpbmcpOgorICAgICAgICAgICAgQWRkZWQgdGhlIGRhdGFSZWNvcmRzUmVtb3ZlZCBz
dGF0aXN0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjptZXJn
ZSk6CisgICAgICAgICAgICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4K
KyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oOgorICAgICAgICAgICAg
QWRkZWQgdGhlIGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0aXN0aWMuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSk6CisgICAgICAg
ICAgICBOb3cgZW5jb2RlcyBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgc3RhdGlzdGljcyBtb2Rl
bC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERh
dGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBOb3cgdHJpZXMgdG8gZGVjb2RlIGEgdmVyc2lv
biBudW1iZXIgYW5kIHBhc3NlcyBpdCBvbiB0byBzdGF0aXN0aWNzIGRlY29kaW5nLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGlj
cyk6CisgICAgICAgICAgICBObyBsb25nZXIgZ2F0ZXMgcHJvY2Vzc2luZyBvbiB0aGUgbnVtYmVy
IG9mIGRhdGEgY2FwdHVyZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMpOgorICAgICAg
ICAgICAgVXBkYXRlIGZ1bmN0aW9uIGZvciB0aGUgbmV3IGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0
aXN0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhh
c0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJvY2Vzc2luZyk6IERlbGV0ZWQuCisgICAgICAgICAg
ICBObyBsb25nZXIgbmVlZGVkIHNpbmNlIHdlIG5vIGxvbmdlciBnYXRlIHByb2Nlc3Npbmcgb24g
dGhlIG51bWJlciBvZiBkYXRhIGNhcHR1cmVkLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNi0xMS0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtTVkddIE1vdmluZyBtb3JlIHNwZWNpYWwgY2FzaW5nIG9mIFNW
RyBvdXQgb2YgdGhlIGJpbmRpbmdzIC0gU1ZHTnVtYmVyL1NWR1BvaW50L1NWR1JlY3QvU1ZHTGVu
Z3RoL1NWR1RyYW5zZm9ybS9TVkdNYXRyaXgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjA4NzA1KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDE3ICsxMDMsMjIgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZwogICAgIAogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1h
cnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKQog
ICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBhdXRvIHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGUodGFyZ2V0VVJMKTsKICAgICBhdXRvIHRhcmdldFN0YXRpc3RpY3MgPSBt
X3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFBy
aW1hcnlEb21haW4pOwotICAgIAorCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2
aW91c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hv
dWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVj
b3Jkc1JlbW92ZWQgPiAwOworCiAgICAgaWYgKGlzTWFpbkZyYW1lKQogICAgICAgICB0YXJnZXRT
dGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3JlID0gdHJ1ZTsKICAgICBl
bHNlIHsKICAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5Mb2FkZWRCZWZv
cmUgPSB0cnVlOwogCiAgICAgICAgIGF1dG8gbWFpbkZyYW1lT3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShtYWluRnJhbWVVUkwpOwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAg
ICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0
aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlE
b21haW4pOworICAgICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
ID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgaWYgKGlzUmVkaXJlY3QpIHsKQEAgLTE1Miw3ICsx
NTcsOCBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnCiAgICAgfQog
CiAgICAgbV9zdG9yZS0+c2V0UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJn
ZXRQcmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKLSAgICBtX3N0b3Jl
LT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJl
c291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
bmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKQEAg
LTE4NSw4ICsxOTEsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3Vy
YwogCiAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKKyAgICAv
LyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMg
Zm9yIHRoaXMgZG9tYWluCisgICAgYm9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CisKICAgICBhdXRv
IG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsK
LSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRk
KG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgaWYgKHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKIAogICAgIGlmIChpc1JlZGlyZWN0
KSB7CiAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IG1fc3RvcmUt
PmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURv
bWFpbik7CkBAIC0yMDAsNyArMjExLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
U3VicmVzb3VyYwogICAgICAgICArK3JlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNv
dXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKICAgICAgICAgKyt1cGRhdGVkVGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkVG87CiAKLSAgICAgICAgcmVkaXJlY3Rp
bmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdl
dFByaW1hcnlEb21haW4pOworICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9SZXN1bHQgPSByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgIGlmIChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICBzaG91
bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0cnVlOwogCiAgICAgICAgICsrdXBkYXRl
ZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKIApA
QCAtMjE0LDggKzIyNyw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291
cmMKICAgICAgICAgCiAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVu
U3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0
YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJy
ZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKICAgICB9Ci0gICAgCi0gICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0
TG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdGFyZ2V0VVJMKQpAQCAtMjQ1
LDE3ICsyNTksMjMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TAog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9t
YWluKTsKKworICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVk
IGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KKyAgICBib29sIHNob3VsZEZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4g
MDsKICAgICAKICAgICBhdXRvIG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUobWFpbkZyYW1lVVJMKTsKLSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOwotICAgIAorICAgIGF1
dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURv
bWFpbik7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1
ZTsKKwogICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJj
ZUNvdW50OwogICAgIAogICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5z
VmlzaXRlZE1hcC5zaXplKCksIDFVKTsKICAgICAKICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2lu
c1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAKLSAgICBtX3N0b3Jl
LT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIwODcwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OmVuY29kZShLZXllCiAgICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgZW5jb2RlSGFzaENv
dW50ZWRTZXQoZW5jb2RlciwgInJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmln
aW5zIiwgcmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGVu
Y29kZXIuZW5jb2RlQm9vbCgiaXNQcmV2YWxlbnRSZXNvdXJjZSIsIGlzUHJldmFsZW50UmVzb3Vy
Y2UpOworICAgIGVuY29kZXIuZW5jb2RlVUludDMyKCJkYXRhUmVjb3Jkc1JlbW92ZWQiLCBkYXRh
UmVjb3Jkc1JlbW92ZWQpOwogfQogCiBzdGF0aWMgdm9pZCBkZWNvZGVIYXNoQ291bnRlZFNldChL
ZXllZERlY29kZXImIGRlY29kZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEhhc2hDb3VudGVkU2V0
PFN0cmluZz4mIGhhc2hDb3VudGVkU2V0KQpAQCAtOTksNyArMTAwLDcgQEAgc3RhdGljIHZvaWQg
ZGVjb2RlSGFzaENvdW50ZWRTZXQoS2V5ZWREZQogICAgIH0pOwogfQogCi1ib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllZERlY29kZXImIGRlY29kZXIpCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllZERlY29kZXImIGRlY29kZXIsIHVuc2lnbmVk
IHZlcnNpb24pCiB7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZVN0cmluZygiUHJldmFsZW50UmVz
b3VyY2VPcmlnaW4iLCBoaWdoTGV2ZWxEb21haW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xNzAsNiArMTcxLDkgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5
ZQogICAgIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGVCb29sKCJpc1ByZXZhbGVudFJlc291cmNl
IiwgaXNQcmV2YWxlbnRSZXNvdXJjZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVVSW50MzIoImRhdGFSZWNvcmRzUmVtb3ZlZCIsIGRhdGFSZWNvcmRz
UmVtb3ZlZCkgJiYgdmVyc2lvbiA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5OCw3ICsyMDIsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRI
YXNoQ291bnRlZFNldChTdHJpbmdCCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGVudHJ5
LnZhbHVlKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQotICAgIAogfQog
CiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoKSBjb25zdApAQCAtMjY4
LDYgKzI3MSwxMCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoCiAg
ICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgYXBwZW5kSGFzaENvdW50ZWRTZXQoYnVpbGRl
ciwgInJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zIiwgcmVkaXJlY3Rl
ZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGFwcGVuZEJvb2xlYW4oYnVp
bGRlciwgImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIpOworICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKGRhdGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgYnVpbGRlci5hcHBl
bmQoJ1xuJyk7CisKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CkBAIC0zMTQsNiArMzIxLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjptZXJnZShjb25zdAogICAgIC8vIFByZXZhbGVudCByZXNvdXJjZSBzdGF0cwogICAg
IG1lcmdlSGFzaENvdW50ZWRTZXQocmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9y
aWdpbnMsIG90aGVyLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zKTsK
ICAgICBpc1ByZXZhbGVudFJlc291cmNlIHw9IG90aGVyLmlzUHJldmFsZW50UmVzb3VyY2U7Cisg
ICAgZGF0YVJlY29yZHNSZW1vdmVkICs9IG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZDsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oCShyZXZpc2lvbiAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgPSBk
ZWZhdWx0OwogCiAgICAgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7Ci0gICAgYm9v
bCBkZWNvZGUoS2V5ZWREZWNvZGVyJik7CisgICAgYm9vbCBkZWNvZGUoS2V5ZWREZWNvZGVyJiwg
dW5zaWduZWQgdmVyc2lvbik7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIApAQCAt
ODMsNiArODMsNyBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAgICAgLy8gUHJl
dmFsZW50IHJlc291cmNlIHN0YXRzCiAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiByZWRpcmVj
dGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luczsKICAgICBib29sIGlzUHJldmFsZW50
UmVzb3VyY2UgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCB7IDAg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lv
biAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtT3JpZ2luc0xvYWRlZEZv
clByb2Nlc3NpbmcgPSAxMDA7Ci0KIFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKSk7CkBAIC03Myw3ICs3MSw4IEBA
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlc291cmNlTG9hZFN0YXQKIHN0ZDo6dW5pcXVlX3B0
cjxLZXllZEVuY29kZXI+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRW5jb2Rl
ckZyb21EYXRhKCkKIHsKICAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIo
KTsKLSAgICAKKworICAgIGVuY29kZXItPmVuY29kZVVJbnQzMigidmVyc2lvbiIsIDIpOwogICAg
IGVuY29kZXItPmVuY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmJlZ2luKCksIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpLCBbdGhp
c10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVySW5uZXIsIGNvbnN0IFN0YXRpc3RpY3NWYWx1ZSYgb3Jp
Z2luKSB7CiAgICAgICAgIG9yaWdpbi52YWx1ZS5lbmNvZGUoZW5jb2RlcklubmVyKTsKICAgICB9
KTsKQEAgLTg2LDkgKzg1LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWFkRGEKICAgICBpZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICB1aW50MzJfdCB2ZXJzaW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVV
SW50MzIoInZlcnNpb24iLCB2ZXJzaW9uKSkKKyAgICAgICAgdmVyc2lvbiA9IDE7CiAgICAgVmVj
dG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IGxvYWRlZFN0YXRpc3RpY3M7Ci0gICAgYm9vbCBz
dWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIGxv
YWRlZFN0YXRpc3RpY3MsIFt0aGlzXShLZXllZERlY29kZXImIGRlY29kZXJJbm5lciwgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgewotICAgICAgICByZXR1cm4gc3RhdGlzdGlj
cy5kZWNvZGUoZGVjb2RlcklubmVyKTsKKyAgICBib29sIHN1Y2NlZWRlZCA9IGRlY29kZXIuZGVj
b2RlT2JqZWN0cygiYnJvd3NpbmdTdGF0aXN0aWNzIiwgbG9hZGVkU3RhdGlzdGljcywgW3RoaXMs
IHZlcnNpb24gPSBXVEZNb3ZlKHZlcnNpb24pXShLZXllZERlY29kZXImIGRlY29kZXJJbm5lciwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgeworICAgICAgICByZXR1cm4gc3Rh
dGlzdGljcy5kZWNvZGUoZGVjb2RlcklubmVyLCB2ZXJzaW9uKTsKICAgICB9KTsKIAogICAgIGlm
ICghc3VjY2VlZGVkKQpAQCAtMTQxLDE0ICsxNDMsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6ZmlyZURhCiAgICAgICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCi1i
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzRW5vdWdoRGF0YUZvclN0YXRpc3Rp
Y3NQcm9jZXNzaW5nKCkKLXsKLSAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6
ZSgpID49IG1pbmltdW1PcmlnaW5zTG9hZGVkRm9yUHJvY2Vzc2luZzsKLX0KLQogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248
dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewotICAg
IEFTU0VSVChoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSk7CiAgICAgZm9y
IChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVl
cygpKQogICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOwogfQpAQCAt
MTYyLDQgKzE1OCwxMiBAQCBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
CiAgICAgfQogICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNv
cmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCit7Cisg
ICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNl
RG9tYWlucykgeworICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXNpYyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50UmVzb3VyY2VE
b21haW4pOworICAgICAgICArK3N0YXRpc2ljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9Cit9
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEw
ICs2MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGlj
c1Byb2Nlc3NpbmcoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNz
KHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0
aG91dFVzZXJJbnRlcmFjdGlvbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3Rh
dGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zKTsKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlKCkgPSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg3MzUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBA
QAorMjAxNi0xMS0xNSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6IENvdmVyIGZ1cnRoZXIgZGF0YSByZWNvcmRz
LCBjb3VudCByZW1vdmVkIGRhdGEgcmVjb3JkcywgYW5kIG9ubHkgZmlyZSBoYW5kbGVyIHdoZW4g
bmVlZGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ2NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRz
KToKKyAgICAgICAgICAgIENvbnNpc3RlbnQgbmFtaW5nIHdpdGggJ3JlbW92ZScgcmF0aGVyIHRo
YW4gJ2RlbGV0ZScuCisgICAgICAgICAgICBOb3cgcmVtb3ZlcyBsb2NhbFN0b3JhZ2UsIEluZGV4
REIsIGRpc2sgY2FjaGUsIGFuZCBtZW1vcnkgY2FjaGUgdG9vLgorICAgICAgICAgICAgVXBkYXRl
cyBzdGF0aXN0aWNzIHdpdGggbnVtYmVyIG9mIHRpbWVzIGl0IGhhcyByZW1vdmVkIGRhdGEgcmVj
b3Jkcy4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZCk6CisgICAgICAgICAgICBObyBsb25nZXIgY2hl
Y2tzIHdoZXRoZXIgaXQgaGFzIGVub3VnaCBkYXRhIHNpbmNlIHRoZSBjbGFzc2lmaWNhdGlvbiBy
dWxlcworICAgICAgICAgICAgYXJlIGFic29sdXRlLCBub3QgcmVsYXRpdmUuCisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJEYXRhUmVjb3Jkcyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oOgorICAgICAgICAgICAgQ29uc2lzdGVudCBuYW1pbmcgd2l0aCAncmVtb3ZlJyByYXRo
ZXIgdGhhbiAnZGVsZXRlJy4KKwogMjAxNi0xMS0xNSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIEhhc01lZGlhQ2FwdHVyZURldmljZQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIwODcwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw4ICs0NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotc3RhdGljIGNvbnN0IGF1dG8gbnVtYmVyT2ZTZWNvbmRzQmV0d2VlbkNsZWFyaW5n
RGF0YVJlY29yZHMgPSA2MDA7CitzdGF0aWMgY29uc3QgYXV0byBudW1iZXJPZlNlY29uZHNCZXR3
ZWVuUmVtb3ZpbmdEYXRhUmVjb3JkcyA9IDYwOwogc3RhdGljIGNvbnN0IGF1dG8gZmVhdHVyZVZl
Y3Rvckxlbmd0aFRocmVzaG9sZCA9IDM7CitzdGF0aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0
ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1JlbW92ZTsKIAogUmVmPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZT4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogewpAQCAtOTksOSArMTAw
LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsYQogICAgIH0KIH0K
IAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0YVJlY29yZHMo
KQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRz
KCkKIHsKLSAgICBpZiAobV9kYXRhU3RvcmVDbGVhclBlbmRpbmcpCisgICAgaWYgKG1fZGF0YVJl
Y29yZHNSZW1vdmFsUGVuZGluZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gY29yZVN0b3JlKCkucHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbigpOwpAQCAtMTA5LDQxICsxMTAsNTMgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZQogICAgICAgICByZXR1cm47
CiAKICAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKLSAgICBpZiAoIW1fbGFzdFRpbWVE
YXRhUmVjb3Jkc1dlcmVDbGVhcmVkKSB7Ci0gICAgICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dl
cmVDbGVhcmVkID0gbm93OworICAgIGlmICghbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92
ZWQpIHsKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBub3c7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobm93IDwgKG1fbGFzdFRpbWVEYXRhUmVj
b3Jkc1dlcmVDbGVhcmVkICsgbnVtYmVyT2ZTZWNvbmRzQmV0d2VlbkNsZWFyaW5nRGF0YVJlY29y
ZHMpKQorICAgIGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBu
dW1iZXJPZlNlY29uZHNCZXR3ZWVuUmVtb3ZpbmdEYXRhUmVjb3JkcykpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlQ2xlYXJlZCA9IG5vdzsKKyAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBl
bmRpbmcgPSB0cnVlOworICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gbm93
OworCisgICAgaWYgKGRhdGFUeXBlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgeworICAgICAgICBkYXRh
VHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXM7CisgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOworICAgICAgICBk
YXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlczsK
KyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGU7
CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2Fj
aGU7CisgICAgfQogCiAgICAgLy8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhl
IGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9t
YWlucyksIHRoaXNdICgpIG11dGFibGUgewogICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3Jl
ID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRh
U3RvcmUoKTsKIAotICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNoRGF0YShXZWJzaXRlRGF0
YVR5cGU6OkNvb2tpZXMsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUo
cHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMp
IHsKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEoZGF0YVR5cGVzVG9SZW1vdmUs
IHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKICAgICAgICAgICAg
IFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0YVJlY29yZHM7CisgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHM7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVjb3JkIDogd2Vic2l0ZURhdGFSZWNvcmRz
KSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6
IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgewogICAgICAgICAgICAgICAgICAgICBpZiAod2Vi
c2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3Vm
Zml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5sZW5ndGgoKSAtIHByZXZh
bGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtzdWZmaXhTdGFy
dCAtIDFdID09ICcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VmZml4U3RhcnQg
fHwgd2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWVbc3VmZml4U3RhcnQgLSAxXSA9PSAnLicp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVjb3Jkcy5hcHBlbmQod2Vic2l0
ZURhdGFSZWNvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZhbGVudFJlc291
cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcy5hcHBlbmQocHJldmFsZW50UmVzb3VyY2VEb21haW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIWRhdGFSZWNv
cmRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUucmVtb3ZlRGF0YShXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMsIHsgV1RGTW92ZShkYXRh
UmVjb3JkcykgfSwgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICBtX2RhdGFTdG9yZUNsZWFyUGVu
ZGluZyA9IGZhbHNlOworICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVEYXRhKGRh
dGFUeXBlc1RvUmVtb3ZlLCB7IFdURk1vdmUoZGF0YVJlY29yZHMpIH0sIFtwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9t
YWluc1dpdGhEYXRhUmVjb3JkcyksIHRoaXNdIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5jb3Jl
U3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJl
c291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7CisgICAgICAgICAgICAgICAgbV9kYXRhUmVj
b3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7
CiAgICAgfSk7CkBAIC0xNTMsMTMgKzE2NiwxMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVzCiB7CiAgICAgY29yZVN0b3JlKCkubWVyZ2VTdGF0aXN0aWNzKG9yaWdp
bnMpOwogCi0gICAgaWYgKGNvcmVTdG9yZSgpLmhhc0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJv
Y2Vzc2luZygpKSB7Ci0gICAgICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlz
XSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKLSAgICAgICAg
ICAgIGNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMpOwotICAgICAgICAgICAgY2xl
YXJEYXRhUmVjb3JkcygpOwotICAgICAgICB9KTsKLSAgICB9Ci0KKyAgICBjb3JlU3RvcmUoKS5w
cm9jZXNzU3RhdGlzdGljcyhbdGhpc10gKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNl
U3RhdGlzdGljKSB7CisgICAgICAgIGNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMp
OworICAgICAgICByZW1vdmVEYXRhUmVjb3JkcygpOworICAgIH0pOworICAgIAogICAgIGF1dG8g
ZW5jb2RlciA9IGNvcmVTdG9yZSgpLmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpOwogICAgIAogICAg
IHdyaXRlRW5jb2RlclRvRGlzaygqZW5jb2Rlci5nZXQoKSwgImZ1bGxfYnJvd3Npbmdfc2Vzc2lv
biIpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjA4NzA1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc1ByZXZh
bGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKTsKICAgICB2b2lkIGNsYXNzaWZ5UmVzb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYpOwotICAgIHZvaWQgY2xlYXJEYXRhUmVjb3JkcygpOworICAgIHZvaWQg
cmVtb3ZlRGF0YVJlY29yZHMoKTsKIAogICAgIFN0cmluZyBwZXJzaXN0ZW50U3RvcmFnZVBhdGgo
Y29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7CiAKQEAgLTg5LDggKzg5LDggQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9zdG9yYWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQgeyBmYWxzZSB9OwogCi0gICAgZG91YmxlIG1fbGFzdFRpbWVEYXRhUmVjb3Jk
c1dlcmVDbGVhcmVkIHsgMCB9OwotICAgIGJvb2wgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgeyBm
YWxzZSB9OworICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB7IDAg
fTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyB7IGZhbHNlIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294853</attachid>
            <date>2016-11-15 11:06:25 -0800</date>
            <delta_ts>2016-11-17 17:35:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164659-20161115110622.patch</filename>
            <type>text/plain</type>
            <size>22207</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTExLTE1ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIGxvYWQgc3Rh
dGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50IHJlbW92ZWQgZGF0YSBy
ZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBmZWF0
dXJlIGlzIGJlaGluZCBhIGZsYWcgYW5kIG9mZiBieSBkZWZhdWx0LiBUZXN0cyByZXF1aXJlIHJl
YWwgZG9tYWluIG5hbWVzLgorCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5h
dmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgICAgICBBbGwgdGhyZWUgZnVuY3Rpb25z
IGFyZSBub3cgbW9yZSBjb25zZXJ2YXRpdmUgaW4gY2FsbHMgdG8KKyAgICAgICAgICAgIG1fc3Rv
cmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpLiBUaGV5IG9ubHkgZmlyZSB3aGVuIGFu
IGltcG9ydGFudCBzdGF0aXN0aWMgaGFzCisgICAgICAgICAgICBjaGFuZ2VkIG9yIGRhdGEgcmVj
b3JkcyBoYXZlIHByZXZpb3VzbHkgYmVlbiByZW1vdmVkIGZvciB0aGUgZG9tYWluIGluIHF1ZXN0
aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgICAg
ICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZSk6CisgICAgICAgICAgICBOb3cgdGFr
ZXMgYSB2ZXJzaW9uIHBhcmFtZXRlciB0byBjb250cm9sIHdoaWNoIGtleXMgdG8gZXhwZWN0Lgor
ICAgICAgICAgICAgQWRkZWQgdGhlIGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0aXN0aWMuCisgICAg
ICAgIChXZWJDb3JlOjphcHBlbmRIYXNoQ291bnRlZFNldCk6CisgICAgICAgICAgICBSZW1vdmVk
IHN0cmF5IGxpbmVmZWVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6dG9TdHJpbmcpOgorICAgICAgICAgICAgQWRkZWQgdGhlIGRhdGFSZWNvcmRzUmVtb3ZlZCBz
dGF0aXN0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjptZXJn
ZSk6CisgICAgICAgICAgICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4K
KyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oOgorICAgICAgICAgICAg
QWRkZWQgdGhlIGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0aXN0aWMuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSk6CisgICAgICAg
ICAgICBOb3cgZW5jb2RlcyBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgc3RhdGlzdGljcyBtb2Rl
bC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERh
dGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBOb3cgdHJpZXMgdG8gZGVjb2RlIGEgdmVyc2lv
biBudW1iZXIgYW5kIHBhc3NlcyBpdCBvbiB0byBzdGF0aXN0aWNzIGRlY29kaW5nLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGlj
cyk6CisgICAgICAgICAgICBObyBsb25nZXIgZ2F0ZXMgcHJvY2Vzc2luZyBvbiB0aGUgbnVtYmVy
IG9mIGRhdGEgY2FwdHVyZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMpOgorICAgICAg
ICAgICAgVXBkYXRlIGZ1bmN0aW9uIGZvciB0aGUgbmV3IGRhdGFSZWNvcmRzUmVtb3ZlZCBzdGF0
aXN0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhh
c0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJvY2Vzc2luZyk6IERlbGV0ZWQuCisgICAgICAgICAg
ICBObyBsb25nZXIgbmVlZGVkIHNpbmNlIHdlIG5vIGxvbmdlciBnYXRlIHByb2Nlc3Npbmcgb24g
dGhlIG51bWJlciBvZiBkYXRhIGNhcHR1cmVkLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNi0xMS0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtTVkddIE1vdmluZyBtb3JlIHNwZWNpYWwgY2FzaW5nIG9mIFNW
RyBvdXQgb2YgdGhlIGJpbmRpbmdzIC0gU1ZHTnVtYmVyL1NWR1BvaW50L1NWR1JlY3QvU1ZHTGVu
Z3RoL1NWR1RyYW5zZm9ybS9TVkdNYXRyaXgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjA4NzA1KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDE3ICsxMDMsMjIgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZwogICAgIAogICAgIGlmICh0YXJnZXRQcmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1h
cnlEb21haW4gfHwgdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKQog
ICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBhdXRvIHRhcmdldE9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGUodGFyZ2V0VVJMKTsKICAgICBhdXRvIHRhcmdldFN0YXRpc3RpY3MgPSBt
X3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFBy
aW1hcnlEb21haW4pOwotICAgIAorCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2
aW91c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hv
dWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVj
b3Jkc1JlbW92ZWQgPiAwOworCiAgICAgaWYgKGlzTWFpbkZyYW1lKQogICAgICAgICB0YXJnZXRT
dGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3JlID0gdHJ1ZTsKICAgICBl
bHNlIHsKICAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZUhhc0JlZW5Mb2FkZWRCZWZv
cmUgPSB0cnVlOwogCiAgICAgICAgIGF1dG8gbWFpbkZyYW1lT3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShtYWluRnJhbWVVUkwpOwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAg
ICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0
aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlE
b21haW4pOworICAgICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
ID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgaWYgKGlzUmVkaXJlY3QpIHsKQEAgLTE1Miw3ICsx
NTcsOCBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnCiAgICAgfQog
CiAgICAgbV9zdG9yZS0+c2V0UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJn
ZXRQcmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKLSAgICBtX3N0b3Jl
LT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJl
c291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
bmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKQEAg
LTE4NSw4ICsxOTEsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3Vy
YwogCiAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CiAKKyAgICAv
LyBBbHdheXMgZmlyZSBpZiB3ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMg
Zm9yIHRoaXMgZG9tYWluCisgICAgYm9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIgPSB0YXJnZXRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CisKICAgICBhdXRv
IG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsK
LSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRk
KG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgaWYgKHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1ZTsKIAogICAgIGlmIChpc1JlZGlyZWN0
KSB7CiAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IG1fc3RvcmUt
PmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURv
bWFpbik7CkBAIC0yMDAsNyArMjExLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
U3VicmVzb3VyYwogICAgICAgICArK3JlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNv
dXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbTsKICAgICAgICAgKyt1cGRhdGVkVGFyZ2V0U3RhdGlz
dGljcy5zdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkVG87CiAKLSAgICAgICAgcmVkaXJlY3Rp
bmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdl
dFByaW1hcnlEb21haW4pOworICAgICAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9SZXN1bHQgPSByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgIGlmIChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICBzaG91
bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0cnVlOwogCiAgICAgICAgICsrdXBkYXRl
ZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKIApA
QCAtMjE0LDggKzIyNyw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291
cmMKICAgICAgICAgCiAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVu
U3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0
YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJy
ZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKICAgICB9Ci0gICAgCi0gICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0
TG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdGFyZ2V0VVJMKQpAQCAtMjQ1
LDE3ICsyNTksMjMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TAog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9t
YWluKTsKKworICAgIC8vIEFsd2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVk
IGRhdGEgcmVjb3JkcyBmb3IgdGhpcyBkb21haW4KKyAgICBib29sIHNob3VsZEZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlciA9IHRhcmdldFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4g
MDsKICAgICAKICAgICBhdXRvIG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUobWFpbkZyYW1lVVJMKTsKLSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOwotICAgIAorICAgIGF1
dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURv
bWFpbik7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdHJ1
ZTsKKwogICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJj
ZUNvdW50OwogICAgIAogICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5z
VmlzaXRlZE1hcC5zaXplKCksIDFVKTsKICAgICAKICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2lu
c1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAKLSAgICBtX3N0b3Jl
LT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBpZiAoc2hvdWxkRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKQorICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIwODcwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OmVuY29kZShLZXllCiAgICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgZW5jb2RlSGFzaENv
dW50ZWRTZXQoZW5jb2RlciwgInJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmln
aW5zIiwgcmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGVu
Y29kZXIuZW5jb2RlQm9vbCgiaXNQcmV2YWxlbnRSZXNvdXJjZSIsIGlzUHJldmFsZW50UmVzb3Vy
Y2UpOworICAgIGVuY29kZXIuZW5jb2RlVUludDMyKCJkYXRhUmVjb3Jkc1JlbW92ZWQiLCBkYXRh
UmVjb3Jkc1JlbW92ZWQpOwogfQogCiBzdGF0aWMgdm9pZCBkZWNvZGVIYXNoQ291bnRlZFNldChL
ZXllZERlY29kZXImIGRlY29kZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEhhc2hDb3VudGVkU2V0
PFN0cmluZz4mIGhhc2hDb3VudGVkU2V0KQpAQCAtOTksNyArMTAwLDcgQEAgc3RhdGljIHZvaWQg
ZGVjb2RlSGFzaENvdW50ZWRTZXQoS2V5ZWREZQogICAgIH0pOwogfQogCi1ib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllZERlY29kZXImIGRlY29kZXIpCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllZERlY29kZXImIGRlY29kZXIsIHVuc2lnbmVk
IHZlcnNpb24pCiB7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZVN0cmluZygiUHJldmFsZW50UmVz
b3VyY2VPcmlnaW4iLCBoaWdoTGV2ZWxEb21haW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xNzAsNiArMTcxLDkgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5
ZQogICAgIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGVCb29sKCJpc1ByZXZhbGVudFJlc291cmNl
IiwgaXNQcmV2YWxlbnRSZXNvdXJjZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVVSW50MzIoImRhdGFSZWNvcmRzUmVtb3ZlZCIsIGRhdGFSZWNvcmRz
UmVtb3ZlZCkgJiYgdmVyc2lvbiA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5OCw3ICsyMDIsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRI
YXNoQ291bnRlZFNldChTdHJpbmdCCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGVudHJ5
LnZhbHVlKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQotICAgIAogfQog
CiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoKSBjb25zdApAQCAtMjY4
LDYgKzI3MSwxMCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoCiAg
ICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgYXBwZW5kSGFzaENvdW50ZWRTZXQoYnVpbGRl
ciwgInJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zIiwgcmVkaXJlY3Rl
ZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGFwcGVuZEJvb2xlYW4oYnVp
bGRlciwgImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIpOworICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKGRhdGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgYnVpbGRlci5hcHBl
bmQoJ1xuJyk7CisKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CkBAIC0zMTQsNiArMzIxLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjptZXJnZShjb25zdAogICAgIC8vIFByZXZhbGVudCByZXNvdXJjZSBzdGF0cwogICAg
IG1lcmdlSGFzaENvdW50ZWRTZXQocmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9y
aWdpbnMsIG90aGVyLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zKTsK
ICAgICBpc1ByZXZhbGVudFJlc291cmNlIHw9IG90aGVyLmlzUHJldmFsZW50UmVzb3VyY2U7Cisg
ICAgZGF0YVJlY29yZHNSZW1vdmVkICs9IG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZDsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oCShyZXZpc2lvbiAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgPSBk
ZWZhdWx0OwogCiAgICAgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7Ci0gICAgYm9v
bCBkZWNvZGUoS2V5ZWREZWNvZGVyJik7CisgICAgYm9vbCBkZWNvZGUoS2V5ZWREZWNvZGVyJiwg
dW5zaWduZWQgdmVyc2lvbik7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIApAQCAt
ODMsNiArODMsNyBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAgICAgLy8gUHJl
dmFsZW50IHJlc291cmNlIHN0YXRzCiAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiByZWRpcmVj
dGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luczsKICAgICBib29sIGlzUHJldmFsZW50
UmVzb3VyY2UgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCB7IDAg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lv
biAyMDg3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtT3JpZ2luc0xvYWRlZEZv
clByb2Nlc3NpbmcgPSAxMDA7CitzdGF0aWMgY29uc3QgYXV0byBzdGF0aXN0aWNzTW9kZWxWZXJz
aW9uID0gMjsKIAogUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQogewpAQCAtNzMsNyArNzMsOCBAQCB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRTdGF0CiBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNv
ZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgp
CiB7CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7Ci0gICAgCisK
KyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNzTW9kZWxWZXJz
aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5iZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bmQoKSwgW3RoaXNdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBjb25zdCBTdGF0aXN0aWNz
VmFsdWUmIG9yaWdpbikgewogICAgICAgICBvcmlnaW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5l
cik7CiAgICAgfSk7CkBAIC04Niw5ICs4NywxMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVhZERhCiAgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgdWludDMyX3QgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlVUludDMyKCJ2ZXJzaW9uIiwgdmVyc2lvbikpCisgICAgICAgIHZlcnNpb24gPSAx
OwogICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0aWNzOwot
ICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRp
c3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdGhpc10oS2V5ZWREZWNvZGVyJiBkZWNvZGVySW5u
ZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpc3RpY3MuZGVjb2RlKGRlY29kZXJJbm5lcik7CisgICAgYm9vbCBzdWNjZWVkZWQgPSBk
ZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIGxvYWRlZFN0YXRpc3Rp
Y3MsIFt0aGlzLCB2ZXJzaW9uID0gV1RGTW92ZSh2ZXJzaW9uKV0oS2V5ZWREZWNvZGVyJiBkZWNv
ZGVySW5uZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpc3RpY3MuZGVjb2RlKGRlY29kZXJJbm5lciwgdmVyc2lvbik7CiAgICAgfSk7
CiAKICAgICBpZiAoIXN1Y2NlZWRlZCkKQEAgLTE0MSwxNCArMTQ1LDggQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVEYQogICAgICAgICBtX2RhdGFBZGRlZEhhbmRsZXIo
KTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0Vub3VnaERhdGFG
b3JTdGF0aXN0aWNzUHJvY2Vzc2luZygpCi17Ci0gICAgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLnNpemUoKSA+PSBtaW5pbXVtT3JpZ2luc0xvYWRlZEZvclByb2Nlc3Npbmc7Ci19Ci0K
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyhzdGQ6
OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYmIHByb2Nlc3NGdW5jdGlv
bikKIHsKLSAgICBBU1NFUlQoaGFzRW5vdWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCkp
OwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC52YWx1ZXMoKSkKICAgICAgICAgcHJvY2Vzc0Z1bmN0aW9uKHJlc291cmNlU3RhdGlzdGlj
KTsKIH0KQEAgLTE2Miw0ICsxNjAsMTIgQEAgVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0bwogICAgIH0KICAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOwogfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlU3RhdGlzdGljc0ZvclJlbW92
ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21h
aW5zKQoreworICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3VyY2VEb21haW4gOiBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMpIHsKKyAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3Rh
dGlzaWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByZXZhbGVu
dFJlc291cmNlRG9tYWluKTsKKyAgICAgICAgKytzdGF0aXNpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7
CisgICAgfQorfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjA4NzA1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMCArNjAsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzRW5vdWdoRGF0YUZv
clN0YXRpc3RpY3NQcm9jZXNzaW5nKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNz
U3RhdGlzdGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYm
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNl
RG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucyk7CiBwcml2YXRlOgogICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSgpID0gZGVmYXVsdDsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MjA4NzM1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjIgQEAKKzIwMTYtMTEtMTUgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzOiBDb3ZlciBmdXJ0aGVyIGRh
dGEgcmVjb3JkcywgY291bnQgcmVtb3ZlZCBkYXRhIHJlY29yZHMsIGFuZCBvbmx5IGZpcmUgaGFu
ZGxlciB3aGVuIG5lZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0NjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVE
YXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBDb25zaXN0ZW50IG5hbWluZyB3aXRoICdyZW1vdmUn
IHJhdGhlciB0aGFuICdkZWxldGUnLgorICAgICAgICAgICAgTm93IHJlbW92ZXMgbG9jYWxTdG9y
YWdlLCBJbmRleERCLCBkaXNrIGNhY2hlLCBhbmQgbWVtb3J5IGNhY2hlIHRvby4KKyAgICAgICAg
ICAgIFVwZGF0ZXMgc3RhdGlzdGljcyB3aXRoIG51bWJlciBvZiB0aW1lcyBpdCBoYXMgcmVtb3Zl
ZCBkYXRhIHJlY29yZHMuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOgorICAgICAgICAgICAgTm8g
bG9uZ2VyIGNoZWNrcyB3aGV0aGVyIGl0IGhhcyBlbm91Z2ggZGF0YSBzaW5jZSB0aGUgY2xhc3Np
ZmljYXRpb24gcnVsZXMKKyAgICAgICAgICAgIGFyZSBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlLgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0
YVJlY29yZHMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgICAgIENvbnNpc3RlbnQgbmFtaW5nIHdpdGggJ3Jl
bW92ZScgcmF0aGVyIHRoYW4gJ2RlbGV0ZScuCisKIDIwMTYtMTEtMTUgIEpvbiBMZWUgIDxqb25s
ZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBIYXNNZWRpYUNhcHR1cmVEZXZpY2UKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMDg3MDUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsOCArNDQsOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBjb25zdCBhdXRvIG51bWJlck9mU2Vjb25kc0JldHdl
ZW5DbGVhcmluZ0RhdGFSZWNvcmRzID0gNjAwOworc3RhdGljIGNvbnN0IGF1dG8gbnVtYmVyT2ZT
ZWNvbmRzQmV0d2VlblJlbW92aW5nRGF0YVJlY29yZHMgPSA2MDsKIHN0YXRpYyBjb25zdCBhdXRv
IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQgPSAzOworc3RhdGljIE9wdGlvblNldDxXZWJL
aXQ6OldlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzVG9SZW1vdmU7CiAKIFJlZjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKIHsKQEAg
LTk5LDkgKzEwMCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGEK
ICAgICB9CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRh
dGFSZWNvcmRzKCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVE
YXRhUmVjb3JkcygpCiB7Ci0gICAgaWYgKG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nKQorICAgIGlm
IChtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNvcmVTdG9yZSgpLnByZXZh
bGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKQEAgLTEwOSw0MSAr
MTEwLDUzIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgaWYgKCFt
X2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCkgewotICAgICAgICBtX2xhc3RUaW1lRGF0
YVJlY29yZHNXZXJlQ2xlYXJlZCA9IG5vdzsKKyAgICBpZiAoIW1fbGFzdFRpbWVEYXRhUmVjb3Jk
c1dlcmVSZW1vdmVkKSB7CisgICAgICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVk
ID0gbm93OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG5vdyA8IChtX2xhc3RU
aW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCArIG51bWJlck9mU2Vjb25kc0JldHdlZW5DbGVhcmlu
Z0RhdGFSZWNvcmRzKSkKKyAgICBpZiAobm93IDwgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVS
ZW1vdmVkICsgbnVtYmVyT2ZTZWNvbmRzQmV0d2VlblJlbW92aW5nRGF0YVJlY29yZHMpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2RhdGFTdG9yZUNsZWFyUGVuZGluZyA9IHRydWU7Ci0gICAg
bV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgPSBub3c7CisgICAgbV9kYXRhUmVjb3Jk
c1JlbW92YWxQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVt
b3ZlZCA9IG5vdzsKKworICAgIGlmIChkYXRhVHlwZXNUb1JlbW92ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzOworICAg
ICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsK
KyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJE
YXRhYmFzZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6
RGlza0NhY2hlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6
Ok1lbW9yeUNhY2hlOworICAgIH0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQg
dG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byYgd2Vic2l0
ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53
ZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEo
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLCB7IH0sIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMg
PSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXNdKGF1dG8gd2Vic2l0ZURh
dGFSZWNvcmRzKSB7CisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuZmV0Y2hEYXRhKGRhdGFUeXBl
c1RvUmVtb3ZlLCB7IH0sIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBXVEZNb3ZlKHByZXZh
bGVudFJlc291cmNlRG9tYWlucyksIHRoaXNdKGF1dG8gd2Vic2l0ZURhdGFSZWNvcmRzKSB7CiAg
ICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IGRhdGFSZWNvcmRzOworICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNv
cmRzOwogICAgICAgICAgICAgZm9yIChhdXRvJiB3ZWJzaXRlRGF0YVJlY29yZCA6IHdlYnNpdGVE
YXRhUmVjb3JkcykgewogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3Vy
Y2VEb21haW4gOiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lLmVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UocHJldmFsZW50UmVzb3VyY2VEb21haW4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIHN1ZmZpeFN0YXJ0ID0gd2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUubGVuZ3Ro
KCkgLSBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbi5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc3VmZml4U3RhcnQgfHwgd2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWVb
c3VmZml4U3RhcnQgLSAxXSA9PSAnLicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
ZmZpeFN0YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lW3N1ZmZpeFN0YXJ0IC0g
MV0gPT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlY29yZHMuYXBw
ZW5kKHdlYnNpdGVEYXRhUmVjb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMuYXBwZW5kKHByZXZhbGVudFJlc291
cmNlRG9tYWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KCFkYXRhUmVjb3Jkcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBtX2RhdGFTdG9yZUNsZWFy
UGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVu
ZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlLnJlbW92ZURhdGEoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLCB7IFdU
Rk1vdmUoZGF0YVJlY29yZHMpIH0sIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhU3Rv
cmVDbGVhclBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVt
b3ZlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgeyBXVEZNb3ZlKGRhdGFSZWNvcmRzKSB9LCBbcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzID0gV1RGTW92ZShwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMpLCB0aGlzXSB7CisgICAgICAgICAgICAgICAg
dGhpcy0+Y29yZVN0b3JlKCkudXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyhw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMpOworICAgICAgICAgICAgICAg
IG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTUzLDEzICsxNjYsMTEgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcwogewogICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlz
dGljcyhvcmlnaW5zKTsKIAotICAgIGlmIChjb3JlU3RvcmUoKS5oYXNFbm91Z2hEYXRhRm9yU3Rh
dGlzdGljc1Byb2Nlc3NpbmcoKSkgewotICAgICAgICBjb3JlU3RvcmUoKS5wcm9jZXNzU3RhdGlz
dGljcyhbdGhpc10gKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSB7
Ci0gICAgICAgICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNlU3RhdGlzdGljKTsKLSAgICAg
ICAgICAgIGNsZWFyRGF0YVJlY29yZHMoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCisgICAgY29y
ZVN0b3JlKCkucHJvY2Vzc1N0YXRpc3RpY3MoW3RoaXNdIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykgeworICAgICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljKTsKKyAgICAgICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsKKyAgICB9KTsKKyAgICAK
ICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3RvcmUoKS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsK
ICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rpc2soKmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dz
aW5nX3Nlc3Npb24iKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIwODcwNSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCBjbGFzc2lmeVJlc291cmNlKFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICB2b2lkIGNsZWFyRGF0YVJlY29yZHMoKTsK
KyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKCk7CiAKICAgICBTdHJpbmcgcGVyc2lzdGVudFN0
b3JhZ2VQYXRoKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogCkBAIC04OSw4ICs4OSw4IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3RvcmFnZVBhdGg7CiAgICAgYm9vbCBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkIHsgZmFsc2UgfTsKIAotICAgIGRvdWJsZSBtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlQ2xlYXJlZCB7IDAgfTsKLSAgICBib29sIG1fZGF0YVN0b3JlQ2xlYXJQ
ZW5kaW5nIHsgZmFsc2UgfTsKKyAgICBkb3VibGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJl
bW92ZWQgeyAwIH07CisgICAgYm9vbCBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgeyBmYWxz
ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295115</attachid>
            <date>2016-11-17 17:35:51 -0800</date>
            <delta_ts>2016-11-17 18:26:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164659-20161117173545.patch</filename>
            <type>text/plain</type>
            <size>21979</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTExLTE3ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIGxvYWQgc3Rh
dGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50IHJlbW92ZWQgZGF0YSBy
ZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIGZlYXR1cmUg
aXMgYmVoaW5kIGEgZmxhZyBhbmQgb2ZmIGJ5IGRlZmF1bHQuIFRlc3RzIHJlcXVpcmUgcmVhbCBk
b21haW4gbmFtZXMuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVz
b3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgICAgIEFsbCB0aHJlZSBmdW5jdGlvbnMgYXJl
IG5vdyBtb3JlIGNvbnNlcnZhdGl2ZSBpbiBjYWxscyB0bworICAgICAgICAgICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkuIFRoZXkgb25seSBmaXJlIHdoZW4gYW4gaW1w
b3J0YW50IHN0YXRpc3RpYyBoYXMKKyAgICAgICAgICAgIGNoYW5nZWQgb3IgZGF0YSByZWNvcmRz
IGhhdmUgcHJldmlvdXNseSBiZWVuIHJlbW92ZWQgZm9yIHRoZSBkb21haW4gaW4gcXVlc3Rpb24u
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKToKKyAgICAgICAgICAgIEFk
ZGVkIHRoZSBkYXRhUmVjb3Jkc1JlbW92ZWQgc3RhdGlzdGljLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKToKKyAgICAgICAgICAgIE5vdyB0YWtlcyBh
IHZlcnNpb24gcGFyYW1ldGVyIHRvIGNvbnRyb2wgd2hpY2gga2V5cyB0byBleHBlY3QuCisgICAg
ICAgICAgICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4KKyAgICAgICAg
KFdlYkNvcmU6OmFwcGVuZEhhc2hDb3VudGVkU2V0KToKKyAgICAgICAgICAgIFJlbW92ZWQgc3Ry
YXkgbGluZWZlZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0
b1N0cmluZyk6CisgICAgICAgICAgICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRp
c3RpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKToK
KyAgICAgICAgICAgIEFkZGVkIHRoZSBkYXRhUmVjb3Jkc1JlbW92ZWQgc3RhdGlzdGljLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg6CisgICAgICAgICAgICBBZGRl
ZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4KKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRW5jb2RlckZyb21EYXRhKToKKyAgICAgICAgICAg
IE5vdyBlbmNvZGVzIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBzdGF0aXN0aWNzIG1vZGVsLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZy
b21EZWNvZGVyKToKKyAgICAgICAgICAgIE5vdyB0cmllcyB0byBkZWNvZGUgYSB2ZXJzaW9uIG51
bWJlciBhbmQgcGFzc2VzIGl0IG9uIHRvIHN0YXRpc3RpY3MgZGVjb2RpbmcuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKToK
KyAgICAgICAgICAgIE5vIGxvbmdlciBnYXRlcyBwcm9jZXNzaW5nIG9uIHRoZSBudW1iZXIgb2Yg
ZGF0YSBjYXB0dXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyk6CisgICAgICAgICAg
ICBVcGRhdGUgZnVuY3Rpb24gZm9yIHRoZSBuZXcgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3Rp
Yy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzRW5v
dWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKTogRGVsZXRlZC4KKyAgICAgICAgICAgIE5v
IGxvbmdlciBuZWVkZWQgc2luY2Ugd2Ugbm8gbG9uZ2VyIGdhdGUgcHJvY2Vzc2luZyBvbiB0aGUg
bnVtYmVyIG9mIGRhdGEgY2FwdHVyZWQuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oOgorCiAyMDE2LTExLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZSBTUEkuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJl
dmlzaW9uIDIwODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNyArMTAzLDIyIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAKICAgICBpZiAodGFyZ2V0UHJpbWFy
eURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4g
PT0gc291cmNlUHJpbWFyeURvbWFpbikKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgYXV0
byB0YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRhcmdldFVSTCk7CiAgICAg
YXV0byB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLSAgICAKKworICAgIC8vIEFs
d2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3Ig
dGhpcyBkb21haW4KKyAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9
IHRhcmdldFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKKwogICAgIGlmIChpc01h
aW5GcmFtZSkKICAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0
ZWRUb0JlZm9yZSA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVIYXNCZWVuTG9hZGVkQmVmb3JlID0gdHJ1ZTsKIAogICAgICAgICBhdXRvIG1haW5G
cmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKLSAgICAg
ICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWlu
RnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHNob3VsZEZp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGlmIChp
c1JlZGlyZWN0KSB7CkBAIC0xNTIsNyArMTU3LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nRnJhbWVOYXZpZwogICAgIH0KIAogICAgIG1fc3RvcmUtPnNldFJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbiwgV1RGTW92ZSh0YXJnZXRT
dGF0aXN0aWNzKSk7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgaWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9z
dG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCiB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1l
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0xODUsOCArMTkxLDEzIEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdl
dFByaW1hcnlEb21haW4pOwogCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91
c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jk
c1JlbW92ZWQgPiAwOworCiAgICAgYXV0byBtYWluRnJhbWVPcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7Ci0gICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBh
dXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0
aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlE
b21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRy
dWU7CiAKICAgICBpZiAoaXNSZWRpcmVjdCkgewogICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09y
aWdpblN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwpAQCAtMjAwLDcgKzIxMSw5IEBAIHZvaWQg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKICAgICAgICAgKytyZWRpcmVjdGlu
Z09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207CiAgICAg
ICAgICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3Rl
ZFRvOwogCi0gICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgYXV0byBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3RpbmdPcmlnaW5TdGF0
aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21h
aW4pOworICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0g
dHJ1ZTsKIAogICAgICAgICArK3VwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFz
QmVlblN1YnJlc291cmNlQ291bnQ7CiAKQEAgLTIxNCw4ICsyMjcsOSBAQCB2b2lkIFJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAgICAgIAogICAgICAgICB0YXJnZXRTdGF0
aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51
bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAg
ICAgfQotICAgIAotICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwor
CisgICAgaWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9z
dG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHRhcmdldFVSTCkKQEAgLTI0NSwxNyArMjU5LDIzIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgdGFy
Z2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3
ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisg
ICAgYm9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0
aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CiAgICAgCiAgICAgYXV0byBtYWluRnJhbWVPcmln
aW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7Ci0gICAgdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmlt
YXJ5RG9tYWluKTsKLSAgICAKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CisKICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKICAgICAKICAgICBhdXRvIHRvdGFsVmlz
aXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CiAgICAgCiAg
ICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2
aWRlZEJ5VG90YWxOdW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90
YWxWaXNpdGVkOwogCi0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgaWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9z
dG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuY3BwCShyZXZpc2lvbiAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUoS2V5ZQogICAgIC8vIFByZXZhbGVudCBS
ZXNvdXJjZQogICAgIGVuY29kZUhhc2hDb3VudGVkU2V0KGVuY29kZXIsICJyZWRpcmVjdGVkVG9P
dGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucyIsIHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50
UmVzb3VyY2VPcmlnaW5zKTsKICAgICBlbmNvZGVyLmVuY29kZUJvb2woImlzUHJldmFsZW50UmVz
b3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBlbmNvZGVyLmVuY29kZVVJbnQzMigi
ZGF0YVJlY29yZHNSZW1vdmVkIiwgZGF0YVJlY29yZHNSZW1vdmVkKTsKIH0KIAogc3RhdGljIHZv
aWQgZGVjb2RlSGFzaENvdW50ZWRTZXQoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBTdHJp
bmcmIGxhYmVsLCBIYXNoQ291bnRlZFNldDxTdHJpbmc+JiBoYXNoQ291bnRlZFNldCkKQEAgLTk5
LDcgKzEwMCw3IEBAIHN0YXRpYyB2b2lkIGRlY29kZUhhc2hDb3VudGVkU2V0KEtleWVkRGUKICAg
ICB9KTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5ZWREZWNv
ZGVyJiBkZWNvZGVyKQorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5ZWRE
ZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCB2ZXJzaW9uKQogewogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVTdHJpbmcoIlByZXZhbGVudFJlc291cmNlT3JpZ2luIiwgaGlnaExldmVsRG9tYWluKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcwLDYgKzE3MSwxMiBAQCBib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllCiAgICAgCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUJvb2woImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcnNpb24gPCAyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIoImRhdGFSZWNvcmRzUmVtb3Zl
ZCIsIGRhdGFSZWNvcmRzUmVtb3ZlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5OCw3ICsyMDUsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRI
YXNoQ291bnRlZFNldChTdHJpbmdCCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGVudHJ5
LnZhbHVlKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQotICAgIAogfQog
CiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoKSBjb25zdApAQCAtMjY4
LDYgKzI3NCwxMCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoCiAg
ICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgYXBwZW5kSGFzaENvdW50ZWRTZXQoYnVpbGRl
ciwgInJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zIiwgcmVkaXJlY3Rl
ZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGFwcGVuZEJvb2xlYW4oYnVp
bGRlciwgImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIpOworICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKGRhdGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgYnVpbGRlci5hcHBl
bmQoJ1xuJyk7CisKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CkBAIC0zMTQsNiArMzI0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjptZXJnZShjb25zdAogICAgIC8vIFByZXZhbGVudCByZXNvdXJjZSBzdGF0cwogICAg
IG1lcmdlSGFzaENvdW50ZWRTZXQocmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9y
aWdpbnMsIG90aGVyLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zKTsK
ICAgICBpc1ByZXZhbGVudFJlc291cmNlIHw9IG90aGVyLmlzUHJldmFsZW50UmVzb3VyY2U7Cisg
ICAgZGF0YVJlY29yZHNSZW1vdmVkICs9IG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZDsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oCShyZXZpc2lvbiAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgPSBk
ZWZhdWx0OwogCiAgICAgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7Ci0gICAgYm9v
bCBkZWNvZGUoS2V5ZWREZWNvZGVyJik7CisgICAgYm9vbCBkZWNvZGUoS2V5ZWREZWNvZGVyJiwg
dW5zaWduZWQgdmVyc2lvbik7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIApAQCAt
ODMsNiArODMsNyBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAgICAgLy8gUHJl
dmFsZW50IHJlc291cmNlIHN0YXRzCiAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiByZWRpcmVj
dGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luczsKICAgICBib29sIGlzUHJldmFsZW50
UmVzb3VyY2UgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCB7IDAg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lv
biAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtT3JpZ2luc0xvYWRlZEZv
clByb2Nlc3NpbmcgPSAxMDA7CitzdGF0aWMgY29uc3QgYXV0byBzdGF0aXN0aWNzTW9kZWxWZXJz
aW9uID0gMjsKIAogUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQogewpAQCAtNzMsNyArNzMsOCBAQCB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRTdGF0CiBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNv
ZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgp
CiB7CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7Ci0gICAgCisK
KyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNzTW9kZWxWZXJz
aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5iZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bmQoKSwgW3RoaXNdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBjb25zdCBTdGF0aXN0aWNz
VmFsdWUmIG9yaWdpbikgewogICAgICAgICBvcmlnaW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5l
cik7CiAgICAgfSk7CkBAIC04Niw5ICs4NywxMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVhZERhCiAgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgdW5zaWduZWQgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlVUludDMyKCJ2ZXJzaW9uIiwgdmVyc2lvbikpCisgICAgICAgIHZlcnNpb24gPSAx
OwogICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0aWNzOwot
ICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRp
c3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdGhpc10oS2V5ZWREZWNvZGVyJiBkZWNvZGVySW5u
ZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpc3RpY3MuZGVjb2RlKGRlY29kZXJJbm5lcik7CisgICAgYm9vbCBzdWNjZWVkZWQgPSBk
ZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIGxvYWRlZFN0YXRpc3Rp
Y3MsIFt0aGlzLCB2ZXJzaW9uXShLZXllZERlY29kZXImIGRlY29kZXJJbm5lciwgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgeworICAgICAgICByZXR1cm4gc3RhdGlzdGljcy5k
ZWNvZGUoZGVjb2RlcklubmVyLCB2ZXJzaW9uKTsKICAgICB9KTsKIAogICAgIGlmICghc3VjY2Vl
ZGVkKQpAQCAtMTQxLDE0ICsxNDUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmlyZURhCiAgICAgICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCi1ib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzRW5vdWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNz
aW5nKCkKLXsKLSAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpID49IG1p
bmltdW1PcmlnaW5zTG9hZGVkRm9yUHJvY2Vzc2luZzsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik+JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewotICAgIEFTU0VSVCho
YXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSk7CiAgICAgZm9yIChhdXRvJiBy
ZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQogICAg
ICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOwogfQpAQCAtMTYyLDQgKzE2
MCwxMiBAQCBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvCiAgICAgfQog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCit7CisgICAgZm9yIChh
dXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykg
eworICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXNpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50UmVzb3VyY2VEb21haW4pOwor
ICAgICAgICArK3N0YXRpc2ljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9Cit9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCShyZXZpc2lvbiAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3Np
bmcoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3RhdGlzdGljc0Zv
clJlbW92ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKTsKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkg
PSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg4NzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxNi0x
MS0xNyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNv
dXJjZSBsb2FkIHN0YXRpc3RpY3M6IENvdmVyIGZ1cnRoZXIgZGF0YSByZWNvcmRzLCBjb3VudCBy
ZW1vdmVkIGRhdGEgcmVjb3JkcywgYW5kIG9ubHkgZmlyZSBoYW5kbGVyIHdoZW4gbmVlZGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ2NTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbmR5IEVzdGVzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAg
ICAgQ29uc2lzdGVudCBuYW1pbmcgd2l0aCAncmVtb3ZlJyByYXRoZXIgdGhhbiAnZGVsZXRlJy4K
KyAgICAgICAgICAgIE5vdyByZW1vdmVzIGxvY2FsU3RvcmFnZSwgSW5kZXhEQiwgZGlzayBjYWNo
ZSwgYW5kIG1lbW9yeSBjYWNoZSB0b28uCisgICAgICAgICAgICBVcGRhdGVzIHN0YXRpc3RpY3Mg
d2l0aCBudW1iZXIgb2YgdGltZXMgaXQgaGFzIHJlbW92ZWQgZGF0YSByZWNvcmRzLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NVcGRhdGVkKToKKyAgICAgICAgICAgIE5vIGxvbmdlciBjaGVja3Mgd2hldGhlciBp
dCBoYXMgZW5vdWdoIGRhdGEgc2luY2UgdGhlIGNsYXNzaWZpY2F0aW9uIHJ1bGVzCisgICAgICAg
ICAgICBhcmUgYWJzb2x1dGUsIG5vdCByZWxhdGl2ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAg
ICAgICAgICBDb25zaXN0ZW50IG5hbWluZyB3aXRoICdyZW1vdmUnIHJhdGhlciB0aGFuICdkZWxl
dGUnLgorCiAyMDE2LTExLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZSBTUEkuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkocmV2aXNpb24gMjA4ODY3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1zdGF0aWMgY29uc3QgYXV0byBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRh
UmVjb3JkcyA9IDYwMDsKK3N0YXRpYyBjb25zdCBhdXRvIG51bWJlck9mU2Vjb25kc0JldHdlZW5S
ZW1vdmluZ0RhdGFSZWNvcmRzID0gNjA7CiBzdGF0aWMgY29uc3QgYXV0byBmZWF0dXJlVmVjdG9y
TGVuZ3RoVGhyZXNob2xkID0gMzsKIAogUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQpAQCAtOTksOSArOTksOSBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xhCiAgICAgfQogfQogCi12b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJEYXRhUmVjb3JkcygpCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMoKQogewotICAgIGlm
IChtX2RhdGFTdG9yZUNsZWFyUGVuZGluZykKKyAgICBpZiAobV9kYXRhUmVjb3Jkc1JlbW92YWxQ
ZW5kaW5nKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnMgPSBjb3JlU3RvcmUoKS5wcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRo
b3V0VXNlckludGVyYWN0aW9uKCk7CkBAIC0xMDksNDEgKzEwOSw1MyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlCiAgICAgICAgIHJldHVybjsKIAogICAgIGRvdWJs
ZSBub3cgPSBjdXJyZW50VGltZSgpOwotICAgIGlmICghbV9sYXN0VGltZURhdGFSZWNvcmRzV2Vy
ZUNsZWFyZWQpIHsKLSAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgPSBu
b3c7CisgICAgaWYgKCFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCkgeworICAgICAg
ICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IG5vdzsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFy
ZWQgKyBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRhUmVjb3JkcykpCisgICAgaWYg
KG5vdyA8IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG51bWJlck9mU2Vjb25k
c0JldHdlZW5SZW1vdmluZ0RhdGFSZWNvcmRzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9k
YXRhU3RvcmVDbGVhclBlbmRpbmcgPSB0cnVlOwotICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dl
cmVDbGVhcmVkID0gbm93OworICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IHRydWU7
CisgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBub3c7CisKKyAgICBzdGF0
aWMgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXNUb1JlbW92ZSB7
CisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywKKyAgICAgICAgV2Vic2l0ZURhdGFU
eXBlOjpMb2NhbFN0b3JhZ2UsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0
YWJhc2VzLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwKKyAgICAgICAgV2Vi
c2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZQorICAgIH07CiAKICAgICAvLyBTd2l0Y2ggdG8gdGhl
IG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10gKCkgbXV0YWJsZSB7CiAgICAgICAg
IGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRE
YXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUuZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyB9LCBbcHJldmFsZW50UmVz
b3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShh
dXRvIHdlYnNpdGVEYXRhUmVjb3JkcykgeworICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNo
RGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgeyB9LCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0g
V1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRh
UmVjb3JkcykgewogICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVj
b3JkczsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhEYXRhUmVjb3JkczsKICAgICAgICAgICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFSZWNv
cmQgOiB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHBy
ZXZhbGVudFJlc291cmNlRG9tYWluIDogcHJldmFsZW50UmVzb3VyY2VEb21haW5zKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKHByZXZhbGVudFJlc291cmNlRG9tYWluKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBzdWZmaXhTdGFydCA9IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3Bs
YXlOYW1lLmxlbmd0aCgpIC0gcHJldmFsZW50UmVzb3VyY2VEb21haW4ubGVuZ3RoKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeFN0YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3Jk
LmRpc3BsYXlOYW1lW3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtz
dWZmaXhTdGFydCAtIDFdID09ICcuJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFSZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZChw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9k
YXRhU3RvcmVDbGVhclBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX2RhdGFSZWNv
cmRzUmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwot
ICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVEYXRhKFdlYnNpdGVEYXRhVHlwZTo6
Q29va2llcywgeyBXVEZNb3ZlKGRhdGFSZWNvcmRzKSB9LCBbdGhpc10gewotICAgICAgICAgICAg
ICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICB3ZWJzaXRl
RGF0YVN0b3JlLnJlbW92ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIGRhdGFSZWNvcmRzLCBbcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzID0gV1RGTW92ZShwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMpLCB0aGlzXSB7CisgICAgICAgICAgICAgICAg
dGhpcy0+Y29yZVN0b3JlKCkudXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyhw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMpOworICAgICAgICAgICAgICAg
IG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTUzLDEzICsxNjUsMTEgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcwogewogICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlz
dGljcyhvcmlnaW5zKTsKIAotICAgIGlmIChjb3JlU3RvcmUoKS5oYXNFbm91Z2hEYXRhRm9yU3Rh
dGlzdGljc1Byb2Nlc3NpbmcoKSkgewotICAgICAgICBjb3JlU3RvcmUoKS5wcm9jZXNzU3RhdGlz
dGljcyhbdGhpc10gKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSB7
Ci0gICAgICAgICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNlU3RhdGlzdGljKTsKLSAgICAg
ICAgICAgIGNsZWFyRGF0YVJlY29yZHMoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCisgICAgY29y
ZVN0b3JlKCkucHJvY2Vzc1N0YXRpc3RpY3MoW3RoaXNdIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykgeworICAgICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljKTsKKyAgICAgICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsKKyAgICB9KTsKKyAgICAK
ICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3RvcmUoKS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsK
ICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rpc2soKmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dz
aW5nX3Nlc3Npb24iKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIwODg2NykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCBjbGFzc2lmeVJlc291cmNlKFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICB2b2lkIGNsZWFyRGF0YVJlY29yZHMoKTsK
KyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKCk7CiAKICAgICBTdHJpbmcgcGVyc2lzdGVudFN0
b3JhZ2VQYXRoKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogCkBAIC04OSw4ICs4OSw4IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3RvcmFnZVBhdGg7CiAgICAgYm9vbCBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkIHsgZmFsc2UgfTsKIAotICAgIGRvdWJsZSBtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlQ2xlYXJlZCB7IDAgfTsKLSAgICBib29sIG1fZGF0YVN0b3JlQ2xlYXJQ
ZW5kaW5nIHsgZmFsc2UgfTsKKyAgICBkb3VibGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJl
bW92ZWQgeyAwIH07CisgICAgYm9vbCBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgeyBmYWxz
ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295117</attachid>
            <date>2016-11-17 18:26:33 -0800</date>
            <delta_ts>2016-11-17 19:33:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164659-20161117182628.patch</filename>
            <type>text/plain</type>
            <size>22123</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTExLTE3ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIGxvYWQgc3Rh
dGlzdGljczogQ292ZXIgZnVydGhlciBkYXRhIHJlY29yZHMsIGNvdW50IHJlbW92ZWQgZGF0YSBy
ZWNvcmRzLCBhbmQgb25seSBmaXJlIGhhbmRsZXIgd2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIGZlYXR1cmUg
aXMgYmVoaW5kIGEgZmxhZyBhbmQgb2ZmIGJ5IGRlZmF1bHQuIFRlc3RzIHJlcXVpcmUgcmVhbCBk
b21haW4gbmFtZXMuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVz
b3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgICAgIEFsbCB0aHJlZSBmdW5jdGlvbnMgYXJl
IG5vdyBtb3JlIGNvbnNlcnZhdGl2ZSBpbiBjYWxscyB0bworICAgICAgICAgICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkuIFRoZXkgb25seSBmaXJlIHdoZW4gYW4gaW1w
b3J0YW50IHN0YXRpc3RpYyBoYXMKKyAgICAgICAgICAgIGNoYW5nZWQgb3IgZGF0YSByZWNvcmRz
IGhhdmUgcHJldmlvdXNseSBiZWVuIHJlbW92ZWQgZm9yIHRoZSBkb21haW4gaW4gcXVlc3Rpb24u
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKToKKyAgICAgICAgICAgIEFk
ZGVkIHRoZSBkYXRhUmVjb3Jkc1JlbW92ZWQgc3RhdGlzdGljLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKToKKyAgICAgICAgICAgIE5vdyB0YWtlcyBh
IHZlcnNpb24gcGFyYW1ldGVyIHRvIGNvbnRyb2wgd2hpY2gga2V5cyB0byBleHBlY3QuCisgICAg
ICAgICAgICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4KKyAgICAgICAg
KFdlYkNvcmU6OmFwcGVuZEhhc2hDb3VudGVkU2V0KToKKyAgICAgICAgICAgIFJlbW92ZWQgc3Ry
YXkgbGluZWZlZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0
b1N0cmluZyk6CisgICAgICAgICAgICBBZGRlZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRp
c3RpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKToK
KyAgICAgICAgICAgIEFkZGVkIHRoZSBkYXRhUmVjb3Jkc1JlbW92ZWQgc3RhdGlzdGljLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg6CisgICAgICAgICAgICBBZGRl
ZCB0aGUgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3RpYy4KKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRW5jb2RlckZyb21EYXRhKToKKyAgICAgICAgICAg
IE5vdyBlbmNvZGVzIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBzdGF0aXN0aWNzIG1vZGVsLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZy
b21EZWNvZGVyKToKKyAgICAgICAgICAgIE5vdyB0cmllcyB0byBkZWNvZGUgYSB2ZXJzaW9uIG51
bWJlciBhbmQgcGFzc2VzIGl0IG9uIHRvIHN0YXRpc3RpY3MgZGVjb2RpbmcuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKToK
KyAgICAgICAgICAgIE5vIGxvbmdlciBnYXRlcyBwcm9jZXNzaW5nIG9uIHRoZSBudW1iZXIgb2Yg
ZGF0YSBjYXB0dXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jkcyk6CisgICAgICAgICAg
ICBVcGRhdGUgZnVuY3Rpb24gZm9yIHRoZSBuZXcgZGF0YVJlY29yZHNSZW1vdmVkIHN0YXRpc3Rp
Yy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzRW5v
dWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKTogRGVsZXRlZC4KKyAgICAgICAgICAgIE5v
IGxvbmdlciBuZWVkZWQgc2luY2Ugd2Ugbm8gbG9uZ2VyIGdhdGUgcHJvY2Vzc2luZyBvbiB0aGUg
bnVtYmVyIG9mIGRhdGEgY2FwdHVyZWQuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oOgorCiAyMDE2LTExLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZSBTUEkuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJl
dmlzaW9uIDIwODg2NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxNyArMTAzLDIyIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAKICAgICBpZiAodGFyZ2V0UHJpbWFy
eURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4g
PT0gc291cmNlUHJpbWFyeURvbWFpbikKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgYXV0
byB0YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHRhcmdldFVSTCk7CiAgICAg
YXV0byB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLSAgICAKKworICAgIC8vIEFs
d2F5cyBmaXJlIGlmIHdlIGhhdmUgcHJldmlvdXNseSByZW1vdmVkIGRhdGEgcmVjb3JkcyBmb3Ig
dGhpcyBkb21haW4KKyAgICBib29sIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9
IHRhcmdldFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkID4gMDsKKwogICAgIGlmIChpc01h
aW5GcmFtZSkKICAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0
ZWRUb0JlZm9yZSA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIHRhcmdldFN0YXRpc3RpY3Mu
c3ViZnJhbWVIYXNCZWVuTG9hZGVkQmVmb3JlID0gdHJ1ZTsKIAogICAgICAgICBhdXRvIG1haW5G
cmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKLSAgICAg
ICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWlu
RnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zUmVzdWx0ID0gdGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaWYgKHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHNob3VsZEZp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGlmIChp
c1JlZGlyZWN0KSB7CkBAIC0xNTIsNyArMTU3LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nRnJhbWVOYXZpZwogICAgIH0KIAogICAgIG1fc3RvcmUtPnNldFJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbiwgV1RGTW92ZSh0YXJnZXRT
dGF0aXN0aWNzKSk7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgaWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9z
dG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCiB2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1l
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0xODUsOCArMTkxLDEzIEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdl
dFByaW1hcnlEb21haW4pOwogCisgICAgLy8gQWx3YXlzIGZpcmUgaWYgd2UgaGF2ZSBwcmV2aW91
c2x5IHJlbW92ZWQgZGF0YSByZWNvcmRzIGZvciB0aGlzIGRvbWFpbgorICAgIGJvb2wgc2hvdWxk
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0gdGFyZ2V0U3RhdGlzdGljcy5kYXRhUmVjb3Jk
c1JlbW92ZWQgPiAwOworCiAgICAgYXV0byBtYWluRnJhbWVPcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7Ci0gICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBh
dXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0
aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlE
b21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciA9IHRy
dWU7CiAKICAgICBpZiAoaXNSZWRpcmVjdCkgewogICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09y
aWdpblN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwpAQCAtMjAwLDcgKzIxMSw5IEBAIHZvaWQg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKICAgICAgICAgKytyZWRpcmVjdGlu
Z09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb207CiAgICAg
ICAgICsrdXBkYXRlZFRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3Rl
ZFRvOwogCi0gICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgYXV0byBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUmVzdWx0ID0gcmVkaXJlY3RpbmdPcmlnaW5TdGF0
aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21h
aW4pOworICAgICAgICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1Jlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyID0g
dHJ1ZTsKIAogICAgICAgICArK3VwZGF0ZWRUYXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFz
QmVlblN1YnJlc291cmNlQ291bnQ7CiAKQEAgLTIxNCw4ICsyMjcsOSBAQCB2b2lkIFJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAgICAgIAogICAgICAgICB0YXJnZXRTdGF0
aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51
bWJlck9mT3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAg
ICAgfQotICAgIAotICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwor
CisgICAgaWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9z
dG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHRhcmdldFVSTCkKQEAgLTI0NSwxNyArMjU5LDIzIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgdGFy
Z2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisKKyAgICAvLyBBbHdheXMgZmlyZSBpZiB3
ZSBoYXZlIHByZXZpb3VzbHkgcmVtb3ZlZCBkYXRhIHJlY29yZHMgZm9yIHRoaXMgZG9tYWluCisg
ICAgYm9vbCBzaG91bGRGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgPSB0YXJnZXRTdGF0aXN0
aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IDA7CiAgICAgCiAgICAgYXV0byBtYWluRnJhbWVPcmln
aW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7Ci0gICAgdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmlt
YXJ5RG9tYWluKTsKLSAgICAKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bnNSZXN1bHQgPSB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZEZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlciA9IHRydWU7CisKICAgICArK3RhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKICAgICAKICAgICBhdXRvIHRvdGFsVmlz
aXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CiAgICAgCiAg
ICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2
aWRlZEJ5VG90YWxOdW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90
YWxWaXNpdGVkOwogCi0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgaWYgKHNob3VsZEZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcikKKyAgICAgICAgbV9z
dG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuY3BwCShyZXZpc2lvbiAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUoS2V5ZQogICAgIC8vIFByZXZhbGVudCBS
ZXNvdXJjZQogICAgIGVuY29kZUhhc2hDb3VudGVkU2V0KGVuY29kZXIsICJyZWRpcmVjdGVkVG9P
dGhlclByZXZhbGVudFJlc291cmNlT3JpZ2lucyIsIHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50
UmVzb3VyY2VPcmlnaW5zKTsKICAgICBlbmNvZGVyLmVuY29kZUJvb2woImlzUHJldmFsZW50UmVz
b3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBlbmNvZGVyLmVuY29kZVVJbnQzMigi
ZGF0YVJlY29yZHNSZW1vdmVkIiwgZGF0YVJlY29yZHNSZW1vdmVkKTsKIH0KIAogc3RhdGljIHZv
aWQgZGVjb2RlSGFzaENvdW50ZWRTZXQoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBjb25zdCBTdHJp
bmcmIGxhYmVsLCBIYXNoQ291bnRlZFNldDxTdHJpbmc+JiBoYXNoQ291bnRlZFNldCkKQEAgLTk5
LDcgKzEwMCw3IEBAIHN0YXRpYyB2b2lkIGRlY29kZUhhc2hDb3VudGVkU2V0KEtleWVkRGUKICAg
ICB9KTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5ZWREZWNv
ZGVyJiBkZWNvZGVyKQorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5ZWRE
ZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCB2ZXJzaW9uKQogewogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGVTdHJpbmcoIlByZXZhbGVudFJlc291cmNlT3JpZ2luIiwgaGlnaExldmVsRG9tYWluKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcwLDYgKzE3MSwxMiBAQCBib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllCiAgICAgCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUJvb2woImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcnNpb24gPCAyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIoImRhdGFSZWNvcmRzUmVtb3Zl
ZCIsIGRhdGFSZWNvcmRzUmVtb3ZlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5OCw3ICsyMDUsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRI
YXNoQ291bnRlZFNldChTdHJpbmdCCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGVudHJ5
LnZhbHVlKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQotICAgIAogfQog
CiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoKSBjb25zdApAQCAtMjY4
LDYgKzI3NCwxMCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoCiAg
ICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgYXBwZW5kSGFzaENvdW50ZWRTZXQoYnVpbGRl
ciwgInJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zIiwgcmVkaXJlY3Rl
ZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnMpOwogICAgIGFwcGVuZEJvb2xlYW4oYnVp
bGRlciwgImlzUHJldmFsZW50UmVzb3VyY2UiLCBpc1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIpOworICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKGRhdGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgYnVpbGRlci5hcHBl
bmQoJ1xuJyk7CisKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CkBAIC0zMTQsNiArMzI0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjptZXJnZShjb25zdAogICAgIC8vIFByZXZhbGVudCByZXNvdXJjZSBzdGF0cwogICAg
IG1lcmdlSGFzaENvdW50ZWRTZXQocmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9y
aWdpbnMsIG90aGVyLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zKTsK
ICAgICBpc1ByZXZhbGVudFJlc291cmNlIHw9IG90aGVyLmlzUHJldmFsZW50UmVzb3VyY2U7Cisg
ICAgZGF0YVJlY29yZHNSZW1vdmVkICs9IG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZDsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oCShyZXZpc2lvbiAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgPSBk
ZWZhdWx0OwogCiAgICAgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7Ci0gICAgYm9v
bCBkZWNvZGUoS2V5ZWREZWNvZGVyJik7CisgICAgYm9vbCBkZWNvZGUoS2V5ZWREZWNvZGVyJiwg
dW5zaWduZWQgdmVyc2lvbik7CiAKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIApAQCAt
ODMsNiArODMsNyBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAgICAgLy8gUHJl
dmFsZW50IHJlc291cmNlIHN0YXRzCiAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiByZWRpcmVj
dGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luczsKICAgICBib29sIGlzUHJldmFsZW50
UmVzb3VyY2UgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCB7IDAg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lv
biAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtT3JpZ2luc0xvYWRlZEZv
clByb2Nlc3NpbmcgPSAxMDA7CitzdGF0aWMgY29uc3QgYXV0byBzdGF0aXN0aWNzTW9kZWxWZXJz
aW9uID0gMjsKIAogUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQogewpAQCAtNzMsNyArNzMsOCBAQCB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRTdGF0CiBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNv
ZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgp
CiB7CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7Ci0gICAgCisK
KyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNzTW9kZWxWZXJz
aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5iZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bmQoKSwgW3RoaXNdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBjb25zdCBTdGF0aXN0aWNz
VmFsdWUmIG9yaWdpbikgewogICAgICAgICBvcmlnaW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5l
cik7CiAgICAgfSk7CkBAIC04Niw5ICs4NywxMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVhZERhCiAgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgdW5zaWduZWQgdmVyc2lvbjsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlVUludDMyKCJ2ZXJzaW9uIiwgdmVyc2lvbikpCisgICAgICAgIHZlcnNpb24gPSAx
OwogICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0aWNzOwot
ICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRp
c3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdGhpc10oS2V5ZWREZWNvZGVyJiBkZWNvZGVySW5u
ZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpc3RpY3MuZGVjb2RlKGRlY29kZXJJbm5lcik7CisgICAgYm9vbCBzdWNjZWVkZWQgPSBk
ZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIGxvYWRlZFN0YXRpc3Rp
Y3MsIFt0aGlzLCB2ZXJzaW9uXShLZXllZERlY29kZXImIGRlY29kZXJJbm5lciwgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgeworICAgICAgICByZXR1cm4gc3RhdGlzdGljcy5k
ZWNvZGUoZGVjb2RlcklubmVyLCB2ZXJzaW9uKTsKICAgICB9KTsKIAogICAgIGlmICghc3VjY2Vl
ZGVkKQpAQCAtMTQxLDE0ICsxNDUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmlyZURhCiAgICAgICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCi1ib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzRW5vdWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNz
aW5nKCkKLXsKLSAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpID49IG1p
bmltdW1PcmlnaW5zTG9hZGVkRm9yUHJvY2Vzc2luZzsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik+JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewotICAgIEFTU0VSVCho
YXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSk7CiAgICAgZm9yIChhdXRvJiBy
ZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQogICAg
ICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOwogfQpAQCAtMTYyLDQgKzE2
MCwxMiBAQCBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvCiAgICAgfQog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjp1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpCit7CisgICAgZm9yIChh
dXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykg
eworICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXNpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50UmVzb3VyY2VEb21haW4pOwor
ICAgICAgICArK3N0YXRpc2ljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9Cit9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCShyZXZpc2lvbiAyMDg4NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3Np
bmcoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlU3RhdGlzdGljc0Zv
clJlbW92ZWREYXRhUmVjb3Jkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKTsKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkg
PSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDg4NzIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxNi0x
MS0xNyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNv
dXJjZSBsb2FkIHN0YXRpc3RpY3M6IENvdmVyIGZ1cnRoZXIgZGF0YSByZWNvcmRzLCBjb3VudCBy
ZW1vdmVkIGRhdGEgcmVjb3JkcywgYW5kIG9ubHkgZmlyZSBoYW5kbGVyIHdoZW4gbmVlZGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ2NTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbmR5IEVzdGVzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAg
ICAgQ29uc2lzdGVudCBuYW1pbmcgd2l0aCAncmVtb3ZlJyByYXRoZXIgdGhhbiAnZGVsZXRlJy4K
KyAgICAgICAgICAgIE5vdyByZW1vdmVzIGxvY2FsU3RvcmFnZSwgSW5kZXhEQiwgZGlzayBjYWNo
ZSwgYW5kIG1lbW9yeSBjYWNoZSB0b28uCisgICAgICAgICAgICBVcGRhdGVzIHN0YXRpc3RpY3Mg
d2l0aCBudW1iZXIgb2YgdGltZXMgaXQgaGFzIHJlbW92ZWQgZGF0YSByZWNvcmRzLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NVcGRhdGVkKToKKyAgICAgICAgICAgIE5vIGxvbmdlciBjaGVja3Mgd2hldGhlciBp
dCBoYXMgZW5vdWdoIGRhdGEgc2luY2UgdGhlIGNsYXNzaWZpY2F0aW9uIHJ1bGVzCisgICAgICAg
ICAgICBhcmUgYWJzb2x1dGUsIG5vdCByZWxhdGl2ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAg
ICAgICAgICBDb25zaXN0ZW50IG5hbWluZyB3aXRoICdyZW1vdmUnIHJhdGhlciB0aGFuICdkZWxl
dGUnLgorCiAyMDE2LTExLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZSBTUEkuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAkocmV2aXNpb24gMjA4ODY3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDggKzQ0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1zdGF0aWMgY29uc3QgYXV0byBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRh
UmVjb3JkcyA9IDYwMDsKK3N0YXRpYyBjb25zdCBhdXRvIG51bWJlck9mU2Vjb25kc0JldHdlZW5S
ZW1vdmluZ0RhdGFSZWNvcmRzID0gNjA7CiBzdGF0aWMgY29uc3QgYXV0byBmZWF0dXJlVmVjdG9y
TGVuZ3RoVGhyZXNob2xkID0gMzsKK3N0YXRpYyBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlc1RvUmVtb3ZlOwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiB7CkBAIC05OSw5ICsxMDAsOSBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xhCiAgICAgfQogfQogCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJEYXRhUmVjb3JkcygpCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMoKQog
ewotICAgIGlmIChtX2RhdGFTdG9yZUNsZWFyUGVuZGluZykKKyAgICBpZiAobV9kYXRhUmVjb3Jk
c1JlbW92YWxQZW5kaW5nKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8U3RyaW5nPiBw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjb3JlU3RvcmUoKS5wcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7CkBAIC0xMDksNDEgKzExMCw1MyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwotICAgIGlmICghbV9sYXN0VGltZURhdGFS
ZWNvcmRzV2VyZUNsZWFyZWQpIHsKLSAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNs
ZWFyZWQgPSBub3c7CisgICAgaWYgKCFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCkg
eworICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IG5vdzsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNvcmRz
V2VyZUNsZWFyZWQgKyBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRhUmVjb3Jkcykp
CisgICAgaWYgKG5vdyA8IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG51bWJl
ck9mU2Vjb25kc0JldHdlZW5SZW1vdmluZ0RhdGFSZWNvcmRzKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgPSB0cnVlOwotICAgIG1fbGFzdFRpbWVEYXRh
UmVjb3Jkc1dlcmVDbGVhcmVkID0gbm93OworICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGlu
ZyA9IHRydWU7CisgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBub3c7CisK
KyAgICBpZiAoZGF0YVR5cGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRhdGFUeXBl
c1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6Q29va2llczsKKyAgICAgICAgZGF0YVR5cGVz
VG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2U7CisgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzOworICAg
ICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZTsKKyAg
ICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZTsK
KyAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVm
YXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3By
ZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5z
KSwgdGhpc10gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBB
UEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9y
ZSgpOwogCi0gICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlw
ZTo6Q29va2llcywgeyB9LCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRhUmVjb3Jkcykgewor
ICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNoRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgeyB9
LCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnMpLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRhUmVjb3JkcykgewogICAgICAgICAgICAgVmVj
dG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVjb3JkczsKKyAgICAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkczsKICAgICAgICAg
ICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFSZWNvcmQgOiB3ZWJzaXRlRGF0YVJlY29yZHMpIHsK
ICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291cmNlRG9tYWluIDogcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWJzaXRl
RGF0YVJlY29yZC5kaXNwbGF5TmFtZS5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHByZXZhbGVu
dFJlc291cmNlRG9tYWluKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdWZmaXhT
dGFydCA9IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lLmxlbmd0aCgpIC0gcHJldmFsZW50
UmVzb3VyY2VEb21haW4ubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
ZmZpeFN0YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lW3N1ZmZpeFN0YXJ0IC0g
MV0gPT0gJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3
ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtzdWZmaXhTdGFydCAtIDFdID09ICcuJykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0
YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VE
b21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghZGF0YVJlY29yZHMu
c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1
dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9y
ZS5yZW1vdmVEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyBXVEZNb3ZlKGRhdGFSZWNv
cmRzKSB9LCBbdGhpc10gewotICAgICAgICAgICAgICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5n
ID0gZmFsc2U7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLnJlbW92ZURhdGEoZGF0YVR5
cGVzVG9SZW1vdmUsIGRhdGFSZWNvcmRzLCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERh
dGFSZWNvcmRzID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29y
ZHMpLCB0aGlzXSB7CisgICAgICAgICAgICAgICAgdGhpcy0+Y29yZVN0b3JlKCkudXBkYXRlU3Rh
dGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3JkcyhwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRo
RGF0YVJlY29yZHMpOworICAgICAgICAgICAgICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGlu
ZyA9IGZhbHNlOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTUz
LDEzICsxNjYsMTEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcwog
ewogICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlzdGljcyhvcmlnaW5zKTsKIAotICAgIGlmIChj
b3JlU3RvcmUoKS5oYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSkgewotICAg
ICAgICBjb3JlU3RvcmUoKS5wcm9jZXNzU3RhdGlzdGljcyhbdGhpc10gKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSB7Ci0gICAgICAgICAgICBjbGFzc2lmeVJlc291
cmNlKHJlc291cmNlU3RhdGlzdGljKTsKLSAgICAgICAgICAgIGNsZWFyRGF0YVJlY29yZHMoKTsK
LSAgICAgICAgfSk7Ci0gICAgfQotCisgICAgY29yZVN0b3JlKCkucHJvY2Vzc1N0YXRpc3RpY3Mo
W3RoaXNdIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgeworICAg
ICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNlU3RhdGlzdGljKTsKKyAgICAgICAgcmVtb3Zl
RGF0YVJlY29yZHMoKTsKKyAgICB9KTsKKyAgICAKICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3Rv
cmUoKS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsKICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rp
c2soKmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmgJKHJldmlzaW9uIDIwODg2NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQs
NyArNzQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJh
Y3RlcmlzdGljcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAg
dm9pZCBjbGFzc2lmeVJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsK
LSAgICB2b2lkIGNsZWFyRGF0YVJlY29yZHMoKTsKKyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRz
KCk7CiAKICAgICBTdHJpbmcgcGVyc2lzdGVudFN0b3JhZ2VQYXRoKGNvbnN0IFN0cmluZyYgbGFi
ZWwpIGNvbnN0OwogCkBAIC04OSw4ICs4OSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3Rv
cmFnZVBhdGg7CiAgICAgYm9vbCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkIHsgZmFs
c2UgfTsKIAotICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCB7IDAg
fTsKLSAgICBib29sIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nIHsgZmFsc2UgfTsKKyAgICBkb3Vi
bGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgeyAwIH07CisgICAgYm9vbCBtX2Rh
dGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>