<?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>169322</bug_id>
          
          <creation_ts>2017-03-07 17:21:13 -0800</creation_ts>
          <short_desc>Resource Load Statistics: Communicate to the network process which domains to partition</short_desc>
          <delta_ts>2017-03-08 20:02:24 -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>WebKit2</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>InRadar</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>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1284653</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-07 17:21:13 -0800</bug_when>
    <thetext>The UI process should let the network process know which domains it should partition cookies for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284656</commentid>
    <comment_count>1</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-07 17:22:02 -0800</bug_when>
    <thetext>rdar://problem/30768921</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284731</commentid>
    <comment_count>2</comment_count>
      <attachid>303770</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-07 20:32:30 -0800</bug_when>
    <thetext>Created attachment 303770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284790</commentid>
    <comment_count>3</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 00:44:18 -0800</bug_when>
    <thetext>I have a proposed test setup for this but there&apos;s something going on in partitioning between localhost and 127.0.0.1. Will investigate further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284883</commentid>
    <comment_count>4</comment_count>
      <attachid>303770</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-03-08 09:52:38 -0800</bug_when>
    <thetext>Comment on attachment 303770
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:103
&gt; +    Vector&lt;String&gt; prevalentResourceDomainsWithoutUserInteraction;

If &apos;loadedStatistics&apos; is generally likely to be more than 16 (or whatever the default Vector size is), we should call &quot;prevalentResourceDomainsWithoutUserInteraction.reserveCapacity(loadedStatistics.size())&quot; to avoid having to grow the Vector multiple times during the loop.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:150
&gt; +void ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback(std::function&lt;void(const String&amp; primaryDomain, bool value)&gt; handler)

I think this needs to be &quot;std::function&lt;void(const ... etc.)&gt;&amp;&amp; handler&quot;

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:155
&gt; +void ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback(std::function&lt;void(const Vector&lt;String&gt;&amp; primaryDomains, bool value)&gt; handler)

Ditto --&gt; I think handler has to be passed by &amp;&amp; to avoid a copy.

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:114
&gt; +    for (HashSet&lt;String&gt;::iterator iter = m_cookiePartitioningList.begin(); iter != m_cookiePartitioningList.end(); ++iter) {

Please use a modern C++ iterator here:

for (auto&amp; topPrivatelyOwnedDomain : m_cookiePartitioningList) {
    ...

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:213
&gt; +    

Please undo this whitespace change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284955</commentid>
    <comment_count>5</comment_count>
      <attachid>303833</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 13:19:14 -0800</bug_when>
    <thetext>Created attachment 303833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284957</commentid>
    <comment_count>6</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 13:21:14 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 303770 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303770&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:103
&gt; &gt; +    Vector&lt;String&gt; prevalentResourceDomainsWithoutUserInteraction;
&gt; 
&gt; If &apos;loadedStatistics&apos; is generally likely to be more than 16 (or whatever
&gt; the default Vector size is), we should call
&gt; &quot;prevalentResourceDomainsWithoutUserInteraction.
&gt; reserveCapacity(loadedStatistics.size())&quot; to avoid having to grow the Vector
&gt; multiple times during the loop.

Fixed. Alex added that I can use reserveInitialCapacity() and make use of uncheckedAppend() in the population of the vector.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:150
&gt; &gt; +void ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback(std::function&lt;void(const String&amp; primaryDomain, bool value)&gt; handler)
&gt; 
&gt; I think this needs to be &quot;std::function&lt;void(const ... etc.)&gt;&amp;&amp; handler&quot;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:155
&gt; &gt; +void ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback(std::function&lt;void(const Vector&lt;String&gt;&amp; primaryDomains, bool value)&gt; handler)
&gt; 
&gt; Ditto --&gt; I think handler has to be passed by &amp;&amp; to avoid a copy.

Fixed.

&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:114
&gt; &gt; +    for (HashSet&lt;String&gt;::iterator iter = m_cookiePartitioningList.begin(); iter != m_cookiePartitioningList.end(); ++iter) {
&gt; 
&gt; Please use a modern C++ iterator here:
&gt; 
&gt; for (auto&amp; topPrivatelyOwnedDomain : m_cookiePartitioningList) {
&gt;     ...

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:213
&gt; &gt; +    
&gt; 
&gt; Please undo this whitespace change.

Fixed.

Thanks, Brent!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285002</commentid>
    <comment_count>7</comment_count>
      <attachid>303837</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 13:57:58 -0800</bug_when>
    <thetext>Created attachment 303837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285003</commentid>
    <comment_count>8</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 13:59:15 -0800</bug_when>
    <thetext>Added a platform check for the network process message in WebCookieManagerProxy::setCookieStoragePartitioningEnabled() since it&apos;s only available on Cocoa platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285023</commentid>
    <comment_count>9</comment_count>
      <attachid>303844</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 14:28:23 -0800</bug_when>
    <thetext>Created attachment 303844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285066</commentid>
    <comment_count>10</comment_count>
      <attachid>303844</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-08 15:53:35 -0800</bug_when>
    <thetext>Comment on attachment 303844
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:151
&gt; +void ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback(std::function&lt;void(const String&amp; primaryDomain, bool value)&gt;&amp;&amp; handler)

Function, not std::function
Maybe in followup since this is done elsewhere in this code.

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:147
&gt; +    for (auto&amp; topPrivatelyOwnedDomain : m_cookiePartitioningList) {

This is going to be quite hot code if we call this for each network request.  Is there some guarantee that the set is going to remain small?  Do we really need to iterate the set twice, or at all?  I would be ok with adding a hash lookup, but iterating a container with unlimited size will slow down browsing a lot.

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:152
&gt; +    for (HashSet&lt;String&gt;::iterator iter = m_cookiePartitioningList.begin(); iter != m_cookiePartitioningList.end(); ++iter) {

Use c++11 for loops:
for (auto&amp; topPrivatelyOwnedDomain : m_cookiePartitioningList) {

Also, m_cookiePartitioningList has a bad name.  I think it should be something with &quot;hosts&quot; in it.

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:164
&gt; +void NetworkStorageSession::shouldPartitionCookiesForHost(const String&amp; host, bool value)

setShouldPartitionCookiesForHost

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.messages.in:83
&gt; +    ShouldPartitionCookiesForTopPrivatelyOwnedDomain(String topPrivatelyOwnedDomain, bool value)
&gt; +    ShouldPartitionCookiesForTopPrivatelyOwnedDomains(Vector&lt;String&gt; topPrivatelyOwnedDomains, bool value)

Do we need both of these? Can&apos;t we just send a vector of length one for the first option?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:66
&gt; +    void registerSharedResourceLoadObserver(std::function&lt;void(const String&amp; primaryDomain, bool value)&gt;&amp;&amp; shouldPartitionCookiesForDomainHandler, std::function&lt;void(const Vector&lt;String&gt;&amp; primaryDomain, bool value)&gt;&amp;&amp; shouldPartitionCookiesForDomainsHandler);

Yeah, let&apos;s not add so many uses of std::function unless they really need to be copyable.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1054
&gt; +    for (auto&amp; processPool : processPools())

This iterates just the process pools associated with this WebsiteDataStore, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285109</commentid>
    <comment_count>11</comment_count>
      <attachid>303868</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 17:02:04 -0800</bug_when>
    <thetext>Created attachment 303868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285112</commentid>
    <comment_count>12</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 17:09:11 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 303844 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303844&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:151
&gt; &gt; +void ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback(std::function&lt;void(const String&amp; primaryDomain, bool value)&gt;&amp;&amp; handler)
&gt; 
&gt; Function, not std::function
&gt; Maybe in followup since this is done elsewhere in this code.

Will do in a follow-up. We have a couple as you noted.

&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:147
&gt; &gt; +    for (auto&amp; topPrivatelyOwnedDomain : m_cookiePartitioningList) {
&gt; 
&gt; This is going to be quite hot code if we call this for each network request.
&gt; Is there some guarantee that the set is going to remain small?  Do we really
&gt; need to iterate the set twice, or at all?  I would be ok with adding a hash
&gt; lookup, but iterating a container with unlimited size will slow down
&gt; browsing a lot.

The double iteration was a mistake. Thanks for spotting it. After a discussion I have now changed to calculating the host&apos;s top privately controlled domain and doing a .contains() in the hash set. Should be more performant.

&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:152
&gt; &gt; +    for (HashSet&lt;String&gt;::iterator iter = m_cookiePartitioningList.begin(); iter != m_cookiePartitioningList.end(); ++iter) {
&gt; 
&gt; Use c++11 for loops:
&gt; for (auto&amp; topPrivatelyOwnedDomain : m_cookiePartitioningList) {

This loop is now gone.

&gt; Also, m_cookiePartitioningList has a bad name.  I think it should be
&gt; something with &quot;hosts&quot; in it.

Fixed.

&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:164
&gt; &gt; +void NetworkStorageSession::shouldPartitionCookiesForHost(const String&amp; host, bool value)
&gt; 
&gt; setShouldPartitionCookiesForHost
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkProcess.messages.in:83
&gt; &gt; +    ShouldPartitionCookiesForTopPrivatelyOwnedDomain(String topPrivatelyOwnedDomain, bool value)
&gt; &gt; +    ShouldPartitionCookiesForTopPrivatelyOwnedDomains(Vector&lt;String&gt; topPrivatelyOwnedDomains, bool value)
&gt; 
&gt; Do we need both of these? Can&apos;t we just send a vector of length one for the
&gt; first option?

I did it that way to optimize the common case which is one domain at a time. After a discussion I now have just one message type.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:66
&gt; &gt; +    void registerSharedResourceLoadObserver(std::function&lt;void(const String&amp; primaryDomain, bool value)&gt;&amp;&amp; shouldPartitionCookiesForDomainHandler, std::function&lt;void(const Vector&lt;String&gt;&amp; primaryDomain, bool value)&gt;&amp;&amp; shouldPartitionCookiesForDomainsHandler);
&gt; 
&gt; Yeah, let&apos;s not add so many uses of std::function unless they really need to
&gt; be copyable.

Yup. Commented above.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1054
&gt; &gt; +    for (auto&amp; processPool : processPools())
&gt; 
&gt; This iterates just the process pools associated with this WebsiteDataStore,
&gt; right?

AFAIK, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285137</commentid>
    <comment_count>13</comment_count>
      <attachid>303868</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-08 17:40:56 -0800</bug_when>
    <thetext>Comment on attachment 303868
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:167
&gt; +    Vector&lt;String&gt; domainVector;
&gt; +    domainVector.reserveInitialCapacity(1);
&gt; +    domainVector.uncheckedAppend(primaryDomain);
&gt; +    fireShouldPartitionCookiesHandler(domainVector, value);

reserveInitialCapacity isn&apos;t worth it if the capacity is less that 16 or something.  Just do an append.  Or even better, use an initializer list:
fireShouldPartitionCookiesHandler({primaryDomain}, value);

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:152
&gt; +    auto domain = topPrivatelyControlledDomain(host);
&gt; +    if (domain.isEmpty())
&gt; +        domain = host;

Is this for localhost?  I&apos;m not sure this is a good idea.  Maybe just return false if there&apos;s no top privately controlled domain.

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:155
&gt; +    if (m_topPrivatelyControlledDomainsForCookiePartitioning.contains(domain))
&gt; +        return true;

just return the result of contains.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1226
&gt; +        [this] (const Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, bool value) {

When the WebsiteDataStore gets destroyed, it tells the ResourceLoadStatistics that it is going to be destroyed, so this captured this pointer won&apos;t be used again, right?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:1354
&gt; +    for (size_t i = 0; i &lt; keys.size(); ++i) {

This could be a c++11-style for loop, too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285154</commentid>
    <comment_count>14</comment_count>
      <attachid>303880</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 18:15:52 -0800</bug_when>
    <thetext>Created attachment 303880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285163</commentid>
    <comment_count>15</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-03-08 18:23:55 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 303868 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=303868&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:167
&gt; &gt; +    Vector&lt;String&gt; domainVector;
&gt; &gt; +    domainVector.reserveInitialCapacity(1);
&gt; &gt; +    domainVector.uncheckedAppend(primaryDomain);
&gt; &gt; +    fireShouldPartitionCookiesHandler(domainVector, value);
&gt; 
&gt; reserveInitialCapacity isn&apos;t worth it if the capacity is less that 16 or
&gt; something.  Just do an append.  Or even better, use an initializer list:
&gt; fireShouldPartitionCookiesHandler({primaryDomain}, value);

Doing it with an initializer list confuses at least Xcode that the function will call itself. I did it with an explicit vector.

&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:152
&gt; &gt; +    auto domain = topPrivatelyControlledDomain(host);
&gt; &gt; +    if (domain.isEmpty())
&gt; &gt; +        domain = host;
&gt; 
&gt; Is this for localhost?  I&apos;m not sure this is a good idea.  Maybe just return
&gt; false if there&apos;s no top privately controlled domain.

I can&apos;t test partitioning if localhost gets the empty partition. Instead filed follow-up bug for fixing this in ResourceRequestBase::partitionName() too: https://bugs.webkit.org/show_bug.cgi?id=169399

&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:155
&gt; &gt; +    if (m_topPrivatelyControlledDomainsForCookiePartitioning.contains(domain))
&gt; &gt; +        return true;
&gt; 
&gt; just return the result of contains.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1226
&gt; &gt; +        [this] (const Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, bool value) {
&gt; 
&gt; When the WebsiteDataStore gets destroyed, it tells the
&gt; ResourceLoadStatistics that it is going to be destroyed, so this captured
&gt; this pointer won&apos;t be used again, right?

I cannot see any other use of it, no.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:1354
&gt; &gt; +    for (size_t i = 0; i &lt; keys.size(); ++i) {
&gt; 
&gt; This could be a c++11-style for loop, too

Can it? I&apos;m using the index i for two different vectors, keys and values.

Thanks for the review and all the enhancements, Alex!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285198</commentid>
    <comment_count>16</comment_count>
      <attachid>303880</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-08 20:02:18 -0800</bug_when>
    <thetext>Comment on attachment 303880
Patch

Clearing flags on attachment: 303880

Committed r213623: &lt;http://trac.webkit.org/changeset/213623&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285199</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-08 20:02:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303770</attachid>
            <date>2017-03-07 20:32:30 -0800</date>
            <delta_ts>2017-03-08 13:19:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169322-20170307203229.patch</filename>
            <type>text/plain</type>
            <size>26400</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE3LTAzLTA3ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEkg
d2lsbCBhZGQgdGVzdHMgdG8gdGhpcyBwYXRjaCBiZWZvcmUgSSBsYW5kIGl0LgorICAgICAgICBK
dXN0IHdhbnQgdGhlIGNvZGUgcmV2aWV3IHRvIGdldCBnb2luZy4KKworICAgICAgICAqIGxvYWRl
ci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbik6
CisgICAgICAgICAgICBOb3cgY2FsbHMgdGhlIGhhbmRsZXIgZm9yIGNvb2tpZSBwYXJ0aXRpb25p
bmcgdG8gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgIHRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyB0
aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBO
b3cgYm9vdHN0cmFwcyB0aGUgbmV0d29yayBwcm9jZXNzJyBzZXQgb2Yga25vd24gZG9tYWlucyB0
bworICAgICAgICAgICAgcGFydGl0aW9uIGNvb2tpZXMgZm9yLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAgICAgTm93IHRlbGxzIHRoZSBuZXR3b3JrIHByb2Nlc3MgdG8gc3RhcnQgcGFydGl0
aW9uaW5nIGFnYWluCisgICAgICAgICAgICB3aGVuIHVzZXIgaW50ZXJhY3Rpb24gYWdlcyBvdXQu
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKToKKwogMjAxNy0wMy0wNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU29tZSBwbGF0Zm9ybXMgd29uJ3QgYmUgYWJs
ZSB0byBjcmVhdGUgYSBHUFVEZXZpY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA0LDEzICszMDQsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVy
YQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgYXV0byBw
cmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0byYgc3RhdGlz
dGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpblN0cik7CiAgICAgZG91YmxlIG5ld1RpbWVzdGFtcCA9IHJlZHVjZVRpbWVS
ZXNvbHV0aW9uVG9PbmVEYXkoV1RGOjpjdXJyZW50VGltZSgpKTsKICAgICBpZiAobmV3VGltZXN0
YW1wID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IG5ld1RpbWVzdGFtcDsKKworICAg
IG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWlu
U3RyLCBmYWxzZSk7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDggKzEwMCwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVh
ZERhCiAgICAgaWYgKCFzdWNjZWVkZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0
byYgc3RhdGlzdGljcyA6IGxvYWRlZFN0YXRpc3RpY3MpCisgICAgVmVjdG9yPFN0cmluZz4gcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbjsKKyAgICBmb3IgKGF1
dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0aWNzKSB7CiAgICAgICAgIG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnNldChzdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFpbiwgc3RhdGlzdGljcyk7
CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIXN0YXRpc3Rp
Y3MuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VEb21h
aW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5hcHBlbmQoc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21h
aW4pOworICAgIH0KKyAgICAKKyAgICBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
cHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdHJ1ZSk7CiB9
CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NGb3JPcmln
aW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCkBAIC0xNDEsMTIgKzE0NywzNCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90CiAgICAgbV9kYXRhQWRkZWRIYW5kbGVyID0g
V1RGTW92ZShoYW5kbGVyKTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4gaGFuZGxlcikKK3sKKyAgICBt
X3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyID0gV1RGTW92ZShoYW5kbGVy
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFBhcnRp
dGlvbkNvb2tpZXNDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHByaW1hcnlEb21haW5zLCBib29sIHZhbHVlKT4gaGFuZGxlcikKK3sKKyAgICBtX3Nob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9
CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmlj
YXRpb25IYW5kbGVyKCkKIHsKICAgICBpZiAobV9kYXRhQWRkZWRIYW5kbGVyKQogICAgICAgICBt
X2RhdGFBZGRlZEhhbmRsZXIoKTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvckRvbWFpbkhhbmRsZXIpCisgICAgICAgIG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRv
bWFpbkhhbmRsZXIocHJpbWFyeURvbWFpbiwgdmFsdWUpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAo
bV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIpCisgICAgICAgIG1fc2hv
dWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyKHByaW1hcnlEb21haW5zLCB2YWx1
ZSk7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKQogewogICAgIGlmIChzZWNvbmRzID49IDAp
CkBAIC0xNzAsNiArMTk4LDEwIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNIYWQKICAgICAgICAgLy8gaXQgaGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVm
YXVsdCAtMS4KICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvbiA9IDA7CiAgICAgICAgIHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiA9
IGZhbHNlOworCisgICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291
cmNlKQorICAgICAgICAgICAgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHJlc291
cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgdHJ1ZSk7CisKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NiwxMCArNTYsMTQgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWVy
Z2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiB0YWtlU3RhdGlz
dGljcygpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROb3RpZmljYXRpb25DYWxsYmFj
ayhzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gaGFuZGxlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXROb3RpZmljYXRpb25DYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKHN0ZDo6
ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpPik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJh
Y2soc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlu
cywgYm9vbCB2YWx1ZSk+KTsKIAogICAgIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KCk7CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFu
ZGxlcihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3Moc3RkOjpmdW5jdGlvbjx2b2lkKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmKT4mJik7CiAKQEAgLTcxLDYgKzc1LDggQEAgcHJpdmF0ZToKIAogICAg
IEhhc2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcDsKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9kYXRhQWRkZWRIYW5kbGVyOwor
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wg
dmFsdWUpPiBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyOworICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJv
b2wgdmFsdWUpPiBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcjsKIH07
CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgJKHJldmlz
aW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lm
IFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAtNjcsNiArNjgsMTEg
QEAgcHVibGljOgogICAgIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcGxhdGZvcm1TZXNzaW9uKCkg
eyByZXR1cm4gbV9wbGF0Zm9ybVNlc3Npb24uZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkKGJvb2wpOworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5H
KQorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3Qo
Y29uc3QgU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzaG91bGRQYXJ0aXRpb25D
b29raWVzRm9ySG9zdChjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0cyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIGJvb2wgdmFsdWUpOworI2VuZGlmCiAjZWxpZiBVU0UoU09VUCkKICAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24oU2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNz
aW9uPiYmKTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CkBAIC0xMDYsNiArMTEyLDEw
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIENyZWRlbnRpYWxTdG9yYWdlIG1fY3JlZGVudGlh
bFN0b3JhZ2U7CisKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9jb29raWVQYXJ0aXRpb25pbmdMaXN0OworI2VuZGlmCiB9Owog
CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY29va2llU3RvcmFnZVBhcnRpdGlvbihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShy
ZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEw
OCw0MSBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llU3RvCiAgICAgY29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCisjaWYgSEFWRShD
Rk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCitib29sIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoY29uc3QgU3RyaW5nJiBob3N0KQorewor
ICAgIGZvciAoSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gbV9jb29raWVQYXJ0aXRp
b25pbmdMaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9jb29raWVQYXJ0aXRpb25pbmdMaXN0LmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgYXV0byB0b3BQcml2YXRlbHlPd25lZERvbWFpbiA9ICppdGVy
OworICAgICAgICBpZiAoaG9zdC5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHRvcFByaXZhdGVs
eU93bmVkRG9tYWluKSkgeworICAgICAgICAgICAgYXV0byBzdWZmaXhTdGFydCA9IGhvc3QubGVu
Z3RoKCkgLSB0b3BQcml2YXRlbHlPd25lZERvbWFpbi5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlm
ICghc3VmZml4U3RhcnQgfHwgaG9zdFtzdWZmaXhTdGFydCAtIDFdID09ICcuJykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzaG91bGRQYXJ0aXRpb25D
b29raWVzRm9ySG9zdChjb25zdCBTdHJpbmcmIGhvc3QsIGJvb2wgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlKQorICAgICAgICBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QuYWRkKGhvc3QpOworICAg
IGVsc2UKKyAgICAgICAgbV9jb29raWVQYXJ0aXRpb25pbmdMaXN0LnJlbW92ZShob3N0KTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JI
b3N0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdHMsIGJvb2wgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlKQorICAgICAgICBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QuYWRkKGhvc3RzLmJlZ2lu
KCksIGhvc3RzLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBob3N0IDog
aG9zdHMpCisgICAgICAgICAgICBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QucmVtb3ZlKGhvc3Qp
OworICAgIH0KK30KKworI2VuZGlmCisKICNpZiBQTEFURk9STShDT0NPQSkKIAogU3RyaW5nIGNv
b2tpZVN0b3JhZ2VQYXJ0aXRpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpJbmRl
eDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTYzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTctMDMtMDcgIEpvaG4gV2lsYW5k
ZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0
aWNzOiBDb21tdW5pY2F0ZSB0byB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWNoIGRvbWFpbnMgdG8g
cGFydGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjkzMjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwNzY4OTIxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2hvdWxk
UGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRl
bHlPd25lZERvbWFpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Lmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tD
b2NvYSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNob3VsZFBhcnRpdGlv
bkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlP
d25lZERvbWFpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmNsYXNzaWZ5UmVzb3VyY2UpOgorICAgICAgICAgICAgTm93IHRlbGxzIHRoZSBuZXR3
b3JrIHByb2Nlc3MgYXMgc29vbiBhcyBhIGRvbWFpbiBoYXMgYmVlbiBjbGFzc2lmaWVkIGFzIHBy
ZXZhbGVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAgICAgIE92ZXJs
b2FkZWQgZnVuY3Rpb24gdG8gYWxsb3cgaW5qZWN0aW9uIG9mIGhhbmRsZXJzIGZvciBjb21tdW5p
Y2F0aW9uIHdpdGggdGhlCisgICAgICAgICAgICBuZXR3b3JrIHByb2Nlc3MuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVs
eU93bmVkRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxk
UGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIpOgorICAgICAgICAgICAgTm93IHNldHMgdHdvIGNhbGxiYWNrIGhhbmRsZXJzIGZvciBjb21t
dW5pY2F0aW9uIHdpdGggdGhlIG5ldHdvcmsgcHJvY2Vzcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE3LTAzLTA3ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBTdWJwaXhlbEFu
dGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZCBieSBkZWZhdWx0IG9uIHNvbWUgdmVyc2lvbnMgb2Yg
bWFjT1MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDYgKzMxMCwx
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkaWRHcmFudFNhbmRib3hFeHRlCiAgICAgICAgIGhh
bmRsZXIoKTsKIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQor
dm9pZCBOZXR3b3JrUHJvY2Vzczo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVs
eU93bmVkRG9tYWluKGNvbnN0IFN0cmluZyYgZG9tYWluLCBib29sIHZhbHVlKQoreworICAgIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuc2hvdWxkUGFydGl0
aW9uQ29va2llc0Zvckhvc3QoZG9tYWluLCB2YWx1ZSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIGJvb2wgdmFsdWUpCit7CisgICAgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0aXRpb25Db29r
aWVzRm9ySG9zdHMoZG9tYWlucywgdmFsdWUpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGZl
dGNoRGlza0NhY2hlRW50cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBGdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vi
c2l0ZURhdGE6OkVudHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYs
MTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFz
ZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBGdW5jdGlv
bjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NU
T1JBR0VfUEFSVElUSU9OSU5HKQorICAgIHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWluKGNvbnN0IFN0cmluZyYsIGJvb2wgdmFsdWUpOworICAgIHZv
aWQgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYsIGJvb2wgdmFsdWUpOworI2VuZGlmCisKICAgICBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIGxvYWRUaHJvdHRsZUxhdGVuY3koKSBjb25zdCB7IHJldHVybiBtX2xv
YWRUaHJvdHRsZUxhdGVuY3k7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNzcsNCArNzcsOSBAQCBtZXNz
YWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlCiAgICAgUHJvY2Vzc0RpZFJlc3Vt
ZSgpCiAKICAgICBEaWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JC
bG9icyh1aW50NjRfdCByZXF1ZXN0SUQpCisKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BB
UlRJVElPTklORykKKyAgICBTaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3du
ZWREb21haW4oU3RyaW5nIHRvcFByaXZhdGVseU93bmVkRG9tYWluLCBib29sIHZhbHVlKQorICAg
IFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoVmVjdG9y
PFN0cmluZz4gdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBib29sIHZhbHVlKQorI2VuZGlmCiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMsMTIgQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5l
dHdvcmtEYXRhVGFza0NvYwogICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgQ3JlYXRpbmcg
TmV0d29ya0RhdGFUYXNrIHdpdGggVVJMICVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIG5z
UmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7CiAKICNpZiBIQVZFKENGTkVU
V09SS19TVE9SQUdFX1BBUlRJVElPTklORykKLSAgICBTdHJpbmcgc3RvcmFnZVBhcnRpdGlvbiA9
IFdlYkNvcmU6OmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24ocmVxdWVzdCk7Ci0gICAgaWYgKCFzdG9y
YWdlUGFydGl0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgbV90YXNrLmdldCgpLl9zdG9yYWdlUGFy
dGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247CisgICAgaWYgKHNlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkuc2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QodXJsLmhv
c3QoKSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBQYXJ0aXRpb25pbmcg
Y29va2llcyBmb3IgVVJMICVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7CisgICAgICAgIFN0cmluZyBzdG9yYWdlUGFy
dGl0aW9uID0gV2ViQ29yZTo6Y29va2llU3RvcmFnZVBhcnRpdGlvbihyZXF1ZXN0KTsKKyAgICAg
ICAgaWYgKCFzdG9yYWdlUGFydGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fdGFzay5n
ZXQoKS5fc3RvcmFnZVBhcnRpdGlvbklkZW50aWZpZXIgPSBzdG9yYWdlUGFydGl0aW9uOworICAg
IH0KICNlbmRpZgogCiAgICAgaWYgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6cmVzb3VyY2VQ
cmlvcml0aWVzRW5hYmxlZCgpKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9u
IDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgi
CiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgpAQCAtODUsOCArODYsMTEgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmNsYXNzaWZ5UmVzb3VyY2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VT
dGF0aXN0aWMpCiB7CiAgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291
cmNlCi0gICAgICAgICYmIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaGFzUHJl
dmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MocmVzb3VyY2VTdGF0aXN0aWMpKQorICAgICAg
ICAmJiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmhhc1ByZXZhbGVudFJlc291
cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlzdGljKSkgewogICAgICAgICByZXNvdXJj
ZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXNv
dXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHJl
c291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgdHJ1ZSk7CisgICAgfQogfQogCiB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMoKQpAQCAt
MTcwLDcgKzE3NCw2IEBAIGJvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXMK
ICAgICByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKIH0KIAotCiB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxv
YWRPYnNlcnZlcigpCiB7CiAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkuc2V0U3RhdGlzdGljc1N0b3JlKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNvcHlS
ZWYoKSk7CkBAIC0xODAsNiArMTgzLDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZWcKICAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwog
ICAgIH0pOwogfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
Z2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+IHNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JEb21haW5IYW5kbGVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpPiBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
RG9tYWluc0hhbmRsZXIpCit7CisgICAgcmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZl
cigpOworICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5zZXRTaG91bGRQYXJ0aXRp
b25Db29raWVzQ2FsbGJhY2soW3RoaXMsIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5I
YW5kbGVyXSAoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKSB7CisgICAg
ICAgIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKHByaW1hcnlEb21haW4s
IHZhbHVlKTsKKyAgICB9KTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0
U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFt0aGlzLCBzaG91bGRQYXJ0aXRpb25Db29r
aWVzRm9yRG9tYWluc0hhbmRsZXJdIChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFp
bnMsIGJvb2wgdmFsdWUpIHsKKyAgICAgICAgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFp
bnNIYW5kbGVyKHByaW1hcnlEb21haW5zLCB2YWx1ZSk7CisgICAgfSk7Cit9CiAKIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZyb21EaXNrSWZOZWVkZWQoKQog
ewpAQCAtMTk2LDcgKzIxMCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZWEKICAgICAgICAgY29yZVN0b3JlKCkucmVhZERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7
CiAgICAgfSk7CiB9Ci0KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbikKIHsKICAgICBjb25uZWN0aW9uLmFkZFdvcmtRdWV1ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fc3RhdGlzdGljc1F1ZXVlLmdldCgpLCB0aGlzKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkg
Y29uc3Q7CiAgICAgdm9pZCByZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKCk7Cisg
ICAgdm9pZCByZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKHN0ZDo6ZnVuY3Rpb248
dm9pZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpPiBzaG91bGRQYXJ0
aXRpb25Db29raWVzRm9yRG9tYWluSGFuZGxlciwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4gc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbnNIYW5kbGVyKTsKICAgICAKICAgICB2b2lkIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NVcGRhdGVkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzPiYgb3JpZ2lucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTM1NTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5MiwxOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmdyYW50U2FuZGJveEV4CiAjZW5kaWYKIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JL
X1NUT1JBR0VfUEFSVElUSU9OSU5HKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaG91bGRQ
YXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiB0
b3BQcml2YXRlbHlPd25lZERvbWFpbiwgYm9vbCB2YWx1ZSkKK3sKKyAgICBjb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW4odG9wUHJpdmF0ZWx5T3duZWREb21haW4sIHZhbHVlKSwg
MCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJp
dmF0ZWx5T3duZWREb21haW5zLCBib29sIHZhbHVlKQoreworICAgIGNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQ
cml2YXRlbHlPd25lZERvbWFpbnModG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCB2YWx1ZSksIDAp
OworfQorI2VuZGlmCisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNo
aW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBjb25uZWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBDaGlsZFByb2Nlc3NQcm94eTo6ZGlkRmlu
aXNoTGF1bmNoaW5nKGxhdW5jaGVyLCBjb25uZWN0aW9uSWRlbnRpZmllcik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDks
MTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZERlbGV0ZVdlYnNpdGVEYXRhKHVpbnQ2NF90IGNh
bGxiYWNrSUQpOwogICAgIHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKHVpbnQ2
NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZ3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJh
c2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpOworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAg
IHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKGNv
bnN0IFN0cmluZyYsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGJvb2wg
dmFsdWUpOworI2VuZGlmCiAgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZSh1aW50NjRfdCBw
YWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwg
V2ViQ29yZTo6U2hvdWxkU2FtcGxlKTsKICAgICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0
aFJlc3VsdCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgdWludDMyX3QgcmVzdWx0LCBXZWJDb3JlOjpTaG91bGRTYW1wbGUp
OwogICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUodWludDY0X3QgcGFnZUlE
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGRvdWJs
ZSB2YWx1ZSwgdW5zaWduZWQgc2lnbmlmaWNhbnRGaWd1cmVzLCBXZWJDb3JlOjpTaG91bGRTYW1w
bGUpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTM1
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxMSBAQCBtZXNzYWdl
cyAtPiBOZXR3b3JrUHJvY2Vzc1Byb3h5IExlZ2FjeVJlCiAKICAgICBHcmFudFNhbmRib3hFeHRl
bnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIFZlY3Rv
cjxTdHJpbmc+IHBhdGhzKQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05J
TkcpCisgICAgU2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlu
KFN0cmluZyB0b3BQcml2YXRlbHlPd25lZERvbWFpbiwgYm9vbCB2YWx1ZSkKKyAgICBTaG91bGRQ
YXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKFZlY3RvcjxTdHJpbmc+
IHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCB2YWx1ZSkKKyNlbmRpZgorCiAgICAgUHJv
Y2Vzc1JlYWR5VG9TdXNwZW5kKCkKICAgICBTZXRJc0hvbGRpbmdMb2NrZWRGaWxlcyhib29sIGlz
SG9sZGluZ0xvY2tlZEZpbGVzKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAy
MTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNiArMTA0OCwyMCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGFGb3JUb3BQCiAgICAgfSk7CiB9CiAKKyNpZiBIQVZF
KENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKGNvbnN0IFN0
cmluZyYgdG9wUHJpdmF0ZWx5T3duZWREb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTaG91bGRQ
YXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4odG9wUHJpdmF0ZWx5T3du
ZWREb21haW4sIHZhbHVlKSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkUGFy
dGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBib29sIHZhbHVlKQoreworICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2hvdWxk
UGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyh0b3BQcml2YXRlbHlP
d25lZERvbWFpbnMsIHZhbHVlKSk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojp3ZWJQYWdlV2FzQWRkZWQoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCiB7CiAgICAgaWYg
KG1fc3RvcmFnZU1hbmFnZXIpCkBAIC0xMjEyLDggKzEyMjYsMTggQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZWdpc3RlclNoYXJlZFJlcwogewogICAgIGlmICghbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9S
QUdFX1BBUlRJVElPTklORykKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnJlZ2lzdGVy
U2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoCisgICAgICAgIFt0aGlzXSAoY29uc3QgU3RyaW5n
JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbiwgYm9vbCB2YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy0+c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKHRvcFBy
aXZhdGVseU93bmVkRG9tYWluLCB2YWx1ZSk7CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzXSAo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCB2YWx1
ZSkgeworICAgICAgICAgICAgdGhpcy0+c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZh
dGVseU93bmVkRG9tYWlucyh0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHZhbHVlKTsKKyAgICAg
ICAgfSk7CisjZWxzZQogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVnaXN0ZXJTaGFy
ZWRSZXNvdXJjZUxvYWRPYnNlcnZlcigpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YUZvclRvcFByaXZhdGVs
eU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9u
SGFuZGxlcik7CiAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAg
ICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbihj
b25zdCBTdHJpbmcmLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBib29s
IHZhbHVlKTsKKyNlbmRpZgogICAgIHZvaWQgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nhcnko
KTsKICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkQXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVE
aXJlY3Rvcnk7IH0KICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkTWVkaWFDYWNoZURpcmVjdG9y
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJl
Y3Rvcnk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303833</attachid>
            <date>2017-03-08 13:19:14 -0800</date>
            <delta_ts>2017-03-08 13:57:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169322-20170308131915.patch</filename>
            <type>text/plain</type>
            <size>57601</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgt
YW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBzZXQgYSBkb21h
aW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxkIGJlIGFwcGxpZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbik6
CisgICAgICAgICAgICBOZXcgb3ZlcmxvYWRlZCBjb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBO
b3cgYm9vdHN0cmFwcyB0aGUgbmV0d29yayBwcm9jZXNzJyBzZXQgb2Yga25vd24gZG9tYWlucyB0
bworICAgICAgICAgICAgcGFydGl0aW9uIGNvb2tpZXMgZm9yLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAgICAgTm93IHRlbGxzIHRoZSBuZXR3b3JrIHByb2Nlc3MgdG8gc3RhcnQgcGFydGl0
aW9uaW5nIGFnYWluCisgICAgICAgICAgICB3aGVuIHVzZXIgaW50ZXJhY3Rpb24gYWdlcyBvdXQu
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKToKKwogMjAxNy0wMy0wNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU29tZSBwbGF0Zm9ybXMgd29uJ3QgYmUgYWJs
ZSB0byBjcmVhdGUgYSBHUFVEZXZpY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA0LDEzICszMDQsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVy
YQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgYXV0byBw
cmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0byYgc3RhdGlz
dGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpblN0cik7CiAgICAgZG91YmxlIG5ld1RpbWVzdGFtcCA9IHJlZHVjZVRpbWVS
ZXNvbHV0aW9uVG9PbmVEYXkoV1RGOjpjdXJyZW50VGltZSgpKTsKICAgICBpZiAobmV3VGltZXN0
YW1wID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IG5ld1RpbWVzdGFtcDsKKworICAg
IG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWlu
U3RyLCBmYWxzZSk7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CiB9CiAKQEAgLTMxOSw5ICszMjMsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
VXNlckludGVyYQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Cisg
ICAgYXV0byBwcmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0
byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4ocHJpbWFyeURvbWFpblN0cik7CiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJh
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9
IFdURjo6Y3VycmVudFRpbWUoKTsKKworICAgIG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWluU3RyLCBmYWxzZSk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsKQpAQCAt
NDEyLDEwICs0MjAsMTkgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2Rp
ZgogICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCit2b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
Y29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBtX3N0b3JlLT5maXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJpbWFyeURvbWFpbihob3N0TmFtZSksIHZh
bHVlKTsKK30KKwogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNv
bnN0IFVSTCYgdXJsKQogeworICAgIHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwor
fQorCitTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29uc3QgU3Ry
aW5nJiBob3N0KQorewogICAgIFN0cmluZyBwcmltYXJ5RG9tYWluOwotICAgIFN0cmluZyBob3N0
ID0gdXJsLmhvc3QoKTsKICAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkK
ICAgICAgICAgcHJpbWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKICNpZiBFTkFCTEUoUFVCTElD
X1NVRkZJWF9MSVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9i
c2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNvbHV0
aW9uKGRvdWJsZSBzZWNvbmRzKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29s
IHZhbHVlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU+IHN0YXRpc3RpY3NTdG9yZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwpAQCAt
NzUsNiArNzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkTG9nKFBhZ2Uq
KTsKICAgICBzdGF0aWMgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVVJMJik7CisgICAgc3Rh
dGljIFN0cmluZyBwcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdCk7CiAKICAgICBSZWZQ
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBzaXplX3Q+IG1fb3JpZ2luc1Zpc2l0ZWRNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNp
b24gMjEzNTU1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsMTUgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYWREYQogICAgIGlmICghc3VjY2VlZGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0
aWNzKQorICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb247CisgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxvYWRlZFN0YXRpc3RpY3Muc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0aWNzKSB7CiAgICAg
ICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNldChzdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFp
biwgc3RhdGlzdGljcyk7CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3Vy
Y2UgJiYgIXN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQo
c3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW4pOworICAgIH0KKyAgICAKKyAgICBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgdHJ1ZSk7CiB9CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCkBAIC0xNDEs
MTIgKzE0OCwzNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90CiAg
ICAgbV9kYXRhQWRkZWRIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKIH0KIAordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFj
ayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZh
bHVlKT4mJiBoYW5kbGVyKQoreworICAgIG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFp
bkhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUp
PiYmIGhhbmRsZXIpCit7CisgICAgbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hh
bmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7CiAgICAgaWYgKG1f
ZGF0YUFkZGVkSGFuZGxlcikKICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7CiB9CiAKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKQoreworICAg
IGlmIChtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKQorICAgICAgICBt
X3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKHByaW1hcnlEb21haW4sIHZh
bHVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFp
bnMsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRv
bWFpbnNIYW5kbGVyKQorICAgICAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5z
SGFuZGxlcihwcmltYXJ5RG9tYWlucywgdmFsdWUpOworfQorCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25k
cykKIHsKICAgICBpZiAoc2Vjb25kcyA+PSAwKQpAQCAtMTcwLDYgKzE5OSwxMCBAQCBib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkCiAgICAgICAgIC8vIGl0IGhhcyBiZWVu
IHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCiAgICAgICAgIHJlc291cmNlU3Rh
dGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSAwOwogICAgICAgICByZXNvdXJjZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAocmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgICAgIGZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlcihyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4s
IHRydWUpOworCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDE0IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1lcmdlU3RhdGlzdGljcyhjb25zdCBWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4gdGFrZVN0YXRpc3RpY3MoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRs
ZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBh
cnRpdGlvbkNvb2tpZXNDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBw
cmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+JiYpOwogCiAgICAg
dm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHNldFRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbiwgYm9vbCB2YWx1ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21h
aW4sIGJvb2wgdmFsdWUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzU3RhdGlz
dGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYmKTsKIApA
QCAtNzEsNiArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwogICAgIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBtX2RhdGFBZGRlZEhhbmRsZXI7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+IG1fc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbkhhbmRsZXI7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+IG1fc2hvdWxkUGFydGl0
aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIK
ICNpbmNsdWRlICJTZXNzaW9uSUQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShD
RlVSTENPTk5FQ1RJT04pCkBAIC02Nyw2ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgQ0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZiBwbGF0Zm9ybVNlc3Npb24oKSB7IHJldHVybiBtX3BsYXRmb3JtU2Vzc2lv
bi5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCk7CisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmlu
ZyYsIGJvb2wgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2hvdWxkUGFydGl0aW9u
Q29va2llc0Zvckhvc3RzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5k
aWYKICNlbGlmIFVTRShTT1VQKQogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQs
IHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYpOwogICAgIH5OZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKTsKQEAgLTEwNiw2ICsxMTIsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAg
ICAgQ3JlZGVudGlhbFN0b3JhZ2UgbV9jcmVkZW50aWFsU3RvcmFnZTsKKworI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Nvb2tp
ZVBhcnRpdGlvbmluZ0xpc3Q7CisjZW5kaWYKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBj
b29raWVTdG9yYWdlUGFydGl0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5l
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNCArMTQwLDQ1IEBAIFN0cmluZyBjb29raWVTdG9y
YWdlUGFydGl0aW9uKGNvbnN0IFVSTCYKIAogI2VuZGlmCiAKKyNpZiBIQVZFKENGTkVUV09SS19T
VE9SQUdFX1BBUlRJVElPTklORykKKworYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmluZyYgaG9zdCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHRvcFByaXZhdGVseU93bmVkRG9tYWluIDogbV9jb29raWVQYXJ0aXRpb25pbmdMaXN0
KSB7CisgICAgICAgIGlmIChob3N0SXNJbkRvbWFpbihob3N0LCB0b3BQcml2YXRlbHlPd25lZERv
bWFpbikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChI
YXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3Qu
YmVnaW4oKTsgaXRlciAhPSBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBhdXRvIHRvcFByaXZhdGVseU93bmVkRG9tYWluID0gKml0ZXI7CisgICAgICAg
IGlmIChob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UodG9wUHJpdmF0ZWx5T3duZWREb21h
aW4pKSB7CisgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0gaG9zdC5sZW5ndGgoKSAtIHRv
cFByaXZhdGVseU93bmVkRG9tYWluLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCFzdWZmaXhT
dGFydCB8fCBob3N0W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JI
b3N0KGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5hZGQoaG9zdCk7CisgICAgZWxzZQorICAg
ICAgICBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QucmVtb3ZlKGhvc3QpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBob3N0cywgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5hZGQoaG9zdHMuYmVnaW4oKSwgaG9zdHMu
ZW5kKCkpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIGhvc3QgOiBob3N0cykKKyAg
ICAgICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5yZW1vdmUoaG9zdCk7CisgICAgfQor
fQorCisjZW5kaWYgLy8gSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJp
dmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFU
YXNrQ29jb2EpOgorICAgICAgICAgICAgTm93IGNvbnN1bHRzIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoKQorICAgICAgICAgICAg
dG8gZGVjaWRlIHdoZXRoZXIgcGFydGl0aW9uaW5nIHNob3VsZCBiZSBhcHBsaWVkIG9yIG5vdC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdLQ29va2llTWFuYWdlclNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKToKKyAg
ICAgICAgICAgIFRvIGFsbG93IFRlc3RSdW5uZXIgdG8gY29uZmlndXJlIGNvb2tpZSBwYXJ0aXRp
b25pbmcuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0
byBzZXQgYSBkb21haW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxk
IGJlIGFwcGxpZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQpOgorICAgICAgICAgICAgVG8gYWxs
b3cgVGVzdFJ1bm5lciB0byBjb25maWd1cmUgY29va2llIHBhcnRpdGlvbmluZy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29r
aWVzSGFuZGxlcik6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVubmVyIHRvIHNldCBhIGRv
bWFpbiBmb3Igd2hpY2gKKyAgICAgICAgICAgIHBhcnRpdGlvbmluZyBzaG91bGQgYmUgYXBwbGll
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFz
c2lmeVJlc291cmNlKToKKyAgICAgICAgICAgIE5vdyB0ZWxscyB0aGUgbmV0d29yayBwcm9jZXNz
IGFzIHNvb24gYXMgYSBkb21haW4KKyAgICAgICAgICAgIGhhcyBiZWVuIGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgT3Zl
cmxvYWRlZCBmdW5jdGlvbiB0byBhbGxvdyBpbmplY3Rpb24gb2YgaGFuZGxlcnMgZm9yIGNvbW11
bmljYXRpb24gd2l0aCB0aGUKKyAgICAgICAgICAgIG5ldHdvcmsgcHJvY2Vzcy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91
bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNl
cnZlcik6CisgICAgICAgICAgICBOb3cgc2V0cyB0d28gY2FsbGJhY2sgaGFuZGxlcnMgZm9yIGNv
bW11bmljYXRpb24gd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTctMDMtMDcgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFN1YnBpeGVs
QW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkIGJ5IGRlZmF1bHQgb24gc29tZSB2ZXJzaW9ucyBv
ZiBtYWNPUwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEw
LDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGUKICAgICAgICAg
aGFuZGxlcigpOwogfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0
aXRpb25Db29raWVzRm9ySG9zdChkb21haW4sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNob3VsZFBhcnRpdGlvbkNv
b2tpZXNGb3JIb3N0cyhkb21haW5zLCB2YWx1ZSk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQg
ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQgKFZlY3RvcjxX
ZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzEx
NiwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFi
YXNlUHJvY2Vzc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIEZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCisjaWYgSEFWRShDRk5FVFdPUktf
U1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgdm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZSk7CisgICAg
dm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5kaWYKKwogICAgIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgbG9hZFRocm90dGxlTGF0ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9hZFRocm90dGxlTGF0ZW5jeTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw0ICs3Nyw5IEBAIG1l
c3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmUKICAgICBQcm9jZXNzRGlkUmVz
dW1lKCkKIAogICAgIERpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0Zv
ckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKKworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0Vf
UEFSVElUSU9OSU5HKQorICAgIFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlP
d25lZERvbWFpbihTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWREb21haW4sIGJvb2wgdmFsdWUpCisg
ICAgU2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhWZWN0
b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCisjZW5kaWYK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMywxMiBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
TmV0d29ya0RhdGFUYXNrQ29jCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGlu
ZyBOZXR3b3JrRGF0YVRhc2sgd2l0aCBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwg
bnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKIAogI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBzdG9yYWdlUGFydGl0aW9u
ID0gV2ViQ29yZTo6Y29va2llU3RvcmFnZVBhcnRpdGlvbihyZXF1ZXN0KTsKLSAgICBpZiAoIXN0
b3JhZ2VQYXJ0aXRpb24uaXNFbXB0eSgpKQotICAgICAgICBtX3Rhc2suZ2V0KCkuX3N0b3JhZ2VQ
YXJ0aXRpb25JZGVudGlmaWVyID0gc3RvcmFnZVBhcnRpdGlvbjsKKyAgICBpZiAoc2Vzc2lvbi5u
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdCh1cmwu
aG9zdCgpKSkgeworICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IFBhcnRpdGlvbmlu
ZyBjb29raWVzIGZvciBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0
LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHN0b3JhZ2VQ
YXJ0aXRpb24gPSBXZWJDb3JlOjpjb29raWVTdG9yYWdlUGFydGl0aW9uKHJlcXVlc3QpOworICAg
ICAgICBpZiAoIXN0b3JhZ2VQYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgbV90YXNr
LmdldCgpLl9zdG9yYWdlUGFydGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247Cisg
ICAgfQogI2VuZGlmCiAKICAgICBpZiAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJj
ZVByaW9yaXRpZXNFbmFibGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVk
ZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5o
IgpAQCAtMTk2LDQgKzE5Nyw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkaWRHZXRI
VFRQQ28KICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKHBvbGlj
eSk7CiB9CiAKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVTdG9yYWdlUGFy
dGl0aW9uaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDb29raWVT
dG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFibGVkKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29v
a2llQWNjZXB0UG9saWN5KTsKICAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koc3Rk
OjpmdW5jdGlvbjx2b2lkIChIVFRQQ29va2llQWNjZXB0UG9saWN5LCBDYWxsYmFja0Jhc2U6OkVy
cm9yKT4pOworICAgIHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9v
bCk7CiAKICAgICB2b2lkIHN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJDb3JlOjpTZXNz
aW9uSUQpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV2ViQ29yZTo6U2Vz
c2lvbklEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjEzNTU1
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMTEgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZgogICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwog
fQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5m
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoaG9zdE5hbWUsIHZhbHVlKTsKK30KKwog
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCh2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkocmV2aXNpb24gMjEzNTU1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogICAg
IHN0YXRpYyB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNvbHV0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKICAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBz
dGF0aWMgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgU3RyaW5n
JiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsK
ICAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFs
KGRvdWJsZSBzZWNvbmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAy
MTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOCArODUsMTEgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNsYXNzaWZ5UmVzb3VyY2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVz
b3VyY2VTdGF0aXN0aWMpCiB7CiAgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVu
dFJlc291cmNlCi0gICAgICAgICYmIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIu
aGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MocmVzb3VyY2VTdGF0aXN0aWMpKQor
ICAgICAgICAmJiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmhhc1ByZXZhbGVu
dFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlzdGljKSkgewogICAgICAgICBy
ZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKKyAgICAgICAgaWYg
KCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5k
bGVyKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgdHJ1ZSk7CisgICAgfQogfQog
CiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMo
KQpAQCAtMTcwLDcgKzE3Myw2IEBAIGJvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZXMKICAgICByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKIH0KIAot
CiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNv
dXJjZUxvYWRPYnNlcnZlcigpCiB7CiAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9i
c2VydmVyKCkuc2V0U3RhdGlzdGljc1N0b3JlKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNvcHlSZWYoKSk7CkBAIC0xODAsNiArMTgyLDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpyZWcKICAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
cygpOwogICAgIH0pOwogfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoc3RkOjpmdW5jdGlvbjx2b2lk
KGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+JiYgc2hvdWxkUGFydGl0
aW9uQ29va2llc0ZvckRvbWFpbkhhbmRsZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+JiYgc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbnNIYW5kbGVyKQoreworICAgIHJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIoKTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0U2hv
dWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFt0aGlzLCBzaG91bGRQYXJ0aXRpb25Db29raWVz
Rm9yRG9tYWluSGFuZGxlciA9IFdURk1vdmUoc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFp
bkhhbmRsZXIpXSAoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKSB7Cisg
ICAgICAgIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKHByaW1hcnlEb21h
aW4sIHZhbHVlKTsKKyAgICB9KTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+
c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFt0aGlzLCBzaG91bGRQYXJ0aXRpb25D
b29raWVzRm9yRG9tYWluc0hhbmRsZXIgPSBXVEZNb3ZlKHNob3VsZFBhcnRpdGlvbkNvb2tpZXNG
b3JEb21haW5zSGFuZGxlcildIChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMs
IGJvb2wgdmFsdWUpIHsKKyAgICAgICAgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNI
YW5kbGVyKHByaW1hcnlEb21haW5zLCB2YWx1ZSk7CisgICAgfSk7Cit9CiAKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZyb21EaXNrSWZOZWVkZWQoKQogewpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoc3RkOjpm
dW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+JiYg
c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbkhhbmRsZXIsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+JiYgc2hv
dWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyKTsKICAgICAKICAgICB2b2lkIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPiYgb3JpZ2lucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTM1NTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTEgQEAgdm9pZCBXS0Nvb2tpZU1hbmFnZXJHZXRI
VFRQQ29va2llQWNjZXB0UAogICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+Z2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uPFdLSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSwgSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oY29udGV4dCwgY2FsbGJhY2spKTsKIH0K
IAordm9pZCBXS0Nvb2tpZU1hbmFnZXJTZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxl
ZChXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgYm9vbCBlbmFibGVkKQoreworICAg
IHRvSW1wbChjb29raWVNYW5hZ2VyKS0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgV0tDb29raWVNYW5hZ2VyU3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyKQogewogICAgIHRvSW1w
bChjb29raWVNYW5hZ2VyKS0+c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdlYkNvcmU6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0Nvb2tpZU1hbmFnZXJT
ZXRIVFRQQ29vCiB0eXBlZGVmIHZvaWQgKCpXS0Nvb2tpZU1hbmFnZXJHZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5RnVuY3Rpb24pKFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgV0tFcnJvclJlZiwg
dm9pZCopOwogV0tfRVhQT1JUIHZvaWQgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgdm9pZCogY29udGV4dCwg
V0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUZ1bmN0aW9uIGNhbGxiYWNr
KTsKIAorV0tfRVhQT1JUIHZvaWQgV0tDb29raWVNYW5hZ2VyU2V0Q29va2llU3RvcmFnZVBhcnRp
dGlvbmluZ0VuYWJsZWQoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIsIGJvb2wgZW5h
YmxlZCk7CisKIFdLX0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlclN0YXJ0T2JzZXJ2aW5nQ29v
a2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcik7CiBXS19FWFBPUlQg
dm9pZCBXS0Nvb2tpZU1hbmFnZXJTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tpZU1h
bmFnZXJSZWYgY29va2llTWFuYWdlcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODEsNiArODEsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
RmlyZQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1vZGlm
aWNhdGlvbkhhbmRsZXIoKTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKFdLU3RyaW5nUmVmIGhvc3ROYW1l
LCBib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIodG9XVEZTdHJpbmcoaG9zdE5hbWUpLCB2
YWx1ZSk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
LmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlclNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhXS1N0cmluZ1Jl
ZiBob3N0TmFtZSwgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwogICAgIFdLX0VY
UE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Cisg
ICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSk7CiAgICAg
V0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOwogICAg
IFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjky
LDYgKzI5MiwxOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdyYW50U2FuZGJveEV4CiAj
ZW5kaWYKIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQordm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiB0b3BQcml2YXRlbHlPd25lZERvbWFpbiwgYm9v
bCB2YWx1ZSkKK3sKKyAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4odG9w
UHJpdmF0ZWx5T3duZWREb21haW4sIHZhbHVlKSwgMCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlu
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBib29sIHZh
bHVlKQoreworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnModG9wUHJp
dmF0ZWx5T3duZWREb21haW5zLCB2YWx1ZSksIDApOworfQorI2VuZGlmCisKIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNo
ZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKIHsK
ICAgICBDaGlsZFByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKGxhdW5jaGVyLCBjb25u
ZWN0aW9uSWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMTM1NTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
ZERlbGV0ZVdlYnNpdGVEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGlkRGVs
ZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQg
Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworI2lmIEhBVkUoQ0ZORVRX
T1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKGNvbnN0IFN0cmluZyYsIGJvb2wgdmFsdWUpOwor
ICAgIHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlu
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGJvb2wgdmFsdWUpOworI2VuZGlmCiAgICAgdm9pZCBs
b2dEaWFnbm9zdGljTWVzc2FnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlKTsKICAg
ICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgdWludDMyX3Qg
cmVzdWx0LCBXZWJDb3JlOjpTaG91bGRTYW1wbGUpOwogICAgIHZvaWQgbG9nRGlhZ25vc3RpY01l
c3NhZ2VXaXRoVmFsdWUodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGRvdWJsZSB2YWx1ZSwgdW5zaWduZWQgc2lnbmlmaWNh
bnRGaWd1cmVzLCBXZWJDb3JlOjpTaG91bGRTYW1wbGUpOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSwxMSBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2Vzc1Byb3h5IExl
Z2FjeVJlCiAKICAgICBHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JC
bG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIFZlY3RvcjxTdHJpbmc+IHBhdGhzKQogCisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgU2hvdWxkUGFydGl0aW9uQ29v
a2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKFN0cmluZyB0b3BQcml2YXRlbHlPd25lZERv
bWFpbiwgYm9vbCB2YWx1ZSkKKyAgICBTaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW5zKFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseU93bmVkRG9tYWlucywg
Ym9vbCB2YWx1ZSkKKyNlbmRpZgorCiAgICAgUHJvY2Vzc1JlYWR5VG9TdXNwZW5kKCkKICAgICBT
ZXRJc0hvbGRpbmdMb2NrZWRGaWxlcyhib29sIGlzSG9sZGluZ0xvY2tlZEZpbGVzKQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNDgsNiArMTA0OCwyMCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGFG
b3JUb3BQCiAgICAgfSk7CiB9CiAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElP
TklORykKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWluKGNvbnN0IFN0cmluZyYgdG9wUHJpdmF0ZWx5T3duZWREb21h
aW4sIGJvb2wgdmFsdWUpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4odG9wUHJpdmF0ZWx5T3duZWREb21haW4sIHZhbHVlKSk7Cit9CisKK3Zv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVs
eU93bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21h
aW5zLCBib29sIHZhbHVlKQoreworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZh
dGVseU93bmVkRG9tYWlucyh0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHZhbHVlKSk7Cit9Cisj
ZW5kaWYKKwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp3ZWJQYWdlV2FzQWRkZWQoV2ViUGFnZVBy
b3h5JiB3ZWJQYWdlUHJveHkpCiB7CiAgICAgaWYgKG1fc3RvcmFnZU1hbmFnZXIpCkBAIC0xMjEy
LDggKzEyMjYsMTggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclNoYXJlZFJlcwog
ewogICAgIGlmICghbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKQogICAgICAgICByZXR1cm47Ci0K
KyAgICAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICBtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MtPnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIo
CisgICAgICAgIFt0aGlzXSAoY29uc3QgU3RyaW5nJiB0b3BQcml2YXRlbHlPd25lZERvbWFpbiwg
Ym9vbCB2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy0+c2hvdWxkUGFydGl0aW9uQ29va2llc0Zv
clRvcFByaXZhdGVseU93bmVkRG9tYWluKHRvcFByaXZhdGVseU93bmVkRG9tYWluLCB2YWx1ZSk7
CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzXSAoY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFBy
aXZhdGVseU93bmVkRG9tYWlucywgYm9vbCB2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy0+c2hv
dWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyh0b3BQcml2YXRl
bHlPd25lZERvbWFpbnMsIHZhbHVlKTsKKyAgICAgICAgfSk7CisjZWxzZQogICAgIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy0+cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcigpOwor
I2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNpb24gMjEzNTU1KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRh
UmVjb3JkPiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAg
IHZvaWQgcmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoVmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9uSGFuZGxlcik7CiAKKyNpZiBIQVZFKENGTkVU
V09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbihjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlKTsK
KyAgICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFp
bnMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBib29sIHZhbHVlKTsKKyNlbmRpZgogICAgIHZvaWQg
cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICBjb25zdCBTdHJpbmcmIHJlc29s
dmVkQXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRD
b25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnk7IH0KICAgICBjb25zdCBTdHJp
bmcmIHJlc29sdmVkTWVkaWFDYWNoZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2
ZWRDb25maWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3Rvcnk7IH0KSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU5MikKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAz
LTA4ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291
cmNlIExvYWQgU3RhdGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3
aGljaCBkb21haW5zIHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODky
MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVz
ZSBjaGFuZ2VzIGFkZCBzdXBwb3J0IGZvciB0d28gbmV3IFRlc3RSdW5uZXIgZnVuY3Rpb25zOgor
ICAgICAgICAtIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKCkKKyAgICAgICAg
LSBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKworICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGlv
bmluZ0VuYWJsZWQpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnN0YXRp
c3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJl
Y2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTAzLTA4
ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgdXBkYXRpbmcgYXV0b3BsYXkgcG9saWNpZXMgYWZ0ZXIgYSBwYWdlIGhhcyBiZWVuIGxvYWRl
ZC4KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAyMTM1NTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI2OCw2ICsyMjY4LDExIEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU0KICAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCit2b2lkIFRlc3RDb250
cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKFdLU3Ry
aW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoaG9zdE5hbWUsIHZh
bHVlKTsKK30KKwogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCh2YWx1ZSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyMTM1NTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKFdLU3RyaW5nUmVmIGhv
c3ROYW1lLCBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBz
dGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKFdLU3RyaW5nUmVmIGhv
c3ROYW1lLCBib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1No
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
ZG91YmxlKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
CShyZXZpc2lvbiAyMTM1NTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkzLDYgKzc5MywxMiBAQCBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQiKSkgeworICAgICAgICBXS0Jvb2xl
YW5SZWYgYWNjZXB0ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Cisg
ICAgICAgIFdLQ29va2llTWFuYWdlclNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVk
KFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNv
bnRleHQoKSksIFdLQm9vbGVhbkdldFZhbHVlKGFjY2VwdCkpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJJbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCIpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGNvdW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmltYWdlQ291bnRJ
bkdlbmVyYWxQYXN0ZWJvYXJkKCk7CiAgICAgICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBy
ZXN1bHQoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoY291bnQpKTsKQEAgLTk5MSw2ICs5OTcsMjAg
QEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNI
YW5kbGVyIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CisgICAgICAgIAorICAgICAgICBXS0RpY3Rpb25hcnlS
ZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPiht
ZXNzYWdlQm9keSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtl
eShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7Cisg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7CisgICAgICAgIAorICAgICAgICBXS1N0
cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsK
KyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXku
Z2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
dGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGhvc3ROYW1lLCBXS0Jv
b2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJT
dGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7CiAgICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlE
KCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzY2LDYgKzc2NiwxNSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0Fj
Y2VwdENvb2tpZXMoCiAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRDb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCIpKTsKKworICAgIFdL
UmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3Jl
YXRlKGVuYWJsZWQpKTsKKworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKIGRvdWJsZSBUZXN0UnVubmVyOjpwcmVjaXNl
VGltZSgpCiB7CiAgICAgcmV0dXJuIGN1cnJlbnRUaW1lKCk7CkBAIC0xMzI4LDYgKzEzMzcsMzEg
QEAgdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZgogICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCBudWxscHRyKTsKIH0KIAordm9pZCBUZXN0UnVubmVy
OjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKEpTU3RyaW5nUmVm
IGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
KyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkgfSk7CisgICAgCisgICAga2V5cy5hcHBl
bmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSB9KTsK
KyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSB9KTsK
KyAgICAKKyAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOworICAg
IFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmF3S2V5
c1tpXSA9IGtleXNbaV0uZ2V0KCk7CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5n
ZXQoKTsKKyAgICB9CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmly
ZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyIikpOworICAgIFdLUmV0YWluUHRyPFdLRGlj
dGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tl
eXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOworICAgIAorICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7Cit9CisKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcg
QEAgcHVibGljOgogCiAgICAgLy8gQ29va2llcyB0ZXN0aW5nCiAgICAgdm9pZCBzZXRBbHdheXNB
Y2NlcHRDb29raWVzKGJvb2wpOworICAgIHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmlu
Z0VuYWJsZWQoYm9vbCk7CiAKICAgICAvLyBDdXN0b20gZnVsbCBzY3JlZW4gYmVoYXZpb3IuCiAg
ICAgdm9pZCBzZXRIYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoYm9vbCB2YWx1ZSkgeyBtX2N1
c3RvbUZ1bGxTY3JlZW5CZWhhdmlvciA9IHZhbHVlOyB9CkBAIC0zNTEsNiArMzUyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxi
YWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgc3RhdGlzdGljc0RpZE1vZGlmeURh
dGFSZWNvcmRzQ2FsbGJhY2soKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29v
a2llc0hhbmRsZXIoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIHZvaWQg
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29s
IHZhbHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5n
UmVmIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rp
b24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTM1NTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjMsNiArMTYzLDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogCiAgICAgLy8gQ29va2ll
cyB0ZXN0aW5nCiAgICAgdm9pZCBzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2xlYW4gYWNjZXB0
KTsKKyAgICB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2xlYW4g
ZW5hYmxlZCk7CiAKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVyZW5jZShET01TdHJpbmcgcHJlZmVy
ZW5jZSwgRE9NU3RyaW5nIHZhbHVlKTsKIApAQCAtMjU4LDYgKzI1OSw3IEBAIGludGVyZmFjZSBU
ZXN0UnVubmVyIHsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oRE9NU3RyaW5nIGhvc3ROYW1lLCBET01TdHJpbmcgaG9zdE5hbWVSZWRpcmVjdGVkVG8p
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91Ymxl
IHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
cihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbGVhbiB2YWx1ZSk7
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwoYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMTM1NTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wMy0wOCAgSm9obiBXaWxhbmRlciAgPHdpbGFu
ZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IENvbW11
bmljYXRlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2hpY2ggZG9tYWlucyB0byBwYXJ0aXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTMyMgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA3Njg5MjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1p
bnRlcmFjdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQt
d2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlczogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2Vz
L2dldC1jb29raWVzLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3NldC1jb29raWUucGhwOiBBZGRlZC4KKwog
MjAxNy0wMy0wNyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgRGVidWcgZmxhZyB0byBUZXN0RXhwZWN0YXRpb24gZm9yIHdlYnJ0Yy9saWJ3ZWJydGMv
ZGVzY3JpcHRpb25HZXR0ZXJzLmh0bWwuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
YWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5k
LXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0
aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11
c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1
IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBm
cmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRs
ZTogVGVzdCBmb3IgUGFydGl0aW9uZWQgQ29va2llcyBXaXRoIGFuZCBXaXRob3V0IFVzZXIgSW50
ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFt
ZQorbWFpbiBmcmFtZSAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvc2V0
LWNvb2tpZS5waHA/bmFtZT1maXJzdFBhcnR5Q29va2llJnZhbHVlPXZhbHVlI2h0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29v
a2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbCNzdGVwMiAKK21haW4g
ZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZp
bmlzaExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUKK21haW4gZnJhbWUgLSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lCittYWlu
IGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9j
dW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIHdp
bGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sI3N0ZXAyIAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDYW5jZWxDbGllbnRSZWRp
cmVjdEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBQYXJ0aXRpb25lZCBDb29raWVzIFdpdGgg
YW5kIFdpdGhvdXQgVXNlciBJbnRlcmFjdGlvbgorbWFpbiBmcmFtZSAtIGRpZENoYW5nZUxvY2F0
aW9uV2l0aGluUGFnZUZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAt
LT4tLT4iIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRp
ZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1m
cmFtZTAtLT4tLT4iIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0
aCAvLzwhLS1mcmFtZTAtLT4tLT4iIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21h
aW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRp
ZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAv
LzwhLS1mcmFtZTEtLT4tLT4iIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorZnJh
bWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZEhhbmRsZU9ubG9hZEV2
ZW50c0ZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4iIC0g
ZGlkRmluaXNoTG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTEt
LT4tLT4iIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwh
LS1mcmFtZTEtLT4tLT4iIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFt
ZVBhdGggLy88IS0tZnJhbWUyLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMS0tPi0tPiIgLSBkaWRIYW5kbGVP
bmxvYWRFdmVudHNGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+
LS0+IiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUyLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBh
dGggLy88IS0tZnJhbWUyLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCitm
cmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4iIC0gZGlkU3RhcnRQcm92aXNp
b25hbExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUyLS0+LS0+
IiAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAv
LzwhLS1mcmFtZTItLT4tLT4iIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZy
YW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4iIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCitmcmFt
ZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4iIC0gZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPiIgLSBk
aWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUzLS0+LS0+IiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZp
bmlzaExvYWRGb3JGcmFtZQorICAKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAv
LzwhLS1mcmFtZTAtLT4tLT4nCistLS0tLS0tLQorU2hvdWxkIHJlY2VpdmUgbm8gY29va2llcy4K
K0RpZCBub3QgcmVjZWl2ZSBjb29raWUgbmFtZWQgJ2ZpcnN0UGFydHlDb29raWUnLgorRGlkIG5v
dCByZWNlaXZlIGNvb2tpZSBuYW1lZCAndGhpcmRQYXJ0eUNvb2tpZScuCisKKworLS0tLS0tLS0K
K0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTEtLT4tLT4nCistLS0tLS0tLQorU2V0
dGluZyBwYXJ0aXRpb25lZCwgdGhpcmQgcGFydHkgY29va2llLgorCisKKy0tLS0tLS0tCitGcmFt
ZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUyLS0+LS0+JworLS0tLS0tLS0KK1Nob3VsZCBv
bmx5IHJlY2VpdmUgcGFydGl0aW9uZWQsIHRoaXJkIHBhcnR5IGNvb2tpZS4KK0RpZCBub3QgcmVj
ZWl2ZSBjb29raWUgbmFtZWQgJ2ZpcnN0UGFydHlDb29raWUnLgorUmVjZWl2ZWQgY29va2llIG5h
bWVkICd0aGlyZFBhcnR5Q29va2llJy4KKworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQ
YXRoIC8vPCEtLWZyYW1lMy0tPi0tPicKKy0tLS0tLS0tCitBZnRlciB1c2VyIGludGVyYWN0aW9u
LCBzaG91bGQgb25seSByZWNlaXZlIG5vbi1wYXJ0aXRpb25lZCwgZmlyc3QgcGFydHkgY29va2ll
LgorUmVjZWl2ZWQgY29va2llIG5hbWVkICdmaXJzdFBhcnR5Q29va2llJy4KK0RpZCBub3QgcmVj
ZWl2ZSBjb29raWUgbmFtZWQgJ3RoaXJkUGFydHlDb29raWUnLgorCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1j
b29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
L3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVz
ZXItaW50ZXJhY3Rpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9
IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdCBmb3IgUGFydGl0aW9uZWQgQ29va2llcyBXaXRoIGFu
ZCBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorICAgIGNvbnN0IHBhcnRpdGlvbkhvc3QgPSAiMTI3LjAuMC4xOjgwMDAiOworICAg
IGNvbnN0IHRoaXJkUGFydHlPcmlnaW4gPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwIjsKKyAgICBj
b25zdCB0aGlyZFBhcnR5QmFzZVVybCA9IHRoaXJkUGFydHlPcmlnaW4gKyAiL2xvYWRpbmcvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMiOworICAgIGNvbnN0IGZpcnN0UGFydHlDb29r
aWVOYW1lID0gImZpcnN0UGFydHlDb29raWUiOworICAgIGNvbnN0IHN1YlBhdGhUb1NldEZpcnN0
UGFydHlDb29raWUgPSAiL3NldC1jb29raWUucGhwP25hbWU9IiArIGZpcnN0UGFydHlDb29raWVO
YW1lICsgIiZ2YWx1ZT12YWx1ZSI7CisgICAgY29uc3QgdGhpcmRQYXJ0eUNvb2tpZU5hbWUgPSAi
dGhpcmRQYXJ0eUNvb2tpZSI7CisgICAgY29uc3Qgc3ViUGF0aFRvU2V0VGhpcmRQYXJ0eUNvb2tp
ZSA9ICIvc2V0LWNvb2tpZS5waHA/bmFtZT0iICsgdGhpcmRQYXJ0eUNvb2tpZU5hbWUgKyAiJnZh
bHVlPXZhbHVlIjsKKyAgICBjb25zdCBmcmFnbWVudFdpdGhSZXR1cm5VcmwgPSAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1j
b29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sIjsKKyAgICBjb25z
dCBzdWJQYXRoVG9HZXRDb29raWVzID0gIi9nZXQtY29va2llcy5waHA/bmFtZTE9IiArIGZpcnN0
UGFydHlDb29raWVOYW1lICsgIiZuYW1lMj0iICsgdGhpcmRQYXJ0eUNvb2tpZU5hbWU7CisKKyAg
ICBmdW5jdGlvbiBzZXRFbmFibGVGZWF0dXJlKGVuYWJsZSkgeworICAgICAgICBpZiAoIWVuYWJs
ZSkgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChlbmFibGUpOworICAgICAgICB0ZXN0UnVubmVyLnNldENvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkKGVuYWJsZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlu
aXNoVGVzdCgpIHsKKyAgICAgICAgc2V0RW5hYmxlRmVhdHVyZShmYWxzZSk7CisgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9wZW5JZnJhbWUo
dXJsLCBvbkxvYWRIYW5kbGVyKSB7CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZWxlbWVudC5zcmMgPSB1cmw7CisgICAg
ICAgIGlmIChvbkxvYWRIYW5kbGVyKSB7CisgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IG9u
TG9hZEhhbmRsZXI7CisgICAgICAgIH0KKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChlbGVtZW50KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRVc2VySW50ZXJhY3Rpb25BbmRD
b250aW51ZSgpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uKHRoaXJkUGFydHlPcmlnaW4sIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5u
ZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHRoaXJkUGFydHlPcmlnaW4pKQor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGhpcmQgcGFydHkgZGlkIG5vdCBnZXQgbG9nZ2VkIGZv
ciB1c2VyIGludGVyYWN0aW9uLiIpOworICAgICAgICBydW5UZXN0KCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgc3dpdGNoIChkb2N1bWVudC5sb2NhdGlvbi5o
YXNoKSB7CisgICAgICAgICAgICBjYXNlICIjc3RlcDEiOgorICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmxvY2F0aW9uLmhyZWYgPSB0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb1NldEZpcnN0
UGFydHlDb29raWUgKyAiIyIgKyBmcmFnbWVudFdpdGhSZXR1cm5VcmwgKyAiI3N0ZXAyIjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMiI6CisgICAgICAg
ICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwMyI7CisgICAgICAgICAgICAg
ICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENvb2tpZXMgKyAi
Jm1lc3NhZ2U9U2hvdWxkIHJlY2VpdmUgbm8gY29va2llcy4iLCBydW5UZXN0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMyI6CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwNCI7CisgICAgICAgICAgICAgICAgb3Bl
bklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb1NldFRoaXJkUGFydHlDb29raWUg
KyAiJm1lc3NhZ2U9U2V0dGluZyBwYXJ0aXRpb25lZCwgdGhpcmQgcGFydHkgY29va2llLiIsIHJ1
blRlc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiI3N0ZXA0
IjoKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5oYXNoID0gInN0ZXA1IjsKKyAg
ICAgICAgICAgICAgICBvcGVuSWZyYW1lKHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRvR2V0
Q29va2llcyArICImbWVzc2FnZT1TaG91bGQgb25seSByZWNlaXZlIHBhcnRpdGlvbmVkLCB0aGly
ZCBwYXJ0eSBjb29raWUuIiwgc2V0VXNlckludGVyYWN0aW9uQW5kQ29udGludWUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiI3N0ZXA1IjoKKyAgICAgICAgICAg
ICAgICBvcGVuSWZyYW1lKHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRvR2V0Q29va2llcyAr
ICImbWVzc2FnZT1BZnRlciB1c2VyIGludGVyYWN0aW9uLCBzaG91bGQgb25seSByZWNlaXZlIG5v
bi1wYXJ0aXRpb25lZCwgZmlyc3QgcGFydHkgY29va2llLiIsIGZpbmlzaFRlc3QpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50Lmxv
Y2F0aW9uLmhvc3QgPT09IHBhcnRpdGlvbkhvc3QgJiYgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9
PSAiIiAmJiB3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAg
IHNldEVuYWJsZUZlYXR1cmUodHJ1ZSk7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNz
RmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCJsb2NhbGhvc3QiLCB0cnVlKTsKKwor
ICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9
ICJzdGVwMSI7CisgICAgfQorCisgICAgcnVuVGVzdCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL2dldC1jb29r
aWVzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvZ2V0LWNvb2tpZXMucGhwCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3Jlc291cmNlcy9nZXQtY29va2llcy5waHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorPD9waHAKK2VjaG8gJF9HRVRbIm1lc3NhZ2UiXSAuICI8YnI+IjsKK2lmKCFpc3NldCgk
X0NPT0tJRVskX0dFVFsibmFtZTEiXV0pKSB7CisgICAgZWNobyAiRGlkIG5vdCByZWNlaXZlIGNv
b2tpZSBuYW1lZCAnIiAuICRfR0VUWyJuYW1lMSJdIC4gIicuPGJyPiI7Cit9IGVsc2UgeworICAg
IGVjaG8gIlJlY2VpdmVkIGNvb2tpZSBuYW1lZCAnIiAuICRfR0VUWyJuYW1lMSJdIC4gIicuPGJy
PiI7Cit9CitpZighaXNzZXQoJF9DT09LSUVbJF9HRVRbIm5hbWUyIl1dKSkgeworICAgIGVjaG8g
IkRpZCBub3QgcmVjZWl2ZSBjb29raWUgbmFtZWQgJyIgLiAkX0dFVFsibmFtZTIiXSAuICInLjxi
cj4iOworfSBlbHNlIHsKKyAgICBlY2hvICJSZWNlaXZlZCBjb29raWUgbmFtZWQgJyIgLiAkX0dF
VFsibmFtZTIiXSAuICInLjxicj4iOworfQorPz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9zZXQtY29va2llLnBo
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvc2V0LWNvb2tpZS5waHAJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVz
b3VyY2VzL3NldC1jb29raWUucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorPD9w
aHAKK3NldGNvb2tpZSgkX0dFVFsibmFtZSJdLCAkX0dFVFsidmFsdWUiXSwgMCwgIi8iKTsKK2Vj
aG8gJF9HRVRbIm1lc3NhZ2UiXSAuICI8YnI+IjsKKz8+Cis8c2NyaXB0PgoraWYgKGRvY3VtZW50
LmxvY2F0aW9uLmhhc2gpIHsKKyAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5sb2NhdGlvbi5ocmVm
ID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSkiLCAxMCk7Cit9Cis8L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303837</attachid>
            <date>2017-03-08 13:57:58 -0800</date>
            <delta_ts>2017-03-08 14:28:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169322-20170308135758.patch</filename>
            <type>text/plain</type>
            <size>57665</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgt
YW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBzZXQgYSBkb21h
aW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxkIGJlIGFwcGxpZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbik6
CisgICAgICAgICAgICBOZXcgb3ZlcmxvYWRlZCBjb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBO
b3cgYm9vdHN0cmFwcyB0aGUgbmV0d29yayBwcm9jZXNzJyBzZXQgb2Yga25vd24gZG9tYWlucyB0
bworICAgICAgICAgICAgcGFydGl0aW9uIGNvb2tpZXMgZm9yLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAgICAgTm93IHRlbGxzIHRoZSBuZXR3b3JrIHByb2Nlc3MgdG8gc3RhcnQgcGFydGl0
aW9uaW5nIGFnYWluCisgICAgICAgICAgICB3aGVuIHVzZXIgaW50ZXJhY3Rpb24gYWdlcyBvdXQu
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKToKKwogMjAxNy0wMy0wNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU29tZSBwbGF0Zm9ybXMgd29uJ3QgYmUgYWJs
ZSB0byBjcmVhdGUgYSBHUFVEZXZpY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA0LDEzICszMDQsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVy
YQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgYXV0byBw
cmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0byYgc3RhdGlz
dGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpblN0cik7CiAgICAgZG91YmxlIG5ld1RpbWVzdGFtcCA9IHJlZHVjZVRpbWVS
ZXNvbHV0aW9uVG9PbmVEYXkoV1RGOjpjdXJyZW50VGltZSgpKTsKICAgICBpZiAobmV3VGltZXN0
YW1wID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IG5ld1RpbWVzdGFtcDsKKworICAg
IG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWlu
U3RyLCBmYWxzZSk7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CiB9CiAKQEAgLTMxOSw5ICszMjMsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
VXNlckludGVyYQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Cisg
ICAgYXV0byBwcmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0
byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4ocHJpbWFyeURvbWFpblN0cik7CiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJh
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9
IFdURjo6Y3VycmVudFRpbWUoKTsKKworICAgIG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWluU3RyLCBmYWxzZSk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsKQpAQCAt
NDEyLDEwICs0MjAsMTkgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2Rp
ZgogICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCit2b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
Y29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBtX3N0b3JlLT5maXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJpbWFyeURvbWFpbihob3N0TmFtZSksIHZh
bHVlKTsKK30KKwogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNv
bnN0IFVSTCYgdXJsKQogeworICAgIHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwor
fQorCitTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29uc3QgU3Ry
aW5nJiBob3N0KQorewogICAgIFN0cmluZyBwcmltYXJ5RG9tYWluOwotICAgIFN0cmluZyBob3N0
ID0gdXJsLmhvc3QoKTsKICAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkK
ICAgICAgICAgcHJpbWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKICNpZiBFTkFCTEUoUFVCTElD
X1NVRkZJWF9MSVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9i
c2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNvbHV0
aW9uKGRvdWJsZSBzZWNvbmRzKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29s
IHZhbHVlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU+IHN0YXRpc3RpY3NTdG9yZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwpAQCAt
NzUsNiArNzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkTG9nKFBhZ2Uq
KTsKICAgICBzdGF0aWMgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVVJMJik7CisgICAgc3Rh
dGljIFN0cmluZyBwcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdCk7CiAKICAgICBSZWZQ
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBzaXplX3Q+IG1fb3JpZ2luc1Zpc2l0ZWRNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNp
b24gMjEzNTU1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsMTUgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYWREYQogICAgIGlmICghc3VjY2VlZGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0
aWNzKQorICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb247CisgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxvYWRlZFN0YXRpc3RpY3Muc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0aWNzKSB7CiAgICAg
ICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNldChzdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFp
biwgc3RhdGlzdGljcyk7CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3Vy
Y2UgJiYgIXN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQo
c3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW4pOworICAgIH0KKyAgICAKKyAgICBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgdHJ1ZSk7CiB9CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCkBAIC0xNDEs
MTIgKzE0OCwzNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90CiAg
ICAgbV9kYXRhQWRkZWRIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKIH0KIAordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFj
ayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZh
bHVlKT4mJiBoYW5kbGVyKQoreworICAgIG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFp
bkhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUp
PiYmIGhhbmRsZXIpCit7CisgICAgbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hh
bmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7CiAgICAgaWYgKG1f
ZGF0YUFkZGVkSGFuZGxlcikKICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7CiB9CiAKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKQoreworICAg
IGlmIChtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKQorICAgICAgICBt
X3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKHByaW1hcnlEb21haW4sIHZh
bHVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFp
bnMsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRv
bWFpbnNIYW5kbGVyKQorICAgICAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5z
SGFuZGxlcihwcmltYXJ5RG9tYWlucywgdmFsdWUpOworfQorCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25k
cykKIHsKICAgICBpZiAoc2Vjb25kcyA+PSAwKQpAQCAtMTcwLDYgKzE5OSwxMCBAQCBib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkCiAgICAgICAgIC8vIGl0IGhhcyBiZWVu
IHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCiAgICAgICAgIHJlc291cmNlU3Rh
dGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSAwOwogICAgICAgICByZXNvdXJjZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAocmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgICAgIGZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlcihyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4s
IHRydWUpOworCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDE0IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1lcmdlU3RhdGlzdGljcyhjb25zdCBWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4gdGFrZVN0YXRpc3RpY3MoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRs
ZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBh
cnRpdGlvbkNvb2tpZXNDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBw
cmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+JiYpOwogCiAgICAg
dm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHNldFRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbiwgYm9vbCB2YWx1ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21h
aW4sIGJvb2wgdmFsdWUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzU3RhdGlz
dGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYmKTsKIApA
QCAtNzEsNiArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwogICAgIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBtX2RhdGFBZGRlZEhhbmRsZXI7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+IG1fc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbkhhbmRsZXI7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+IG1fc2hvdWxkUGFydGl0
aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIK
ICNpbmNsdWRlICJTZXNzaW9uSUQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShD
RlVSTENPTk5FQ1RJT04pCkBAIC02Nyw2ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgQ0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZiBwbGF0Zm9ybVNlc3Npb24oKSB7IHJldHVybiBtX3BsYXRmb3JtU2Vzc2lv
bi5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCk7CisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmlu
ZyYsIGJvb2wgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2hvdWxkUGFydGl0aW9u
Q29va2llc0Zvckhvc3RzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5k
aWYKICNlbGlmIFVTRShTT1VQKQogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQs
IHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYpOwogICAgIH5OZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKTsKQEAgLTEwNiw2ICsxMTIsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAg
ICAgQ3JlZGVudGlhbFN0b3JhZ2UgbV9jcmVkZW50aWFsU3RvcmFnZTsKKworI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Nvb2tp
ZVBhcnRpdGlvbmluZ0xpc3Q7CisjZW5kaWYKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBj
b29raWVTdG9yYWdlUGFydGl0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5l
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNCArMTQwLDQ1IEBAIFN0cmluZyBjb29raWVTdG9y
YWdlUGFydGl0aW9uKGNvbnN0IFVSTCYKIAogI2VuZGlmCiAKKyNpZiBIQVZFKENGTkVUV09SS19T
VE9SQUdFX1BBUlRJVElPTklORykKKworYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmluZyYgaG9zdCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHRvcFByaXZhdGVseU93bmVkRG9tYWluIDogbV9jb29raWVQYXJ0aXRpb25pbmdMaXN0
KSB7CisgICAgICAgIGlmIChob3N0SXNJbkRvbWFpbihob3N0LCB0b3BQcml2YXRlbHlPd25lZERv
bWFpbikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChI
YXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3Qu
YmVnaW4oKTsgaXRlciAhPSBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBhdXRvIHRvcFByaXZhdGVseU93bmVkRG9tYWluID0gKml0ZXI7CisgICAgICAg
IGlmIChob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UodG9wUHJpdmF0ZWx5T3duZWREb21h
aW4pKSB7CisgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0gaG9zdC5sZW5ndGgoKSAtIHRv
cFByaXZhdGVseU93bmVkRG9tYWluLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCFzdWZmaXhT
dGFydCB8fCBob3N0W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JI
b3N0KGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5hZGQoaG9zdCk7CisgICAgZWxzZQorICAg
ICAgICBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QucmVtb3ZlKGhvc3QpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBob3N0cywgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5hZGQoaG9zdHMuYmVnaW4oKSwgaG9zdHMu
ZW5kKCkpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIGhvc3QgOiBob3N0cykKKyAg
ICAgICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5yZW1vdmUoaG9zdCk7CisgICAgfQor
fQorCisjZW5kaWYgLy8gSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJp
dmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFU
YXNrQ29jb2EpOgorICAgICAgICAgICAgTm93IGNvbnN1bHRzIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoKQorICAgICAgICAgICAg
dG8gZGVjaWRlIHdoZXRoZXIgcGFydGl0aW9uaW5nIHNob3VsZCBiZSBhcHBsaWVkIG9yIG5vdC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdLQ29va2llTWFuYWdlclNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKToKKyAg
ICAgICAgICAgIFRvIGFsbG93IFRlc3RSdW5uZXIgdG8gY29uZmlndXJlIGNvb2tpZSBwYXJ0aXRp
b25pbmcuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0
byBzZXQgYSBkb21haW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxk
IGJlIGFwcGxpZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQpOgorICAgICAgICAgICAgVG8gYWxs
b3cgVGVzdFJ1bm5lciB0byBjb25maWd1cmUgY29va2llIHBhcnRpdGlvbmluZy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29r
aWVzSGFuZGxlcik6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVubmVyIHRvIHNldCBhIGRv
bWFpbiBmb3Igd2hpY2gKKyAgICAgICAgICAgIHBhcnRpdGlvbmluZyBzaG91bGQgYmUgYXBwbGll
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFz
c2lmeVJlc291cmNlKToKKyAgICAgICAgICAgIE5vdyB0ZWxscyB0aGUgbmV0d29yayBwcm9jZXNz
IGFzIHNvb24gYXMgYSBkb21haW4KKyAgICAgICAgICAgIGhhcyBiZWVuIGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgT3Zl
cmxvYWRlZCBmdW5jdGlvbiB0byBhbGxvdyBpbmplY3Rpb24gb2YgaGFuZGxlcnMgZm9yIGNvbW11
bmljYXRpb24gd2l0aCB0aGUKKyAgICAgICAgICAgIG5ldHdvcmsgcHJvY2Vzcy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91
bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNl
cnZlcik6CisgICAgICAgICAgICBOb3cgc2V0cyB0d28gY2FsbGJhY2sgaGFuZGxlcnMgZm9yIGNv
bW11bmljYXRpb24gd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTctMDMtMDcgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFN1YnBpeGVs
QW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkIGJ5IGRlZmF1bHQgb24gc29tZSB2ZXJzaW9ucyBv
ZiBtYWNPUwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEw
LDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGUKICAgICAgICAg
aGFuZGxlcigpOwogfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0
aXRpb25Db29raWVzRm9ySG9zdChkb21haW4sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNob3VsZFBhcnRpdGlvbkNv
b2tpZXNGb3JIb3N0cyhkb21haW5zLCB2YWx1ZSk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQg
ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQgKFZlY3RvcjxX
ZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzEx
NiwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFi
YXNlUHJvY2Vzc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIEZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCisjaWYgSEFWRShDRk5FVFdPUktf
U1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgdm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZSk7CisgICAg
dm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5kaWYKKwogICAgIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgbG9hZFRocm90dGxlTGF0ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9hZFRocm90dGxlTGF0ZW5jeTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw0ICs3Nyw5IEBAIG1l
c3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmUKICAgICBQcm9jZXNzRGlkUmVz
dW1lKCkKIAogICAgIERpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0Zv
ckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKKworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0Vf
UEFSVElUSU9OSU5HKQorICAgIFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlP
d25lZERvbWFpbihTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWREb21haW4sIGJvb2wgdmFsdWUpCisg
ICAgU2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhWZWN0
b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCisjZW5kaWYK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMywxMiBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
TmV0d29ya0RhdGFUYXNrQ29jCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGlu
ZyBOZXR3b3JrRGF0YVRhc2sgd2l0aCBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwg
bnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKIAogI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBzdG9yYWdlUGFydGl0aW9u
ID0gV2ViQ29yZTo6Y29va2llU3RvcmFnZVBhcnRpdGlvbihyZXF1ZXN0KTsKLSAgICBpZiAoIXN0
b3JhZ2VQYXJ0aXRpb24uaXNFbXB0eSgpKQotICAgICAgICBtX3Rhc2suZ2V0KCkuX3N0b3JhZ2VQ
YXJ0aXRpb25JZGVudGlmaWVyID0gc3RvcmFnZVBhcnRpdGlvbjsKKyAgICBpZiAoc2Vzc2lvbi5u
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdCh1cmwu
aG9zdCgpKSkgeworICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IFBhcnRpdGlvbmlu
ZyBjb29raWVzIGZvciBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0
LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHN0b3JhZ2VQ
YXJ0aXRpb24gPSBXZWJDb3JlOjpjb29raWVTdG9yYWdlUGFydGl0aW9uKHJlcXVlc3QpOworICAg
ICAgICBpZiAoIXN0b3JhZ2VQYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgbV90YXNr
LmdldCgpLl9zdG9yYWdlUGFydGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247Cisg
ICAgfQogI2VuZGlmCiAKICAgICBpZiAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJj
ZVByaW9yaXRpZXNFbmFibGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVk
ZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5o
IgpAQCAtMTk2LDQgKzE5NywxMyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGlkR2V0
SFRUUENvCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShwb2xp
Y3kpOwogfQogCit2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCkp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCkKKyNlbmRpZgorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NiArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
SFRUUENvb2tpZUFjY2VwdFBvbGljeSk7CiAgICAgdm9pZCBnZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHN0ZDo6ZnVuY3Rpb248dm9pZCAoSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFi
bGVkKGJvb2wpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV2ViQ29y
ZTo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdlYkNv
cmU6OlNlc3Npb25JRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9u
IDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDExIEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmYKICAgICBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2Vy
dmVyKCkuZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGhvc3ROYW1lLCB2YWx1ZSk7
Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQodmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIx
MzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKICAgICBzdGF0aWMgdm9pZCBzZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlvbihkb3VibGUg
c2Vjb25kcyk7CiAgICAgc3RhdGljIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0
IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgc3RhdGljIHZvaWQg
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2
YWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2
aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1LDExIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXQKIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVJlc291cmNlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQogewogICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQ
cmV2YWxlbnRSZXNvdXJjZQotICAgICAgICAmJiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyLmhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlz
dGljKSkKKyAgICAgICAgJiYgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oYXNQ
cmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhyZXNvdXJjZVN0YXRpc3RpYykpIHsKICAg
ICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7CisgICAg
ICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAg
ICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29r
aWVzSGFuZGxlcihyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4sIHRydWUpOworICAg
IH0KIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFS
ZWNvcmRzKCkKQEAgLTE3MCw3ICsxNzMsNiBAQCBib29sIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVzCiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7
CiB9CiAKLQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hh
cmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKQogewogICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9yZShtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jb3B5UmVmKCkpOwpAQCAtMTgwLDYgKzE4MiwxNyBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnCiAgICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMoKTsKICAgICB9KTsKIH0KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpPiYmIHNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpPiYmIHNob3VsZFBh
cnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcikKK3sKKyAgICByZWdpc3RlclNoYXJlZFJl
c291cmNlTG9hZE9ic2VydmVyKCk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUt
PnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhbdGhpcywgc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbkhhbmRsZXIgPSBXVEZNb3ZlKHNob3VsZFBhcnRpdGlvbkNvb2tpZXNG
b3JEb21haW5IYW5kbGVyKV0gKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1
ZSkgeworICAgICAgICBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluSGFuZGxlcihwcmlt
YXJ5RG9tYWluLCB2YWx1ZSk7CisgICAgfSk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUtPnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhbdGhpcywgc2hvdWxkUGFy
dGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyID0gV1RGTW92ZShzaG91bGRQYXJ0aXRpb25D
b29raWVzRm9yRG9tYWluc0hhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlE
b21haW5zLCBib29sIHZhbHVlKSB7CisgICAgICAgIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JE
b21haW5zSGFuZGxlcihwcmltYXJ5RG9tYWlucywgdmFsdWUpOworICAgIH0pOworfQogCiB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGlza0lmTmVlZGVk
KCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCByZWdpc3RlclNoYXJlZFJlc291cmNlTG9h
ZE9ic2VydmVyKCk7CisgICAgdm9pZCByZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVy
KHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFs
dWUpPiYmIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUp
PiYmIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcik7CiAgICAgCiAgICAg
dm9pZCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIG9yaWdpbnMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDExIEBAIHZvaWQgV0tDb29raWVNYW5h
Z2VyR2V0SFRUUENvb2tpZUFjY2VwdFAKICAgICB0b0ltcGwoY29va2llTWFuYWdlciktPmdldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbjxXS0hUVFBDb29r
aWVBY2NlcHRQb2xpY3ksIEhUVFBDb29raWVBY2NlcHRQb2xpY3k+KGNvbnRleHQsIGNhbGxiYWNr
KSk7CiB9CiAKK3ZvaWQgV0tDb29raWVNYW5hZ2VyU2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmlu
Z0VuYWJsZWQoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIsIGJvb2wgZW5hYmxlZCkK
K3sKKyAgICB0b0ltcGwoY29va2llTWFuYWdlciktPnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdLQ29va2llTWFuYWdlclN0YXJ0T2JzZXJ2
aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcikKIHsKICAg
ICB0b0ltcGwoY29va2llTWFuYWdlciktPnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJD
b3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5oCShyZXZpc2lvbiAyMTM1
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb29raWVN
YW5hZ2VyU2V0SFRUUENvbwogdHlwZWRlZiB2b2lkICgqV0tDb29raWVNYW5hZ2VyR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeUZ1bmN0aW9uKShXS0hUVFBDb29raWVBY2NlcHRQb2xpY3ksIFdLRXJy
b3JSZWYsIHZvaWQqKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlckdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIsIHZvaWQqIGNv
bnRleHQsIFdLQ29va2llTWFuYWdlckdldEhUVFBDb29raWVBY2NlcHRQb2xpY3lGdW5jdGlvbiBj
YWxsYmFjayk7CiAKK1dLX0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlclNldENvb2tpZVN0b3Jh
Z2VQYXJ0aXRpb25pbmdFbmFibGVkKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyLCBi
b29sIGVuYWJsZWQpOworCiBXS19FWFBPUlQgdm9pZCBXS0Nvb2tpZU1hbmFnZXJTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIpOwogV0tf
RVhQT1JUIHZvaWQgV0tDb29raWVNYW5hZ2VyU3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV0tD
b29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDYgKzgxLDExIEBAIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlckZpcmUKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihXS1N0cmluZ1JlZiBo
b3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHRvV1RGU3RyaW5nKGhvc3RO
YW1lKSwgdmFsdWUpOworfQorCiB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJT
ZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAg
ICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0Miw3IEBAIGV4dGVybiAiQyIgewogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oV0tT
dHJpbmdSZWYgaG9zdE5hbWUsIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAg
ICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAgICAgV0tfRVhQT1JUIHZvaWQg
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJG
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJv
b2wgdmFsdWUpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUp
OwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVl
KTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5Miw2ICsyOTIsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpncmFudFNhbmRi
b3hFeAogI2VuZGlmCiB9CiAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklO
RykKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWluKGNvbnN0IFN0cmluZyYgdG9wUHJpdmF0ZWx5T3duZWREb21h
aW4sIGJvb2wgdmFsdWUpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9t
YWluKHRvcFByaXZhdGVseU93bmVkRG9tYWluLCB2YWx1ZSksIDApOworfQorCit2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25l
ZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywg
Ym9vbCB2YWx1ZSkKK3sKKyAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5z
KHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgdmFsdWUpLCAwKTsKK30KKyNlbmRpZgorCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIq
IGxhdW5jaGVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZp
ZXIpCiB7CiAgICAgQ2hpbGRQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhsYXVuY2hl
ciwgY29ubmVjdGlvbklkZW50aWZpZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjEz
NTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDEwIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lk
IGRpZERlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKTsKICAg
ICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyNpZiBIQVZF
KENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICB2b2lkIHNob3VsZFBhcnRpdGlv
bkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbihjb25zdCBTdHJpbmcmLCBib29sIHZh
bHVlKTsKKyAgICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25l
ZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBib29sIHZhbHVlKTsKKyNlbmRpZgogICAg
IHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIFdlYkNvcmU6OlNob3VsZFNhbXBs
ZSk7CiAgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQodWludDY0X3QgcGFn
ZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIHVp
bnQzMl90IHJlc3VsdCwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlKTsKICAgICB2b2lkIGxvZ0RpYWdu
b3N0aWNNZXNzYWdlV2l0aFZhbHVlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBkb3VibGUgdmFsdWUsIHVuc2lnbmVkIHNp
Z25pZmljYW50RmlndXJlcywgV2ViQ29yZTo6U2hvdWxkU2FtcGxlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTEgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3NQ
cm94eSBMZWdhY3lSZQogCiAgICAgR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9j
ZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBWZWN0b3I8U3RyaW5nPiBwYXRocykKIAor
I2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIFNob3VsZFBhcnRp
dGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbihTdHJpbmcgdG9wUHJpdmF0ZWx5
T3duZWREb21haW4sIGJvb2wgdmFsdWUpCisgICAgU2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWlucyhWZWN0b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlPd25lZERv
bWFpbnMsIGJvb2wgdmFsdWUpCisjZW5kaWYKKwogICAgIFByb2Nlc3NSZWFkeVRvU3VzcGVuZCgp
CiAgICAgU2V0SXNIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCBpc0hvbGRpbmdMb2NrZWRGaWxlcykK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQ4LDYgKzEwNDgsMjAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1v
dmVEYXRhRm9yVG9wUAogICAgIH0pOwogfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9Q
QVJUSVRJT05JTkcpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbihjb25zdCBTdHJpbmcmIHRvcFByaXZhdGVseU93
bmVkRG9tYWluLCBib29sIHZhbHVlKQoreworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWluKHRvcFByaXZhdGVseU93bmVkRG9tYWluLCB2YWx1ZSkpOwor
fQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQ
cml2YXRlbHlPd25lZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93
bmVkRG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbnModG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCB2YWx1ZSkp
OworfQorI2VuZGlmCisKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6d2ViUGFnZVdhc0FkZGVkKFdl
YlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQogewogICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyKQpA
QCAtMTIxMiw4ICsxMjI2LDE4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJTaGFy
ZWRSZXMKIHsKICAgICBpZiAoIW1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykKICAgICAgICAgcmV0
dXJuOwotCisgICAgCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisg
ICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9i
c2VydmVyKAorICAgICAgICBbdGhpc10gKGNvbnN0IFN0cmluZyYgdG9wUHJpdmF0ZWx5T3duZWRE
b21haW4sIGJvb2wgdmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMtPnNob3VsZFBhcnRpdGlvbkNv
b2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbih0b3BQcml2YXRlbHlPd25lZERvbWFpbiwg
dmFsdWUpOworICAgICAgICB9LAorICAgICAgICBbdGhpc10gKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMtPnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnModG9w
UHJpdmF0ZWx5T3duZWREb21haW5zLCB2YWx1ZSk7CisgICAgICAgIH0pOworI2Vsc2UKICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIoKTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDIxMzU1
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJz
aXRlRGF0YVJlY29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICB2b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5j
dGlvbjx2b2lkKFZlY3RvcjxTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpOwogCisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgdm9pZCBzaG91bGRQYXJ0aXRp
b25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiwgYm9vbCB2
YWx1ZSk7CisgICAgdm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5kaWYKICAg
ICB2b2lkIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgY29uc3QgU3RyaW5n
JiByZXNvbHZlZEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jl
c29sdmVkQ29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5OyB9CiAgICAgY29u
c3QgU3RyaW5nJiByZXNvbHZlZE1lZGlhQ2FjaGVEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBt
X3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUNhY2hlRGlyZWN0b3J5OyB9CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTM1
OTIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAor
MjAxNy0wMy0wOCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IENvbW11bmljYXRlIHRvIHRoZSBuZXR3b3JrIHBy
b2Nlc3Mgd2hpY2ggZG9tYWlucyB0byBwYXJ0aXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTMyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzA3Njg5MjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlc2UgY2hhbmdlcyBhZGQgc3VwcG9ydCBmb3IgdHdvIG5ldyBUZXN0UnVubmVyIGZ1bmN0
aW9uczoKKyAgICAgICAgLSBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCgpCisg
ICAgICAgIC0gc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RS
dW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldENvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGlj
c0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcik6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAx
Ny0wMy0wOCAgTWF0dCBSYWpjYSAgPG1yYWpjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIHVwZGF0aW5nIGF1dG9wbGF5IHBvbGljaWVzIGFmdGVyIGEgcGFnZSBoYXMgYmVl
biBsb2FkZWQuCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjgsNiArMjI2OCwxMSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZURhdGFNCiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogICAgIAordm9pZCBU
ZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
cihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGhvc3RO
YW1lLCB2YWx1ZSk7Cit9CisKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQodmFsdWUpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhXS1N0cmlu
Z1JlZiBob3N0TmFtZSwgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMp
OwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAg
IHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihXS1N0cmlu
Z1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
KTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKGRvdWJsZSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Myw2ICs3OTMsMTIgQEAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkIikpIHsKKyAgICAgICAg
V0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICBXS0Nvb2tpZU1hbmFnZXJTZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5n
RW5hYmxlZChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5jb250ZXh0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1ZShhY2NlcHQpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQiKSkgewog
ICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFn
ZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpOwogICAgICAgICBXS1JldGFpblB0cjxXS1VJbnQ2
NFJlZj4gcmVzdWx0KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGNvdW50KSk7CkBAIC05OTEsNiAr
OTk3LDIwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlciIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOworICAgICAgICAKKyAgICAgICAgV0tEaWN0
aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFy
eVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9z
dE5hbWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1l
IikpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOworICAgICAgICAKKyAgICAg
ICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5Lmdl
dCgpKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZh
bHVlS2V5LmdldCgpKSk7CisgICAgICAgIAorICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihob3N0TmFt
ZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkg
ewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdl
dFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9uIDIxMzU1NSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc2Niw2ICs3NjYsMTUgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRB
bHdheXNBY2NlcHRDb29raWVzKAogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQiKSk7CisK
KyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9v
bGVhbkNyZWF0ZShlbmFibGVkKSk7CisKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorCiBkb3VibGUgVGVzdFJ1bm5lcjo6
cHJlY2lzZVRpbWUoKQogewogICAgIHJldHVybiBjdXJyZW50VGltZSgpOwpAQCAtMTMyOCw2ICsx
MzM3LDMxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWYKICAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihKU1N0
cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+PiBrZXlzOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2
YWx1ZXM7CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpIH0pOworICAgIAorICAgIGtl
eXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVl
IikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1
ZSkgfSk7CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgp
KTsKKyAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOworICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1
ZXNbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlz
dGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlciIpKTsKKyAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKKyAg
ICAKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworfQorCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCIpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYg
KzI3MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0
QWx3YXlzQWNjZXB0Q29va2llcyhib29sKTsKKyAgICB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0
aXRpb25pbmdFbmFibGVkKGJvb2wpOwogCiAgICAgLy8gQ3VzdG9tIGZ1bGwgc2NyZWVuIGJlaGF2
aW9yLgogICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKGJvb2wgdmFsdWUp
IHsgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2YWx1ZTsgfQpAQCAtMzUxLDYgKzM1Miw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29y
ZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIHN0YXRpc3RpY3NEaWRN
b2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFt
ZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShK
U1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKIAogICAgIC8v
IENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sZWFu
IGFjY2VwdCk7CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChi
b29sZWFuIGVuYWJsZWQpOwogCiAgICAgdm9pZCBvdmVycmlkZVByZWZlcmVuY2UoRE9NU3RyaW5n
IHByZWZlcmVuY2UsIERPTVN0cmluZyB2YWx1ZSk7CiAKQEAgLTI1OCw2ICsyNTksNyBAQCBpbnRl
cmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKERPTVN0cmluZyBob3N0TmFtZSwgRE9NU3RyaW5nIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xlYW4g
dmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMp
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTU1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDMtMDggIEpvaG4gV2lsYW5kZXIg
IDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNz
OiBDb21tdW5pY2F0ZSB0byB0aGUgbmV0d29yayBwcm9jZXNzIHdoaWNoIGRvbWFpbnMgdG8gcGFy
dGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjkzMjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwNzY4OTIxPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0
LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdp
dGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXM6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jl
c291cmNlcy9nZXQtY29va2llcy5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9zZXQtY29va2llLnBocDogQWRk
ZWQuCisKIDIwMTctMDMtMDcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIERlYnVnIGZsYWcgdG8gVGVzdEV4cGVjdGF0aW9uIGZvciB3ZWJydGMvbGli
d2VicnRjL2Rlc2NyaXB0aW9uR2V0dGVycy5odG1sLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13
aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
L3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLWV4
cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NSBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRSZWNl
aXZlVGl0bGU6IFRlc3QgZm9yIFBhcnRpdGlvbmVkIENvb2tpZXMgV2l0aCBhbmQgV2l0aG91dCBV
c2VyIEludGVyYWN0aW9uCittYWluIGZyYW1lIC0gZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdl
Rm9yRnJhbWUKK21haW4gZnJhbWUgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6IGh0
dHA6Ly9sb2NhbGhvc3Q6ODAwMC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3Vy
Y2VzL3NldC1jb29raWUucGhwP25hbWU9Zmlyc3RQYXJ0eUNvb2tpZSZ2YWx1ZT12YWx1ZSNodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlv
bmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwjc3RlcDIg
CittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUg
LSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFt
ZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZp
bmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZl
bnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK21haW4gZnJh
bWUgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6IGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRo
LWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbCNzdGVwMiAKK21haW4gZnJhbWUgLSBk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ2FuY2VsQ2xp
ZW50UmVkaXJlY3RGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQor
bWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgUGFydGl0aW9uZWQgQ29va2ll
cyBXaXRoIGFuZCBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBkaWRDaGFu
Z2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUwLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGgg
Ly88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1m
cmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZy
YW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFt
ZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPiIgLSBkaWRIYW5kbGVP
bmxvYWRFdmVudHNGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+
LS0+IiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUxLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBh
dGggLy88IS0tZnJhbWUxLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCitt
YWluIGZyYW1lIC0gZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUKK2ZyYW1lICI8
IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTEtLT4tLT4iIC0gZGlk
SGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZy
YW1lMS0tPi0tPiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRo
IC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0t
ZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+IiAtIGRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1l
Mi0tPi0tPiIgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFt
ZVBhdGggLy88IS0tZnJhbWUyLS0+LS0+IiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorZnJhbWUg
IjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFt
ZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+IiAtIGRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4t
LT4iIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRo
IC8vPCEtLWZyYW1lMy0tPi0tPiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUg
LSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKKyAgCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFt
ZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK1Nob3VsZCByZWNlaXZlIG5vIGNv
b2tpZXMuCitEaWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICdmaXJzdFBhcnR5Q29va2llJy4K
K0RpZCBub3QgcmVjZWl2ZSBjb29raWUgbmFtZWQgJ3RoaXJkUGFydHlDb29raWUnLgorCisKKy0t
LS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+JworLS0tLS0t
LS0KK1NldHRpbmcgcGFydGl0aW9uZWQsIHRoaXJkIHBhcnR5IGNvb2tpZS4KKworCistLS0tLS0t
LQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPicKKy0tLS0tLS0tCitT
aG91bGQgb25seSByZWNlaXZlIHBhcnRpdGlvbmVkLCB0aGlyZCBwYXJ0eSBjb29raWUuCitEaWQg
bm90IHJlY2VpdmUgY29va2llIG5hbWVkICdmaXJzdFBhcnR5Q29va2llJy4KK1JlY2VpdmVkIGNv
b2tpZSBuYW1lZCAndGhpcmRQYXJ0eUNvb2tpZScuCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEt
LWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4nCistLS0tLS0tLQorQWZ0ZXIgdXNlciBpbnRl
cmFjdGlvbiwgc2hvdWxkIG9ubHkgcmVjZWl2ZSBub24tcGFydGl0aW9uZWQsIGZpcnN0IHBhcnR5
IGNvb2tpZS4KK1JlY2VpdmVkIGNvb2tpZSBuYW1lZCAnZmlyc3RQYXJ0eUNvb2tpZScuCitEaWQg
bm90IHJlY2VpdmUgY29va2llIG5hbWVkICd0aGlyZFBhcnR5Q29va2llJy4KKwpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0
aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFj
dGlvbi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0
aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBj
aGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3QgZm9yIFBhcnRpdGlvbmVkIENvb2tpZXMg
V2l0aCBhbmQgV2l0aG91dCBVc2VyIEludGVyYWN0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KKyAgICBjb25zdCBwYXJ0aXRpb25Ib3N0ID0gIjEyNy4wLjAuMTo4MDAw
IjsKKyAgICBjb25zdCB0aGlyZFBhcnR5T3JpZ2luID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCI7
CisgICAgY29uc3QgdGhpcmRQYXJ0eUJhc2VVcmwgPSB0aGlyZFBhcnR5T3JpZ2luICsgIi9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzIjsKKyAgICBjb25zdCBmaXJzdFBh
cnR5Q29va2llTmFtZSA9ICJmaXJzdFBhcnR5Q29va2llIjsKKyAgICBjb25zdCBzdWJQYXRoVG9T
ZXRGaXJzdFBhcnR5Q29va2llID0gIi9zZXQtY29va2llLnBocD9uYW1lPSIgKyBmaXJzdFBhcnR5
Q29va2llTmFtZSArICImdmFsdWU9dmFsdWUiOworICAgIGNvbnN0IHRoaXJkUGFydHlDb29raWVO
YW1lID0gInRoaXJkUGFydHlDb29raWUiOworICAgIGNvbnN0IHN1YlBhdGhUb1NldFRoaXJkUGFy
dHlDb29raWUgPSAiL3NldC1jb29raWUucGhwP25hbWU9IiArIHRoaXJkUGFydHlDb29raWVOYW1l
ICsgIiZ2YWx1ZT12YWx1ZSI7CisgICAgY29uc3QgZnJhZ21lbnRXaXRoUmV0dXJuVXJsID0gImh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0
aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbCI7Cisg
ICAgY29uc3Qgc3ViUGF0aFRvR2V0Q29va2llcyA9ICIvZ2V0LWNvb2tpZXMucGhwP25hbWUxPSIg
KyBmaXJzdFBhcnR5Q29va2llTmFtZSArICImbmFtZTI9IiArIHRoaXJkUGFydHlDb29raWVOYW1l
OworCisgICAgZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUpIHsKKyAgICAgICAgaWYg
KCFlbmFibGUpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRDb29r
aWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFibGUpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2UpOworICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvcGVu
SWZyYW1lKHVybCwgb25Mb2FkSGFuZGxlcikgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGVsZW1lbnQuc3JjID0gdXJs
OworICAgICAgICBpZiAob25Mb2FkSGFuZGxlcikgeworICAgICAgICAgICAgZWxlbWVudC5vbmxv
YWQgPSBvbkxvYWRIYW5kbGVyOworICAgICAgICB9CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0VXNlckludGVyYWN0
aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbih0aGlyZFBhcnR5T3JpZ2luLCB0cnVlKTsKKyAgICAgICAgaWYgKCF0
ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih0aGlyZFBhcnR5T3Jp
Z2luKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlRoaXJkIHBhcnR5IGRpZCBub3QgZ2V0IGxv
Z2dlZCBmb3IgdXNlciBpbnRlcmFjdGlvbi4iKTsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9j
YXRpb24uaGFzaCkgeworICAgICAgICAgICAgY2FzZSAiI3N0ZXAxIjoKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9T
ZXRGaXJzdFBhcnR5Q29va2llICsgIiMiICsgZnJhZ21lbnRXaXRoUmV0dXJuVXJsICsgIiNzdGVw
MiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICIjc3RlcDIiOgor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDMiOworICAgICAg
ICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9HZXRDb29r
aWVzICsgIiZtZXNzYWdlPVNob3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuIiwgcnVuVGVzdCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICIjc3RlcDMiOgorICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDQiOworICAgICAgICAgICAg
ICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9TZXRUaGlyZFBhcnR5
Q29va2llICsgIiZtZXNzYWdlPVNldHRpbmcgcGFydGl0aW9uZWQsIHRoaXJkIHBhcnR5IGNvb2tp
ZS4iLCBydW5UZXN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
IiNzdGVwNCI6CisgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVw
NSI7CisgICAgICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBh
dGhUb0dldENvb2tpZXMgKyAiJm1lc3NhZ2U9U2hvdWxkIG9ubHkgcmVjZWl2ZSBwYXJ0aXRpb25l
ZCwgdGhpcmQgcGFydHkgY29va2llLiIsIHNldFVzZXJJbnRlcmFjdGlvbkFuZENvbnRpbnVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwNSI6CisgICAg
ICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENv
b2tpZXMgKyAiJm1lc3NhZ2U9QWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiwgc2hvdWxkIG9ubHkgcmVj
ZWl2ZSBub24tcGFydGl0aW9uZWQsIGZpcnN0IHBhcnR5IGNvb2tpZS4iLCBmaW5pc2hUZXN0KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb2N1
bWVudC5sb2NhdGlvbi5ob3N0ID09PSBwYXJ0aXRpb25Ib3N0ICYmIGRvY3VtZW50LmxvY2F0aW9u
Lmhhc2ggPT0gIiIgJiYgd2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykgewor
ICAgICAgICBzZXRFbmFibGVGZWF0dXJlKHRydWUpOworCisgICAgICAgIHRlc3RSdW5uZXIuc3Rh
dGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigibG9jYWxob3N0IiwgdHJ1
ZSk7CisKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RS
dW5uZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAgIGRvY3VtZW50LmxvY2F0aW9u
Lmhhc2ggPSAic3RlcDEiOworICAgIH0KKworICAgIHJ1blRlc3QoKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9n
ZXQtY29va2llcy5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL2dldC1jb29raWVzLnBocAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9yZXNvdXJjZXMvZ2V0LWNvb2tpZXMucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTMgQEAKKzw/cGhwCitlY2hvICRfR0VUWyJtZXNzYWdlIl0gLiAiPGJyPiI7CitpZigh
aXNzZXQoJF9DT09LSUVbJF9HRVRbIm5hbWUxIl1dKSkgeworICAgIGVjaG8gIkRpZCBub3QgcmVj
ZWl2ZSBjb29raWUgbmFtZWQgJyIgLiAkX0dFVFsibmFtZTEiXSAuICInLjxicj4iOworfSBlbHNl
IHsKKyAgICBlY2hvICJSZWNlaXZlZCBjb29raWUgbmFtZWQgJyIgLiAkX0dFVFsibmFtZTEiXSAu
ICInLjxicj4iOworfQoraWYoIWlzc2V0KCRfQ09PS0lFWyRfR0VUWyJuYW1lMiJdXSkpIHsKKyAg
ICBlY2hvICJEaWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICciIC4gJF9HRVRbIm5hbWUyIl0g
LiAiJy48YnI+IjsKK30gZWxzZSB7CisgICAgZWNobyAiUmVjZWl2ZWQgY29va2llIG5hbWVkICci
IC4gJF9HRVRbIm5hbWUyIl0gLiAiJy48YnI+IjsKK30KKz8+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvc2V0LWNv
b2tpZS5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3NldC1jb29raWUucGhwCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3Jlc291cmNlcy9zZXQtY29va2llLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkg
QEAKKzw/cGhwCitzZXRjb29raWUoJF9HRVRbIm5hbWUiXSwgJF9HRVRbInZhbHVlIl0sIDAsICIv
Iik7CitlY2hvICRfR0VUWyJtZXNzYWdlIl0gLiAiPGJyPiI7Cis/PgorPHNjcmlwdD4KK2lmIChk
b2N1bWVudC5sb2NhdGlvbi5oYXNoKSB7CisgICAgc2V0VGltZW91dCgiZG9jdW1lbnQubG9jYXRp
b24uaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpIiwgMTApOworfQor
PC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303844</attachid>
            <date>2017-03-08 14:28:23 -0800</date>
            <delta_ts>2017-03-08 17:02:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169322-20170308142824.patch</filename>
            <type>text/plain</type>
            <size>57666</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgt
YW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBzZXQgYSBkb21h
aW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxkIGJlIGFwcGxpZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbik6
CisgICAgICAgICAgICBOZXcgb3ZlcmxvYWRlZCBjb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBO
b3cgYm9vdHN0cmFwcyB0aGUgbmV0d29yayBwcm9jZXNzJyBzZXQgb2Yga25vd24gZG9tYWlucyB0
bworICAgICAgICAgICAgcGFydGl0aW9uIGNvb2tpZXMgZm9yLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAgICAgTm93IHRlbGxzIHRoZSBuZXR3b3JrIHByb2Nlc3MgdG8gc3RhcnQgcGFydGl0
aW9uaW5nIGFnYWluCisgICAgICAgICAgICB3aGVuIHVzZXIgaW50ZXJhY3Rpb24gYWdlcyBvdXQu
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKToKKwogMjAxNy0wMy0wNyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgU29tZSBwbGF0Zm9ybXMgd29uJ3QgYmUgYWJs
ZSB0byBjcmVhdGUgYSBHUFVEZXZpY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA0LDEzICszMDQsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVy
YQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgYXV0byBw
cmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0byYgc3RhdGlz
dGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpblN0cik7CiAgICAgZG91YmxlIG5ld1RpbWVzdGFtcCA9IHJlZHVjZVRpbWVS
ZXNvbHV0aW9uVG9PbmVEYXkoV1RGOjpjdXJyZW50VGltZSgpKTsKICAgICBpZiAobmV3VGltZXN0
YW1wID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogICAgIHN0
YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IG5ld1RpbWVzdGFtcDsKKworICAg
IG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWlu
U3RyLCBmYWxzZSk7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CiB9CiAKQEAgLTMxOSw5ICszMjMsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
VXNlckludGVyYQogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Cisg
ICAgYXV0byBwcmltYXJ5RG9tYWluU3RyID0gcHJpbWFyeURvbWFpbih1cmwpOworCisgICAgYXV0
byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4ocHJpbWFyeURvbWFpblN0cik7CiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJh
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9
IFdURjo6Y3VycmVudFRpbWUoKTsKKworICAgIG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWluU3RyLCBmYWxzZSk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsKQpAQCAt
NDEyLDEwICs0MjAsMTkgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2Rp
ZgogICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCit2b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
Y29uc3QgU3RyaW5nJiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBtX3N0b3JlLT5maXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJpbWFyeURvbWFpbihob3N0TmFtZSksIHZh
bHVlKTsKK30KKwogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNv
bnN0IFVSTCYgdXJsKQogeworICAgIHJldHVybiBwcmltYXJ5RG9tYWluKHVybC5ob3N0KCkpOwor
fQorCitTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29uc3QgU3Ry
aW5nJiBob3N0KQorewogICAgIFN0cmluZyBwcmltYXJ5RG9tYWluOwotICAgIFN0cmluZyBob3N0
ID0gdXJsLmhvc3QoKTsKICAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkK
ICAgICAgICAgcHJpbWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKICNpZiBFTkFCTEUoUFVCTElD
X1NVRkZJWF9MSVNUKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9i
c2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNvbHV0
aW9uKGRvdWJsZSBzZWNvbmRzKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29s
IHZhbHVlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU+IHN0YXRpc3RpY3NTdG9yZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwpAQCAt
NzUsNiArNzYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkTG9nKFBhZ2Uq
KTsKICAgICBzdGF0aWMgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVVJMJik7CisgICAgc3Rh
dGljIFN0cmluZyBwcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdCk7CiAKICAgICBSZWZQ
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBzaXplX3Q+IG1fb3JpZ2luc1Zpc2l0ZWRNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNp
b24gMjEzNTU1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsMTUgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYWREYQogICAgIGlmICghc3VjY2VlZGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0
aWNzKQorICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb247CisgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxvYWRlZFN0YXRpc3RpY3Muc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpY3MgOiBsb2FkZWRTdGF0aXN0aWNzKSB7CiAgICAg
ICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNldChzdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFp
biwgc3RhdGlzdGljcyk7CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3Vy
Y2UgJiYgIXN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQo
c3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW4pOworICAgIH0KKyAgICAKKyAgICBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgdHJ1ZSk7CiB9CiAKIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW4pCkBAIC0xNDEs
MTIgKzE0OCwzNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90CiAg
ICAgbV9kYXRhQWRkZWRIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKIH0KIAordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFj
ayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZh
bHVlKT4mJiBoYW5kbGVyKQoreworICAgIG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFp
bkhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUp
PiYmIGhhbmRsZXIpCit7CisgICAgbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hh
bmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7CiAgICAgaWYgKG1f
ZGF0YUFkZGVkSGFuZGxlcikKICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7CiB9CiAKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKQoreworICAg
IGlmIChtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKQorICAgICAgICBt
X3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5IYW5kbGVyKHByaW1hcnlEb21haW4sIHZh
bHVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFp
bnMsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRv
bWFpbnNIYW5kbGVyKQorICAgICAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5z
SGFuZGxlcihwcmltYXJ5RG9tYWlucywgdmFsdWUpOworfQorCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25k
cykKIHsKICAgICBpZiAoc2Vjb25kcyA+PSAwKQpAQCAtMTcwLDYgKzE5OSwxMCBAQCBib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkCiAgICAgICAgIC8vIGl0IGhhcyBiZWVu
IHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCiAgICAgICAgIHJlc291cmNlU3Rh
dGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSAwOwogICAgICAgICByZXNvdXJjZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAocmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgICAgIGZpcmVTaG91bGRQ
YXJ0aXRpb25Db29raWVzSGFuZGxlcihyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4s
IHRydWUpOworCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDE0IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1lcmdlU3RhdGlzdGljcyhjb25zdCBWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4gdGFrZVN0YXRpc3RpY3MoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRs
ZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFBh
cnRpdGlvbkNvb2tpZXNDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBw
cmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+JiYpOwogCiAgICAg
dm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHNldFRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbiwgYm9vbCB2YWx1ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21h
aW4sIGJvb2wgdmFsdWUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzU3RhdGlz
dGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYmKTsKIApA
QCAtNzEsNiArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwogICAgIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBtX2RhdGFBZGRlZEhhbmRsZXI7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk+IG1fc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbkhhbmRsZXI7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+IG1fc2hvdWxkUGFydGl0
aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIK
ICNpbmNsdWRlICJTZXNzaW9uSUQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShD
RlVSTENPTk5FQ1RJT04pCkBAIC02Nyw2ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgQ0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZiBwbGF0Zm9ybVNlc3Npb24oKSB7IHJldHVybiBtX3BsYXRmb3JtU2Vzc2lv
bi5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCk7CisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmlu
ZyYsIGJvb2wgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2hvdWxkUGFydGl0aW9u
Q29va2llc0Zvckhvc3RzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5k
aWYKICNlbGlmIFVTRShTT1VQKQogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQs
IHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYpOwogICAgIH5OZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKTsKQEAgLTEwNiw2ICsxMTIsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAg
ICAgQ3JlZGVudGlhbFN0b3JhZ2UgbV9jcmVkZW50aWFsU3RvcmFnZTsKKworI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Nvb2tp
ZVBhcnRpdGlvbmluZ0xpc3Q7CisjZW5kaWYKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBj
b29raWVTdG9yYWdlUGFydGl0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5l
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9O
ZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNCArMTQwLDQ1IEBAIFN0cmluZyBjb29raWVTdG9y
YWdlUGFydGl0aW9uKGNvbnN0IFVSTCYKIAogI2VuZGlmCiAKKyNpZiBIQVZFKENGTkVUV09SS19T
VE9SQUdFX1BBUlRJVElPTklORykKKworYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmluZyYgaG9zdCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHRvcFByaXZhdGVseU93bmVkRG9tYWluIDogbV9jb29raWVQYXJ0aXRpb25pbmdMaXN0
KSB7CisgICAgICAgIGlmIChob3N0SXNJbkRvbWFpbihob3N0LCB0b3BQcml2YXRlbHlPd25lZERv
bWFpbikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgZm9yIChI
YXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3Qu
YmVnaW4oKTsgaXRlciAhPSBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBhdXRvIHRvcFByaXZhdGVseU93bmVkRG9tYWluID0gKml0ZXI7CisgICAgICAg
IGlmIChob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UodG9wUHJpdmF0ZWx5T3duZWREb21h
aW4pKSB7CisgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0gaG9zdC5sZW5ndGgoKSAtIHRv
cFByaXZhdGVseU93bmVkRG9tYWluLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCFzdWZmaXhT
dGFydCB8fCBob3N0W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JI
b3N0KGNvbnN0IFN0cmluZyYgaG9zdCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5hZGQoaG9zdCk7CisgICAgZWxzZQorICAg
ICAgICBtX2Nvb2tpZVBhcnRpdGlvbmluZ0xpc3QucmVtb3ZlKGhvc3QpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBob3N0cywgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5hZGQoaG9zdHMuYmVnaW4oKSwgaG9zdHMu
ZW5kKCkpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIGhvc3QgOiBob3N0cykKKyAg
ICAgICAgICAgIG1fY29va2llUGFydGl0aW9uaW5nTGlzdC5yZW1vdmUoaG9zdCk7CisgICAgfQor
fQorCisjZW5kaWYgLy8gSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJp
dmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFU
YXNrQ29jb2EpOgorICAgICAgICAgICAgTm93IGNvbnN1bHRzIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoKQorICAgICAgICAgICAg
dG8gZGVjaWRlIHdoZXRoZXIgcGFydGl0aW9uaW5nIHNob3VsZCBiZSBhcHBsaWVkIG9yIG5vdC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdLQ29va2llTWFuYWdlclNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKToKKyAg
ICAgICAgICAgIFRvIGFsbG93IFRlc3RSdW5uZXIgdG8gY29uZmlndXJlIGNvb2tpZSBwYXJ0aXRp
b25pbmcuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0
byBzZXQgYSBkb21haW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxk
IGJlIGFwcGxpZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRv
cFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQpOgorICAgICAgICAgICAgVG8gYWxs
b3cgVGVzdFJ1bm5lciB0byBjb25maWd1cmUgY29va2llIHBhcnRpdGlvbmluZy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29r
aWVzSGFuZGxlcik6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVubmVyIHRvIHNldCBhIGRv
bWFpbiBmb3Igd2hpY2gKKyAgICAgICAgICAgIHBhcnRpdGlvbmluZyBzaG91bGQgYmUgYXBwbGll
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFz
c2lmeVJlc291cmNlKToKKyAgICAgICAgICAgIE5vdyB0ZWxscyB0aGUgbmV0d29yayBwcm9jZXNz
IGFzIHNvb24gYXMgYSBkb21haW4KKyAgICAgICAgICAgIGhhcyBiZWVuIGNsYXNzaWZpZWQgYXMg
cHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAgICAgT3Zl
cmxvYWRlZCBmdW5jdGlvbiB0byBhbGxvdyBpbmplY3Rpb24gb2YgaGFuZGxlcnMgZm9yIGNvbW11
bmljYXRpb24gd2l0aCB0aGUKKyAgICAgICAgICAgIG5ldHdvcmsgcHJvY2Vzcy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91
bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNl
cnZlcik6CisgICAgICAgICAgICBOb3cgc2V0cyB0d28gY2FsbGJhY2sgaGFuZGxlcnMgZm9yIGNv
bW11bmljYXRpb24gd2l0aCB0aGUgbmV0d29yayBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTctMDMtMDcgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFN1YnBpeGVs
QW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkIGJ5IGRlZmF1bHQgb24gc29tZSB2ZXJzaW9ucyBv
ZiBtYWNPUwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEw
LDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGUKICAgICAgICAg
aGFuZGxlcigpOwogfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0
ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0
aXRpb25Db29raWVzRm9ySG9zdChkb21haW4sIHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLnNob3VsZFBhcnRpdGlvbkNv
b2tpZXNGb3JIb3N0cyhkb21haW5zLCB2YWx1ZSk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQg
ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJz
aXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQgKFZlY3RvcjxX
ZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzEx
NiwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFi
YXNlUHJvY2Vzc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIEZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCisjaWYgSEFWRShDRk5FVFdPUktf
U1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgdm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZSk7CisgICAg
dm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5kaWYKKwogICAgIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgbG9hZFRocm90dGxlTGF0ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9hZFRocm90dGxlTGF0ZW5jeTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw0ICs3Nyw5IEBAIG1l
c3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmUKICAgICBQcm9jZXNzRGlkUmVz
dW1lKCkKIAogICAgIERpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0Zv
ckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKKworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0Vf
UEFSVElUSU9OSU5HKQorICAgIFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlP
d25lZERvbWFpbihTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWREb21haW4sIGJvb2wgdmFsdWUpCisg
ICAgU2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhWZWN0
b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCisjZW5kaWYK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMywxMiBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
TmV0d29ya0RhdGFUYXNrQ29jCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGlu
ZyBOZXR3b3JrRGF0YVRhc2sgd2l0aCBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwg
bnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKIAogI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBzdG9yYWdlUGFydGl0aW9u
ID0gV2ViQ29yZTo6Y29va2llU3RvcmFnZVBhcnRpdGlvbihyZXF1ZXN0KTsKLSAgICBpZiAoIXN0
b3JhZ2VQYXJ0aXRpb24uaXNFbXB0eSgpKQotICAgICAgICBtX3Rhc2suZ2V0KCkuX3N0b3JhZ2VQ
YXJ0aXRpb25JZGVudGlmaWVyID0gc3RvcmFnZVBhcnRpdGlvbjsKKyAgICBpZiAoc2Vzc2lvbi5u
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdCh1cmwu
aG9zdCgpKSkgeworICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IFBhcnRpdGlvbmlu
ZyBjb29raWVzIGZvciBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0
LlVSTC5hYnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHN0b3JhZ2VQ
YXJ0aXRpb24gPSBXZWJDb3JlOjpjb29raWVTdG9yYWdlUGFydGl0aW9uKHJlcXVlc3QpOworICAg
ICAgICBpZiAoIXN0b3JhZ2VQYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgbV90YXNr
LmdldCgpLl9zdG9yYWdlUGFydGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247Cisg
ICAgfQogI2VuZGlmCiAKICAgICBpZiAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJj
ZVByaW9yaXRpZXNFbmFibGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVk
ZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5o
IgpAQCAtMTk2LDQgKzE5NywxMyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGlkR2V0
SFRUUENvCiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShwb2xp
Y3kpOwogfQogCit2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCkp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDYgKzczLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOwogICAgIHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENhbGxiYWNr
QmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5h
YmxlZChib29sKTsKIAogICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdlYkNv
cmU6OlNlc3Npb25JRCk7CiAgICAgdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJD
b3JlOjpTZXNzaW9uSUQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lv
biAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4NiwxMSBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmCiAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuZmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKCk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBib29s
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNl
cnZlcigpLmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihob3N0TmFtZSwgdmFsdWUp
OworfQorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCShyZXZpc2lvbiAy
MTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25k
cyk7CiAgICAgc3RhdGljIHZvaWQgc2V0UmVkdWNlZFRpbWVzdGFtcFJlc29sdXRpb24oZG91Ymxl
IHNlY29uZHMpOwogICAgIHN0YXRpYyB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigp
OworICAgIHN0YXRpYyB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25z
dCBTdHJpbmcmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lk
IHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw4ICs4NSwxMSBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0CiB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xhc3NpZnlSZXNvdXJjZShSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKIHsKICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlz
UHJldmFsZW50UmVzb3VyY2UKLSAgICAgICAgJiYgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xh
c3NpZmllci5oYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhyZXNvdXJjZVN0YXRp
c3RpYykpCisgICAgICAgICYmIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaGFz
UHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MocmVzb3VyY2VTdGF0aXN0aWMpKSB7CiAg
ICAgICAgIHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOworICAg
ICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAg
ICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5maXJlU2hvdWxkUGFydGl0aW9uQ29v
a2llc0hhbmRsZXIocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCB0cnVlKTsKKyAg
ICB9CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRh
UmVjb3JkcygpCkBAIC0xNzAsNyArMTczLDYgQEAgYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnJlcwogICAgIHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
OwogfQogCi0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNo
YXJlZFJlc291cmNlTG9hZE9ic2VydmVyKCkKIHsKICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY29weVJlZigpKTsKQEAgLTE4MCw2ICsxODIsMTcgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZwogICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzKCk7CiAgICAgfSk7CiB9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcihzdGQ6OmZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4mJiBzaG91
bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluSGFuZGxlciwgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKT4mJiBzaG91bGRQ
YXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIpCit7CisgICAgcmVnaXN0ZXJTaGFyZWRS
ZXNvdXJjZUxvYWRPYnNlcnZlcigpOworICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LT5zZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soW3RoaXMsIHNob3VsZFBhcnRpdGlv
bkNvb2tpZXNGb3JEb21haW5IYW5kbGVyID0gV1RGTW92ZShzaG91bGRQYXJ0aXRpb25Db29raWVz
Rm9yRG9tYWluSGFuZGxlcildIChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFs
dWUpIHsKKyAgICAgICAgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbkhhbmRsZXIocHJp
bWFyeURvbWFpbiwgdmFsdWUpOworICAgIH0pOworICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLT5zZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soW3RoaXMsIHNob3VsZFBh
cnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlciA9IFdURk1vdmUoc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbnNIYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5
RG9tYWlucywgYm9vbCB2YWx1ZSkgeworICAgICAgICBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
RG9tYWluc0hhbmRsZXIocHJpbWFyeURvbWFpbnMsIHZhbHVlKTsKKyAgICB9KTsKK30KIAogdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYWREYXRhRnJvbURpc2tJZk5lZWRl
ZCgpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgcmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxv
YWRPYnNlcnZlcigpOworICAgIHZvaWQgcmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZl
cihzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZh
bHVlKT4mJiBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluSGFuZGxlciwgc3RkOjpmdW5j
dGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVl
KT4mJiBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIpOwogICAgIAogICAg
IHZvaWQgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBvcmlnaW5zKTsKIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9u
IDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxMSBAQCB2b2lkIFdLQ29va2llTWFu
YWdlckdldEhUVFBDb29raWVBY2NlcHRQCiAgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXIpLT5nZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb248V0tIVFRQQ29v
a2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5Pihjb250ZXh0LCBjYWxsYmFj
aykpOwogfQogCit2b2lkIFdLQ29va2llTWFuYWdlclNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyLCBib29sIGVuYWJsZWQp
Cit7CisgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXIpLT5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9u
aW5nRW5hYmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBXS0Nvb2tpZU1hbmFnZXJTdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIpCiB7CiAg
ICAgdG9JbXBsKGNvb2tpZU1hbmFnZXIpLT5zdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV2Vi
Q29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuaAkocmV2aXNpb24gMjEz
NTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29va2ll
TWFuYWdlclNldEhUVFBDb28KIHR5cGVkZWYgdm9pZCAoKldLQ29va2llTWFuYWdlckdldEhUVFBD
b29raWVBY2NlcHRQb2xpY3lGdW5jdGlvbikoV0tIVFRQQ29va2llQWNjZXB0UG9saWN5LCBXS0Vy
cm9yUmVmLCB2b2lkKik7CiBXS19FWFBPUlQgdm9pZCBXS0Nvb2tpZU1hbmFnZXJHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyLCB2b2lkKiBj
b250ZXh0LCBXS0Nvb2tpZU1hbmFnZXJHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5RnVuY3Rpb24g
Y2FsbGJhY2spOwogCitXS19FWFBPUlQgdm9pZCBXS0Nvb2tpZU1hbmFnZXJTZXRDb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZChXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwg
Ym9vbCBlbmFibGVkKTsKKwogV0tfRVhQT1JUIHZvaWQgV0tDb29raWVNYW5hZ2VyU3RhcnRPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyKTsKIFdL
X0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlclN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdL
Q29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyKTsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw2ICs4MSwxMSBAQCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJGaXJlCiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoV0tTdHJpbmdSZWYg
aG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcih0b1dURlN0cmluZyhob3N0
TmFtZSksIHZhbHVlKTsKK30KKwogdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
U2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewog
ICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQCBleHRlcm4gIkMiIHsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKFdL
U3RyaW5nUmVmIGhvc3ROYW1lLCBXS1N0cmluZ1JlZiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAg
ICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogICAgIFdLX0VYUE9SVCB2b2lk
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
RmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBi
b29sIHZhbHVlKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVl
KTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1
ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTIsNiArMjkyLDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z3JhbnRTYW5k
Ym94RXgKICNlbmRpZgogfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05J
TkcpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbihjb25zdCBTdHJpbmcmIHRvcFByaXZhdGVseU93bmVkRG9t
YWluLCBib29sIHZhbHVlKQoreworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERv
bWFpbih0b3BQcml2YXRlbHlPd25lZERvbWFpbiwgdmFsdWUpLCAwKTsKK30KKwordm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMs
IGJvb2wgdmFsdWUpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlu
cyh0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHZhbHVlKSwgMCk7Cit9CisjZW5kaWYKKwogdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVy
KiBsYXVuY2hlciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlm
aWVyKQogewogICAgIENoaWxkUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcobGF1bmNo
ZXIsIGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIx
MzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSwxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9p
ZCBkaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCk7CiAg
ICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1
aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgdm9pZCBzaG91bGRQYXJ0aXRp
b25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiwgYm9vbCB2
YWx1ZSk7CisgICAgdm9pZCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5kaWYKICAg
ICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBXZWJDb3JlOjpTaG91bGRTYW1w
bGUpOwogICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoUmVzdWx0KHVpbnQ2NF90IHBh
Z2VJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCB1
aW50MzJfdCByZXN1bHQsIFdlYkNvcmU6OlNob3VsZFNhbXBsZSk7CiAgICAgdm9pZCBsb2dEaWFn
bm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgZG91YmxlIHZhbHVlLCB1bnNpZ25lZCBz
aWduaWZpY2FudEZpZ3VyZXMsIFdlYkNvcmU6OlNob3VsZFNhbXBsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDExIEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNz
UHJveHkgTGVnYWN5UmUKIAogICAgIEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJv
Y2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgVmVjdG9yPFN0cmluZz4gcGF0aHMpCiAK
KyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICBTaG91bGRQYXJ0
aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4oU3RyaW5nIHRvcFByaXZhdGVs
eU93bmVkRG9tYWluLCBib29sIHZhbHVlKQorICAgIFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbnMoVmVjdG9yPFN0cmluZz4gdG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zLCBib29sIHZhbHVlKQorI2VuZGlmCisKICAgICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQo
KQogICAgIFNldElzSG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMp
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0OCw2ICsxMDQ4LDIwIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVt
b3ZlRGF0YUZvclRvcFAKICAgICB9KTsKIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0Vf
UEFSVElUSU9OSU5HKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29r
aWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4oY29uc3QgU3RyaW5nJiB0b3BQcml2YXRlbHlP
d25lZERvbWFpbiwgYm9vbCB2YWx1ZSkKK3sKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJv
Y2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbih0b3BQcml2YXRlbHlPd25lZERvbWFpbiwgdmFsdWUpKTsK
K30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9w
UHJpdmF0ZWx5T3duZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlP
d25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1By
b2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW5zKHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgdmFsdWUp
KTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlBhZ2VXYXNBZGRlZChX
ZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKIHsKICAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikK
QEAgLTEyMTIsOCArMTIyNiwxOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyU2hh
cmVkUmVzCiB7CiAgICAgaWYgKCFtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpCiAgICAgICAgIHJl
dHVybjsKLQorICAgIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQor
ICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRP
YnNlcnZlcigKKyAgICAgICAgW3RoaXNdIChjb25zdCBTdHJpbmcmIHRvcFByaXZhdGVseU93bmVk
RG9tYWluLCBib29sIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLT5zaG91bGRQYXJ0aXRpb25D
b29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW4odG9wUHJpdmF0ZWx5T3duZWREb21haW4s
IHZhbHVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXNdIChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBib29sIHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLT5zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKHRv
cFByaXZhdGVseU93bmVkRG9tYWlucywgdmFsdWUpOworICAgICAgICB9KTsKKyNlbHNlCiAgICAg
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2Vy
dmVyKCk7CisjZW5kaWYKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCShyZXZpc2lvbiAyMTM1
NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBjb25zdCBWZWN0b3I8V2Vi
c2l0ZURhdGFSZWNvcmQ+Jiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxl
cik7CiAgICAgdm9pZCByZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPik+IGNvbXBsZXRpb25IYW5kbGVyKTsKIAorI2lmIEhB
VkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIHZvaWQgc2hvdWxkUGFydGl0
aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWluKGNvbnN0IFN0cmluZyYsIGJvb2wg
dmFsdWUpOworICAgIHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93
bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGJvb2wgdmFsdWUpOworI2VuZGlmCiAg
ICAgdm9pZCByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgIGNvbnN0IFN0cmlu
ZyYgcmVzb2x2ZWRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHZlZENvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeTsgfQogICAgIGNv
bnN0IFN0cmluZyYgcmVzb2x2ZWRNZWRpYUNhY2hlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHZlZENvbmZpZ3VyYXRpb24ubWVkaWFDYWNoZURpcmVjdG9yeTsgfQpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjEz
NTkyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTctMDMtMDggIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBDb21tdW5pY2F0ZSB0byB0aGUgbmV0d29yayBw
cm9jZXNzIHdoaWNoIGRvbWFpbnMgdG8gcGFydGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkzMjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMwNzY4OTIxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXNlIGNoYW5nZXMgYWRkIHN1cHBvcnQgZm9yIHR3byBuZXcgVGVzdFJ1bm5lciBmdW5j
dGlvbnM6CisgICAgICAgIC0gc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKQor
ICAgICAgICAtIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKQor
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0
UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRDb29raWVTdG9yYWdl
UGFydGl0aW9uaW5nRW5hYmxlZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3Rp
Y3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcik6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIw
MTctMDMtMDggIE1hdHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBz
dXBwb3J0IGZvciB1cGRhdGluZyBhdXRvcGxheSBwb2xpY2llcyBhZnRlciBhIHBhZ2UgaGFzIGJl
ZW4gbG9hZGVkLgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjY4LDYgKzIyNjgsMTEgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVEYXRhTQogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KICAgICAKK3ZvaWQg
VGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRs
ZXIoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihob3N0
TmFtZSwgdmFsdWUpOworfQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oV0tTdHJp
bmdSZWYgaG9zdE5hbWUsIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICB2
b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAg
ICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoV0tTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChkb3VibGUpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMsNiArNzkzLDEyIEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCIpKSB7CisgICAgICAg
IFdLQm9vbGVhblJlZiBhY2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgV0tDb29raWVNYW5hZ2VyU2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmlu
Z0VuYWJsZWQoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuY29udGV4dCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpIHsK
ICAgICAgICAgdW5zaWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW1h
Z2VDb3VudEluR2VuZXJhbFBhc3RlYm9hcmQoKTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tVSW50
NjRSZWY+IHJlc3VsdChBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwpAQCAtOTkxLDYg
Kzk5NywyMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9u
Q29va2llc0hhbmRsZXIiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhv
c3ROYW1lS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZSIpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5KEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKyAgICAgICAgCisgICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5n
ZXQoKSkpOworICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2
YWx1ZUtleS5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoaG9zdE5h
bWUsIFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikp
IHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMTM1NTUp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NjYsNiArNzY2LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
QWx3YXlzQWNjZXB0Q29va2llcygKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldENv
b2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkIikpOwor
CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jv
b2xlYW5DcmVhdGUoZW5hYmxlZCkpOworCisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwogZG91YmxlIFRlc3RSdW5uZXI6
OnByZWNpc2VUaW1lKCkKIHsKICAgICByZXR1cm4gY3VycmVudFRpbWUoKTsKQEAgLTEzMjgsNiAr
MTMzNywzMSBAQCB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmCiAgICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIpOwogfQogCit2b2lkIFRl
c3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPj4ga2V5czsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4g
dmFsdWVzOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSB9KTsKKyAgICAKKyAgICBr
ZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1
ZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpIH0pOworICAgIAorICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUo
KSk7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAg
IAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgeworICAgICAg
ICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKKyAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFs
dWVzW2ldLmdldCgpOworICAgIH0KKyAgICAKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIiKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RpY3Rpb25hcnlDcmVh
dGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7Cisg
ICAgCisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKK30KKwogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQiKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2
ICsyNzEsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAgICB2b2lkIHNl
dEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCk7CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFy
dGl0aW9uaW5nRW5hYmxlZChib29sKTsKIAogICAgIC8vIEN1c3RvbSBmdWxsIHNjcmVlbiBiZWhh
dmlvci4KICAgICB2b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihib29sIHZhbHVl
KSB7IG1fY3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KQEAgLTM1MSw2ICszNTIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNv
cmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlk
TW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjaygpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5h
bWUsIGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
SlNTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Myw2ICsxNjMsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAKICAgICAv
LyBDb29raWVzIHRlc3RpbmcKICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbGVh
biBhY2NlcHQpOworICAgIHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQo
Ym9vbGVhbiBlbmFibGVkKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmlu
ZyBwcmVmZXJlbmNlLCBET01TdHJpbmcgdmFsdWUpOwogCkBAIC0yNTgsNiArMjU5LDcgQEAgaW50
ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhET01TdHJpbmcgaG9zdE5hbWUsIERPTVN0cmluZyBob3N0TmFtZVJlZGly
ZWN0ZWRUbyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKCk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sZWFu
IHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRz
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTAzLTA4ICBKb2huIFdpbGFuZGVy
ICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGlj
czogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5zIHRvIHBh
cnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91
dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13
aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9y
ZXNvdXJjZXMvZ2V0LWNvb2tpZXMucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
YWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvc2V0LWNvb2tpZS5waHA6IEFk
ZGVkLgorCiAyMDE3LTAzLTA3ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBEZWJ1ZyBmbGFnIHRvIFRlc3RFeHBlY3RhdGlvbiBmb3Igd2VicnRjL2xp
YndlYnJ0Yy9kZXNjcmlwdGlvbkdldHRlcnMuaHRtbC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMt
d2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13
aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzUgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
CittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVj
ZWl2ZVRpdGxlOiBUZXN0IGZvciBQYXJ0aXRpb25lZCBDb29raWVzIFdpdGggYW5kIFdpdGhvdXQg
VXNlciBJbnRlcmFjdGlvbgorbWFpbiBmcmFtZSAtIGRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFn
ZUZvckZyYW1lCittYWluIGZyYW1lIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiBo
dHRwOi8vbG9jYWxob3N0OjgwMDAvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291
cmNlcy9zZXQtY29va2llLnBocD9uYW1lPWZpcnN0UGFydHlDb29raWUmdmFsdWU9dmFsdWUjaHR0
cDovLzEyNy4wLjAuMTo4MDAwL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRp
b25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sI3N0ZXAy
IAorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1l
IC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJh
bWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2
ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCittYWluIGZy
YW1lIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiBodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0
aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwjc3RlcDIgCittYWluIGZyYW1lIC0g
ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENhbmNlbENs
aWVudFJlZGlyZWN0Rm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFBhcnRpdGlvbmVkIENvb2tp
ZXMgV2l0aCBhbmQgV2l0aG91dCBVc2VyIEludGVyYWN0aW9uCittYWluIGZyYW1lIC0gZGlkQ2hh
bmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEt
LWZyYW1lMC0tPi0tPiIgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRo
IC8vPCEtLWZyYW1lMC0tPi0tPiIgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0t
ZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPiIgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJh
bWVQYXRoIC8vPCEtLWZyYW1lMS0tPi0tPiIgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTAtLT4tLT4iIC0gZGlkSGFuZGxl
T25sb2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0t
Pi0tPiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEt
LWZyYW1lMS0tPi0tPiIgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQ
YXRoIC8vPCEtLWZyYW1lMS0tPi0tPiIgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQor
bWFpbiBmcmFtZSAtIGRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1lCitmcmFtZSAi
PCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTItLT4tLT4iIC0gZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+IiAtIGRp
ZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1m
cmFtZTEtLT4tLT4iIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0
aCAvLzwhLS1mcmFtZTItLT4tLT4iIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCitmcmFtZSAiPCEt
LWZyYW1lUGF0aCAvLzwhLS1mcmFtZTItLT4tLT4iIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9y
RnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPiIgLSBkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFt
ZTItLT4tLT4iIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJh
bWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK2ZyYW1l
ICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPiIgLSBkaWRDb21taXRMb2FkRm9yRnJh
bWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPiIgLSBkaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+
LS0+IiAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0
aCAvLzwhLS1mcmFtZTMtLT4tLT4iIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCittYWluIGZyYW1l
IC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCisgIAorCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJh
bWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPicKKy0tLS0tLS0tCitTaG91bGQgcmVjZWl2ZSBubyBj
b29raWVzLgorRGlkIG5vdCByZWNlaXZlIGNvb2tpZSBuYW1lZCAnZmlyc3RQYXJ0eUNvb2tpZScu
CitEaWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICd0aGlyZFBhcnR5Q29va2llJy4KKworCist
LS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMS0tPi0tPicKKy0tLS0t
LS0tCitTZXR0aW5nIHBhcnRpdGlvbmVkLCB0aGlyZCBwYXJ0eSBjb29raWUuCisKKworLS0tLS0t
LS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTItLT4tLT4nCistLS0tLS0tLQor
U2hvdWxkIG9ubHkgcmVjZWl2ZSBwYXJ0aXRpb25lZCwgdGhpcmQgcGFydHkgY29va2llLgorRGlk
IG5vdCByZWNlaXZlIGNvb2tpZSBuYW1lZCAnZmlyc3RQYXJ0eUNvb2tpZScuCitSZWNlaXZlZCBj
b29raWUgbmFtZWQgJ3RoaXJkUGFydHlDb29raWUnLgorCisKKy0tLS0tLS0tCitGcmFtZTogJzwh
LS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+JworLS0tLS0tLS0KK0FmdGVyIHVzZXIgaW50
ZXJhY3Rpb24sIHNob3VsZCBvbmx5IHJlY2VpdmUgbm9uLXBhcnRpdGlvbmVkLCBmaXJzdCBwYXJ0
eSBjb29raWUuCitSZWNlaXZlZCBjb29raWUgbmFtZWQgJ2ZpcnN0UGFydHlDb29raWUnLgorRGlk
IG5vdCByZWNlaXZlIGNvb2tpZSBuYW1lZCAndGhpcmRQYXJ0eUNvb2tpZScuCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRp
dGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJh
Y3Rpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0IGZvciBQYXJ0aXRpb25lZCBDb29raWVz
IFdpdGggYW5kIFdpdGhvdXQgVXNlciBJbnRlcmFjdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQ+CisgICAgY29uc3QgcGFydGl0aW9uSG9zdCA9ICIxMjcuMC4wLjE6ODAw
MCI7CisgICAgY29uc3QgdGhpcmRQYXJ0eU9yaWdpbiA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAi
OworICAgIGNvbnN0IHRoaXJkUGFydHlCYXNlVXJsID0gdGhpcmRQYXJ0eU9yaWdpbiArICIvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcyI7CisgICAgY29uc3QgZmlyc3RQ
YXJ0eUNvb2tpZU5hbWUgPSAiZmlyc3RQYXJ0eUNvb2tpZSI7CisgICAgY29uc3Qgc3ViUGF0aFRv
U2V0Rmlyc3RQYXJ0eUNvb2tpZSA9ICIvc2V0LWNvb2tpZS5waHA/bmFtZT0iICsgZmlyc3RQYXJ0
eUNvb2tpZU5hbWUgKyAiJnZhbHVlPXZhbHVlIjsKKyAgICBjb25zdCB0aGlyZFBhcnR5Q29va2ll
TmFtZSA9ICJ0aGlyZFBhcnR5Q29va2llIjsKKyAgICBjb25zdCBzdWJQYXRoVG9TZXRUaGlyZFBh
cnR5Q29va2llID0gIi9zZXQtY29va2llLnBocD9uYW1lPSIgKyB0aGlyZFBhcnR5Q29va2llTmFt
ZSArICImdmFsdWU9dmFsdWUiOworICAgIGNvbnN0IGZyYWdtZW50V2l0aFJldHVyblVybCA9ICJo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRp
dGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwiOwor
ICAgIGNvbnN0IHN1YlBhdGhUb0dldENvb2tpZXMgPSAiL2dldC1jb29raWVzLnBocD9uYW1lMT0i
ICsgZmlyc3RQYXJ0eUNvb2tpZU5hbWUgKyAiJm5hbWUyPSIgKyB0aGlyZFBhcnR5Q29va2llTmFt
ZTsKKworICAgIGZ1bmN0aW9uIHNldEVuYWJsZUZlYXR1cmUoZW5hYmxlKSB7CisgICAgICAgIGlm
ICghZW5hYmxlKSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgaW50ZXJuYWxzLnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0Q29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzZXRFbmFibGVGZWF0dXJlKGZhbHNlKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb3Bl
bklmcmFtZSh1cmwsIG9uTG9hZEhhbmRsZXIpIHsKKyAgICAgICAgY29uc3QgZWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgICAgICBlbGVtZW50LnNyYyA9IHVy
bDsKKyAgICAgICAgaWYgKG9uTG9hZEhhbmRsZXIpIHsKKyAgICAgICAgICAgIGVsZW1lbnQub25s
b2FkID0gb25Mb2FkSGFuZGxlcjsKKyAgICAgICAgfQorICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNldFVzZXJJbnRlcmFj
dGlvbkFuZENvbnRpbnVlKCkgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24odGhpcmRQYXJ0eU9yaWdpbiwgdHJ1ZSk7CisgICAgICAgIGlmICgh
dGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odGhpcmRQYXJ0eU9y
aWdpbikpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJUaGlyZCBwYXJ0eSBkaWQgbm90IGdldCBs
b2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIik7CisgICAgICAgIHJ1blRlc3QoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBzd2l0Y2ggKGRvY3VtZW50Lmxv
Y2F0aW9uLmhhc2gpIHsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMSI6CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRv
U2V0Rmlyc3RQYXJ0eUNvb2tpZSArICIjIiArIGZyYWdtZW50V2l0aFJldHVyblVybCArICIjc3Rl
cDIiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiI3N0ZXAyIjoK
KyAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5oYXNoID0gInN0ZXAzIjsKKyAgICAg
ICAgICAgICAgICBvcGVuSWZyYW1lKHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRvR2V0Q29v
a2llcyArICImbWVzc2FnZT1TaG91bGQgcmVjZWl2ZSBubyBjb29raWVzLiIsIHJ1blRlc3QpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiI3N0ZXAzIjoKKyAgICAg
ICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5oYXNoID0gInN0ZXA0IjsKKyAgICAgICAgICAg
ICAgICBvcGVuSWZyYW1lKHRoaXJkUGFydHlCYXNlVXJsICsgc3ViUGF0aFRvU2V0VGhpcmRQYXJ0
eUNvb2tpZSArICImbWVzc2FnZT1TZXR0aW5nIHBhcnRpdGlvbmVkLCB0aGlyZCBwYXJ0eSBjb29r
aWUuIiwgcnVuVGVzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICIjc3RlcDQiOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3Rl
cDUiOworICAgICAgICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQ
YXRoVG9HZXRDb29raWVzICsgIiZtZXNzYWdlPVNob3VsZCBvbmx5IHJlY2VpdmUgcGFydGl0aW9u
ZWQsIHRoaXJkIHBhcnR5IGNvb2tpZS4iLCBzZXRVc2VySW50ZXJhY3Rpb25BbmRDb250aW51ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICIjc3RlcDUiOgorICAg
ICAgICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9HZXRD
b29raWVzICsgIiZtZXNzYWdlPUFmdGVyIHVzZXIgaW50ZXJhY3Rpb24sIHNob3VsZCBvbmx5IHJl
Y2VpdmUgbm9uLXBhcnRpdGlvbmVkLCBmaXJzdCBwYXJ0eSBjb29raWUuIiwgZmluaXNoVGVzdCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZG9j
dW1lbnQubG9jYXRpb24uaG9zdCA9PT0gcGFydGl0aW9uSG9zdCAmJiBkb2N1bWVudC5sb2NhdGlv
bi5oYXNoID09ICIiICYmIHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsK
KyAgICAgICAgc2V0RW5hYmxlRmVhdHVyZSh0cnVlKTsKKworICAgICAgICB0ZXN0UnVubmVyLnN0
YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoImxvY2FsaG9zdCIsIHRy
dWUpOworCisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0
UnVubmVyLmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOworICAgICAgICBkb2N1bWVudC5sb2NhdGlv
bi5oYXNoID0gInN0ZXAxIjsKKyAgICB9CisKKyAgICBydW5UZXN0KCk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMv
Z2V0LWNvb2tpZXMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9nZXQtY29va2llcy5waHAJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvcmVzb3VyY2VzL2dldC1jb29raWVzLnBocAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzIEBACis8P3BocAorZWNobyAkX0dFVFsibWVzc2FnZSJdIC4gIjxicj4iOworaWYo
IWlzc2V0KCRfQ09PS0lFWyRfR0VUWyJuYW1lMSJdXSkpIHsKKyAgICBlY2hvICJEaWQgbm90IHJl
Y2VpdmUgY29va2llIG5hbWVkICciIC4gJF9HRVRbIm5hbWUxIl0gLiAiJy48YnI+IjsKK30gZWxz
ZSB7CisgICAgZWNobyAiUmVjZWl2ZWQgY29va2llIG5hbWVkICciIC4gJF9HRVRbIm5hbWUxIl0g
LiAiJy48YnI+IjsKK30KK2lmKCFpc3NldCgkX0NPT0tJRVskX0dFVFsibmFtZTIiXV0pKSB7Cisg
ICAgZWNobyAiRGlkIG5vdCByZWNlaXZlIGNvb2tpZSBuYW1lZCAnIiAuICRfR0VUWyJuYW1lMiJd
IC4gIicuPGJyPiI7Cit9IGVsc2UgeworICAgIGVjaG8gIlJlY2VpdmVkIGNvb2tpZSBuYW1lZCAn
IiAuICRfR0VUWyJuYW1lMiJdIC4gIicuPGJyPiI7Cit9Cis/PgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3NldC1j
b29raWUucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9zZXQtY29va2llLnBocAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9yZXNvdXJjZXMvc2V0LWNvb2tpZS5waHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
IEBACis8P3BocAorc2V0Y29va2llKCRfR0VUWyJuYW1lIl0sICRfR0VUWyJ2YWx1ZSJdLCAwLCAi
LyIpOworZWNobyAkX0dFVFsibWVzc2FnZSJdIC4gIjxicj4iOworPz4KKzxzY3JpcHQ+CitpZiAo
ZG9jdW1lbnQubG9jYXRpb24uaGFzaCkgeworICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmxvY2F0
aW9uLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSIsIDEwKTsKK30K
Kzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303868</attachid>
            <date>2017-03-08 17:02:04 -0800</date>
            <delta_ts>2017-03-08 18:15:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169322-20170308170206.patch</filename>
            <type>text/plain</type>
            <size>54554</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgt
YW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkKKyAgICAgICAgICAgIHRvIHRlbGwgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGUgZG9tYWluIGhhcyBnb3QgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBzZXQgYSBkb21h
aW4gZm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxkIGJlIGFwcGxpZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbik6
CisgICAgICAgICAgICBOZXcgb3ZlcmxvYWRlZCBjb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGVjb2Rlcik6CisgICAgICAgICAgICBO
b3cgYm9vdHN0cmFwcyB0aGUgbmV0d29yayBwcm9jZXNzJyBzZXQgb2Yga25vd24gZG9tYWlucyB0
bworICAgICAgICAgICAgcGFydGl0aW9uIGNvb2tpZXMgZm9yLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAgICAgTm93IHRlbGxzIHRoZSBuZXR3b3JrIHByb2Nlc3MgdG8gc3RhcnQgcGFydGl0
aW9uaW5nIGFnYWluCisgICAgICAgICAgICB3aGVuIHVzZXIgaW50ZXJhY3Rpb24gYWdlcyBvdXQu
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0
U2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKToKKwogMjAxNy0wMy0wOCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3Agc2VsZWN0LnJlbW92ZSgpIC8g
b3B0aW9ucy5yZW1vdmUoKSBvdmVybG9hZHMgdGFraW5nIGFuIG9wdGlvbiBlbGVtZW50IGluIHBh
cmFtZXRlcgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsMTMgKzMwNCwxNyBA
QCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgaWYgKHVybC5p
c0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICBhdXRvIHByaW1hcnlEb21haW5TdHIg
PSBwcmltYXJ5RG9tYWluKHVybCk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluU3Ry
KTsKICAgICBkb3VibGUgbmV3VGltZXN0YW1wID0gcmVkdWNlVGltZVJlc29sdXRpb25Ub09uZURh
eShXVEY6OmN1cnJlbnRUaW1lKCkpOwogICAgIGlmIChuZXdUaW1lc3RhbXAgPT0gc3RhdGlzdGlj
cy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBzdGF0
aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CiAgICAgc3RhdGlzdGljcy5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uID0gbmV3VGltZXN0YW1wOworCisgICAgbV9zdG9yZS0+ZmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHByaW1hcnlEb21haW5TdHIsIGZhbHNlKTsKICAg
ICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtMzE5LDkg
KzMyMywxMyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAg
aWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICBhdXRvIHByaW1hcnlE
b21haW5TdHIgPSBwcmltYXJ5RG9tYWluKHVybCk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0g
bV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
RG9tYWluU3RyKTsKICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CiAg
ICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gV1RGOjpjdXJyZW50VGlt
ZSgpOworCisgICAgbV9zdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHBy
aW1hcnlEb21haW5TdHIsIGZhbHNlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwpCkBAIC00MTIsMTAgKzQyMCwxOSBA
QCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlRGF0YU1vZGlmCiAgICAgbV9zdG9yZS0+
ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBTdHJpbmcmIGhv
c3ROYW1lLCBib29sIHZhbHVlKQoreworICAgIG1fc3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcihwcmltYXJ5RG9tYWluKGhvc3ROYW1lKSwgdmFsdWUpOworfQorCiBTdHJp
bmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29uc3QgVVJMJiB1cmwpCiB7
CisgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKSk7Cit9CisKK1N0cmluZyBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIGhvc3QpCit7CiAg
ICAgU3RyaW5nIHByaW1hcnlEb21haW47Ci0gICAgU3RyaW5nIGhvc3QgPSB1cmwuaG9zdCgpOwog
ICAgIGlmIChob3N0LmlzTnVsbCgpIHx8IGhvc3QuaXNFbXB0eSgpKQogICAgICAgICBwcmltYXJ5
RG9tYWluID0gIm51bGxPcmlnaW4iOwogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2
aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0UmVkdWNlZFRpbWVzdGFtcFJlc29sdXRpb24oZG91YmxlIHNlY29u
ZHMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gc3RhdGlz
dGljc1N0b3JlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGF0aXN0aWNzU3RvcmUo
UmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4mJik7CkBAIC03NSw2ICs3Niw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRMb2coUGFnZSopOwogICAgIHN0YXRpYyBT
dHJpbmcgcHJpbWFyeURvbWFpbihjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgU3RyaW5nIHByaW1h
cnlEb21haW4oY29uc3QgU3RyaW5nJiBob3N0KTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU+IG1fc3RvcmU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHNpemVfdD4gbV9v
cmlnaW5zVmlzaXRlZE1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCwxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVhZERhCiAgICAgaWYgKCFzdWNjZWVkZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljcyA6IGxvYWRlZFN0YXRpc3RpY3MpCisgICAgVmVjdG9y
PFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbjsK
KyAgICBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobG9hZGVkU3RhdGlzdGljcy5zaXplKCkpOworICAgIGZvciAoYXV0
byYgc3RhdGlzdGljcyA6IGxvYWRlZFN0YXRpc3RpY3MpIHsKICAgICAgICAgbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuc2V0KHN0YXRpc3RpY3MuaGlnaExldmVsRG9tYWluLCBzdGF0aXN0aWNzKTsK
KyAgICAgICAgaWYgKHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhc3RhdGlzdGlj
cy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnNXaXRob3V0VXNlckludGVyYWN0aW9uLnVuY2hlY2tlZEFwcGVuZChzdGF0aXN0aWNzLmhpZ2hM
ZXZlbERvbWFpbik7CisgICAgfQorICAgIAorICAgIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcihwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uLCB0
cnVlKTsKIH0KIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGlj
c0Zvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikKQEAgLTE0MSwxMiArMTQ4LDMxIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3QKICAgICBtX2RhdGFBZGRlZEhh
bmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKHN0ZDo6ZnVuY3Rpb248
dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUpPiYm
IGhhbmRsZXIpCit7CisgICAgbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRs
ZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCiB7CiAgICAgaWYgKG1fZGF0
YUFkZGVkSGFuZGxlcikKICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7CiB9CiAKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hh
bmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKQoreworICAgIFZl
Y3RvcjxTdHJpbmc+IGRvbWFpblZlY3RvcjsKKyAgICBkb21haW5WZWN0b3IucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSgxKTsKKyAgICBkb21haW5WZWN0b3IudW5jaGVja2VkQXBwZW5kKHByaW1hcnlE
b21haW4pOworICAgIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihkb21haW5WZWN0
b3IsIHZhbHVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFy
eURvbWFpbnMsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fc2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvckRvbWFpbnNIYW5kbGVyKQorICAgICAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JE
b21haW5zSGFuZGxlcihwcmltYXJ5RG9tYWlucywgdmFsdWUpOworfQorCiB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUg
c2Vjb25kcykKIHsKICAgICBpZiAoc2Vjb25kcyA+PSAwKQpAQCAtMTcwLDYgKzE5NiwxMCBAQCBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkCiAgICAgICAgIC8vIGl0IGhh
cyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCiAgICAgICAgIHJlc291
cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSAwOwogICAgICAgICByZXNv
dXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAo
cmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgICAgIGZpcmVT
aG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxE
b21haW4sIHRydWUpOworCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEzIEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1lcmdlU3RhdGlzdGljcyhjb25zdCBWZWN0
b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gdGFrZVN0YXRpc3RpY3MoKTsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGhhbmRsZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJh
Y2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHByaW1hcnlEb21haW5zLCBib29sIHZhbHVlKT4mJik7CiAKICAgICB2b2lk
IGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9t
YWluLCBib29sIHZhbHVlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbiwg
Ym9vbCB2YWx1ZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNz
KHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOwogCkBAIC03
MSw2ICs3NCw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPFN0cmluZywgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7CiAgICAgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IG1fZGF0YUFkZGVkSGFuZGxlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21haW5zLCBib29sIHZhbHVlKT4gbV9zaG91bGRQYXJ0
aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXI7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5o
IgogI2luY2x1ZGUgIlNlc3Npb25JRC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNF
KENGVVJMQ09OTkVDVElPTikKQEAgLTY3LDYgKzY4LDEwIEBAIHB1YmxpYzoKICAgICBDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmIHBsYXRmb3JtU2Vzc2lvbigpIHsgcmV0dXJuIG1fcGxhdGZvcm1TZXNz
aW9uLmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sKTsKKyNpZiBI
QVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmluZyYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3RzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgYm9vbCB2YWx1ZSk7CisjZW5kaWYKICNlbGlmIFVTRShTT1VQKQog
ICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTb3Vw
TmV0d29ya1Nlc3Npb24+JiYpOwogICAgIH5OZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKQEAgLTEw
Niw2ICsxMTEsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgQ3JlZGVudGlhbFN0b3JhZ2Ug
bV9jcmVkZW50aWFsU3RvcmFnZTsKKworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElU
SU9OSU5HKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3RvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zRm9yQ29va2llUGFydGl0aW9uaW5nOworI2VuZGlmCiB9OwogCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgY29va2llU3RvcmFnZVBhcnRpdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDQgKzE0MCwzMyBAQCBTdHJpbmcgY29v
a2llU3RvcmFnZVBhcnRpdGlvbihjb25zdCBVUkwmCiAKICNlbmRpZgogCisjaWYgSEFWRShDRk5F
VFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChjb25zdCBTdHJpbmcmIGhvc3QpCit7Cisg
ICAgaWYgKGhvc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oaG9zdCk7CisgICAgaWYgKGRv
bWFpbi5pc0VtcHR5KCkpCisgICAgICAgIGRvbWFpbiA9IGhvc3Q7CisKKyAgICBpZiAobV90b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluc0ZvckNvb2tpZVBhcnRpdGlvbmluZy5jb250YWlucyhk
b21haW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVz
Rm9ySG9zdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RzLCBib29sIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSkKKyAgICAgICAgbV90b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0ZvckNv
b2tpZVBhcnRpdGlvbmluZy5hZGQoaG9zdHMuYmVnaW4oKSwgaG9zdHMuZW5kKCkpOworICAgIGVs
c2UgeworICAgICAgICBmb3IgKGF1dG8mIGhvc3QgOiBob3N0cykKKyAgICAgICAgICAgIG1fdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNGb3JDb29raWVQYXJ0aXRpb25pbmcucmVtb3ZlKGhv
c3QpOworICAgIH0KK30KKworI2VuZGlmIC8vIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElU
SU9OSU5HKQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTM1NjMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NSBAQAorMjAxNy0w
My0wOCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNv
dXJjZSBMb2FkIFN0YXRpc3RpY3M6IENvbW11bmljYXRlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3Mg
d2hpY2ggZG9tYWlucyB0byBwYXJ0aXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2OTMyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA3Njg5
MjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21h
aW5zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29jb2EpOgorICAg
ICAgICAgICAgTm93IGNvbnN1bHRzIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hv
dWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoKQorICAgICAgICAgICAgdG8gZGVjaWRlIHdoZXRo
ZXIgcGFydGl0aW9uaW5nIHNob3VsZCBiZSBhcHBsaWVkIG9yIG5vdC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLQ29va2llTWFuYWdl
clNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKToKKyAgICAgICAgICAgIFRvIGFs
bG93IFRlc3RSdW5uZXIgdG8gY29uZmlndXJlIGNvb2tpZSBwYXJ0aXRpb25pbmcuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hh
bmRsZXIpOgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBzZXQgYSBkb21haW4g
Zm9yIHdoaWNoCisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgc2hvdWxkIGJlIGFwcGxpZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2hvdWxkUGFydGl0aW9uQ29v
a2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgICogVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQpOgorICAgICAgICAg
ICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBjb25maWd1cmUgY29va2llIHBhcnRpdGlvbmluZy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcik6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVubmVyIHRv
IHNldCBhIGRvbWFpbiBmb3Igd2hpY2gKKyAgICAgICAgICAgIHBhcnRpdGlvbmluZyBzaG91bGQg
YmUgYXBwbGllZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGFzc2lmeVJlc291cmNlKToKKyAgICAgICAgICAgIE5vdyB0ZWxscyB0aGUgbmV0d29y
ayBwcm9jZXNzIGFzIHNvb24gYXMgYSBkb21haW4KKyAgICAgICAgICAgIGhhcyBiZWVuIGNsYXNz
aWZpZWQgYXMgcHJldmFsZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAg
ICAgICAgT3ZlcmxvYWRlZCBmdW5jdGlvbiB0byBhbGxvdyBpbmplY3Rpb24gb2YgaGFuZGxlcnMg
Zm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUKKyAgICAgICAgICAgIG5ldHdvcmsgcHJvY2Vzcy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcik6CisgICAgICAgICAgICBO
b3cgc2V0cyB0d28gY2FsbGJhY2sgaGFuZGxlcnMgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUg
bmV0d29yayBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmg6CisKIDIwMTctMDMtMDcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRF
bmFibGVkIGJ5IGRlZmF1bHQgb24gc29tZSB2ZXJzaW9ucyBvZiBtYWNPUwpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNp
b24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEwLDEzIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGUKICAgICAgICAgaGFuZGxlcigpOwogfQogCisjaWYg
SEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCit2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBib29sIHZhbHVlKQoreworICAgIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuc2V0U2hvdWxkUGFydGl0aW9uQ29v
a2llc0Zvckhvc3RzKGRvbWFpbnMsIHZhbHVlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBm
ZXRjaERpc2tDYWNoZUVudHJpZXMoU2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgRnVuY3Rpb248dm9pZCAoVmVjdG9yPFdl
YnNpdGVEYXRhOjpFbnRyeT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJh
c2VQcm9jZXNzRm9yQmxvYnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgRnVuY3Rp
b248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKKyNpZiBIQVZFKENGTkVUV09SS19T
VE9SQUdFX1BBUlRJVElPTklORykKKyAgICB2b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBib29sIHZhbHVl
KTsKKyNlbmRpZgorCiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBsb2FkVGhyb3R0bGVM
YXRlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9sb2FkVGhyb3R0bGVMYXRlbmN5OyB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDQgKzc3LDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5
UmVjZWl2ZQogICAgIFByb2Nlc3NEaWRSZXN1bWUoKQogCiAgICAgRGlkR3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElEKQorCisj
aWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgU2hvdWxkUGFydGl0
aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhWZWN0b3I8U3RyaW5nPiB0b3BQ
cml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCisjZW5kaWYKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtE
YXRhVGFza0NvY29hLm1tCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTIzLDkgKzEyMywxMiBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNr
Q29jCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGluZyBOZXR3b3JrRGF0YVRh
c2sgd2l0aCBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0LlVSTC5h
YnNvbHV0ZVN0cmluZy5VVEY4U3RyaW5nKTsKIAogI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0Vf
UEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBzdG9yYWdlUGFydGl0aW9uID0gV2ViQ29yZTo6Y29v
a2llU3RvcmFnZVBhcnRpdGlvbihyZXF1ZXN0KTsKLSAgICBpZiAoIXN0b3JhZ2VQYXJ0aXRpb24u
aXNFbXB0eSgpKQotICAgICAgICBtX3Rhc2suZ2V0KCkuX3N0b3JhZ2VQYXJ0aXRpb25JZGVudGlm
aWVyID0gc3RvcmFnZVBhcnRpdGlvbjsKKyAgICBpZiAoc2Vzc2lvbi5uZXR3b3JrU3RvcmFnZVNl
c3Npb24oKS5zaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdCh1cmwuaG9zdCgpKSkgeworICAg
ICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IFBhcnRpdGlvbmluZyBjb29raWVzIGZvciBV
UkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0
cmluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHN0b3JhZ2VQYXJ0aXRpb24gPSBXZWJD
b3JlOjpjb29raWVTdG9yYWdlUGFydGl0aW9uKHJlcXVlc3QpOworICAgICAgICBpZiAoIXN0b3Jh
Z2VQYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgbV90YXNrLmdldCgpLl9zdG9yYWdl
UGFydGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247CisgICAgfQogI2VuZGlmCiAK
ICAgICBpZiAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFi
bGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
V2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgpAQCAtMTk2LDQgKzE5
NywxMyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGlkR2V0SFRUUENvCiAgICAgY2Fs
bGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShwb2xpY3kpOwogfQogCit2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHByb2Nlc3NQb29s
KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoZW5hYmxlZCkpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kpOwogICAgIHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0
aW9uPHZvaWQgKEhUVFBDb29raWVBY2NlcHRQb2xpY3ksIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7
CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sKTsKIAog
ICAgIHZvaWQgc3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdlYkNvcmU6OlNlc3Npb25JRCk7
CiAgICAgdm9pZCBzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJDb3JlOjpTZXNzaW9uSUQp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4NiwxMSBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpmCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkuZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcihjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihob3N0TmFtZSwgdmFsdWUpOworfQorCiB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCiB7CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAgICAgc3RhdGlj
IHZvaWQgc2V0UmVkdWNlZFRpbWVzdGFtcFJlc29sdXRpb24oZG91YmxlIHNlY29uZHMpOwogICAg
IHN0YXRpYyB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIHN0YXRpYyB2
b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBTdHJpbmcmIGhvc3RO
YW1lLCBib29sIHZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOwogICAgIHN0
YXRpYyB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91Ymxl
IHNlY29uZHMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMzU1NSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw4ICs4NSwxMSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0CiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Y2xhc3NpZnlSZXNvdXJjZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0
YXRpc3RpYykKIHsKICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3Vy
Y2UKLSAgICAgICAgJiYgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oYXNQcmV2
YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhyZXNvdXJjZVN0YXRpc3RpYykpCisgICAgICAg
ICYmIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaGFzUHJldmFsZW50UmVzb3Vy
Y2VDaGFyYWN0ZXJpc3RpY3MocmVzb3VyY2VTdGF0aXN0aWMpKSB7CiAgICAgICAgIHJlc291cmNl
U3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOworICAgICAgICBpZiAoIXJlc291
cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLT5maXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIocmVz
b3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCB0cnVlKTsKKyAgICB9CiB9CiAKIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcygpCkBAIC0x
NzAsNyArMTczLDYgQEAgYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcwog
ICAgIHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogfQogCi0KIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9h
ZE9ic2VydmVyKCkKIHsKICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29weVJl
ZigpKTsKQEAgLTE4MCw2ICsxODIsMTQgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnJlZwogICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CiAg
ICAgfSk7CiB9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVn
aXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcihzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpPiYmIHNob3VsZFBhcnRp
dGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcikKK3sKKyAgICByZWdpc3RlclNoYXJlZFJlc291
cmNlTG9hZE9ic2VydmVyKCk7CisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnNl
dFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhbdGhpcywgc2hvdWxkUGFydGl0aW9uQ29v
a2llc0ZvckRvbWFpbnNIYW5kbGVyID0gV1RGTW92ZShzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
RG9tYWluc0hhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByaW1hcnlEb21haW5zLCBi
b29sIHZhbHVlKSB7CisgICAgICAgIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFu
ZGxlcihwcmltYXJ5RG9tYWlucywgdmFsdWUpOworICAgIH0pOworfQogCiB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGlza0lmTmVlZGVkKCkKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChib29sKTsKICAgICBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCkgY29uc3Q7CiAgICAgdm9pZCByZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVy
KCk7CisgICAgdm9pZCByZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKHN0ZDo6ZnVu
Y3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1
ZSk+JiYgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyKTsKICAgICAKICAg
ICB2b2lkIHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgb3JpZ2lucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lv
biAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTEgQEAgdm9pZCBXS0Nvb2tpZU1h
bmFnZXJHZXRIVFRQQ29va2llQWNjZXB0UAogICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+Z2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uPFdLSFRUUENv
b2tpZUFjY2VwdFBvbGljeSwgSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oY29udGV4dCwgY2FsbGJh
Y2spKTsKIH0KIAordm9pZCBXS0Nvb2tpZU1hbmFnZXJTZXRDb29raWVTdG9yYWdlUGFydGl0aW9u
aW5nRW5hYmxlZChXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgYm9vbCBlbmFibGVk
KQoreworICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+c2V0Q29va2llU3RvcmFnZVBhcnRpdGlv
bmluZ0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgV0tDb29raWVNYW5hZ2VyU3RhcnRPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyKQogewog
ICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdl
YkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmgJKHJldmlzaW9uIDIx
MzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0Nvb2tp
ZU1hbmFnZXJTZXRIVFRQQ29vCiB0eXBlZGVmIHZvaWQgKCpXS0Nvb2tpZU1hbmFnZXJHZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5RnVuY3Rpb24pKFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgV0tF
cnJvclJlZiwgdm9pZCopOwogV0tfRVhQT1JUIHZvaWQgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgdm9pZCog
Y29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUZ1bmN0aW9u
IGNhbGxiYWNrKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tDb29raWVNYW5hZ2VyU2V0Q29va2llU3Rv
cmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXIs
IGJvb2wgZW5hYmxlZCk7CisKIFdLX0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlclN0YXJ0T2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcik7CiBX
S19FWFBPUlQgdm9pZCBXS0Nvb2tpZU1hbmFnZXJTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhX
S0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNiArODEsMTEgQEAgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyRmlyZQogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KIAordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKFdLU3RyaW5nUmVm
IGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyOjpmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIodG9XVEZTdHJpbmcoaG9z
dE5hbWUpLCB2YWx1ZSk7Cit9CisKIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
clNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsK
ICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhX
S1N0cmluZ1JlZiBob3N0TmFtZSwgV0tTdHJpbmdSZWYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwog
ICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKICAgICBXS19FWFBPUlQgdm9p
ZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKCk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihXS1N0cmluZ1JlZiBob3N0TmFtZSwg
Ym9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1
ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFs
dWUpOwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJT
ZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkyLDYgKzI5MiwxMyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdyYW50U2Fu
ZGJveEV4CiAjZW5kaWYKIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9O
SU5HKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRl
bHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCit7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZh
dGVseU93bmVkRG9tYWlucyh0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHZhbHVlKSwgMCk7Cit9
CisjZW5kaWYKKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmco
UHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNv
bm5lY3Rpb25JZGVudGlmaWVyKQogewogICAgIENoaWxkUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hM
YXVuY2hpbmcobGF1bmNoZXIsIGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw5IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFj
a0lEKTsKICAgICB2b2lkIGRpZERlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyh1aW50NjRfdCBj
YWxsYmFja0lEKTsKICAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJv
Y2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
dGhzKTsKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICB2b2lk
IHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBib29sIHZhbHVlKTsKKyNlbmRpZgogICAgIHZvaWQgbG9nRGlhZ25v
c3RpY01lc3NhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24sIFdlYkNvcmU6OlNob3VsZFNhbXBsZSk7CiAgICAgdm9pZCBs
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIHVpbnQzMl90IHJlc3VsdCwg
V2ViQ29yZTo6U2hvdWxkU2FtcGxlKTsKICAgICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0
aFZhbHVlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlc2NyaXB0aW9uLCBkb3VibGUgdmFsdWUsIHVuc2lnbmVkIHNpZ25pZmljYW50RmlndXJl
cywgV2ViQ29yZTo6U2hvdWxkU2FtcGxlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsMTAgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3NQcm94eSBMZWdhY3lSZQog
CiAgICAgR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWlu
dDY0X3QgcmVxdWVzdElELCBWZWN0b3I8U3RyaW5nPiBwYXRocykKIAorI2lmIEhBVkUoQ0ZORVRX
T1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbnMoVmVjdG9yPFN0cmluZz4gdG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zLCBib29sIHZhbHVlKQorI2VuZGlmCisKICAgICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQo
KQogICAgIFNldElzSG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMp
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0OCw2ICsxMDQ4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVt
b3ZlRGF0YUZvclRvcFAKICAgICB9KTsKIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0Vf
UEFSVElUSU9OSU5HKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzaG91bGRQYXJ0aXRpb25Db29r
aWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQ
cml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCit7CisgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTaG91bGRQYXJ0aXRpb25D
b29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKHRvcFByaXZhdGVseU93bmVkRG9tYWlu
cywgdmFsdWUpKTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlBhZ2VX
YXNBZGRlZChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKIHsKICAgICBpZiAobV9zdG9yYWdl
TWFuYWdlcikKQEAgLTEyMTIsOCArMTIyMCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
Z2lzdGVyU2hhcmVkUmVzCiB7CiAgICAgaWYgKCFtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MpCiAg
ICAgICAgIHJldHVybjsKLQorICAgIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElU
SU9OSU5HKQorICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVnaXN0ZXJTaGFyZWRSZXNv
dXJjZUxvYWRPYnNlcnZlcigKKyAgICAgICAgW3RoaXNdIChjb25zdCBWZWN0b3I8U3RyaW5nPiYg
dG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBib29sIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlz
LT5zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKHRvcFBy
aXZhdGVseU93bmVkRG9tYWlucywgdmFsdWUpOworICAgICAgICB9KTsKKyNlbHNlCiAgICAgbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5yZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVy
KCk7CisjZW5kaWYKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCShyZXZpc2lvbiAyMTM1NTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJzaXRl
RGF0YVJlY29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsK
ICAgICB2b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlv
bjx2b2lkKFZlY3RvcjxTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpOwogCisjaWYgSEFWRShD
Rk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgdm9pZCBzaG91bGRQYXJ0aXRpb25D
b29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Ym9vbCB2YWx1ZSk7CisjZW5kaWYKICAgICB2b2lkIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNz
YXJ5KCk7CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbkNh
Y2hlRGlyZWN0b3J5OyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZE1lZGlhQ2FjaGVEaXJl
Y3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi5tZWRpYUNhY2hl
RGlyZWN0b3J5OyB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMTM2MDkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0wMy0wOCAgSm9obiBXaWxhbmRlciAgPHdpbGFu
ZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IENvbW11
bmljYXRlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2hpY2ggZG9tYWlucyB0byBwYXJ0aXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTMyMgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA3Njg5MjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyBhZGQgc3VwcG9ydCBmb3Ig
dHdvIG5ldyBUZXN0UnVubmVyIGZ1bmN0aW9uczoKKyAgICAgICAgLSBzZXRDb29raWVTdG9yYWdl
UGFydGl0aW9uaW5nRW5hYmxlZCgpCisgICAgICAgIC0gc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcigpCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKToKKyAgICAgICAgKFdU
Ujo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
cik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNv
b2tpZXNIYW5kbGVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAg
ICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKToKKwogMjAxNy0wMy0wOCAgTWF0dCBSYWpjYSAgPG1yYWpjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHVwZGF0aW5nIGF1dG9wbGF5IHBvbGlj
aWVzIGFmdGVyIGEgcGFnZSBoYXMgYmVlbiBsb2FkZWQuCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjgs
NiArMjI2OCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZURhdGFNCiAg
ICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpOwogfQogICAgIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRp
dGlvbkNvb2tpZXNIYW5kbGVyKGhvc3ROYW1lLCB2YWx1ZSk7Cit9CisKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvb2wgdmFsdWUpCiB7CiAgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTcsNiArMTU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc1N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhXS1N0cmluZ1JlZiBob3N0TmFtZSwgV0tTdHJpbmdSZWYgaG9zdE5h
bWVSZWRpcmVjdGVkVG8pOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlcihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5Myw2ICs3OTMsMTIgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkIikpIHsKKyAgICAgICAgV0tCb29sZWFuUmVmIGFjY2VwdCA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS0Nvb2tpZU1hbmFnZXJTZXRD
b29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2Vy
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpLCBXS0Jvb2xlYW5HZXRWYWx1
ZShhY2NlcHQpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW1hZ2VDb3VudElu
R2VuZXJhbFBhc3RlYm9hcmQiKSkgewogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5pbWFnZUNvdW50SW5HZW5lcmFsUGFzdGVib2FyZCgpOwogICAg
ICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gcmVzdWx0KEFkb3B0V0ssIFdLVUludDY0Q3Jl
YXRlKGNvdW50KSk7CkBAIC05OTEsNiArOTk3LDIwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
VGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlciIpKSB7CisgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwor
ICAgICAgICAKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdmFsdWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpOworICAgICAgICAKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSht
ZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7CisgICAgICAgIAorICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlcihob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVm
IHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7CkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Niw2ICs3NjYsMTUg
QEAgdm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKAogICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9CiAK
K3ZvaWQgVGVzdFJ1bm5lcjo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0Q29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQiKSk7CisKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShlbmFibGVkKSk7CisKKyAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
fQorCiBkb3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQogewogICAgIHJldHVybiBjdXJy
ZW50VGltZSgpOwpAQCAtMTMyOCw2ICsxMzM3LDMxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlz
dGljc0ZpcmVEYXRhTW9kaWYKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwg
bnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0
aXRpb25Db29raWVzSGFuZGxlcihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sK
KyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOworICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSB9KTsKKyAg
ICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9z
dE5hbWUpIH0pOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0
V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkgfSk7CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5n
UmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1
ZXModmFsdWVzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOworICAg
ICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFu
ZGxlciIpKTsKKyAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFk
b3B0V0ssIFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKKyAgICAKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wg
dmFsdWUpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTM1NTUp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENvb2tp
ZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sKTsKKyAgICB2
b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2wpOwogCiAgICAgLy8g
Q3VzdG9tIGZ1bGwgc2NyZWVuIGJlaGF2aW9yLgogICAgIHZvaWQgc2V0SGFzQ3VzdG9tRnVsbFNj
cmVlbkJlaGF2aW9yKGJvb2wgdmFsdWUpIHsgbV9jdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IgPSB2
YWx1ZTsgfQpAQCAtMzUxLDYgKzM1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3RhbGxTdGF0
aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsK
ICAgICB2b2lkIHN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBz
dGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBi
b29sIHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjEz
NTU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9U
ZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIGludGVyZmFj
ZSBUZXN0UnVubmVyIHsKIAogICAgIC8vIENvb2tpZXMgdGVzdGluZwogICAgIHZvaWQgc2V0QWx3
YXlzQWNjZXB0Q29va2llcyhib29sZWFuIGFjY2VwdCk7CisgICAgdm9pZCBzZXRDb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogCiAgICAgdm9pZCBvdmVy
cmlkZVByZWZlcmVuY2UoRE9NU3RyaW5nIHByZWZlcmVuY2UsIERPTVN0cmluZyB2YWx1ZSk7CiAK
QEAgLTI1OCw2ICsyNTksNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKERPTVN0cmluZyBob3N0TmFtZSwg
RE9NU3RyaW5nIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NU
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHN0YXRp
c3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NG
aXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29s
ZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1No
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFs
dWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNTU1KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTctMDMtMDggIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBDb21tdW5pY2F0ZSB0byB0aGUgbmV0d29yayBwcm9j
ZXNzIHdoaWNoIGRvbWFpbnMgdG8gcGFydGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkzMjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMw
NzY4OTIxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQt
Y29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9nZXQtY29va2llcy5waHA6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291
cmNlcy9zZXQtY29va2llLnBocDogQWRkZWQuCisKIDIwMTctMDMtMDcgIFJ5YW4gSGFkZGFkICA8
cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIERlYnVnIGZsYWcgdG8gVGVzdEV4
cGVjdGF0aW9uIGZvciB3ZWJydGMvbGlid2VicnRjL2Rlc2NyaXB0aW9uR2V0dGVycy5odG1sLgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24t
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0
aG91dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRp
b25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJh
bWUKK21haW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFBhcnRpdGlvbmVkIENv
b2tpZXMgV2l0aCBhbmQgV2l0aG91dCBVc2VyIEludGVyYWN0aW9uCittYWluIGZyYW1lIC0gZGlk
Q2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUKK21haW4gZnJhbWUgLSB3aWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0VG9VUkw6IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3NldC1jb29raWUucGhwP25hbWU9Zmlyc3RQYXJ0
eUNvb2tpZSZ2YWx1ZT12YWx1ZSNodHRwOi8vMTI3LjAuMC4xOjgwMDAvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2Vy
LWludGVyYWN0aW9uLmh0bWwjc3RlcDIgCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ2Fu
Y2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5p
c2hMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9V
Ukw6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mv
cGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRt
bCNzdGVwMiAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCitt
YWluIGZyYW1lIC0gZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZQorbWFpbiBmcmFtZSAt
IGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVz
dCBmb3IgUGFydGl0aW9uZWQgQ29va2llcyBXaXRoIGFuZCBXaXRob3V0IFVzZXIgSW50ZXJhY3Rp
b24KK21haW4gZnJhbWUgLSBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZQorZnJh
bWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFt
ZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZENvbW1pdExv
YWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRp
ZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2Fk
RXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VG
b3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+IiAtIGRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZy
YW1lMC0tPi0tPiIgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorZnJhbWUgIjwhLS1m
cmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorZnJh
bWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JG
cmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+IiAtIGRpZEZpbmlz
aERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ2hhbmdlTG9jYXRpb25XaXRo
aW5QYWdlRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIg
LSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAv
LzwhLS1mcmFtZTEtLT4tLT4iIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1l
ICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMS0tPi0tPiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJh
bWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRDb21taXRM
b2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBk
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUzLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK2ZyYW1lICI8
IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNG
b3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUyLS0+LS0+IiAtIGRpZEZp
bmlzaExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+
IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJh
bWUzLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCitmcmFtZSAiPCEtLWZy
YW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4iIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJh
bWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMy0tPi0tPiIgLSBkaWRGaW5pc2hM
b2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKKyAgCisKKy0t
LS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+JworLS0tLS0t
LS0KK1Nob3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuCitEaWQgbm90IHJlY2VpdmUgY29va2llIG5h
bWVkICdmaXJzdFBhcnR5Q29va2llJy4KK0RpZCBub3QgcmVjZWl2ZSBjb29raWUgbmFtZWQgJ3Ro
aXJkUGFydHlDb29raWUnLgorCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUxLS0+LS0+JworLS0tLS0tLS0KK1NldHRpbmcgcGFydGl0aW9uZWQsIHRoaXJkIHBh
cnR5IGNvb2tpZS4KKworCistLS0tLS0tLQorRnJhbWU6ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZy
YW1lMi0tPi0tPicKKy0tLS0tLS0tCitTaG91bGQgb25seSByZWNlaXZlIHBhcnRpdGlvbmVkLCB0
aGlyZCBwYXJ0eSBjb29raWUuCitEaWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICdmaXJzdFBh
cnR5Q29va2llJy4KK1JlY2VpdmVkIGNvb2tpZSBuYW1lZCAndGhpcmRQYXJ0eUNvb2tpZScuCisK
KworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4nCist
LS0tLS0tLQorQWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiwgc2hvdWxkIG9ubHkgcmVjZWl2ZSBub24t
cGFydGl0aW9uZWQsIGZpcnN0IHBhcnR5IGNvb2tpZS4KK1JlY2VpdmVkIGNvb2tpZSBuYW1lZCAn
Zmlyc3RQYXJ0eUNvb2tpZScuCitEaWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICd0aGlyZFBh
cnR5Q29va2llJy4KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVz
ZXItaW50ZXJhY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgt
YW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlv
bmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJl
biI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3Qg
Zm9yIFBhcnRpdGlvbmVkIENvb2tpZXMgV2l0aCBhbmQgV2l0aG91dCBVc2VyIEludGVyYWN0aW9u
PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBjb25zdCBwYXJ0aXRp
b25Ib3N0ID0gIjEyNy4wLjAuMTo4MDAwIjsKKyAgICBjb25zdCB0aGlyZFBhcnR5T3JpZ2luID0g
Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCI7CisgICAgY29uc3QgdGhpcmRQYXJ0eUJhc2VVcmwgPSB0
aGlyZFBhcnR5T3JpZ2luICsgIi9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3Vy
Y2VzIjsKKyAgICBjb25zdCBmaXJzdFBhcnR5Q29va2llTmFtZSA9ICJmaXJzdFBhcnR5Q29va2ll
IjsKKyAgICBjb25zdCBzdWJQYXRoVG9TZXRGaXJzdFBhcnR5Q29va2llID0gIi9zZXQtY29va2ll
LnBocD9uYW1lPSIgKyBmaXJzdFBhcnR5Q29va2llTmFtZSArICImdmFsdWU9dmFsdWUiOworICAg
IGNvbnN0IHRoaXJkUGFydHlDb29raWVOYW1lID0gInRoaXJkUGFydHlDb29raWUiOworICAgIGNv
bnN0IHN1YlBhdGhUb1NldFRoaXJkUGFydHlDb29raWUgPSAiL3NldC1jb29raWUucGhwP25hbWU9
IiArIHRoaXJkUGFydHlDb29raWVOYW1lICsgIiZ2YWx1ZT12YWx1ZSI7CisgICAgY29uc3QgZnJh
Z21lbnRXaXRoUmV0dXJuVXJsID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVz
ZXItaW50ZXJhY3Rpb24uaHRtbCI7CisgICAgY29uc3Qgc3ViUGF0aFRvR2V0Q29va2llcyA9ICIv
Z2V0LWNvb2tpZXMucGhwP25hbWUxPSIgKyBmaXJzdFBhcnR5Q29va2llTmFtZSArICImbmFtZTI9
IiArIHRoaXJkUGFydHlDb29raWVOYW1lOworCisgICAgZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVy
ZShlbmFibGUpIHsKKyAgICAgICAgaWYgKCFlbmFibGUpIHsKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAgfQorICAgICAg
ICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNldEVu
YWJsZUZlYXR1cmUoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBvcGVuSWZyYW1lKHVybCwgb25Mb2FkSGFuZGxlcikgeworICAg
ICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgICAgIGVsZW1lbnQuc3JjID0gdXJsOworICAgICAgICBpZiAob25Mb2FkSGFuZGxlcikgewor
ICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSBvbkxvYWRIYW5kbGVyOworICAgICAgICB9Cisg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gc2V0VXNlckludGVyYWN0aW9uQW5kQ29udGludWUoKSB7CisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih0aGlyZFBhcnR5T3JpZ2lu
LCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbih0aGlyZFBhcnR5T3JpZ2luKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlRo
aXJkIHBhcnR5IGRpZCBub3QgZ2V0IGxvZ2dlZCBmb3IgdXNlciBpbnRlcmFjdGlvbi4iKTsKKyAg
ICAgICAgcnVuVGVzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
ICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24uaGFzaCkgeworICAgICAgICAgICAgY2FzZSAi
I3N0ZXAxIjoKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdGhpcmRQ
YXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9TZXRGaXJzdFBhcnR5Q29va2llICsgIiMiICsgZnJhZ21l
bnRXaXRoUmV0dXJuVXJsICsgIiNzdGVwMiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlICIjc3RlcDIiOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9u
Lmhhc2ggPSAic3RlcDMiOworICAgICAgICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJh
c2VVcmwgKyBzdWJQYXRoVG9HZXRDb29raWVzICsgIiZtZXNzYWdlPVNob3VsZCByZWNlaXZlIG5v
IGNvb2tpZXMuIiwgcnVuVGVzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICIjc3RlcDMiOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2gg
PSAic3RlcDQiOworICAgICAgICAgICAgICAgIG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwg
KyBzdWJQYXRoVG9TZXRUaGlyZFBhcnR5Q29va2llICsgIiZtZXNzYWdlPVNldHRpbmcgcGFydGl0
aW9uZWQsIHRoaXJkIHBhcnR5IGNvb2tpZS4iLCBydW5UZXN0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwNCI6CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQubG9jYXRpb24uaGFzaCA9ICJzdGVwNSI7CisgICAgICAgICAgICAgICAgb3BlbklmcmFtZSh0
aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENvb2tpZXMgKyAiJm1lc3NhZ2U9U2hvdWxk
IG9ubHkgcmVjZWl2ZSBwYXJ0aXRpb25lZCwgdGhpcmQgcGFydHkgY29va2llLiIsIHNldFVzZXJJ
bnRlcmFjdGlvbkFuZENvbnRpbnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgIiNzdGVwNSI6CisgICAgICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5
QmFzZVVybCArIHN1YlBhdGhUb0dldENvb2tpZXMgKyAiJm1lc3NhZ2U9QWZ0ZXIgdXNlciBpbnRl
cmFjdGlvbiwgc2hvdWxkIG9ubHkgcmVjZWl2ZSBub24tcGFydGl0aW9uZWQsIGZpcnN0IHBhcnR5
IGNvb2tpZS4iLCBmaW5pc2hUZXN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbi5ob3N0ID09PSBwYXJ0aXRpb25I
b3N0ICYmIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPT0gIiIgJiYgd2luZG93LnRlc3RSdW5uZXIg
JiYgd2luZG93LmludGVybmFscykgeworICAgICAgICBzZXRFbmFibGVGZWF0dXJlKHRydWUpOwor
CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcigibG9jYWxob3N0IiwgdHJ1ZSk7CisKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Cisg
ICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDEiOworICAgIH0KKworICAgIHJ1
blRlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL3Jlc291cmNlcy9nZXQtY29va2llcy5waHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3Vy
Y2VzL2dldC1jb29raWVzLnBocAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvZ2V0LWNvb2tpZXMu
cGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKzw/cGhwCitlY2hvICRfR0VUWyJt
ZXNzYWdlIl0gLiAiPGJyPiI7CitpZighaXNzZXQoJF9DT09LSUVbJF9HRVRbIm5hbWUxIl1dKSkg
eworICAgIGVjaG8gIkRpZCBub3QgcmVjZWl2ZSBjb29raWUgbmFtZWQgJyIgLiAkX0dFVFsibmFt
ZTEiXSAuICInLjxicj4iOworfSBlbHNlIHsKKyAgICBlY2hvICJSZWNlaXZlZCBjb29raWUgbmFt
ZWQgJyIgLiAkX0dFVFsibmFtZTEiXSAuICInLjxicj4iOworfQoraWYoIWlzc2V0KCRfQ09PS0lF
WyRfR0VUWyJuYW1lMiJdXSkpIHsKKyAgICBlY2hvICJEaWQgbm90IHJlY2VpdmUgY29va2llIG5h
bWVkICciIC4gJF9HRVRbIm5hbWUyIl0gLiAiJy48YnI+IjsKK30gZWxzZSB7CisgICAgZWNobyAi
UmVjZWl2ZWQgY29va2llIG5hbWVkICciIC4gJF9HRVRbIm5hbWUyIl0gLiAiJy48YnI+IjsKK30K
Kz8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9yZXNvdXJjZXMvc2V0LWNvb2tpZS5waHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3Nl
dC1jb29raWUucGhwCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9zZXQtY29va2llLnBocAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzw/cGhwCitzZXRjb29raWUoJF9HRVRbIm5hbWUi
XSwgJF9HRVRbInZhbHVlIl0sIDAsICIvIik7CitlY2hvICRfR0VUWyJtZXNzYWdlIl0gLiAiPGJy
PiI7Cis/PgorPHNjcmlwdD4KK2lmIChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKSB7CisgICAgc2V0
VGltZW91dCgiZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhhc2gu
c3Vic3RyaW5nKDEpIiwgMTApOworfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303880</attachid>
            <date>2017-03-08 18:15:52 -0800</date>
            <delta_ts>2017-03-08 20:02:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169322-20170308181552.patch</filename>
            <type>text/plain</type>
            <size>54464</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTAzLTA4ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5z
IHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0
aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKKworICAgICAgICAqIGxvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbik6Cisg
ICAgICAgICAgICBOb3cgY2FsbHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKQorICAgICAgICAgICAgdG8gdGVsbCB0aGUgbmV0
d29yayBwcm9jZXNzIHRoZSBkb21haW4gaGFzIGdvdCB1c2VyIGludGVyYWN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgICAgICBOb3cgY2FsbHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKQorICAgICAgICAgICAgdG8gdGVsbCB0aGUgbmV0
d29yayBwcm9jZXNzIHRoZSBkb21haW4gaGFzIGdvdCB1c2VyIGludGVyYWN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29r
aWVzSGFuZGxlcik6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVubmVyIHRvIHNldCBhIGRv
bWFpbiBmb3Igd2hpY2gKKyAgICAgICAgICAgIHBhcnRpdGlvbmluZyBzaG91bGQgYmUgYXBwbGll
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWlu
KToKKyAgICAgICAgICAgIE5ldyBvdmVybG9hZGVkIGNvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAqIGxvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZyb21EZWNvZGVyKToKKyAgICAgICAgICAg
IE5vdyBib290c3RyYXBzIHRoZSBuZXR3b3JrIHByb2Nlc3MnIHNldCBvZiBrbm93biBkb21haW5z
IHRvCisgICAgICAgICAgICBwYXJ0aXRpb24gY29va2llcyBmb3IuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFBhcnRpdGlvbkNvb2tpZXND
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgICAgICBOb3cgdGVsbHMgdGhlIG5ldHdvcmsgcHJvY2VzcyB0byBzdGFydCBwYXJ0
aXRpb25pbmcgYWdhaW4KKyAgICAgICAgICAgIHdoZW4gdXNlciBpbnRlcmFjdGlvbiBhZ2VzIG91
dC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2hvdWxkUGFydGl0aW9uQ29v
a2llc0Zvckhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpz
ZXRTaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdHMpOgorCiAyMDE3LTAzLTA4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBzZWxlY3QucmVtb3ZlKCkg
LyBvcHRpb25zLnJlbW92ZSgpIG92ZXJsb2FkcyB0YWtpbmcgYW4gb3B0aW9uIGVsZW1lbnQgaW4g
cGFyYW1ldGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNCwxMyArMzA0LDE3
IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmEKICAgICBpZiAodXJs
LmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIGF1dG8gcHJpbWFyeURvbWFpblN0
ciA9IHByaW1hcnlEb21haW4odXJsKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3Jl
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW5T
dHIpOwogICAgIGRvdWJsZSBuZXdUaW1lc3RhbXAgPSByZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25l
RGF5KFdURjo6Y3VycmVudFRpbWUoKSk7CiAgICAgaWYgKG5ld1RpbWVzdGFtcCA9PSBzdGF0aXN0
aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIHN0
YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aXN0aWNzLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBuZXdUaW1lc3RhbXA7CisKKyAgICBtX3N0b3JlLT5maXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIocHJpbWFyeURvbWFpblN0ciwgZmFsc2UpOwog
ICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCkBAIC0zMTks
OSArMzIzLDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmEKICAg
ICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIGF1dG8gcHJpbWFy
eURvbWFpblN0ciA9IHByaW1hcnlEb21haW4odXJsKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlEb21haW5TdHIpOwogICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsK
ICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBXVEY6OmN1cnJlbnRU
aW1lKCk7CisKKyAgICBtX3N0b3JlLT5maXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIo
cHJpbWFyeURvbWFpblN0ciwgZmFsc2UpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCkKQEAgLTQxMiwxMCArNDIwLDE5
IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVEYXRhTW9kaWYKICAgICBtX3N0b3Jl
LT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYg
aG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgbV9zdG9yZS0+ZmlyZVNob3VsZFBhcnRpdGlv
bkNvb2tpZXNIYW5kbGVyKHByaW1hcnlEb21haW4oaG9zdE5hbWUpLCB2YWx1ZSk7Cit9CisKIFN0
cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBVUkwmIHVybCkK
IHsKKyAgICByZXR1cm4gcHJpbWFyeURvbWFpbih1cmwuaG9zdCgpKTsKK30KKworU3RyaW5nIFJl
c291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdCkKK3sK
ICAgICBTdHJpbmcgcHJpbWFyeURvbWFpbjsKLSAgICBTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7
CiAgICAgaWYgKGhvc3QuaXNOdWxsKCkgfHwgaG9zdC5pc0VtcHR5KCkpCiAgICAgICAgIHByaW1h
cnlEb21haW4gPSAibnVsbE9yaWdpbiI7CiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCShy
ZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlvbihkb3VibGUgc2Vj
b25kcyk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBzdGF0
aXN0aWNzU3RvcmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9y
ZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiYmKTsKQEAgLTc1LDYgKzc2LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHNob3VsZExvZyhQYWdlKik7CiAgICAgc3RhdGlj
IFN0cmluZyBwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYpOworICAgIHN0YXRpYyBTdHJpbmcgcHJp
bWFyeURvbWFpbihjb25zdCBTdHJpbmcmIGhvc3QpOwogCiAgICAgUmVmUHRyPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZT4gbV9zdG9yZTsKICAgICBIYXNoTWFwPFN0cmluZywgc2l6ZV90PiBt
X29yaWdpbnNWaXNpdGVkTWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsOCArMTAwLDE1IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZWFkRGEKICAgICBpZiAoIXN1Y2NlZWRlZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWNzIDogbG9hZGVkU3RhdGlzdGljcykKKyAgICBWZWN0
b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9u
OworICAgIHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24ucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsb2FkZWRTdGF0aXN0aWNzLnNpemUoKSk7CisgICAgZm9yIChh
dXRvJiBzdGF0aXN0aWNzIDogbG9hZGVkU3RhdGlzdGljcykgewogICAgICAgICBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5zZXQoc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW4sIHN0YXRpc3RpY3Mp
OworICAgICAgICBpZiAoc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlICYmICFzdGF0aXN0
aWNzLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlRG9t
YWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24udW5jaGVja2VkQXBwZW5kKHN0YXRpc3RpY3MuaGln
aExldmVsRG9tYWluKTsKKyAgICB9CisgICAgCisgICAgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tp
ZXNIYW5kbGVyKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24s
IHRydWUpOwogfQogCiBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0
aWNzRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQpAQCAtMTQxLDEyICsxNDgsMzAgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdAogICAgIG1fZGF0YUFkZGVk
SGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzQ2FsbGJhY2soc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSk+
JiYgaGFuZGxlcikKK3sKKyAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFu
ZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisgICAgCiB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKIHsKICAgICBpZiAobV9k
YXRhQWRkZWRIYW5kbGVyKQogICAgICAgICBtX2RhdGFBZGRlZEhhbmRsZXIoKTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAg
VmVjdG9yPFN0cmluZz4gZG9tYWluVmVjdG9yOworICAgIGRvbWFpblZlY3Rvci5hcHBlbmQocHJp
bWFyeURvbWFpbik7CisgICAgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGRvbWFp
blZlY3RvciwgdmFsdWUpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
cmltYXJ5RG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAobV9zaG91bGRQYXJ0aXRpb25D
b29raWVzRm9yRG9tYWluc0hhbmRsZXIpCisgICAgICAgIG1fc2hvdWxkUGFydGl0aW9uQ29va2ll
c0ZvckRvbWFpbnNIYW5kbGVyKHByaW1hcnlEb21haW5zLCB2YWx1ZSk7Cit9CisKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRv
dWJsZSBzZWNvbmRzKQogewogICAgIGlmIChzZWNvbmRzID49IDApCkBAIC0xNzAsNiArMTk1LDEw
IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWQKICAgICAgICAgLy8g
aXQgaGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVmYXVsdCAtMS4KICAgICAgICAg
cmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDA7CiAgICAgICAg
IHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworCisgICAgICAg
IGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAg
ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHJlc291cmNlU3RhdGlzdGljLmhpZ2hM
ZXZlbERvbWFpbiwgdHJ1ZSk7CisKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTMg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKGNvbnN0
IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFZl
Y3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiB0YWtlU3RhdGlzdGljcygpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXROb3RpZmljYXRpb25DYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gaGFuZGxlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROb3RpZmljYXRpb25D
YWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKHN0ZDo6ZnVuY3Rpb248dm9pZChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUpPiYmKTsKIAogICAg
IHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4sIGJvb2wgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmltYXJ5RG9t
YWluLCBib29sIHZhbHVlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvY2Vzc1N0YXRp
c3RpY3Moc3RkOjpmdW5jdGlvbjx2b2lkKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mJik7CiAK
QEAgLTcxLDYgKzc0LDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKICAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gbV9kYXRhQWRkZWRIYW5kbGVyOworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUpPiBtX3Nob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcjsKIH07CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9y
YWdlLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8
fCBVU0UoQ0ZVUkxDT05ORUNUSU9OKQpAQCAtNjcsNiArNjgsMTAgQEAgcHVibGljOgogICAgIENG
VVJMU3RvcmFnZVNlc3Npb25SZWYgcGxhdGZvcm1TZXNzaW9uKCkgeyByZXR1cm4gbV9wbGF0Zm9y
bVNlc3Npb24uZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2wpOwor
I2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgc2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoY29uc3QgU3RyaW5nJik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mLCBib29sIHZhbHVlKTsKKyNlbmRpZgogI2VsaWYgVVNFKFNP
VVApCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PFNvdXBOZXR3b3JrU2Vzc2lvbj4mJik7CiAgICAgfk5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwpA
QCAtMTA2LDYgKzExMSwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBDcmVkZW50aWFsU3Rv
cmFnZSBtX2NyZWRlbnRpYWxTdG9yYWdlOworCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9Q
QVJUSVRJT05JTkcpCisgICAgSGFzaFNldDxTdHJpbmc+IG1fdG9wUHJpdmF0ZWx5Q29udHJvbGxl
ZERvbWFpbnNGb3JDb29raWVQYXJ0aXRpb25pbmc7CisjZW5kaWYKIH07CiAKIFdFQkNPUkVfRVhQ
T1JUIFN0cmluZyBjb29raWVTdG9yYWdlUGFydGl0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIxMzU1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNCArMTQwLDMwIEBAIFN0cmlu
ZyBjb29raWVTdG9yYWdlUGFydGl0aW9uKGNvbnN0IFVSTCYKIAogI2VuZGlmCiAKKyNpZiBIQVZF
KENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKworYm9vbCBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KGNvbnN0IFN0cmluZyYgaG9zdCkK
K3sKKyAgICBpZiAoaG9zdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gZG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihob3N0KTsKKyAgICBp
ZiAoZG9tYWluLmlzRW1wdHkoKSkKKyAgICAgICAgZG9tYWluID0gaG9zdDsKKworICAgIHJldHVy
biBtX3RvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zRm9yQ29va2llUGFydGl0aW9uaW5nLmNv
bnRhaW5zKGRvbWFpbik7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRTaG91
bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RzLCBi
b29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgbV90b3BQcml2YXRlbHlDb250
cm9sbGVkRG9tYWluc0ZvckNvb2tpZVBhcnRpdGlvbmluZy5hZGQoaG9zdHMuYmVnaW4oKSwgaG9z
dHMuZW5kKCkpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKGF1dG8mIGhvc3QgOiBob3N0cykK
KyAgICAgICAgICAgIG1fdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNGb3JDb29raWVQYXJ0
aXRpb25pbmcucmVtb3ZlKGhvc3QpOworICAgIH0KK30KKworI2VuZGlmIC8vIEhBVkUoQ0ZORVRX
T1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTM1NjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw1NSBAQAorMjAxNy0wMy0wOCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IENvbW11bmljYXRlIHRvIHRo
ZSBuZXR3b3JrIHByb2Nlc3Mgd2hpY2ggZG9tYWlucyB0byBwYXJ0aXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTMyMgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzA3Njg5MjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3Rl
bnNlbi4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JU
b3BQcml2YXRlbHlPd25lZERvbWFpbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3Jr
RGF0YVRhc2tDb2NvYSk6CisgICAgICAgICAgICBOb3cgY29uc3VsdHMgV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdCgpCisgICAgICAg
ICAgICB0byBkZWNpZGUgd2hldGhlciBwYXJ0aXRpb25pbmcgc2hvdWxkIGJlIGFwcGxpZWQgb3Ig
bm90LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwOgorICAg
ICAgICAoV0tDb29raWVNYW5hZ2VyU2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQp
OgorICAgICAgICAgICAgVG8gYWxsb3cgVGVzdFJ1bm5lciB0byBjb25maWd1cmUgY29va2llIHBh
cnRpdGlvbmluZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuY3BwOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVTaG91
bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcik6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVu
bmVyIHRvIHNldCBhIGRvbWFpbiBmb3Igd2hpY2gKKyAgICAgICAgICAgIHBhcnRpdGlvbmluZyBz
aG91bGQgYmUgYXBwbGllZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5n
RW5hYmxlZCk6CisgICAgICAgICAgICBUbyBhbGxvdyBUZXN0UnVubmVyIHRvIGNvbmZpZ3VyZSBj
b29raWUgcGFydGl0aW9uaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlcjo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKToKKyAgICAgICAgICAgIFRv
IGFsbG93IFRlc3RSdW5uZXIgdG8gc2V0IGEgZG9tYWluIGZvciB3aGljaAorICAgICAgICAgICAg
cGFydGl0aW9uaW5nIHNob3VsZCBiZSBhcHBsaWVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsYXNzaWZ5UmVzb3VyY2UpOgorICAgICAgICAgICAg
Tm93IHRlbGxzIHRoZSBuZXR3b3JrIHByb2Nlc3MgYXMgc29vbiBhcyBhIGRvbWFpbgorICAgICAg
ICAgICAgaGFzIGJlZW4gY2xhc3NpZmllZCBhcyBwcmV2YWxlbnQuCisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxv
YWRPYnNlcnZlcik6CisgICAgICAgICAgICBPdmVybG9hZGVkIGZ1bmN0aW9uIHRvIGFsbG93IGlu
amVjdGlvbiBvZiBoYW5kbGVycyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQorICAgICAgICAg
ICAgbmV0d29yayBwcm9jZXNzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2Vy
dmVyKToKKyAgICAgICAgICAgIE5vdyBzZXRzIHR3byBjYWxsYmFjayBoYW5kbGVycyBmb3IgY29t
bXVuaWNhdGlvbiB3aXRoIHRoZSBuZXR3b3JrIHByb2Nlc3MuCisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKwogMjAxNy0wMy0wNyAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgU3VicGl4ZWxB
bnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQgYnkgZGVmYXVsdCBvbiBzb21lIHZlcnNpb25zIG9m
IG1hY09TCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAs
MTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGlkR3JhbnRTYW5kYm94RXh0ZQogICAgICAgICBo
YW5kbGVyKCk7CiB9CiAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykK
K3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRl
bHlPd25lZERvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIGJvb2wgdmFsdWUp
Cit7CisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5z
ZXRTaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdHMoZG9tYWlucywgdmFsdWUpOworfQorI2Vu
ZGlmCisKIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhTZXNzaW9uSUQgc2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBGdW5j
dGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5Pik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDIxMzU1NSkKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiw2ICsxMTYsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBncmFudFNhbmRi
b3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAor
I2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQorICAgIHZvaWQgc2hvdWxk
UGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIGJvb2wgdmFsdWUpOworI2VuZGlmCisKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIGxvYWRUaHJvdHRsZUxhdGVuY3koKSBjb25zdCB7IHJldHVybiBtX2xvYWRUaHJvdHRs
ZUxhdGVuY3k7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAy
MTM1NTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNzcsNCArNzcsOCBAQCBtZXNzYWdlcyAtPiBO
ZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlCiAgICAgUHJvY2Vzc0RpZFJlc3VtZSgpCiAKICAg
ICBEaWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50
NjRfdCByZXF1ZXN0SUQpCisKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklO
RykKKyAgICBTaG91bGRQYXJ0aXRpb25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5z
KFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCB2YWx1ZSkKKyNl
bmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDIxMzU1NSkKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIzLDEyIEBAIE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpOZXR3b3JrRGF0YVRhc2tDb2MKICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENy
ZWF0aW5nIE5ldHdvcmtEYXRhVGFzayB3aXRoIFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZp
ZXJdLCBuc1JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOwogCiAjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCi0gICAgU3RyaW5nIHN0b3JhZ2VQYXJ0
aXRpb24gPSBXZWJDb3JlOjpjb29raWVTdG9yYWdlUGFydGl0aW9uKHJlcXVlc3QpOwotICAgIGlm
ICghc3RvcmFnZVBhcnRpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIG1fdGFzay5nZXQoKS5fc3Rv
cmFnZVBhcnRpdGlvbklkZW50aWZpZXIgPSBzdG9yYWdlUGFydGl0aW9uOworICAgIGlmIChzZXNz
aW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0
KHVybC5ob3N0KCkpKSB7CisgICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgUGFydGl0
aW9uaW5nIGNvb2tpZXMgZm9yIFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBuc1Jl
cXVlc3QuVVJMLmFic29sdXRlU3RyaW5nLlVURjhTdHJpbmcpOworICAgICAgICBTdHJpbmcgc3Rv
cmFnZVBhcnRpdGlvbiA9IFdlYkNvcmU6OmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24ocmVxdWVzdCk7
CisgICAgICAgIGlmICghc3RvcmFnZVBhcnRpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBt
X3Rhc2suZ2V0KCkuX3N0b3JhZ2VQYXJ0aXRpb25JZGVudGlmaWVyID0gc3RvcmFnZVBhcnRpdGlv
bjsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnJl
c291cmNlUHJpb3JpdGllc0VuYWJsZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNp
bmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
b29sLmgiCkBAIC0xOTYsNCArMTk3LDEzIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
aWRHZXRIVFRQQ28KICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVl
KHBvbGljeSk7CiB9CiAKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVTdG9y
YWdlUGFydGl0aW9uaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFi
bGVkKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJD
b29raWVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSk7CiAgICAgdm9pZCBnZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHN0ZDo6ZnVuY3Rpb248dm9pZCAoSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIHNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkKGJvb2wpOwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
V2ViQ29yZTo6U2Vzc2lvbklEKTsKICAgICB2b2lkIHN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFdlYkNvcmU6OlNlc3Npb25JRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDExIEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmYKICAgICBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUs
IGJvb2wgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkuZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGhvc3ROYW1lLCB2
YWx1ZSk7Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKIHsKICAgICBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQodmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHJldmlz
aW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBz
ZWNvbmRzKTsKICAgICBzdGF0aWMgdm9pZCBzZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlvbihk
b3VibGUgc2Vjb25kcyk7CiAgICAgc3RhdGljIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKCk7CisgICAgc3RhdGljIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVy
KGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgc3RhdGlj
IHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwo
Ym9vbCB2YWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1LDEx
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXQKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVJlc291cmNlKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQogewogICAgIGlmICghcmVzb3VyY2VTdGF0aXN0
aWMuaXNQcmV2YWxlbnRSZXNvdXJjZQotICAgICAgICAmJiBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNl
U3RhdGlzdGljKSkKKyAgICAgICAgJiYgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ci5oYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhyZXNvdXJjZVN0YXRpc3RpYykp
IHsKICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7
CisgICAgICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAg
ICAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPmZpcmVTaG91bGRQYXJ0aXRp
b25Db29raWVzSGFuZGxlcihyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4sIHRydWUp
OworICAgIH0KIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92
ZURhdGFSZWNvcmRzKCkKQEAgLTE3MCw3ICsxNzMsNiBAQCBib29sIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVzCiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQ7CiB9CiAKLQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lz
dGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKQogewogICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9yZShtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jb3B5UmVmKCkpOwpAQCAtMTgwLDYgKzE4MiwxNCBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnCiAgICAgICAgIHByb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMoKTsKICAgICB9KTsKIH0KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKHN0ZDo6
ZnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJpbWFyeURvbWFpbiwgYm9vbCB2
YWx1ZSk+JiYgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyKQoreworICAg
IHJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKTsKKyAgICBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS0+c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFt0aGlz
LCBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIgPSBXVEZNb3ZlKHNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcildIChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcHJpbWFyeURvbWFpbnMsIGJvb2wgdmFsdWUpIHsKKyAgICAgICAgc2hvdWxkUGFydGl0aW9u
Q29va2llc0ZvckRvbWFpbnNIYW5kbGVyKHByaW1hcnlEb21haW5zLCB2YWx1ZSk7CisgICAgfSk7
Cit9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZyb21E
aXNrSWZOZWVkZWQoKQogewpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjEzNTU1
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHJlZ2lzdGVyU2hhcmVk
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIoc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmlt
YXJ5RG9tYWluLCBib29sIHZhbHVlKT4mJiBzaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWlu
c0hhbmRsZXIpOwogICAgIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBvcmlnaW5zKTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2ll
TWFuYWdlci5jcHAJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwx
MSBAQCB2b2lkIFdLQ29va2llTWFuYWdlckdldEhUVFBDb29raWVBY2NlcHRQCiAgICAgdG9JbXBs
KGNvb2tpZU1hbmFnZXIpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHRvR2VuZXJpY0NhbGxi
YWNrRnVuY3Rpb248V0tIVFRQQ29va2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9s
aWN5Pihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCit2b2lkIFdLQ29va2llTWFuYWdlclNldENv
b2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVN
YW5hZ2VyLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXIpLT5zZXRD
b29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBXS0Nv
b2tpZU1hbmFnZXJTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV0tDb29raWVNYW5hZ2VyUmVm
IGNvb2tpZU1hbmFnZXIpCiB7CiAgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXIpLT5zdGFydE9ic2Vy
dmluZ0Nvb2tpZUNoYW5nZXMoV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1h
bmFnZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29va2llTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBAIFdL
X0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlclNldEhUVFBDb28KIHR5cGVkZWYgdm9pZCAoKldL
Q29va2llTWFuYWdlckdldEhUVFBDb29raWVBY2NlcHRQb2xpY3lGdW5jdGlvbikoV0tIVFRQQ29v
a2llQWNjZXB0UG9saWN5LCBXS0Vycm9yUmVmLCB2b2lkKik7CiBXS19FWFBPUlQgdm9pZCBXS0Nv
b2tpZU1hbmFnZXJHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdLQ29va2llTWFuYWdlclJlZiBj
b29raWVNYW5hZ2VyLCB2b2lkKiBjb250ZXh0LCBXS0Nvb2tpZU1hbmFnZXJHZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5RnVuY3Rpb24gY2FsbGJhY2spOwogCitXS19FWFBPUlQgdm9pZCBXS0Nvb2tp
ZU1hbmFnZXJTZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZChXS0Nvb2tpZU1hbmFn
ZXJSZWYgY29va2llTWFuYWdlciwgYm9vbCBlbmFibGVkKTsKKwogV0tfRVhQT1JUIHZvaWQgV0tD
b29raWVNYW5hZ2VyU3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdLQ29va2llTWFuYWdlclJl
ZiBjb29raWVNYW5hZ2VyKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29va2llTWFuYWdlclN0b3BPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjEzNTU1
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSwxMSBAQCB2b2lkIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlCiAgICAgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXI6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCit2b2lk
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlU2hvdWxkUGFydGl0aW9uQ29va2ll
c0hhbmRsZXIoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFu
ZGxlcih0b1dURlN0cmluZyhob3N0TmFtZSksIHZhbHVlKTsKK30KKwogdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIHZhbHVlKQogewogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBleHRlcm4gIkMiIHsKICAgICBX
S19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBXS1N0cmluZ1JlZiBob3N0
TmFtZVJlZGlyZWN0ZWRUbyk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMp
OwogICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKFdL
U3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChib29sIHZhbHVlKTsKICAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSk7CiAgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoZG91YmxlIHNlY29uZHMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIxMzU1
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNiArMjkyLDEzIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6Z3JhbnRTYW5kYm94RXgKICNlbmRpZgogfQogCisjaWYgSEFWRShDRk5FVFdP
UktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCB2YWx1ZSkKK3sKKyAgICBj
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTaG91bGRQYXJ0aXRp
b25Db29raWVzRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKHRvcFByaXZhdGVseU93bmVkRG9t
YWlucywgdmFsdWUpLCAwKTsKK30KKyNlbmRpZgorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgQ2hpbGRQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhsYXVuY2hlciwgY29ubmVjdGlvbklkZW50aWZp
ZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjEzNTU1KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNiArMTA5LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZERlbGV0ZVdlYnNpdGVE
YXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZ3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpOworI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFS
VElUSU9OSU5HKQorICAgIHZvaWQgc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVs
eU93bmVkRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGJvb2wgdmFsdWUpOworI2VuZGlm
CiAgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgV2ViQ29yZTo6U2hvdWxk
U2FtcGxlKTsKICAgICB2b2lkIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh1aW50NjRf
dCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlv
biwgdWludDMyX3QgcmVzdWx0LCBXZWJDb3JlOjpTaG91bGRTYW1wbGUpOwogICAgIHZvaWQgbG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGRvdWJsZSB2YWx1ZSwgdW5zaWdu
ZWQgc2lnbmlmaWNhbnRGaWd1cmVzLCBXZWJDb3JlOjpTaG91bGRTYW1wbGUpOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTM1NTUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxMCBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJv
Y2Vzc1Byb3h5IExlZ2FjeVJlCiAKICAgICBHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFz
ZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIFZlY3RvcjxTdHJpbmc+IHBhdGhz
KQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgU2hvdWxk
UGFydGl0aW9uQ29va2llc0ZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhWZWN0b3I8U3RyaW5n
PiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUpCisjZW5kaWYKKwogICAgIFBy
b2Nlc3NSZWFkeVRvU3VzcGVuZCgpCiAgICAgU2V0SXNIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCBp
c0hvbGRpbmdMb2NrZWRGaWxlcykKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24g
MjEzNTU1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ4LDYgKzEwNDgsMTQgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhRm9yVG9wUAogICAgIH0pOwogfQogCisjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCB2YWx1ZSkKK3sK
KyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnModG9w
UHJpdmF0ZWx5T3duZWREb21haW5zLCB2YWx1ZSkpOworfQorI2VuZGlmCisKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6d2ViUGFnZVdhc0FkZGVkKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQog
ewogICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyKQpAQCAtMTIxMiw4ICsxMjIwLDE1IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXMKIHsKICAgICBpZiAoIW1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcykKICAgICAgICAgcmV0dXJuOwotCisgICAgCisjaWYgSEFWRShDRk5F
VFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LT5yZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKAorICAgICAgICBbdGhpc10gKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGJvb2wgdmFsdWUp
IHsKKyAgICAgICAgICAgIHRoaXMtPnNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRl
bHlPd25lZERvbWFpbnModG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCB2YWx1ZSk7CisgICAgICAg
IH0pOworI2Vsc2UKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3MtPnJlZ2lzdGVyU2hhcmVk
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmgJKHJldmlzaW9uIDIxMzU1NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDkgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwg
Y29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4g
Y29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93
bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhRmV0Y2hPcHRpb24+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICB2
b2lkIHNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBib29sIHZhbHVlKTsKKyNlbmRpZgogICAgIHZvaWQgcmVzb2x2
ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkQXBw
bGljYXRpb25DYWNoZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1
cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnk7IH0KICAgICBjb25zdCBTdHJpbmcmIHJl
c29sdmVkTWVkaWFDYWNoZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25m
aWd1cmF0aW9uLm1lZGlhQ2FjaGVEaXJlY3Rvcnk7IH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzYxNikKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAzLTA4ICBK
b2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExv
YWQgU3RhdGlzdGljczogQ29tbXVuaWNhdGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBk
b21haW5zIHRvIHBhcnRpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5MzIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFRoZXNlIGNo
YW5nZXMgYWRkIHN1cHBvcnQgZm9yIHR3byBuZXcgVGVzdFJ1bm5lciBmdW5jdGlvbnM6CisgICAg
ICAgIC0gc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKQorICAgICAgICAtIHN0
YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKQorCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5n
RW5hYmxlZCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWxk
UGFydGl0aW9uQ29va2llc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGlj
c0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcik6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTctMDMtMDggIE1h
dHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciB1
cGRhdGluZyBhdXRvcGxheSBwb2xpY2llcyBhZnRlciBhIHBhZ2UgaGFzIGJlZW4gbG9hZGVkLgpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjY4LDYgKzIyNjgsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
c3RhdGlzdGljc0ZpcmVEYXRhTQogICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJG
aXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KICAgICAKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OnN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoV0tTdHJpbmdS
ZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlckZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihob3N0TmFtZSwgdmFsdWUp
OworfQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oV0tTdHJpbmdSZWYgaG9zdE5h
bWUsIFdLU3RyaW5nUmVmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lk
IHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHN0YXRp
c3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoV0tTdHJpbmdSZWYgaG9zdE5h
bWUsIGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3Vi
bGUpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJl
dmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMsNiArNzkzLDEyIEBAIFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRD
b29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCIpKSB7CisgICAgICAgIFdLQm9vbGVhblJl
ZiBhY2NlcHQgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAg
ICAgV0tDb29raWVNYW5hZ2VyU2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoV0tD
b250ZXh0R2V0Q29va2llTWFuYWdlcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4
dCgpKSwgV0tCb29sZWFuR2V0VmFsdWUoYWNjZXB0KSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkltYWdlQ291bnRJbkdlbmVyYWxQYXN0ZWJvYXJkIikpIHsKICAgICAgICAgdW5z
aWduZWQgY291bnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaW1hZ2VDb3VudEluR2Vu
ZXJhbFBhc3RlYm9hcmQoKTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHJlc3Vs
dChBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShjb3VudCkpOwpAQCAtOTkxLDYgKzk5NywyMCBAQCBX
S1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRs
ZXIiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBt
ZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3Nh
Z2VCb2R5KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5KEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKKyAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKyAgICAgICAgCisgICAgICAgIFdLU3RyaW5n
UmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOworICAg
ICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRp
c3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoaG9zdE5hbWUsIFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRp
c3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMTM1NTUpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NjYsNiArNzY2LDE1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0
Q29va2llcygKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldENvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldENvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkIikpOworCisgICAgV0tSZXRh
aW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUo
ZW5hYmxlZCkpOworCisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKK30KKwogZG91YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VUaW1l
KCkKIHsKICAgICByZXR1cm4gY3VycmVudFRpbWUoKTsKQEAgLTEzMjgsNiArMTMzNywzMSBAQCB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmCiAgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworICAg
IAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSB9KTsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7
IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpIH0pOworICAg
IHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpIH0pOworICAg
IAorICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7CisgICAgVmVj
dG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICByYXdLZXlzW2ld
ID0ga2V5c1tpXS5nZXQoKTsKKyAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgp
OworICAgIH0KKyAgICAKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NGaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9u
YXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5k
YXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7CisgICAgCisgICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
K30KKwogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaAkocmV2aXNpb24gMjEzNTU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBw
dWJsaWM6CiAKICAgICAvLyBDb29raWVzIHRlc3RpbmcKICAgICB2b2lkIHNldEFsd2F5c0FjY2Vw
dENvb2tpZXMoYm9vbCk7CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5h
YmxlZChib29sKTsKIAogICAgIC8vIEN1c3RvbSBmdWxsIHNjcmVlbiBiZWhhdmlvci4KICAgICB2
b2lkIHNldEhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcihib29sIHZhbHVlKSB7IG1fY3VzdG9t
RnVsbFNjcmVlbkJlaGF2aW9yID0gdmFsdWU7IH0KQEAgLTM1MSw2ICszNTIsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2so
SlNWYWx1ZVJlZiBjYWxsYmFjayk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJl
Y29yZHNDYWxsYmFjaygpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFs
dWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYg
aG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihK
U1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1
bm5lci5pZGwJKHJldmlzaW9uIDIxMzU1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE2
Myw2ICsxNjMsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAKICAgICAvLyBDb29raWVzIHRl
c3RpbmcKICAgICB2b2lkIHNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbGVhbiBhY2NlcHQpOwor
ICAgIHZvaWQgc2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbGVhbiBlbmFi
bGVkKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVmZXJlbmNl
LCBET01TdHJpbmcgdmFsdWUpOwogCkBAIC0yNTgsNiArMjU5LDcgQEAgaW50ZXJmYWNlIFRlc3RS
dW5uZXIgewogICAgIHZvaWQgc2V0U3RhdGlzdGljc1N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhET01TdHJpbmcgaG9zdE5hbWUsIERPTVN0cmluZyBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vj
b25kcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKERP
TVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sZWFuIHZhbHVlKTsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbChib29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIxMzU1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTAzLTA4ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJA
YXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQ29tbXVuaWNh
dGUgdG8gdGhlIG5ldHdvcmsgcHJvY2VzcyB3aGljaCBkb21haW5zIHRvIHBhcnRpdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MzIyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zMDc2ODkyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4
IENocmlzdGVuc2VuLgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50
ZXJhY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9n
ZXQtY29va2llcy5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9zZXQtY29va2llLnBocDogQWRkZWQuCisKIDIw
MTctMDMtMDcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIERlYnVnIGZsYWcgdG8gVGVzdEV4cGVjdGF0aW9uIGZvciB3ZWJydGMvbGlid2VicnRjL2Rl
c2NyaXB0aW9uR2V0dGVycy5odG1sLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13
aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlv
bmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4
dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNl
ci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBA
QAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6
IFRlc3QgZm9yIFBhcnRpdGlvbmVkIENvb2tpZXMgV2l0aCBhbmQgV2l0aG91dCBVc2VyIEludGVy
YWN0aW9uCittYWluIGZyYW1lIC0gZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUK
K21haW4gZnJhbWUgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6IGh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3NldC1j
b29raWUucGhwP25hbWU9Zmlyc3RQYXJ0eUNvb2tpZSZ2YWx1ZT12YWx1ZSNodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tp
ZXMtd2l0aC1hbmQtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwjc3RlcDIgCittYWluIGZy
YW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5p
c2hMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lCittYWluIGZyYW1lIC0gZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZQorbWFpbiBm
cmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJh
bWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSB3aWxs
UGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRo
b3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbCNzdGVwMiAKK21haW4gZnJhbWUgLSBkaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3RGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFt
ZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgUGFydGl0aW9uZWQgQ29va2llcyBXaXRoIGFu
ZCBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBkaWRDaGFuZ2VMb2NhdGlv
bldpdGhpblBhZ2VGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+
LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJh
bWUwLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGgg
Ly88IS0tZnJhbWUwLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWlu
IGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRD
aGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUxLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK2ZyYW1l
ICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPiIgLSBkaWRIYW5kbGVPbmxvYWRFdmVu
dHNGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUwLS0+LS0+IiAtIGRp
ZEZpbmlzaExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+
LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88IS0t
ZnJhbWUxLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1l
IC0gZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQ
YXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
CitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTEtLT4tLT4iIC0gZGlkSGFuZGxlT25s
b2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMS0tPi0t
PiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZy
YW1lMi0tPi0tPiIgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRo
IC8vPCEtLWZyYW1lMi0tPi0tPiIgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorZnJh
bWUgIjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+IiAtIGRpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPiIg
LSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUyLS0+LS0+IiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorZnJhbWUgIjwhLS1mcmFt
ZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+IiAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorZnJhbWUg
IjwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUzLS0+LS0+IiAtIGRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lCitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFtZTMtLT4tLT4iIC0gZGlk
SGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK2ZyYW1lICI8IS0tZnJhbWVQYXRoIC8vPCEtLWZy
YW1lMy0tPi0tPiIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5p
c2hMb2FkRm9yRnJhbWUKKyAgCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUwLS0+LS0+JworLS0tLS0tLS0KK1Nob3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuCitE
aWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICdmaXJzdFBhcnR5Q29va2llJy4KK0RpZCBub3Qg
cmVjZWl2ZSBjb29raWUgbmFtZWQgJ3RoaXJkUGFydHlDb29raWUnLgorCisKKy0tLS0tLS0tCitG
cmFtZTogJzwhLS1mcmFtZVBhdGggLy88IS0tZnJhbWUxLS0+LS0+JworLS0tLS0tLS0KK1NldHRp
bmcgcGFydGl0aW9uZWQsIHRoaXJkIHBhcnR5IGNvb2tpZS4KKworCistLS0tLS0tLQorRnJhbWU6
ICc8IS0tZnJhbWVQYXRoIC8vPCEtLWZyYW1lMi0tPi0tPicKKy0tLS0tLS0tCitTaG91bGQgb25s
eSByZWNlaXZlIHBhcnRpdGlvbmVkLCB0aGlyZCBwYXJ0eSBjb29raWUuCitEaWQgbm90IHJlY2Vp
dmUgY29va2llIG5hbWVkICdmaXJzdFBhcnR5Q29va2llJy4KK1JlY2VpdmVkIGNvb2tpZSBuYW1l
ZCAndGhpcmRQYXJ0eUNvb2tpZScuCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lUGF0
aCAvLzwhLS1mcmFtZTMtLT4tLT4nCistLS0tLS0tLQorQWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiwg
c2hvdWxkIG9ubHkgcmVjZWl2ZSBub24tcGFydGl0aW9uZWQsIGZpcnN0IHBhcnR5IGNvb2tpZS4K
K1JlY2VpdmVkIGNvb2tpZSBuYW1lZCAnZmlyc3RQYXJ0eUNvb2tpZScuCitEaWQgbm90IHJlY2Vp
dmUgY29va2llIG5hbWVkICd0aGlyZFBhcnR5Q29va2llJy4KKwpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29v
a2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9w
YXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWNvb2tpZXMtd2l0aC1hbmQtd2l0aG91dC11c2Vy
LWludGVyYWN0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJV
VEYtOCI+CisgICAgPHRpdGxlPlRlc3QgZm9yIFBhcnRpdGlvbmVkIENvb2tpZXMgV2l0aCBhbmQg
V2l0aG91dCBVc2VyIEludGVyYWN0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdD4KKyAgICBjb25zdCBwYXJ0aXRpb25Ib3N0ID0gIjEyNy4wLjAuMTo4MDAwIjsKKyAgICBj
b25zdCB0aGlyZFBhcnR5T3JpZ2luID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCI7CisgICAgY29u
c3QgdGhpcmRQYXJ0eUJhc2VVcmwgPSB0aGlyZFBhcnR5T3JpZ2luICsgIi9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzIjsKKyAgICBjb25zdCBmaXJzdFBhcnR5Q29va2ll
TmFtZSA9ICJmaXJzdFBhcnR5Q29va2llIjsKKyAgICBjb25zdCBzdWJQYXRoVG9TZXRGaXJzdFBh
cnR5Q29va2llID0gIi9zZXQtY29va2llLnBocD9uYW1lPSIgKyBmaXJzdFBhcnR5Q29va2llTmFt
ZSArICImdmFsdWU9dmFsdWUiOworICAgIGNvbnN0IHRoaXJkUGFydHlDb29raWVOYW1lID0gInRo
aXJkUGFydHlDb29raWUiOworICAgIGNvbnN0IHN1YlBhdGhUb1NldFRoaXJkUGFydHlDb29raWUg
PSAiL3NldC1jb29raWUucGhwP25hbWU9IiArIHRoaXJkUGFydHlDb29raWVOYW1lICsgIiZ2YWx1
ZT12YWx1ZSI7CisgICAgY29uc3QgZnJhZ21lbnRXaXRoUmV0dXJuVXJsID0gImh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9uZWQtY29v
a2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbCI7CisgICAgY29uc3Qg
c3ViUGF0aFRvR2V0Q29va2llcyA9ICIvZ2V0LWNvb2tpZXMucGhwP25hbWUxPSIgKyBmaXJzdFBh
cnR5Q29va2llTmFtZSArICImbmFtZTI9IiArIHRoaXJkUGFydHlDb29raWVOYW1lOworCisgICAg
ZnVuY3Rpb24gc2V0RW5hYmxlRmVhdHVyZShlbmFibGUpIHsKKyAgICAgICAgaWYgKCFlbmFibGUp
IHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRDb29raWVTdG9yYWdl
UGFydGl0aW9uaW5nRW5hYmxlZChlbmFibGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlz
aFRlc3QoKSB7CisgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2UpOworICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvcGVuSWZyYW1lKHVy
bCwgb25Mb2FkSGFuZGxlcikgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGVsZW1lbnQuc3JjID0gdXJsOworICAgICAg
ICBpZiAob25Mb2FkSGFuZGxlcikgeworICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSBvbkxv
YWRIYW5kbGVyOworICAgICAgICB9CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZWxlbWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0VXNlckludGVyYWN0aW9uQW5kQ29u
dGludWUoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbih0aGlyZFBhcnR5T3JpZ2luLCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVy
LmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih0aGlyZFBhcnR5T3JpZ2luKSkKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIlRoaXJkIHBhcnR5IGRpZCBub3QgZ2V0IGxvZ2dlZCBmb3Ig
dXNlciBpbnRlcmFjdGlvbi4iKTsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24uaGFz
aCkgeworICAgICAgICAgICAgY2FzZSAiI3N0ZXAxIjoKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dC5sb2NhdGlvbi5ocmVmID0gdGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9TZXRGaXJzdFBh
cnR5Q29va2llICsgIiMiICsgZnJhZ21lbnRXaXRoUmV0dXJuVXJsICsgIiNzdGVwMiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICIjc3RlcDIiOgorICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDMiOworICAgICAgICAgICAgICAg
IG9wZW5JZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9HZXRDb29raWVzICsgIiZt
ZXNzYWdlPVNob3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuIiwgcnVuVGVzdCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICIjc3RlcDMiOgorICAgICAgICAgICAgICAg
IGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDQiOworICAgICAgICAgICAgICAgIG9wZW5J
ZnJhbWUodGhpcmRQYXJ0eUJhc2VVcmwgKyBzdWJQYXRoVG9TZXRUaGlyZFBhcnR5Q29va2llICsg
IiZtZXNzYWdlPVNldHRpbmcgcGFydGl0aW9uZWQsIHRoaXJkIHBhcnR5IGNvb2tpZS4iLCBydW5U
ZXN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwNCI6
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwNSI7CisgICAg
ICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENv
b2tpZXMgKyAiJm1lc3NhZ2U9U2hvdWxkIG9ubHkgcmVjZWl2ZSBwYXJ0aXRpb25lZCwgdGhpcmQg
cGFydHkgY29va2llLiIsIHNldFVzZXJJbnRlcmFjdGlvbkFuZENvbnRpbnVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwNSI6CisgICAgICAgICAgICAg
ICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENvb2tpZXMgKyAi
Jm1lc3NhZ2U9QWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiwgc2hvdWxkIG9ubHkgcmVjZWl2ZSBub24t
cGFydGl0aW9uZWQsIGZpcnN0IHBhcnR5IGNvb2tpZS4iLCBmaW5pc2hUZXN0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb2N1bWVudC5sb2Nh
dGlvbi5ob3N0ID09PSBwYXJ0aXRpb25Ib3N0ICYmIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPT0g
IiIgJiYgd2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICBz
ZXRFbmFibGVGZWF0dXJlKHRydWUpOworCisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0Zp
cmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigibG9jYWxob3N0IiwgdHJ1ZSk7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuZHVt
cENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAi
c3RlcDEiOworICAgIH0KKworICAgIHJ1blRlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcy9nZXQtY29va2ll
cy5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcmVzb3VyY2VzL2dldC1jb29raWVzLnBocAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9yZXNvdXJjZXMvZ2V0LWNvb2tpZXMucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMg
QEAKKzw/cGhwCitlY2hvICRfR0VUWyJtZXNzYWdlIl0gLiAiPGJyPiI7CitpZighaXNzZXQoJF9D
T09LSUVbJF9HRVRbIm5hbWUxIl1dKSkgeworICAgIGVjaG8gIkRpZCBub3QgcmVjZWl2ZSBjb29r
aWUgbmFtZWQgJyIgLiAkX0dFVFsibmFtZTEiXSAuICInLjxicj4iOworfSBlbHNlIHsKKyAgICBl
Y2hvICJSZWNlaXZlZCBjb29raWUgbmFtZWQgJyIgLiAkX0dFVFsibmFtZTEiXSAuICInLjxicj4i
OworfQoraWYoIWlzc2V0KCRfQ09PS0lFWyRfR0VUWyJuYW1lMiJdXSkpIHsKKyAgICBlY2hvICJE
aWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICciIC4gJF9HRVRbIm5hbWUyIl0gLiAiJy48YnI+
IjsKK30gZWxzZSB7CisgICAgZWNobyAiUmVjZWl2ZWQgY29va2llIG5hbWVkICciIC4gJF9HRVRb
Im5hbWUyIl0gLiAiJy48YnI+IjsKK30KKz8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9yZXNvdXJjZXMvc2V0LWNvb2tpZS5waHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvcmVzb3VyY2VzL3NldC1jb29raWUucGhwCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291
cmNlcy9zZXQtY29va2llLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzw/cGhw
CitzZXRjb29raWUoJF9HRVRbIm5hbWUiXSwgJF9HRVRbInZhbHVlIl0sIDAsICIvIik7CitlY2hv
ICRfR0VUWyJtZXNzYWdlIl0gLiAiPGJyPiI7Cis/PgorPHNjcmlwdD4KK2lmIChkb2N1bWVudC5s
b2NhdGlvbi5oYXNoKSB7CisgICAgc2V0VGltZW91dCgiZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9
IGRvY3VtZW50LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpIiwgMTApOworfQorPC9zY3JpcHQ+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>