<?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>70860</bug_id>
          
          <creation_ts>2011-10-25 16:29:44 -0700</creation_ts>
          <short_desc>[MutationObservers] Support attributeFilter for attribute mutations</short_desc>
          <delta_ts>2011-11-11 10:56:19 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68729</blocked>
    
    <blocked>71865</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Rafael Weinstein">rafaelw</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>rafaelw</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>490458</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-25 16:29:44 -0700</bug_when>
    <thetext>[MutationObservers] Implement attributeFilter for attribute mutations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492862</commentid>
    <comment_count>1</comment_count>
      <attachid>112960</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-28 18:43:12 -0700</bug_when>
    <thetext>Created attachment 112960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492864</commentid>
    <comment_count>2</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-28 18:43:55 -0700</bug_when>
    <thetext>Still work to do, but all tests are written and working in V8. Still needs JSC support &amp; cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493478</commentid>
    <comment_count>3</comment_count>
      <attachid>113083</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-31 13:49:13 -0700</bug_when>
    <thetext>Created attachment 113083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493481</commentid>
    <comment_count>4</comment_count>
      <attachid>113083</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-31 13:56:06 -0700</bug_when>
    <thetext>Comment on attachment 113083
Patch

This is now ready for review. Note that there is a FIXME in webkit mutation observer pointing out that the addition of the attributeFilter in MutationObserverRegistration means that transient subtree observation now does more copying than necessary.

As noted in Adam&apos;s characterDataOldValue change, we are waiting until both patches are landed and then will cleanup a number of things with a refactor which will split out MutationObserverRegistration into it&apos;s own class which doesn&apos;t get copied around</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493667</commentid>
    <comment_count>5</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-31 17:33:31 -0700</bug_when>
    <thetext>This is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494267</commentid>
    <comment_count>6</comment_count>
      <attachid>113083</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-01 16:14:10 -0700</bug_when>
    <thetext>Comment on attachment 113083
Patch

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

&gt; Source/WebCore/dom/Node.h:594
&gt; +    void getRegisteredMutationObserversOfType(HashMap&lt;WebKitMutationObserver*, MutationObserverOptions&gt;&amp;, WebKitMutationObserver::MutationType, const AtomicString&amp;);

The third argument needs a name, since it&apos;s not clear from here what it&apos;s for.

&gt; Source/WebCore/dom/Node.h:600
&gt; +    MutationRegistrationResult registerMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt;, MutationObserverOptions, const HashSet&lt;AtomicString&gt;&amp;, Node* registrationNode = 0);

Similar comment here about the second arg; what is this HashSet used for?

&gt; Source/WebCore/dom/NodeRareData.h:120
&gt; +            return this-&gt;caseInsensitiveAttributeFilter().contains(attributeName);

No need for explicit &quot;this&quot;

&gt; Source/WebCore/dom/NodeRareData.h:130
&gt; +

Nit: extra blank line not needed.

&gt; Source/WebCore/dom/NodeRareData.h:138
&gt; +        return this-&gt;m_caseInsensitiveAttributeFilter;

No need for explicit &quot;this&quot; here.

&gt; Source/WebCore/dom/NodeRareData.h:157
&gt; +    HashSet&lt;AtomicString&gt; m_caseInsensitiveAttributeFilter;

Maybe make this an OwnPtr&lt;HashSet&lt;...&gt; &gt; and get rid of the bool flag below?

&gt; Source/WebCore/dom/WebKitMutationObserver.h:72
&gt; +    void observe(Node*, MutationObserverOptions, const HashSet&lt;AtomicString&gt;&amp;);

Same comment on naming this new arg.

&gt; Source/WebCore/dom/WebKitMutationObserver.h:74
&gt; +    void willDetachNodeInObservedSubtree(PassRefPtr&lt;Node&gt; registrationNode, MutationObserverOptions, HashSet&lt;AtomicString&gt;&amp;, PassRefPtr&lt;Node&gt; detachingNode);

and here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494863</commentid>
    <comment_count>7</comment_count>
      <attachid>113083</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-02 13:39:33 -0700</bug_when>
    <thetext>Comment on attachment 113083
Patch

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

&gt;&gt; Source/WebCore/dom/Node.h:594
&gt;&gt; +    void getRegisteredMutationObserversOfType(HashMap&lt;WebKitMutationObserver*, MutationObserverOptions&gt;&amp;, WebKitMutationObserver::MutationType, const AtomicString&amp;);
&gt; 
&gt; The third argument needs a name, since it&apos;s not clear from here what it&apos;s for.

done

&gt;&gt; Source/WebCore/dom/Node.h:600
&gt;&gt; +    MutationRegistrationResult registerMutationObserver(PassRefPtr&lt;WebKitMutationObserver&gt;, MutationObserverOptions, const HashSet&lt;AtomicString&gt;&amp;, Node* registrationNode = 0);
&gt; 
&gt; Similar comment here about the second arg; what is this HashSet used for?

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:120
&gt;&gt; +            return this-&gt;caseInsensitiveAttributeFilter().contains(attributeName);
&gt; 
&gt; No need for explicit &quot;this&quot;

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:130
&gt;&gt; +
&gt; 
&gt; Nit: extra blank line not needed.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:138
&gt;&gt; +        return this-&gt;m_caseInsensitiveAttributeFilter;
&gt; 
&gt; No need for explicit &quot;this&quot; here.

done

&gt;&gt; Source/WebCore/dom/NodeRareData.h:157
&gt;&gt; +    HashSet&lt;AtomicString&gt; m_caseInsensitiveAttributeFilter;
&gt; 
&gt; Maybe make this an OwnPtr&lt;HashSet&lt;...&gt; &gt; and get rid of the bool flag below?

This &quot;class&quot; needs to be copyable at the moment to live in NodeRareData::OwnPtr&lt;Vector&lt;MutationObserverRegistration&gt; &gt; m_mutationObserverRegistry;

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.h:72
&gt;&gt; +    void observe(Node*, MutationObserverOptions, const HashSet&lt;AtomicString&gt;&amp;);
&gt; 
&gt; Same comment on naming this new arg.

done

&gt;&gt; Source/WebCore/dom/WebKitMutationObserver.h:74
&gt;&gt; +    void willDetachNodeInObservedSubtree(PassRefPtr&lt;Node&gt; registrationNode, MutationObserverOptions, HashSet&lt;AtomicString&gt;&amp;, PassRefPtr&lt;Node&gt; detachingNode);
&gt; 
&gt; and here

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494864</commentid>
    <comment_count>8</comment_count>
      <attachid>113366</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-02 13:40:05 -0700</bug_when>
    <thetext>Created attachment 113366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495888</commentid>
    <comment_count>9</comment_count>
      <attachid>113582</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-03 16:54:59 -0700</bug_when>
    <thetext>Created attachment 113582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495971</commentid>
    <comment_count>10</comment_count>
      <attachid>113602</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-03 18:27:21 -0700</bug_when>
    <thetext>Created attachment 113602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495972</commentid>
    <comment_count>11</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-03 18:27:56 -0700</bug_when>
    <thetext>No with build fixes &amp; delicious new refactor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496049</commentid>
    <comment_count>12</comment_count>
      <attachid>113602</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-03 22:24:16 -0700</bug_when>
    <thetext>Comment on attachment 113602
Patch

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

Could you separate the patch to extract MutationObserverRegistration as a class in a separate patch? In particular, I can&apos;t make sense of changes to Node.cpp. Also, I&apos;m little worried that we might be introducing many function calls in hot path by extracting this class.

&gt; Source/WebCore/dom/CharacterData.cpp:208
&gt; -    HashMap&lt;WebKitMutationObserver*, MutationObserverOptions&gt; observers;
&gt; +    HashMap&lt;WebKitMutationObserver*, MutationRecordDeliveryOptions&gt; observers;

Can we put this in a separate patch? (file a bug that blocks this bug and post a patch there that just does renaming).

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:59
&gt; +PassOwnPtr&lt;MutationObserverRegistration&gt; MutationObserverRegistration::create(PassRefPtr&lt;WebKitMutationObserver&gt; observer, Node* registrationNode)
&gt; +{
&gt; +    return adoptPtr(new MutationObserverRegistration(observer, registrationNode));
&gt; +}
&gt; +
&gt; +MutationObserverRegistration::MutationObserverRegistration(PassRefPtr&lt;WebKitMutationObserver&gt; observer, Node* registrationNode)
&gt; +     : m_observer(observer)
&gt; +     , m_registrationNode(registrationNode)
&gt; +     , m_options(0)
&gt; +{
&gt; +    m_observer-&gt;observationStarted(this);
&gt; +}
&gt; +
&gt; +MutationObserverRegistration::~MutationObserverRegistration()
&gt; +{
&gt; +    clearTransientRegistrations();
&gt; +    m_observer-&gt;observationEnded(this);
&gt; +}

Can&apos;t we just make these functions inline to avoid function calls when creating/destroying MutationObserverRegistration?

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:102
&gt; +void MutationObserverRegistration::unregister()
&gt; +{
&gt; +    m_registrationNode-&gt;unregisterMutationObserver(this); // This call will cause this object to be deleted.
&gt; +}

This should just be an inline function.

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:106
&gt; +    if (!(m_options &amp; type))

We should really have optionsContain(type) or optionsHave(type)

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:118
&gt; +    if (node-&gt;document()-&gt;isHTMLDocument() &amp;&amp; node-&gt;isHTMLElement())

Why do we care whether node belongs to a HTML document or not?

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:124
&gt; +const HashSet&lt;AtomicString&gt;&amp;  MutationObserverRegistration::caseInsensitiveAttributeFilter()

Nit: two spaces after &amp;.

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:126
&gt; +    if (!m_caseInsensitiveAttributeFilter) {

Prefer early exit.

&gt; Source/WebCore/dom/MutationObserverRegistration.h:58
&gt; +    MutationRecordDeliveryOptions deliveryOptions() { return m_options &amp; (WebKitMutationObserver::AttributeOldValue | WebKitMutationObserver::CharacterDataOldValue); }

Can we use using to avoid having to repeat WebKitMutationObserver twice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496361</commentid>
    <comment_count>13</comment_count>
      <attachid>113602</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-04 11:50:54 -0700</bug_when>
    <thetext>Comment on attachment 113602
Patch

This is now blocked on the refactor which was split out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496622</commentid>
    <comment_count>14</comment_count>
      <attachid>113748</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-04 20:14:30 -0700</bug_when>
    <thetext>Created attachment 113748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496623</commentid>
    <comment_count>15</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-04 20:15:45 -0700</bug_when>
    <thetext>This is ready for review again. It&apos;s much simpler and shorter now that the refactor in bug 71577 went in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497730</commentid>
    <comment_count>16</comment_count>
      <attachid>113748</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-07 21:51:52 -0800</bug_when>
    <thetext>Comment on attachment 113748
Patch

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

I think we want JSC binding before landing this patch. Maybe Sam or Anders can help us?

&gt; Source/WebCore/bindings/js/JSWebKitMutationObserverCustom.cpp:81
&gt; +    // FIXME: Add support for parsing of the attributeFilter option.

We should add JSC binding.

&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:127
&gt; +const HashSet&lt;AtomicString&gt;&amp;  MutationObserverRegistration::caseInsensitiveAttributeFilter()

Nit: two spaces after &amp;.

&gt; Source/WebCore/dom/MutationObserverRegistration.h:73
&gt; +    OwnPtr&lt;HashSet&lt;AtomicString&gt; &gt;m_caseInsensitiveAttributeFilter;

Nit: need a space after the second &gt;. I&apos;m also not convinced that we really need to have OwnPtr of HashSet here. I don&apos;t think we&apos;re saving much.

&gt; LayoutTests/fast/mutation/observe-attributes.html:601
&gt; +        observer.observe(div, { attributes: true, attributeFilter: [&apos;ID&apos;, &apos;id&apos;, &apos;booM&apos;] });

Can we add BaZ to make sure we do case-sensitive comparison in non-HTML document?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498485</commentid>
    <comment_count>17</comment_count>
      <attachid>114168</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-08 16:03:30 -0800</bug_when>
    <thetext>Created attachment 114168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498487</commentid>
    <comment_count>18</comment_count>
      <attachid>113748</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-11-08 16:04:35 -0800</bug_when>
    <thetext>Comment on attachment 113748
Patch

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

&gt;&gt; Source/WebCore/dom/MutationObserverRegistration.cpp:127
&gt;&gt; +const HashSet&lt;AtomicString&gt;&amp;  MutationObserverRegistration::caseInsensitiveAttributeFilter()
&gt; 
&gt; Nit: two spaces after &amp;.

done

&gt;&gt; Source/WebCore/dom/MutationObserverRegistration.h:73
&gt;&gt; +    OwnPtr&lt;HashSet&lt;AtomicString&gt; &gt;m_caseInsensitiveAttributeFilter;
&gt; 
&gt; Nit: need a space after the second &gt;. I&apos;m also not convinced that we really need to have OwnPtr of HashSet here. I don&apos;t think we&apos;re saving much.

done

&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:601
&gt;&gt; +        observer.observe(div, { attributes: true, attributeFilter: [&apos;ID&apos;, &apos;id&apos;, &apos;booM&apos;] });
&gt; 
&gt; Can we add BaZ to make sure we do case-sensitive comparison in non-HTML document?

booM is already testing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498499</commentid>
    <comment_count>19</comment_count>
      <attachid>113748</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-08 16:15:28 -0800</bug_when>
    <thetext>Comment on attachment 113748
Patch

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

&gt;&gt;&gt; LayoutTests/fast/mutation/observe-attributes.html:601
&gt;&gt;&gt; +        observer.observe(div, { attributes: true, attributeFilter: [&apos;ID&apos;, &apos;id&apos;, &apos;booM&apos;] });
&gt;&gt; 
&gt;&gt; Can we add BaZ to make sure we do case-sensitive comparison in non-HTML document?
&gt; 
&gt; booM is already testing that.

But you&apos;re setting booM, right? What I want to see is a test case where you listen to BaZ and you only set baz (so that you don&apos;t hear anything).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498504</commentid>
    <comment_count>20</comment_count>
      <attachid>114168</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-08 16:19:07 -0800</bug_when>
    <thetext>Comment on attachment 114168
Patch

r=me for everything except V8-binding. Dimitri, could you take a look at V8 part?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500922</commentid>
    <comment_count>21</comment_count>
      <attachid>114168</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-11 10:56:11 -0800</bug_when>
    <thetext>Comment on attachment 114168
Patch

Clearing flags on attachment: 114168

Committed r99992: &lt;http://trac.webkit.org/changeset/99992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500923</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-11 10:56:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112960</attachid>
            <date>2011-10-28 18:43:12 -0700</date>
            <delta_ts>2011-10-31 13:49:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111028184311.patch</filename>
            <type>text/plain</type>
            <size>29205</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3ODUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMDVkM2I0NDRjMWJhMGIz
NDYyNTZkY2FlMTgyZDU5NGFmYjRiMWI3Li5mMWY4NGQyYjFhZWVjMmZmNDc1M2NmZDU0MGY0YjYz
NzcwODAyYThjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMjggIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvT3B0aW9uc09iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0
OjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZUNhbGxi
YWNrKToKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQpOgorICAgICAgICAqIGRvbS9D
aGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5jcmVtZW50U2Nv
cGluZ0xldmVsKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjplbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKToKKyAgICAgICAgKiBkb20vTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGRNYXRjaGluZ09ic2VydmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzTm9kZVdpbGxEZXRhY2gpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNTdWJ0cmVlKToKKyAgICAgICAgKiBkb20vV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpvYnNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6OndpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUpOgorICAgICAgICAqIGRvbS9XZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmg6CisKIDIwMTEtMTAtMjggIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBGYWN0b3IgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIg
b3V0IG9mIEFjdGl2ZURPTU9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvT3B0aW9uc09iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRp
b25zT2JqZWN0LmNwcAppbmRleCBhYTg1Mjg0YjU3ZmViZDU4Mzg0Mjg0MDQ3OTNlNDM3M2QyNTgy
MTg1Li5iOTUwNDM5NDY3ZGRkMmNlZmNkZDMxNjcyNjVhYTU1OWQ3ODIzZDNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcApAQCAtMjEzLDYgKzIxMywy
NSBAQCBib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgTWVzc2FnZVBv
cnRBcnJheSYgdmFsdWUpIGNvbnN0CiAgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0QXJyYXkodjhW
YWx1ZSwgdmFsdWUpOwogfQogCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcm
IGtleSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFycmF5LWxpa2Ug
b2JqZWN0cworICAgIGlmICghdjhWYWx1ZS0+SXNBcnJheSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiB2OEFycmF5ID0gdjg6OkxvY2FsPHY4OjpB
cnJheT46OkNhc3QodjhWYWx1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2OEFycmF5
LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGluZGV4ZWRW
YWx1ZSA9IHY4QXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKTsKKyAgICAgICAgdmFsdWUu
YWRkKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoaW5kZXhlZFZhbHVlKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgT3B0aW9uc09iamVjdDo6Z2V0V2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewogICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9PcHRpb25zT2JqZWN0LmgKaW5kZXggY2Q0YzJmZDhlZmY5NzU3MzkzNmM2OGJiNDAwMWU0ZDJh
ZTgwNTQ3ZC4uNjljMTFiMTEyNzJhMzEzMWIzNzkwZjAxOGNjOTY1Mjc4MWY4MWIwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApAQCAtMzAsNiArMzAsOCBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNiAr
NTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9u
ZyBsb25nJikgY29uc3Q7CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPERPTVdp
bmRvdz4mKSBjb25zdDsKICAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBNZXNzYWdlUG9ydEFy
cmF5JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxBdG9taWNT
dHJpbmc+JikgY29uc3Q7CiAKICAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhj
b25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyQ3VzdG9tLmNwcAppbmRleCBlZjUzZWFmMjdlZjEwNTNjZTcwZWFkZTlkNGM3NzNjYjQzYzM0
ODc0Li44ZGYxYWEyYWI1YzQ1ZWIzNjRlMGUwZjYxMmZkZDJiMTlmN2EwMTUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcApAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNs
dWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCisKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg5LDExICs5MywxNSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZQogCiAgICAgT3B0aW9uc09iamVjdCBvcHRpb25zT2JqZWN0KGFyZ3NbMV0pOwogICAgIHVu
c2lnbmVkIG9wdGlvbnMgPSAwOworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBhdHRyaWJ1dGVG
aWx0ZXI7CiAgICAgYm9vbCBvcHRpb247CiAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJjaGls
ZExpc3QiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpDaGlsZExpc3Q7Ci0gICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJhdHRy
aWJ1dGVzIiwgb3B0aW9uKSAmJiBvcHRpb24pCisgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJh
dHRyaWJ1dGVzIiwgb3B0aW9uKSAmJiBvcHRpb24pIHsKICAgICAgICAgb3B0aW9ucyB8PSBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzOworICAgICAgICBpZiAob3B0aW9uc09iamVj
dC5nZXQoImF0dHJpYnV0ZUZpbHRlciIsIGF0dHJpYnV0ZUZpbHRlcikpCisgICAgICAgICAgICBv
cHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZUZpbHRlcjsKKyAgICB9
CiAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJjaGFyYWN0ZXJEYXRhIiwgb3B0aW9uKSAmJiBv
cHRpb24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFj
dGVyRGF0YTsKICAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoInN1YnRyZWUiLCBvcHRpb24pICYm
IG9wdGlvbikKQEAgLTEwMyw3ICsxMTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZQogICAg
IGlmIChvcHRpb25zT2JqZWN0LmdldCgiY2hhcmFjdGVyRGF0YU9sZFZhbHVlIiwgb3B0aW9uKSAm
JiBvcHRpb24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hh
cmFjdGVyRGF0YU9sZFZhbHVlOwogCi0gICAgaW1wLT5vYnNlcnZlKHRhcmdldCwgb3B0aW9ucyk7
CisgICAgaW1wLT5vYnNlcnZlKHRhcmdldCwgb3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKTsKICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmNwcAppbmRleCAzN2E3ZmJmZmJhMmFhOWYzMWU5NjY5M2JiN2FjOTcyOGI1MjM0
YjUzLi5mNjNlY2Y2OGFjZGI4M2EyMzI1ODk5NjgwMGUwY2Q4YjY0NWNhZGI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCogb2xkRGF0YSkKIHsKICNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIEhhc2hNYXA8V2ViS2l0TXV0YXRpb25P
YnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiBvYnNlcnZlcnM7Ci0gICAgZ2V0UmVn
aXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6Q2hhcmFjdGVyRGF0YSk7CisgICAgZ2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2
ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0
YSwgbnVsbEF0b20pOwogICAgIGlmICghb2JzZXJ2ZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNo
YXJhY3RlckRhdGEodGhpcyk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2
ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggNWRjYmRjZmYzMGRh
YTk4Y2I5MDFiN2I2ZWVhMGU0ZDE2OThmZTYyYi4uNjNjYzViODQzMGVhMGZmMDQzZTBjNTdlMjBi
YmViYzQwOWNjMjkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11
dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0Lmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTI0NSw3ICsyNDYsNyBAQCB2b2lkIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpp
bmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQogICAgIH0KIAogICAgIEhhc2hNYXA8
V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiBvYnNlcnZl
cnM7Ci0gICAgdGFyZ2V0LT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2Jz
ZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExpc3QpOworICAgIHRhcmdldC0+
Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0LCBudWxsQXRvbSk7CiAgICAgaWYgKG9ic2VydmVycy5p
c0VtcHR5KCkpCiAgICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCAwKTsKICAgICBl
bHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZWM0ODA1ODI1N2M0NGQ3Y2ZhYjcwNTBkMTJm
MjQxMTY2YzdkYzZkYi4uY2I5YTRlMDY2NzE5ZDcwMjIyM2YzZDQwMWE1YzRjNjE3M2I4NzFhMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjIwLDcgKzYyMCw3IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkks
IGNvbnN0IFN0CiBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgSGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+IG9ic2Vy
dmVyczsKLSAgICBlbGVtZW50LT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUo
b2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzKTsKKyAgICBlbGVt
ZW50LT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzLCBuYW1lLmxvY2FsTmFtZSgpKTsKICAgICBp
ZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
aW5kZXggMTg0NTY4NzY5ZWExMzJiYzNmMTUwNjdhYmVhMzZhZWVmYjU1OWQwZi4uZDAxOWZlY2Yz
MzE1ZGM0NmY2ZThiYzE3ZjVmN2ZmYzQ2ZDdkYjdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjcw
Miw3ICsyNzAyLDcgQEAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiBOb2Rl
OjptdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQogICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8g
cmFyZURhdGEoKS0+bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgOiAwOwogfQogCi1zdGF0aWMg
dm9pZCBhZGRNYXRjaGluZ09ic2VydmVycyhIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIq
LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4mIG9ic2VydmVycywgVmVjdG9yPE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0
aW9ucykKK3N0YXRpYyB2b2lkIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKEhhc2hNYXA8V2ViS2l0TXV0
YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzLCBWZWN0
b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIHJlZ2lzdHJ5LCBNdXRhdGlvbk9ic2Vy
dmVyT3B0aW9ucyBvcHRpb25zLCBOb2RlKiBzb3VyY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgaWYgKCFyZWdpc3RyeSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjcxMSw3ICsyNzExLDcgQEAgc3RhdGljIHZvaWQgYWRkTWF0Y2hpbmdPYnNlcnZlcnMoSGFz
aE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnYKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uJiBlbnRyeSA9IHJlZ2lzdHJ5LT5hdChpKTsKIAotICAgICAgICBpZiAoIWVudHJ5
Lmhhc0FsbE9wdGlvbnMob3B0aW9ucykpCisgICAgICAgIGlmICghZW50cnkuc2hvdWxkUmVjZWl2
ZU11dGF0aW9uKHNvdXJjZU5vZGUsIG9wdGlvbnMsIGF0dHJpYnV0ZU5hbWUpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgcGFpcjxIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBv
YnNlcnZlcnMuYWRkKGVudHJ5Lm9ic2VydmVyLmdldCgpLCBlbnRyeS5vcHRpb25zKTsKQEAgLTI3
MjAsMTcgKzI3MjAsMTcgQEAgc3RhdGljIHZvaWQgYWRkTWF0Y2hpbmdPYnNlcnZlcnMoSGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnYKICAgICB9CiB9CiAKLXZv
aWQgTm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKEhhc2hNYXA8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJz
LCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUgdHlwZSkKK3ZvaWQgTm9kZTo6
Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKEhhc2hNYXA8V2ViS2l0TXV0YXRp
b25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzLCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVOYW1lKQogewotICAgIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKG9ic2VydmVycywgbXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksIHR5cGUpOworICAgIGFkZE1hdGNoaW5nT2JzZXJ2ZXJz
KG9ic2VydmVycywgbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksIHR5cGUsIHRoaXMsIGF0dHJp
YnV0ZU5hbWUpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgYWRkTWF0Y2hpbmdPYnNlcnZlcnMob2Jz
ZXJ2ZXJzLCBub2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgdHlwZSB8IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUpOworICAgICAgICBhZGRNYXRjaGluZ09ic2VydmVycyhv
YnNlcnZlcnMsIG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLCB0eXBlIHwgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZSwgdGhpcywgYXR0cmlidXRlTmFtZSk7CiB9CiAKLU5v
ZGU6Ok11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBNdXRhdGlv
bk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQorTm9kZTo6
TXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVy
KFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmli
dXRlRmlsdGVyLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQogewogICAgIFZlY3RvcjxNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uPiogcmVnaXN0cnkgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKLSAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uIHJlZ2lzdHJhdGlvbihvYnNlcnZlciwgb3B0aW9ucywgcmVnaXN0cmF0aW9uTm9kZSk7
CisgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiByZWdpc3RyYXRpb24ob2JzZXJ2ZXIs
IG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlciwgcmVnaXN0cmF0aW9uTm9kZSk7CiAKICAgICBzaXpl
X3QgaW5kZXggPSByZWdpc3RyeS0+ZmluZChyZWdpc3RyYXRpb24pOwogICAgIGlmIChpbmRleCA9
PSBub3RGb3VuZCkgewpAQCAtMjczOCw3ICsyNzM4LDEwIEBAIE5vZGU6Ok11dGF0aW9uUmVnaXN0
cmF0aW9uUmVzdWx0IE5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdl
YktpCiAgICAgICAgIHJldHVybiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZDsKICAgICB9CiAK
LSAgICByZWdpc3RyeS0+YXQoaW5kZXgpLm9wdGlvbnMgPSByZWdpc3RyYXRpb24ub3B0aW9uczsK
KyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiBleGlzdGluZ1JlZ2lzdHJhdGlvbiA9
IHJlZ2lzdHJ5LT5hdChpbmRleCk7CisgICAgZXhpc3RpbmdSZWdpc3RyYXRpb24ub3B0aW9ucyA9
IHJlZ2lzdHJhdGlvbi5vcHRpb25zOworICAgIGV4aXN0aW5nUmVnaXN0cmF0aW9uLmF0dHJpYnV0
ZUZpbHRlci5zd2FwKHJlZ2lzdHJhdGlvbi5hdHRyaWJ1dGVGaWx0ZXIpOworCiAgICAgcmV0dXJu
IE11dGF0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc1Jlc2V0OwogfQogCkBAIC0yNzQ5LDcgKzI3NTIs
OCBAQCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZQogICAgIGlmICghcmVnaXN0cnkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9u
KG9ic2VydmVyLCAwLCByZWdpc3RyYXRpb25Ob2RlKTsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4gZHVtbXk7CisgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiByZWdpc3RyYXRpb24o
b2JzZXJ2ZXIsIDAsIGR1bW15LCByZWdpc3RyYXRpb25Ob2RlKTsKICAgICBzaXplX3QgaW5kZXgg
PSByZWdpc3RyeS0+ZmluZChyZWdpc3RyYXRpb24pOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RG
b3VuZCk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQpAQCAtMjc2OCwxMyArMjc3MiwxMyBA
QCB2b2lkIE5vZGU6Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzTm9kZVdpbGxEZXRhY2goKQogICAg
ICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQoaSk7Ci0gICAgICAg
ICAgICBpZiAoIXJlZ2lzdHJhdGlvbi5oYXNBbGxPcHRpb25zKFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6OlN1YnRyZWUpKQorICAgICAgICAgICAgaWYgKCFyZWdpc3RyYXRpb24uaXNTdWJ0cmVlKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIE5vZGUqIHJlZ2lzdHJh
dGlvbk5vZGUgPSByZWdpc3RyYXRpb24ucmVnaXN0cmF0aW9uTm9kZTsKICAgICAgICAgICAgIGlm
ICghcmVnaXN0cmF0aW9uTm9kZSkKICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25Ob2RlID0g
bm9kZTsKLSAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5vYnNlcnZlci0+d2lsbERldGFjaE5vZGVJ
bk9ic2VydmVkU3VidHJlZShyZWdpc3RyYXRpb25Ob2RlLCByZWdpc3RyYXRpb24ub3B0aW9ucywg
dGhpcyk7CisgICAgICAgICAgICByZWdpc3RyYXRpb24ub2JzZXJ2ZXItPndpbGxEZXRhY2hOb2Rl
SW5PYnNlcnZlZFN1YnRyZWUocmVnaXN0cmF0aW9uTm9kZSwgcmVnaXN0cmF0aW9uLm9wdGlvbnMs
IHJlZ2lzdHJhdGlvbi5hdHRyaWJ1dGVGaWx0ZXIsIHRoaXMpOwogICAgICAgICB9CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKaW5kZXggYzhhMTMxOTcwY2NjMzBkNTU3MzUwNDI0MzdlY2FjNjUxMGQ5NDU1
ZC4uYjY1MDI0ZGUzNGE4YWZjZDQxMTA0MGI4NDBjOTNjM2NlZTQ5YjM3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKICNpZiBVU0UoSlNDKQogbmFtZXNw
YWNlIEpTQyB7CkBAIC01OTAsMTMgKzU5MSwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgdm9pZCBnZXRSZWdpc3RlcmVkTXV0YXRpb25P
YnNlcnZlcnNPZlR5cGUoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnM+JiwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlKTsK
KyAgICB2b2lkIGdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4mLCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAg
ICAgZW51bSBNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCB7CiAgICAgICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RlcmVkLAogICAgICAgICBNdXRhdGlvblJlZ2lzdHJhdGlvbk9wdGlvbnNSZXNl
dAogICAgIH07Ci0gICAgTXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgcmVnaXN0ZXJNdXRhdGlv
bk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlID0gMCk7CisgICAgTXV0YXRpb25S
ZWdpc3RyYXRpb25SZXN1bHQgcmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlcj4sIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zLCBjb25zdCBIYXNo
U2V0PEF0b21pY1N0cmluZz4mLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlID0gMCk7CiAKICAgICB2
b2lkIHVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcj4sIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUgPSAwKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVS
YXJlRGF0YS5oCmluZGV4IGVjYmQ1NTkyMmY0MjkwYmJiMzhkYTMxMDk3MGYwNThhMGI1NjRmNGMu
LmQ4NjFhZDgzNmFkZjJkNzVmN2NiNTNmY2RkZjA0MGRiZjBlZDQ4MDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODksMTIgKzkwLDIzIEBAIHBy
aXZhdGU6CiB9OwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKwogc3RydWN0IE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gewotICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24oUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwgTXV0YXRp
b25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgTm9kZSogbm9kZSkKKyAgICBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2
ZXIsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQogICAgICAg
ICA6IG9ic2VydmVyKG9ic2VydmVyKQogICAgICAgICAsIG9wdGlvbnMob3B0aW9ucykKLSAgICAg
ICAgLCByZWdpc3RyYXRpb25Ob2RlKG5vZGUpCisgICAgICAgICwgYXR0cmlidXRlRmlsdGVyKGF0
dHJpYnV0ZUZpbHRlcikKKyAgICAgICAgLCByZWdpc3RyYXRpb25Ob2RlKHJlZ2lzdHJhdGlvbk5v
ZGUpCiAgICAgeworICAgICAgICBpZiAoIShvcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6QXR0cmlidXRlRmlsdGVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmb3Ig
KEhhc2hTZXQ8QXRvbWljU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRoaXMtPmF0dHJp
YnV0ZUZpbHRlci5iZWdpbigpOyBpdGVyICE9IHRoaXMtPmF0dHJpYnV0ZUZpbHRlci5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZUxvd2VyID0g
aXRlci0+bG93ZXIoKTsKKworICAgICAgICAgICAgaWYgKCgqaXRlcikgIT0gYXR0cmlidXRlTmFt
ZUxvd2VyKQorICAgICAgICAgICAgICAgIHRoaXMtPmNhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZp
bHRlci5hZGQoYXR0cmlidXRlTmFtZUxvd2VyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiBvdGhlcikg
Y29uc3QKQEAgLTEwMiwxMyArMTE0LDI3IEBAIHN0cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uIHsKICAgICAgICAgcmV0dXJuIG9ic2VydmVyID09IG90aGVyLm9ic2VydmVyICYmIHJl
Z2lzdHJhdGlvbk5vZGUgPT0gb3RoZXIucmVnaXN0cmF0aW9uTm9kZTsKICAgICB9CiAKLSAgICBi
b29sIGhhc0FsbE9wdGlvbnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykgY29uc3QK
KyAgICBib29sIHNob3VsZFJlY2VpdmVNdXRhdGlvbihOb2RlKiBzb3VyY2VOb2RlLCBNdXRhdGlv
bk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoKHRoaXMtPm9wdGlvbnMgJiBvcHRpb25zKSAh
PSBvcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghKG9w
dGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzKSB8fCAhKHRoaXMtPm9w
dGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVGaWx0ZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgYm9vbCBzaG91bGRGaWx0ZXJDYXNlSW5zZW5z
aXRpdmUgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIHNvdXJj
ZU5vZGUtPmlzSFRNTEVsZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPmF0dHJpYnV0ZUZp
bHRlci5jb250YWlucyhhdHRyaWJ1dGVOYW1lKSB8fCAoc2hvdWxkRmlsdGVyQ2FzZUluc2Vuc2l0
aXZlICYmIHRoaXMtPmNhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlci5jb250YWlucyhhdHRy
aWJ1dGVOYW1lKSk7CisgICAgfQorCisgICAgYm9vbCBpbmxpbmUgaXNTdWJ0cmVlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAodGhpcy0+b3B0aW9ucyAmIG9wdGlvbnMpID09IG9wdGlvbnM7Cisg
ICAgICAgIHJldHVybiB0aGlzLT5vcHRpb25zICYmIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1
YnRyZWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2Vy
dmVyOwogICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgICAgSGFzaFNldDxB
dG9taWNTdHJpbmc+IGF0dHJpYnV0ZUZpbHRlcjsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4g
Y2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyOwogCiAgICAgLy8gcmVnaXN0cmF0aW9uTm9k
ZSB3aWxsIGJlIDAgaWYgdGhlIHJlZ2lzdHJhdGlvbiBpcyBub24tdHJhbnNpZW50LiBJLmUuIFRo
ZSByZWdpc3RyYXRpb25Ob2RlIGlzIHRoZSBOb2RlIGluIHdob3NlCiAgICAgLy8gcmVnaXN0cnkg
aXQgZXhpc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
Y3BwCmluZGV4IGI2NmNhYTA4M2VlOTllNGU1MDM4YmM0NmIxMjU4YzhiNTA0NTYwYTkuLjA5NTJh
YjIxNmViZjAzMTI1NGZjMzA0ZDA2NmUwMjBlZTQ1OWFkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAKQEAgLTYyLDExICs2MiwxMCBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgY2xlYXJUcmFuc2llbnRPYnNlcnZhdGlvbnNGb3JSZWdpc3RyYXRpb24o
V2ViS2l0TXV0YXRpb25PYnNlcgogICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyTXV0YXRpb25P
YnNlcnZlcihvYnNlcnZlciwgcmVnaXN0cmF0aW9uTm9kZSk7CiB9CiAKLXZvaWQgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyBvcHRpb25zKQordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKE5vZGUqIG5v
ZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBNb3JlIG9wdGlvbnMg
Y29tcG9zaXRpb24gd29yayBuZWVkcyB0byBiZSBkb25lIGhlcmUsIGUuZy4sIHZhbGlkYXRpb24u
Ci0KLSAgICBpZiAobm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMsIG9wdGlvbnMp
ID09IE5vZGU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RlcmVkKSB7CisgICAgaWYgKG5vZGUtPnJl
Z2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIpID09
IE5vZGU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RlcmVkKSB7CiAgICAgICAgIG1fb2JzZXJ2ZWRO
b2Rlcy5hcHBlbmQobm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTQsMTIgKzEx
MywxMiBAQCB2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmVucXVldWVNdXRhdGlvblJlY29y
ZChQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdQogICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2
ZXJzKCkuYWRkKHRoaXMpOwogfQogCi12b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OndpbGxE
ZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUoUGFzc1JlZlB0cjxOb2RlPiBwcnBSZWdpc3RyYXRp
b25Ob2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBQYXNzUmVmUHRyPE5vZGU+
IHBycERldGFjaGluZ05vZGUpCit2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OndpbGxEZXRh
Y2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUoUGFzc1JlZlB0cjxOb2RlPiBwcnBSZWdpc3RyYXRpb25O
b2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBIYXNoU2V0PEF0b21pY1N0cmlu
Zz4mIGF0dHJpYnV0ZUZpbHRlciwgUGFzc1JlZlB0cjxOb2RlPiBwcnBEZXRhY2hpbmdOb2RlKQog
ewogICAgIFJlZlB0cjxOb2RlPiByZWdpc3RyYXRpb25Ob2RlID0gcHJwUmVnaXN0cmF0aW9uTm9k
ZTsKICAgICBSZWZQdHI8Tm9kZT4gZGV0YWNoaW5nTm9kZSA9IHBycERldGFjaGluZ05vZGU7CiAK
LSAgICBkZXRhY2hpbmdOb2RlLT5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcywgb3B0aW9u
cywgcmVnaXN0cmF0aW9uTm9kZS5nZXQoKSk7CisgICAgZGV0YWNoaW5nTm9kZS0+cmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKHRoaXMsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlciwgcmVnaXN0cmF0
aW9uTm9kZS5nZXQoKSk7CiAgICAgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIE5vZGVIYXNoU2V0Kj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMuZmluZChyZWdpc3RyYXRp
b25Ob2RlKTsKICAgICBpZiAoaXRlciAhPSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMuZW5kKCkp
IHsKICAgICAgICAgaXRlci0+c2Vjb25kLT5hZGQoZGV0YWNoaW5nTm9kZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaAppbmRleCA3NTMyMDRjMjQ3OTRkNGUz
ODJkYjAyNTUxZWE1NDgwMzU0ZGM0YTc1Li45YmI4OGJmMjJkZTRhMWI0OTVhMmY5NjExZGIyMmRi
ZjY4ZWE0MTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVy
LmgKQEAgLTMzLDEyICszMywxNCBAQAogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
IAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjksOSArNzEsOSBAQCBwdWJsaWM6CiAKICAg
ICB+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpOwogCi0gICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBN
dXRhdGlvbk9ic2VydmVyT3B0aW9ucyk7CisgICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlv
bk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+Jik7CiAgICAgdm9p
ZCBkaXNjb25uZWN0KCk7Ci0gICAgdm9pZCB3aWxsRGV0YWNoTm9kZUluT2JzZXJ2ZWRTdWJ0cmVl
KFBhc3NSZWZQdHI8Tm9kZT4gcmVnaXN0cmF0aW9uTm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlv
bnMsIFBhc3NSZWZQdHI8Tm9kZT4gZGV0YWNoaW5nTm9kZSk7CisgICAgdm9pZCB3aWxsRGV0YWNo
Tm9kZUluT2JzZXJ2ZWRTdWJ0cmVlKFBhc3NSZWZQdHI8Tm9kZT4gcmVnaXN0cmF0aW9uTm9kZSwg
TXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYsIFBhc3NSZWZQ
dHI8Tm9kZT4gZGV0YWNoaW5nTm9kZSk7CiAgICAgdm9pZCBvYnNlcnZlZE5vZGVEZXN0cnVjdGVk
KE5vZGUqKTsKICAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0
aW9uUmVjb3JkPik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhOTg3OGQzMzhmNTZhOTAyOWNkNTAxYjUzOTIxY2Q1YWFk
YTVlODQzLi5lMzRhY2VhMWY3NGQ3NDg2MjFiOTdiYzkxMmIxYzZkN2UyMTc1YTM0IDEwMDc1NQot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMjggIFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIFN1cHBvcnQgYXR0cmli
dXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1
dGVzLmh0bWw6CisKIDIwMTEtMTAtMjggU2FkcnVsIEhhYmliIENob3dkaHVyeSAgPHNhZHJ1bEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgc2Nyb2xsLXVw
ZGF0ZSBldmVudHMgZnJvbSBFdmVudFNlbmRlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRleCAyZjg1
OThkZmY3YTAyMGVlM2M3MjdlOWUzN2Y5ODZhNmEyODE4Njk1Li43NDg2YjhmYTI0NjgzZWRlMDRj
ZWU4ZTQwMzAxMTgyNDI5MzM0YzI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC01OCw2ICs1OCw0
MiBAQCBQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCiBQQVNTIG11dGF0
aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRl
TmFtZSBpcyAiYmF6IgogCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHdvcmtzIGFzIGV4
cGVjdGVkIGFuZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1lbnRzLgorLi4ub25seSBmb28s
IGJhciAmIGJvb20gc2hvdWxkIGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlz
IDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9u
c1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIK
K1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25z
WzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlz
ICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9vbSIK
K1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1Rlc3Rpbmcg
dGhhdCBhdHRyaWJ1dGVGaWx0ZXIgcmVzcGVjdHMgY2FzZSB3aXRoIG5vbi1IVE1MIGVsZW1lbnRz
LgorLi4ucGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInBhdGhMZW5ndGgiCitQQVNTIG11dGF0aW9uc1sw
XS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorCitU
ZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNhc2Ugd2l0aCBub24tSFRNTCBl
bGVtZW50cy4KKy4uLm9ubHkgSUQsIGlkLCBib29NLCBwYXRoTGVuZ3RoIHNob3VsZCBiZSByZWNl
aXZlZC4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyA0CitQQVNTIG11dGF0aW9uc1swXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiSUQi
CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRh
dGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0
ZU5hbWUgaXMgImlkIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51
bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9u
c1syXS5hdHRyaWJ1dGVOYW1lIGlzICJib29NIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRl
TmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzNdLnR5cGUgaXMgImF0dHJpYnV0ZXMi
CitQQVNTIG11dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1lIGlzICJwYXRoTGVuZ3RoIgorUEFTUyBt
dXRhdGlvbnNbM10uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyIKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRl
cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRt
bAppbmRleCBiNWJjNDQxNzVjYWZjZWI1MDAzYmRiZmYyYWVjZDhjNzJkMTczMmNhLi4yNjdlZmMz
YzgxZTI4OTliZWQxODRmMDRlNjMzZjIxMWFiMWZlZjg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKQEAgLTI5NCw3ICsyOTQsMTQw
IEBAIGZ1bmN0aW9uIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2RpZmllZCgpIHsKIAogICAg
IHN0YXJ0KCk7CiB9Ci12YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0V3JvbmdUeXBlLCB0ZXN0
TXVsdGlwbGVSZWdpc3RyYXRpb24sIHRlc3RNdWx0aXBsZU9ic2VydmVycywgdGVzdE5hbWVzcGFj
ZVVSSSwgdGVzdFByb3BlcnR5QWNjZXNzLCB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZp
ZWRdOworCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRlRmlsdGVyKCkgeworICAgIHZhciBkaXYsIHBh
dGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAg
IGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHdvcmtzIGFzIGV4cGVjdGVkIGFu
ZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1lbnRzLicpOworCisgICAgICAgIG11dGF0aW9u
cyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIo
ZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9i
c2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjog
Wydmb28nLCAnYmFyJywgJ2Jvb00nXSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9v
JywgJ2ZvbycpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiYXInLCAnYmFyJyk7CisgICAg
ICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsKKyAgICAgICAgZGl2LnNldEF0dHJp
YnV0ZSgnQk9PbScsICdib29tJyk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLm9ubHkg
Zm9vLCBiYXIgJiBib29tIHNob3VsZCBiZSByZWNlaXZlZC4nKTsKKworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zLmxlbmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImJhciInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzJdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZScsICciYm9vbSInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBvYnNl
cnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRl
c3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRl
RmlsdGVyTm9uSFRNTEVsZW1lbnQoKSB7CisgICAgdmFyIHBhdGg7CisgICAgdmFyIG9ic2VydmVy
OworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQg
YXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4nKTsK
KworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9
IG07CisgICAgICAgIH0pOworCisgICAgICAgIHBhdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShwYXRoLCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydw
YXRoTGVuZ3RoJ10gfSk7CisgICAgICAgIHBhdGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhMZW5ndGgnLCAnMjAwJyk7CisgICAgICAgIHBhdGguc2V0
QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhsZW5ndGgnLCAn
MjAwJyk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLnBhdGhMZW5ndGggc2hvdWxkIGJl
IHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnInBhdGhM
ZW5ndGgiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNw
YWNlJywgJyJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInKTsKKyAgICAgICAgb2JzZXJ2ZXIu
ZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7
CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRl
ck5vbkhUTUxEb2N1bWV0KCkgeworICAgIHZhciBzdmdEb2MsIGRpdiwgcGF0aDsKKyAgICB2YXIg
b2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rp
bmcgdGhhdCBhdHRyaWJ1dGVGaWx0ZXIgcmVzcGVjdHMgY2FzZSB3aXRoIG5vbi1IVE1MIGVsZW1l
bnRzLicpOworCisgICAgICAgIHN2Z0RvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0
ZURvY3VtZW50KCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdzdmcnLCAnc3ZnJyk7Cisg
ICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgZGl2ID0gc3ZnRG9jLmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRy
aWJ1dGVGaWx0ZXI6IFsnSUQnLCAnaWQnLCAnYm9vTSddIH0pOworICAgICAgICBkaXYuc2V0QXR0
cmlidXRlKCdJRCcsICdJRCcpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdpZCcsICdpZCcp
OworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF6Jyk7CisgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoJ2Jvb00nLCAnYm9vbScpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdC
T09tJywgJ2Jvb20nKTsKKworICAgICAgICBwYXRoID0gc3ZnRG9jLmNyZWF0ZUVsZW1lbnROUygn
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpOworICAgICAgICBvYnNlcnZlci5v
YnNlcnZlKHBhdGgsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ3BhdGhM
ZW5ndGgnXSB9KTsKKyAgICAgICAgcGF0aC5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmcnLCAncGF0aExlbmd0aCcsICcyMDAnKTsKKyAgICAgICAgcGF0aC5zZXRBdHRy
aWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aGxlbmd0aCcsICcyMDAn
KTsKKworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4ub25seSBJRCwgaWQsIGJvb00sIHBhdGhM
ZW5ndGggc2hvdWxkIGJlIHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMubGVuZ3RoJywgJzQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywg
JyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0
ZU5hbWUnLCAnIklEIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0
ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlw
ZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRy
aWJ1dGVOYW1lJywgJyJpZCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRy
aWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJd
LnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0u
YXR0cmlidXRlTmFtZScsICciYm9vTSInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sy
XS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzNdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbM10uYXR0cmlidXRlTmFtZScsICcicGF0aExlbmd0aCInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnImh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIicpOworCisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVi
dWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9
CisKK3ZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5cGUsIHRlc3RNdWx0aXBsZVJl
Z2lzdHJhdGlvbiwgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0TmFtZXNwYWNlVVJJLCB0ZXN0
UHJvcGVydHlBY2Nlc3MsIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2RpZmllZCwgdGVzdEF0
dHJpYnV0ZUZpbHRlciwgdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxFbGVtZW50LCB0ZXN0QXR0
cmlidXRlRmlsdGVyTm9uSFRNTERvY3VtZXRdOwogdmFyIHRlc3RJbmRleCA9IDA7CiAgCiBmdW5j
dGlvbiBydW5OZXh0VGVzdCgpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113083</attachid>
            <date>2011-10-31 13:49:13 -0700</date>
            <delta_ts>2011-11-02 13:40:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111031134912.patch</filename>
            <type>text/plain</type>
            <size>34834</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzOGRkNmQwNWFkYzg0ZjJj
YWIwOWIzYTlhM2NjMjU5MTA3MWUyMzU1Li4wNTA2YzBmYThhMTZkOGMyMmU5Yzc5ODc2YjczYTIx
ZjM5NTllNjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMTAtMzEgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhbiBhdHRyaWJ1dGVGaWx0ZXIgdG8gdGhlIE11dGF0aW9uT2JzZXJlclJlZ2lzdHJh
dGlvbiB3aGljaCBpcworICAgICAgICBwcml2YXRlIHRvIE5vZGVSYXJlRGF0YSBhbmQgYWRkcyBz
dXBwb3J0IGZvciBvbmx5IG9ic2VydmluZyBhdHRyaWJ1dGVzIHdob3NlCisgICAgICAgIG5hbWUg
YXJlIGluIHRoZSBwcm92aWRlZCBmaWx0ZXIgc2V0IChhcnJheSBvZiBzdHJpbmdzKS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
T3B0aW9uc09iamVjdDo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZl
ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
Om9ic2VydmVDYWxsYmFjayk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KToKKyAg
ICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6
OmluY3JlbWVudFNjb3BpbmdMZXZlbCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZCk6CisgICAgICAg
ICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkTWF0Y2hpbmdPYnNlcnZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJz
T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZl
cik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxs
RGV0YWNoKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURh
dGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbjo6c2hvdWxkUmVjZWl2ZU11dGF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmNhc2VJbnNlbnNpdGl2ZUF0dHJp
YnV0ZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOjppc1N1YnRyZWUpOgorICAgICAgICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6d2lsbERldGFjaE5vZGVJ
bk9ic2VydmVkU3VidHJlZSk6CisgICAgICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
aDoKKwogMjAxMS0xMC0zMSAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgQ1NTUnVsZTogRGV2aXJ0dWFsaXplIGluc2VydGVkSW50b1BhcmVudCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAppbmRleCBjZDYxM2ZmMTYwZTU3NzcyM2YzNWNmMjJlNTFiMWQ2MThi
NTBjMzIxLi5lYWNlYzE0MjNiNjk3ZWY0M2ZlOWUxNjAxNGFkNjYxYTUxNDQwNjZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRp
b25PYnNlcnZlckN1c3RvbS5jcHAKQEAgLTc4LDYgKzc4LDcgQEAgSlNWYWx1ZSBKU1dlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgSlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnkoZXhlYywgb3B0aW9uc09iamVjdCk7CiAgICAgTXV0YXRpb25PYnNlcnZl
ck9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwYXJz
aW5nIG9mIHRoZSBhdHRyaWJ1dGVGaWx0ZXIgb3B0aW9uLgogICAgIGJvb2wgb3B0aW9uOwogICAg
IGlmIChkaWN0aW9uYXJ5LnRyeUdldFByb3BlcnR5KCJjaGlsZExpc3QiLCBvcHRpb24pICYmIG9w
dGlvbikKICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExp
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwCmluZGV4
IGFhODUyODRiNTdmZWJkNTgzODQyODQwNDc5M2U0MzczZDI1ODIxODUuLmI5NTA0Mzk0NjdkZGQy
Y2VmY2RkMzE2NzI2NWFhNTU5ZDc4MjNkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L09wdGlvbnNPYmplY3QuY3BwCkBAIC0yMTMsNiArMjEzLDI1IEBAIGJvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBNZXNzYWdlUG9ydEFycmF5JiB2YWx1ZSkgY29u
c3QKICAgICByZXR1cm4gZ2V0TWVzc2FnZVBvcnRBcnJheSh2OFZhbHVlLCB2YWx1ZSk7CiB9CiAK
K2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBIYXNoU2V0PEF0b21p
Y1N0cmluZz4mIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFs
dWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gRklYTUU6IFN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3RzCisgICAgaWYgKCF2
OFZhbHVlLT5Jc0FycmF5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpMb2Nh
bDx2ODo6QXJyYXk+IHY4QXJyYXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdCh2OFZhbHVl
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW5kZXhlZFZhbHVlID0gdjhBcnJheS0+R2V0
KHY4OjpJbnRlZ2VyOjpOZXcoaSkpOworICAgICAgICB2YWx1ZS5hZGQodjhWYWx1ZVRvV2ViQ29y
ZVN0cmluZyhpbmRleGVkVmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
Ym9vbCBPcHRpb25zT2JqZWN0OjpnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3Ry
aW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdjhWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlv
bnNPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApp
bmRleCBjZDRjMmZkOGVmZjk3NTczOTM2YzY4YmI0MDAxZTRkMmFlODA1NDdkLi42OWMxMWIxMTI3
MmEzMTMxYjM3OTBmMDE4Y2M5NjUyNzgxZjgxYjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvT3B0aW9uc09iamVjdC5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw2ICs1OSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKICAg
ICBib29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8RE9NV2luZG93PiYpIGNvbnN0OwogICAg
IGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIE1lc3NhZ2VQb3J0QXJyYXkmKSBjb25zdDsKKyAgICBi
b29sIGdldChjb25zdCBTdHJpbmcmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mKSBjb25zdDsKIAog
ICAgIGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYsIFN0cmlu
ZyYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCmluZGV4
IGVmNTNlYWYyN2VmMTA1M2NlNzBlYWRlOWQ0Yzc3M2NiNDNjMzQ4NzQuLjhkZjFhYTJhYjVjNDVl
YjM2NGUwZTBmNjEyZmRkMmIxOWY3YTAxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXJDdXN0b20uY3BwCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIldl
YktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODksMTEgKzkzLDE1IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lCiAKICAgICBPcHRpb25z
T2JqZWN0IG9wdGlvbnNPYmplY3QoYXJnc1sxXSk7CiAgICAgdW5zaWduZWQgb3B0aW9ucyA9IDA7
CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IGF0dHJpYnV0ZUZpbHRlcjsKICAgICBib29sIG9w
dGlvbjsKICAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImNoaWxkTGlzdCIsIG9wdGlvbikgJiYg
b3B0aW9uKQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxk
TGlzdDsKLSAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZXMiLCBvcHRpb24pICYm
IG9wdGlvbikKKyAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZXMiLCBvcHRpb24p
ICYmIG9wdGlvbikgewogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
OkF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmlidXRlRmls
dGVyIiwgYXR0cmlidXRlRmlsdGVyKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlRmlsdGVyOworICAgIH0KICAgICBpZiAob3B0aW9uc09i
amVjdC5nZXQoImNoYXJhY3RlckRhdGEiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAgb3B0
aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhOwogICAgIGlmIChv
cHRpb25zT2JqZWN0LmdldCgic3VidHJlZSIsIG9wdGlvbikgJiYgb3B0aW9uKQpAQCAtMTAzLDcg
KzExMSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
Om9ic2VydmVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lCiAgICAgaWYgKG9wdGlvbnNPYmplY3Qu
Z2V0KCJjaGFyYWN0ZXJEYXRhT2xkVmFsdWUiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAg
b3B0aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhT2xkVmFsdWU7
CiAKLSAgICBpbXAtPm9ic2VydmUodGFyZ2V0LCBvcHRpb25zKTsKKyAgICBpbXAtPm9ic2VydmUo
dGFyZ2V0LCBvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIpOwogICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4
IDM3YTdmYmZmYmEyYWE5ZjMxZTk2NjkzYmI3YWM5NzI4YjUyMzRiNTMuLmY2M2VjZjY4YWNkYjgz
YTIzMjU4OTk2ODAwZTBjZDhiNjQ1Y2FkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9k
aWZpZWRFdmVudChTdHJpbmdJbXBsKiBvbGREYXRhKQogewogI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCiAgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnM+IG9ic2VydmVyczsKLSAgICBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJE
YXRhKTsKKyAgICBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJz
LCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhLCBudWxsQXRvbSk7CiAgICAg
aWYgKCFvYnNlcnZlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJlZlB0cjxNdXRhdGlvblJlY29y
ZD4gbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YSh0aGlzKTsK
ICAgICAgICAgZm9yIChIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9i
c2VydmVyT3B0aW9ucz46Oml0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMuYmVnaW4oKTsgaXRlciAh
PSBvYnNlcnZlcnMuZW5kKCk7ICsraXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExp
c3RNdXRhdGlvblNjb3BlLmNwcAppbmRleCA1ZGNiZGNmZjMwZGFhOThjYjkwMWI3YjZlZWEwZTRk
MTY5OGZlNjJiLi42M2NjNWI4NDMwZWEwZmYwNDNlMGM1N2UyMGJiZWJjNDA5Y2MyOTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCkBAIC00MSw2
ICs0MSw3IEBACiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjQ1LDcgKzI0Niw3
IEBAIHZvaWQgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmluY3JlbWVudFNjb3BpbmdMZXZl
bChOb2RlKiB0YXJnZXQpCiAgICAgfQogCiAgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+IG9ic2VydmVyczsKLSAgICB0YXJnZXQtPmdl
dFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCk7CisgICAgdGFyZ2V0LT5nZXRSZWdpc3RlcmVkTXV0YXRp
b25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGls
ZExpc3QsIG51bGxBdG9tKTsKICAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAgICAgICAg
bV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIDApOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCAxZGFmMzk4ZTFlNzc1ZWU2MDc4MWM1MjY2YTJlNzdjMDQ1N2I5YzA0Li4yMTI0
N2NlZDU5NjBiOTU5ZDUzMjJjNDQyYTQwOGU3ZjU5NGM5NGFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC02MzQsNyArNjM0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzT2xkVmFsdWVSZXF1
ZXN0ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXUKIHN0YXRpYyB2
b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSkKIHsK
ICAgICBIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0
aW9ucz4gb2JzZXJ2ZXJzOwotICAgIGVsZW1lbnQtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2Vy
dmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZXMp
OworICAgIGVsZW1lbnQtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNl
cnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZXMsIG5hbWUubG9jYWxOYW1l
KCkpOwogICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAppbmRleCBiYWRkMDdiMjljMTM4N2VjZjJmNzliNDZiZmVhNDVlMzlmYmNjMGE5
Li5hNDU2OGEyZWE0N2Y2MzM4M2YyYTVmYzIwYmNhYTg5NDVkYWNmNTY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC0yNzAxLDcgKzI3MDEsNyBAQCBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbj4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCiAgICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CiB9
CiAKLXN0YXRpYyB2b2lkIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKEhhc2hNYXA8V2ViS2l0TXV0YXRp
b25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzLCBWZWN0b3I8
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIHJlZ2lzdHJ5LCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucyBvcHRpb25zKQorc3RhdGljIHZvaWQgYWRkTWF0Y2hpbmdPYnNlcnZlcnMoSGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+JiBvYnNl
cnZlcnMsIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiogcmVnaXN0cnksIE11
dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIE5vZGUqIHNvdXJjZU5vZGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBpZiAoIXJlZ2lzdHJ5KQogICAgICAg
ICByZXR1cm47CkBAIC0yNzEwLDcgKzI3MTAsNyBAQCBzdGF0aWMgdm9pZCBhZGRNYXRjaGluZ09i
c2VydmVycyhIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2Vydgog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24mIGVudHJ5ID0gcmVnaXN0cnktPmF0KGkpOwogCi0gICAgICAg
IGlmICghZW50cnkuaGFzQWxsT3B0aW9ucyhvcHRpb25zKSkKKyAgICAgICAgaWYgKCFlbnRyeS5z
aG91bGRSZWNlaXZlTXV0YXRpb24oc291cmNlTm9kZSwgb3B0aW9ucywgYXR0cmlidXRlTmFtZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBwYWlyPEhhc2hNYXA8V2ViS2l0TXV0
YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdCA9IG9ic2VydmVycy5hZGQoZW50cnkub2JzZXJ2ZXIuZ2V0KCksIGVudHJ5Lm9wdGlv
bnMpOwpAQCAtMjcxOSwxNyArMjcxOSwxNyBAQCBzdGF0aWMgdm9pZCBhZGRNYXRjaGluZ09ic2Vy
dmVycyhIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydgogICAg
IH0KIH0KIAotdm9pZCBOb2RlOjpnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUo
SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+
JiBvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlKQor
dm9pZCBOb2RlOjpnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoSGFzaE1hcDxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+JiBvYnNlcnZl
cnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgYWRkTWF0Y2hpbmdPYnNlcnZlcnMob2Jz
ZXJ2ZXJzLCBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgdHlwZSk7CisgICAgYWRkTWF0Y2hp
bmdPYnNlcnZlcnMob2JzZXJ2ZXJzLCBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgdHlwZSwg
dGhpcywgYXR0cmlidXRlTmFtZSk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgp
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICBhZGRNYXRjaGluZ09i
c2VydmVycyhvYnNlcnZlcnMsIG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLCB0eXBl
IHwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZSk7CisgICAgICAgIGFkZE1hdGNoaW5n
T2JzZXJ2ZXJzKG9ic2VydmVycywgbm9kZS0+bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksIHR5
cGUgfCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpTdWJ0cmVlLCB0aGlzLCBhdHRyaWJ1dGVOYW1l
KTsKIH0KIAotTm9kZTo6TXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgTm9kZTo6cmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2
ZXIsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIE5vZGUqIHJlZ2lzdHJhdGlvbk5v
ZGUpCitOb2RlOjpNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCBOb2RlOjpyZWdpc3Rlck11dGF0
aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwg
TXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJp
bmc+JiBhdHRyaWJ1dGVGaWx0ZXIsIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUpCiB7CiAgICAgVmVj
dG9yPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSA9IGVuc3VyZVJhcmVE
YXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVyLCBvcHRpb25zLCByZWdpc3Ry
YXRpb25Ob2RlKTsKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlv
bihvYnNlcnZlciwgb3B0aW9ucywgYXR0cmlidXRlRmlsdGVyLCByZWdpc3RyYXRpb25Ob2RlKTsK
IAogICAgIHNpemVfdCBpbmRleCA9IHJlZ2lzdHJ5LT5maW5kKHJlZ2lzdHJhdGlvbik7CiAgICAg
aWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CkBAIC0yNzM3LDcgKzI3MzcsMTAgQEAgTm9kZTo6TXV0
YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBh
c3NSZWZQdHI8V2ViS2kKICAgICAgICAgcmV0dXJuIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RlcmVk
OwogICAgIH0KIAotICAgIHJlZ2lzdHJ5LT5hdChpbmRleCkub3B0aW9ucyA9IHJlZ2lzdHJhdGlv
bi5vcHRpb25zOworICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mIGV4aXN0aW5nUmVn
aXN0cmF0aW9uID0gcmVnaXN0cnktPmF0KGluZGV4KTsKKyAgICBleGlzdGluZ1JlZ2lzdHJhdGlv
bi5vcHRpb25zID0gcmVnaXN0cmF0aW9uLm9wdGlvbnM7CisgICAgZXhpc3RpbmdSZWdpc3RyYXRp
b24uYXR0cmlidXRlRmlsdGVyLnN3YXAocmVnaXN0cmF0aW9uLmF0dHJpYnV0ZUZpbHRlcik7CisK
ICAgICByZXR1cm4gTXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQ7CiB9CiAKQEAgLTI3
NDgsNyArMjc1MSw4IEBAIHZvaWQgTm9kZTo6dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFz
c1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlCiAgICAgaWYgKCFyZWdpc3Ry
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiBy
ZWdpc3RyYXRpb24ob2JzZXJ2ZXIsIDAsIHJlZ2lzdHJhdGlvbk5vZGUpOworICAgIEhhc2hTZXQ8
QXRvbWljU3RyaW5nPiBkdW1teTsKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHJl
Z2lzdHJhdGlvbihvYnNlcnZlciwgMCwgZHVtbXksIHJlZ2lzdHJhdGlvbk5vZGUpOwogICAgIHNp
emVfdCBpbmRleCA9IHJlZ2lzdHJ5LT5maW5kKHJlZ2lzdHJhdGlvbik7CiAgICAgQVNTRVJUKGlu
ZGV4ICE9IG5vdEZvdW5kKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCkBAIC0yNzY3LDEz
ICsyNzcxLDEzIEBAIHZvaWQgTm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERl
dGFjaCgpCiAgICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gcmVnaXN0cnktPnNpemUoKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mIHJlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJ5LT5hdChp
KTsKLSAgICAgICAgICAgIGlmICghcmVnaXN0cmF0aW9uLmhhc0FsbE9wdGlvbnMoV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6U3VidHJlZSkpCisgICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbi5p
c1N1YnRyZWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgTm9k
ZSogcmVnaXN0cmF0aW9uTm9kZSA9IHJlZ2lzdHJhdGlvbi5yZWdpc3RyYXRpb25Ob2RlOwogICAg
ICAgICAgICAgaWYgKCFyZWdpc3RyYXRpb25Ob2RlKQogICAgICAgICAgICAgICAgIHJlZ2lzdHJh
dGlvbk5vZGUgPSBub2RlOwotICAgICAgICAgICAgcmVnaXN0cmF0aW9uLm9ic2VydmVyLT53aWxs
RGV0YWNoTm9kZUluT2JzZXJ2ZWRTdWJ0cmVlKHJlZ2lzdHJhdGlvbk5vZGUsIHJlZ2lzdHJhdGlv
bi5vcHRpb25zLCB0aGlzKTsKKyAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5vYnNlcnZlci0+d2ls
bERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShyZWdpc3RyYXRpb25Ob2RlLCByZWdpc3RyYXRp
b24ub3B0aW9ucywgcmVnaXN0cmF0aW9uLmF0dHJpYnV0ZUZpbHRlciwgdGhpcyk7CiAgICAgICAg
IH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBjOGExMzE5NzBjY2MzMGQ1NTczNTA0MjQzN2Vj
YWM2NTEwZDk0NTVkLi5iNjUwMjRkZTM0YThhZmNkNDExMDQwYjg0MGM5M2MzY2VlNDliMzczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9i
c2VydmVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogI2lmIFVTRShK
U0MpCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU5MCwxMyArNTkxLDEzIEBAIHB1YmxpYzoKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICB2b2lkIGdldFJlZ2lzdGVy
ZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIq
LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4mLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRh
dGlvblR5cGUpOworICAgIHZvaWQgZ2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBl
KEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
PiYsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAKICAgICBlbnVtIE11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IHsKICAgICAgICAg
TXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQsCiAgICAgICAgIE11dGF0aW9uUmVnaXN0cmF0aW9u
T3B0aW9uc1Jlc2V0CiAgICAgfTsKLSAgICBNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCByZWdp
c3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiwg
TXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUgPSAwKTsKKyAg
ICBNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCByZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFz
c1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMs
IGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYsIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUgPSAw
KTsKIAogICAgIHZvaWQgdW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyPiwgTm9kZSogcmVnaXN0cmF0aW9uTm9kZSA9IDApOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggZWNiZDU1OTIyZjQyOTBiYmIzOGRhMzEwOTcwZjA1
OGEwYjU2NGY0Yy4uMTU1YzlkNzU2YWU3YWM2NDkyOWY3ZWQyZGQxZTA5YmQxNDg0MWZlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MCwxMCAr
OTEsMTIgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiBzdHJ1
Y3QgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiB7Ci0gICAgTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBN
dXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBOb2RlKiBub2RlKQorICAgIE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24oUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBv
YnNlcnZlciwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgY29uc3QgSGFzaFNldDxB
dG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIsIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUpCiAg
ICAgICAgIDogb2JzZXJ2ZXIob2JzZXJ2ZXIpCiAgICAgICAgICwgb3B0aW9ucyhvcHRpb25zKQot
ICAgICAgICAsIHJlZ2lzdHJhdGlvbk5vZGUobm9kZSkKKyAgICAgICAgLCBhdHRyaWJ1dGVGaWx0
ZXIoYXR0cmlidXRlRmlsdGVyKQorICAgICAgICAsIHJlZ2lzdHJhdGlvbk5vZGUocmVnaXN0cmF0
aW9uTm9kZSkKKyAgICAgICAgLCBtX2Nhc2VJbnNlbnNpdGl2ZUZpbHRlckluaXRpYWxpemVkKGZh
bHNlKQogICAgIHsKICAgICB9CiAKQEAgLTEwMiwxOSArMTA1LDU3IEBAIHN0cnVjdCBNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uIHsKICAgICAgICAgcmV0dXJuIG9ic2VydmVyID09IG90aGVy
Lm9ic2VydmVyICYmIHJlZ2lzdHJhdGlvbk5vZGUgPT0gb3RoZXIucmVnaXN0cmF0aW9uTm9kZTsK
ICAgICB9CiAKLSAgICBib29sIGhhc0FsbE9wdGlvbnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9ucykgY29uc3QKKyAgICBib29sIHNob3VsZFJlY2VpdmVNdXRhdGlvbihOb2RlKiBzb3Vy
Y2VOb2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZU5hbWUpCiAgICAgewotICAgICAgICByZXR1cm4gKHRoaXMtPm9wdGlvbnMg
JiBvcHRpb25zKSA9PSBvcHRpb25zOworICAgICAgICBpZiAoKHRoaXMtPm9wdGlvbnMgJiBvcHRp
b25zKSAhPSBvcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghKG9wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzKSB8fCAhKHRo
aXMtPm9wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVGaWx0ZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHRoaXMtPmF0dHJpYnV0ZUZp
bHRlci5jb250YWlucyhhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmIChzb3VyY2VOb2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYm
IHNvdXJjZU5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLT5j
YXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIoKS5jb250YWlucyhhdHRyaWJ1dGVOYW1lKTsK
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxBdG9t
aWNTdHJpbmc+JiBjYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2Nhc2VJbnNlbnNpdGl2ZUZpbHRlckluaXRpYWxpemVkKSB7CisgICAgICAgICAg
ICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRoaXMt
PmF0dHJpYnV0ZUZpbHRlci5iZWdpbigpOyBpdGVyICE9IHRoaXMtPmF0dHJpYnV0ZUZpbHRlci5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5h
bWVMb3dlciA9IGl0ZXItPmxvd2VyKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoKCppdGVyKSAh
PSBhdHRyaWJ1dGVOYW1lTG93ZXIpCisgICAgICAgICAgICAgICAgICAgIHRoaXMtPm1fY2FzZUlu
c2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyLmFkZChhdHRyaWJ1dGVOYW1lTG93ZXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBtX2Nhc2VJbnNlbnNpdGl2ZUZpbHRlckluaXRpYWxpemVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLT5tX2Nhc2VJbnNlbnNp
dGl2ZUF0dHJpYnV0ZUZpbHRlcjsKKyAgICB9CisKKyAgICBib29sIGlubGluZSBpc1N1YnRyZWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPm9wdGlvbnMgJiYgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6U3VidHJlZTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNl
cnZlcj4gb2JzZXJ2ZXI7CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9uczsKKyAg
ICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVyOwogCiAgICAgLy8gcmVnaXN0
cmF0aW9uTm9kZSB3aWxsIGJlIDAgaWYgdGhlIHJlZ2lzdHJhdGlvbiBpcyBub24tdHJhbnNpZW50
LiBJLmUuIFRoZSByZWdpc3RyYXRpb25Ob2RlIGlzIHRoZSBOb2RlIGluIHdob3NlCiAgICAgLy8g
cmVnaXN0cnkgaXQgZXhpc3RzLgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgbmVlZCB0
byBiZSBhIFJlZlB0ciBiZWNhdXNlIHRoZSBvYnNlcnZlciB3aWxsIGJlIGhvbGRpbmcgYSBSZWZQ
dHIgdG8gdGhlIHNhbWUgbm9kZSBhdAogICAgIC8vIGxlYXN0IGZvciB0aGUgbGlmZXRpbWUgb2Yg
dGhpcyBSZWdpc3RyYXRpb24gaW4gaXRzIG1fdHJhbnNpZW50T2JzZXJ2ZWROb2RlcyBtYXAuCiAg
ICAgTm9kZSogcmVnaXN0cmF0aW9uTm9kZTsKKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PEF0b21p
Y1N0cmluZz4gbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXI7CisgICAgYm9vbCBtX2Nh
c2VJbnNlbnNpdGl2ZUZpbHRlckluaXRpYWxpemVkOwogfTsKICNlbmRpZiAvLyBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5jcHAKaW5kZXggYjY2Y2FhMDgzZWU5OWU0ZTUwMzhiYzQ2YjEyNThjOGI1MDQ1NjBh
OS4uNTE3MTQxY2I0OWM2M2RmYTc4NTg1OTkyOWU4YWZhMTc0ZWZjMjAzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcApAQCAtNjIsMTEgKzYyLDEw
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhclRyYW5zaWVudE9ic2VydmF0aW9uc0ZvclJlZ2lz
dHJhdGlvbihXZWJLaXRNdXRhdGlvbk9ic2VyCiAgICAgICAgICgqaXRlciktPnVucmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKG9ic2VydmVyLCByZWdpc3RyYXRpb25Ob2RlKTsKIH0KIAotdm9pZCBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKE5vZGUqIG5vZGUsIE11dGF0aW9uT2JzZXJ2
ZXJPcHRpb25zIG9wdGlvbnMpCit2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUo
Tm9kZSogbm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgY29uc3QgSGFzaFNl
dDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpCiB7CiAgICAgLy8gRklYTUU6IE1vcmUg
b3B0aW9ucyBjb21wb3NpdGlvbiB3b3JrIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSwgZS5nLiwgdmFs
aWRhdGlvbi4KLQotICAgIGlmIChub2RlLT5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcywg
b3B0aW9ucykgPT0gTm9kZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQpIHsKKyAgICBpZiAo
bm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMsIG9wdGlvbnMsIGF0dHJpYnV0ZUZp
bHRlcikgPT0gTm9kZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQpIHsKICAgICAgICAgbV9v
YnNlcnZlZE5vZGVzLmFwcGVuZChub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEx
NCwxMiArMTEzLDEzIEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11CiAgICAgYWN0aXZlTXV0YXRp
b25PYnNlcnZlcnMoKS5hZGQodGhpcyk7CiB9CiAKLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6d2lsbERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShQYXNzUmVmUHRyPE5vZGU+IHBycFJl
Z2lzdHJhdGlvbk5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIFBhc3NSZWZQ
dHI8Tm9kZT4gcHJwRGV0YWNoaW5nTm9kZSkKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
d2lsbERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShQYXNzUmVmUHRyPE5vZGU+IHBycFJlZ2lz
dHJhdGlvbk5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyLCBQYXNzUmVmUHRyPE5vZGU+IHBycERldGFjaGlu
Z05vZGUpCiB7CiAgICAgUmVmUHRyPE5vZGU+IHJlZ2lzdHJhdGlvbk5vZGUgPSBwcnBSZWdpc3Ry
YXRpb25Ob2RlOwogICAgIFJlZlB0cjxOb2RlPiBkZXRhY2hpbmdOb2RlID0gcHJwRGV0YWNoaW5n
Tm9kZTsKIAotICAgIGRldGFjaGluZ05vZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlz
LCBvcHRpb25zLCByZWdpc3RyYXRpb25Ob2RlLmdldCgpKTsKKyAgICAvLyBGSVhNRTogVGhpcyB3
aWxsIGNyZWF0ZSBhbm90aGVyIGNvcHkgb2YgdGhlIHJlZ2lzdHJhdGlvbiwgaW5jbHVkaW5nIGEg
Y29weSBvZiB0aGUgSGFzaFNldDxBdG9taWNTdHJpbmc+IGF0dHJpYnV0ZUZpbHRlci4KKyAgICBk
ZXRhY2hpbmdOb2RlLT5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcywgb3B0aW9ucywgYXR0
cmlidXRlRmlsdGVyLCByZWdpc3RyYXRpb25Ob2RlLmdldCgpKTsKICAgICBIYXNoTWFwPFJlZlB0
cjxOb2RlPiwgTm9kZUhhc2hTZXQqPjo6aXRlcmF0b3IgaXRlciA9IG1fdHJhbnNpZW50T2JzZXJ2
ZWROb2Rlcy5maW5kKHJlZ2lzdHJhdGlvbk5vZGUpOwogICAgIGlmIChpdGVyICE9IG1fdHJhbnNp
ZW50T2JzZXJ2ZWROb2Rlcy5lbmQoKSkgewogICAgICAgICBpdGVyLT5zZWNvbmQtPmFkZChkZXRh
Y2hpbmdOb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
CmluZGV4IDc1MzIwNGMyNDc5NGQ0ZTM4MmRiMDI1NTFlYTU0ODAzNTRkYzRhNzUuLjY4ZjI2ZjEw
OTlmODRhNWEzN2Y2ZjU1ZTIwNGYwZTM4ZGM3ZjlkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY5LDkgKzY5LDkg
QEAgcHVibGljOgogCiAgICAgfldlYktpdE11dGF0aW9uT2JzZXJ2ZXIoKTsKIAotICAgIHZvaWQg
b2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMpOworICAgIHZvaWQgb2JzZXJ2
ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3Ry
aW5nPiYpOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOwotICAgIHZvaWQgd2lsbERldGFjaE5vZGVJ
bk9ic2VydmVkU3VidHJlZShQYXNzUmVmUHRyPE5vZGU+IHJlZ2lzdHJhdGlvbk5vZGUsIE11dGF0
aW9uT2JzZXJ2ZXJPcHRpb25zLCBQYXNzUmVmUHRyPE5vZGU+IGRldGFjaGluZ05vZGUpOworICAg
IHZvaWQgd2lsbERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShQYXNzUmVmUHRyPE5vZGU+IHJl
Z2lzdHJhdGlvbk5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zLCBIYXNoU2V0PEF0b21pY1N0
cmluZz4mLCBQYXNzUmVmUHRyPE5vZGU+IGRldGFjaGluZ05vZGUpOwogICAgIHZvaWQgb2JzZXJ2
ZWROb2RlRGVzdHJ1Y3RlZChOb2RlKik7CiAgICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
UGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4pOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzMxY2MzZjQ3NzExOWI1NTE0
NTY0M2YyOWU5ODBjMzk5N2I1YTQyMy4uZWYyNzFlY2I4NDYxZjc0NjU2YWY0ODA4N2QyODA3OWE3
Y2NkODIxZSAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTEwLTMxICBSYWZhZWwgV2VpbnN0
ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBTdXBwb3J0IGF0dHJpYnV0ZUZpbHRlciBmb3IgYXR0cmlidXRlIG11dGF0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L211dGF0aW9u
L29ic2VydmUtYXR0cmlidXRlcy5odG1sOgorCiAyMDExLTEwLTMxICBKb2huIEdyZWdnICA8am9o
bm55Z0Bnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGV4cGVjdGF0aW9ucyBmb3Ig
ZmFzdC9qcyB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2Jz
ZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRleCA5YmIwN2U5NTMwZmE3NTQwYTk5
MGVkYjA3YzNlYTQ3YjYwNWQzNWJjLi42NzllOTA1ODZhODhkYTFmOTY1ZGZiNzY1NjUzNmRiNDRk
ZWVlZGMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0
cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNl
cnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC05Miw2ICs5Miw2NiBAQCBQQVNTIG11dGF0
aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRl
TmFtZSBpcyAiaWQiCiBQQVNTIG11dGF0aW9uc1sxXS5vbGRWYWx1ZSBpcyAiZm9vIgogCitUZXN0
aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHdvcmtzIGFzIGV4cGVjdGVkIGFuZCBpZ25vcmVzIGNh
c2Ugd2l0aCBIVE1MIGVsZW1lbnRzLgorLi4ub25seSBmb28sIGJhciAmIGJvb20gc2hvdWxkIGJl
IHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlz
ICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFT
UyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFj
ZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBt
dXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9vbSIKK1BBU1MgbXV0YXRpb25zWzJdLmF0
dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1Rlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIGF0dHJp
YnV0ZUZpbHRlciB3aGVuIHRoZSBzYW1lIG9ic2VydmVyIG9ic2VydmVzIGF0IG11bHRpcGxlIG5v
ZGVzIGluIGEgc3VidHJlZSB3aXRoIGRpZmZlcmVudCBmaWx0ZXIgb3B0aW9ucy4KKy4uLm9ubHkg
Zm9vLCBiYXIgJiBiYXQgc2hvdWxkIGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3Ro
IGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRl
cyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRp
b25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYmF0
IgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKKy4uLmJhciwg
YmF0ICYgYmF6IHNob3VsZCBhbGwgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGgg
aXMgMworUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRp
b25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0
ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiYmF0IgorUEFTUyBtdXRhdGlv
bnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUg
aXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lIGlzICJiYXoi
CitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorCitUZXN0aW5n
IHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50
cy4KKy4uLnBhdGhMZW5ndGggc2hvdWxkIGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVu
Z3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11
dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJwYXRoTGVuZ3RoIgorUEFTUyBtdXRhdGlvbnNb
MF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKwor
VGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwg
ZWxlbWVudHMuCisuLi5vbmx5IElELCBpZCwgYm9vTSwgcGF0aExlbmd0aCBzaG91bGQgYmUgcmVj
ZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgNAorUEFTUyBtdXRhdGlvbnNbMF0udHlw
ZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgIklE
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0
YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1
dGVOYW1lIGlzICJpZCIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBu
dWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlv
bnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9vTSIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0
ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1szXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbM10uYXR0cmlidXRlTmFtZSBpcyAicGF0aExlbmd0aCIKK1BBU1Mg
bXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyAiaHR0cDovL3d3dy53My5vcmcvMjAw
MC9zdmciCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0
bWwKaW5kZXggMzk1YWY3OTg0NTgxYmQ2YTVmODIxY2JjZTE1NWFmYTY2YmRmNDE5Yy4uYWY1OGI1
MThiNTEyYjA4ZTc5ZGEwZGU4ZGU0Njc1OTM0NTAwMTk4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCkBAIC0xMDcsNyArMTA3LDcg
QEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9uKCkgewogCiAgICAgZnVuY3Rpb24g
c3RhcnQoKSB7CiAgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBz
YW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRp
bmcgdGhlIG9wdGlvbnMuJyk7Ci0gICAgCisKIAkJY2FsbHMgPSAwOwogICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOwogICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
QEAgLTQzNSw2ICs0MzUsMjA5IEBAIGZ1bmN0aW9uIHRlc3RJRExBdHRyaWJ1dGUoKSB7CiAgICAg
c3RhcnQoKTsKIH0KIAorZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlcigpIHsKKyAgICB2YXIg
ZGl2LCBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciB3b3JrcyBhcyBleHBl
Y3RlZCBhbmQgaWdub3JlcyBjYXNlIHdpdGggSFRNTCBlbGVtZW50cy4nKTsKKworICAgICAgICBt
dXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAg
IH0pOworCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
ICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVG
aWx0ZXI6IFsnZm9vJywgJ2JhcicsICdib29NJ10gfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1
dGUoJ2ZvbycsICdmb28nKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYmFyJywgJ2Jhcicp
OworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF6Jyk7CisgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9vbScpOworCisgICAgICAgIHNldFRpbWVvdXQoZmluaXNo
LCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcu
Li5vbmx5IGZvbywgYmFyICYgYm9vbSBzaG91bGQgYmUgcmVjZWl2ZWQuJyk7CisKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMycpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1syXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWUnLCAnImJvb20iJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAg
ICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1
bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEF0
dHJpYnV0ZUZpbHRlclN1YnRyZWUoKSB7CisgICAgdmFyIGRpdiwgZGl2MiwgZGl2MzsKKyAgICB2
YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rl
c3RpbmcgdGhlIGJlaGF2aW9yIG9mIGF0dHJpYnV0ZUZpbHRlciB3aGVuIHRoZSBzYW1lIG9ic2Vy
dmVyIG9ic2VydmVzIGF0IG11bHRpcGxlIG5vZGVzIGluIGEgc3VidHJlZSB3aXRoIGRpZmZlcmVu
dCBmaWx0ZXIgb3B0aW9ucy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAg
ICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAg
ICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYyID0gZGl2LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgZGl2MyA9IGRpdjIu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9i
c2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0
dHJpYnV0ZUZpbHRlcjogWydmb28nLCAnYmFyJ10gfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2Vy
dmUoZGl2MiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVGaWx0
ZXI6IFsnYmFyJywgJ2JhdCddIH0pOworCisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdmb28n
LCAnZm9vJyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXInLCAnYmFyJyk7CisgICAg
ICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXQnLCAnYmF0Jyk7CisgICAgICAgIGRpdjMuc2V0QXR0
cmlidXRlKCdiYXonLCAnYmF6Jyk7CisKKyAgICAgICAgc2V0VGltZW91dChjaGVja0FuZE9ic2Vy
dmVBbGwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrQW5kT2JzZXJ2ZUFsbCgpIHsK
KyAgICAgICAgZGVidWcoJy4uLm9ubHkgZm9vLCBiYXIgJiBiYXQgc2hvdWxkIGJlIHJlY2VpdmVk
LicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzMnKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciYmFyIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxs
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXQi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlJywg
J251bGwnKTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdjIsIHsgYXR0cmlidXRlczog
dHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2Jhcics
ICdiYXInKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JhdCcsICdiYXQnKTsKKyAgICAg
ICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsKKworICAgICAgICBzZXRUaW1lb3V0
KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBk
ZWJ1ZygnLi4uYmFyLCBiYXQgJiBiYXogc2hvdWxkIGFsbCBiZSByZWNlaXZlZC4nKTsKKworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImJhdCInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZScsICciYmF6IicpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisK
KyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAg
ICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24g
dGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxFbGVtZW50KCkgeworICAgIHZhciBwYXRoOworICAg
IHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1Zygn
VGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwg
ZWxlbWVudHMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2
ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAg
ICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBwYXRoID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7Cisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUocGF0aCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1
dGVGaWx0ZXI6IFsncGF0aExlbmd0aCddIH0pOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5T
KCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoTGVuZ3RoJywgJzIwMCcpOworICAg
ICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdw
YXRobGVuZ3RoJywgJzIwMCcpOworCisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5wYXRoTGVu
Z3RoIHNob3VsZCBiZSByZWNlaXZlZC4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
Lmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICci
YXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lJywgJyJwYXRoTGVuZ3RoIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWVzcGFjZScsICciaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJyk7CisgICAg
ICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RB
dHRyaWJ1dGVGaWx0ZXJOb25IVE1MRG9jdW1lbnQoKSB7CisgICAgdmFyIHN2Z0RvYywgZGl2LCBw
YXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAg
ICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNwZWN0cyBjYXNlIHdpdGgg
bm9uLUhUTUwgZWxlbWVudHMuJyk7CisKKyAgICAgICAgc3ZnRG9jID0gZG9jdW1lbnQuaW1wbGVt
ZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2
ZycsICdzdmcnKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIg
PSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBt
dXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAgICBkaXYgPSBzdmdEb2MuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0
ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydJRCcsICdpZCcsICdib29NJ10gfSk7CisgICAg
ICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0lEJywgJ0lEJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1
dGUoJ2lkJywgJ2lkJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsK
KyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYm9vTScsICdib29tJyk7CisgICAgICAgIGRpdi5z
ZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9vbScpOworCisgICAgICAgIHBhdGggPSBzdmdEb2MuY3Jl
YXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7CisgICAg
ICAgIG9ic2VydmVyLm9ic2VydmUocGF0aCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVG
aWx0ZXI6IFsncGF0aExlbmd0aCddIH0pOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoTGVuZ3RoJywgJzIwMCcpOworICAgICAg
ICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRo
bGVuZ3RoJywgJzIwMCcpOworCisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5vbmx5IElELCBp
ZCwgYm9vTSwgcGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQuJyk7CisKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnNCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZScsICciSUQiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImlkIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMl0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lJywgJyJib29NIicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbM10udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1lJywgJyJwYXRoTGVuZ3RoIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICciaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgp
OworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisg
ICAgc3RhcnQoKTsKK30KKwogdmFyIHRlc3RzID0gWwogICAgIHRlc3RCYXNpYywKICAgICB0ZXN0
V3JvbmdUeXBlLApAQCAtNDQ2LDcgKzY0OSwxMSBAQCB2YXIgdGVzdHMgPSBbCiAgICAgdGVzdE9s
ZFZhbHVlLAogICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVkLAogICAgIHRlc3RPbGRWYWx1ZVVu
aW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMsCi0gICAgdGVzdElETEF0dHJpYnV0ZQorICAgIHRlc3RJ
RExBdHRyaWJ1dGUsCisgICAgdGVzdEF0dHJpYnV0ZUZpbHRlciwKKyAgICB0ZXN0QXR0cmlidXRl
RmlsdGVyU3VidHJlZSwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyTm9uSFRNTEVsZW1lbnQsCisg
ICAgdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxEb2N1bWVudAogXTsKIHZhciB0ZXN0SW5kZXgg
PSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113366</attachid>
            <date>2011-11-02 13:40:05 -0700</date>
            <delta_ts>2011-11-03 16:54:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111102134004.patch</filename>
            <type>text/plain</type>
            <size>33651</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkwOTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MmY2MjZiN2EzYjQ0OWVl
Mjc0YTU1Mzg3YTc4MGVkMzMyMzI1YmI0Li44ZTNhNzEzZTI1YmIxMzk4ODNiMjA1MDFmYWUyYzg3
NTNjMTE0N2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMTAtMzEgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhbiBhdHRyaWJ1dGVGaWx0ZXIgdG8gdGhlIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gd2hpY2ggaXMKKyAgICAgICAgcHJpdmF0ZSB0byBOb2RlUmFyZURhdGEgYW5kIGFkZHMg
c3VwcG9ydCBmb3Igb25seSBvYnNlcnZpbmcgYXR0cmlidXRlcyB3aG9zZQorICAgICAgICBuYW1l
IGFyZSBpbiB0aGUgcHJvdmlkZWQgZmlsdGVyIHNldCAoYXJyYXkgb2Ygc3RyaW5ncykuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9wdGlvbnNPYmplY3Q6OmdldCk6CisgICAgICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVj
dC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJLaXRNdXRhdGlvbk9ic2VydmVy
OjpvYnNlcnZlQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVudCk6Cisg
ICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hdGNoaW5nT2JzZXJ2ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVy
c09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2ls
bERldGFjaCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJhcmVE
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjYXNlSW5zZW5zaXRpdmVBdHRy
aWJ1dGVGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbjo6aXNTdWJ0cmVlKToKKyAgICAgICAgKiBkb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OndpbGxEZXRhY2hOb2Rl
SW5PYnNlcnZlZFN1YnRyZWUpOgorICAgICAgICAqIGRvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVy
Lmg6CisKIDIwMTEtMTEtMDIgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+
CiAKICAgICAgICAgTWVkaWFTdHJlYW1SZWdpc3RyeSBzaG91bGQgaG9sZCByZWZlcmVuY2VzIHRv
IE1lZGlhU3RyZWFtRGVzY3JpcHRvciByYXRoZXIgdGhhbiBNZWRpYVN0cmVhbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNl
cnZlckN1c3RvbS5jcHAKaW5kZXggY2Q2MTNmZjE2MGU1Nzc3MjNmMzVjZjIyZTUxYjFkNjE4YjUw
YzMyMS4uZWFjZWMxNDIzYjY5N2VmNDNmZTllMTYwMTRhZDY2MWE1MTQ0MDY2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCkBAIC03OCw2ICs3OCw3IEBAIEpTVmFsdWUgSlNXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpvYnNlcnZlKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIEpTRGljdGlvbmFy
eSBkaWN0aW9uYXJ5KGV4ZWMsIG9wdGlvbnNPYmplY3QpOwogICAgIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG9wdGlvbnMgPSAwOworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGFyc2lu
ZyBvZiB0aGUgYXR0cmlidXRlRmlsdGVyIG9wdGlvbi4KICAgICBib29sIG9wdGlvbjsKICAgICBp
ZiAoZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgiY2hpbGRMaXN0Iiwgb3B0aW9uKSAmJiBvcHRp
b24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcAppbmRleCBh
YTg1Mjg0YjU3ZmViZDU4Mzg0Mjg0MDQ3OTNlNDM3M2QyNTgyMTg1Li5iOTUwNDM5NDY3ZGRkMmNl
ZmNkZDMxNjcyNjVhYTU1OWQ3ODIzZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9PcHRpb25zT2JqZWN0LmNwcApAQCAtMjEzLDYgKzIxMywyNSBAQCBib29sIE9wdGlvbnNPYmpl
Y3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgTWVzc2FnZVBvcnRBcnJheSYgdmFsdWUpIGNvbnN0
CiAgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0QXJyYXkodjhWYWx1ZSwgdmFsdWUpOwogfQogCiti
b29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgSGFzaFNldDxBdG9taWNT
dHJpbmc+JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVl
OworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0cworICAgIGlmICghdjhW
YWx1ZS0+SXNBcnJheSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiB2OEFycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodjhWYWx1ZSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2OEFycmF5LT5MZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGluZGV4ZWRWYWx1ZSA9IHY4QXJyYXktPkdldCh2
ODo6SW50ZWdlcjo6TmV3KGkpKTsKKyAgICAgICAgdmFsdWUuYWRkKHY4VmFsdWVUb1dlYkNvcmVT
dHJpbmcoaW5kZXhlZFZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJv
b2wgT3B0aW9uc09iamVjdDo6Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmlu
ZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHY4VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25z
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgKaW5k
ZXggY2Q0YzJmZDhlZmY5NzU3MzkzNmM2OGJiNDAwMWU0ZDJhZTgwNTQ3ZC4uNjljMTFiMTEyNzJh
MzEzMWIzNzkwZjAxOGNjOTY1Mjc4MWY4MWIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L09wdGlvbnNPYmplY3QuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNiArNTksNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CiAgICAg
Ym9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPERPTVdpbmRvdz4mKSBjb25zdDsKICAgICBi
b29sIGdldChjb25zdCBTdHJpbmcmLCBNZXNzYWdlUG9ydEFycmF5JikgY29uc3Q7CisgICAgYm9v
bCBnZXQoY29uc3QgU3RyaW5nJiwgSGFzaFNldDxBdG9taWNTdHJpbmc+JikgY29uc3Q7CiAKICAg
ICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcm
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCBl
ZjUzZWFmMjdlZjEwNTNjZTcwZWFkZTlkNGM3NzNjYjQzYzM0ODc0Li44ZGYxYWEyYWI1YzQ1ZWIz
NjRlMGUwZjYxMmZkZDJiMTlmN2EwMTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVy
Q3VzdG9tLmNwcApAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJXZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTg5LDExICs5MywxNSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpvYnNlcnZlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZQogCiAgICAgT3B0aW9uc09i
amVjdCBvcHRpb25zT2JqZWN0KGFyZ3NbMV0pOwogICAgIHVuc2lnbmVkIG9wdGlvbnMgPSAwOwor
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBhdHRyaWJ1dGVGaWx0ZXI7CiAgICAgYm9vbCBvcHRp
b247CiAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJjaGlsZExpc3QiLCBvcHRpb24pICYmIG9w
dGlvbikKICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExp
c3Q7Ci0gICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJhdHRyaWJ1dGVzIiwgb3B0aW9uKSAmJiBv
cHRpb24pCisgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJhdHRyaWJ1dGVzIiwgb3B0aW9uKSAm
JiBvcHRpb24pIHsKICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpB
dHRyaWJ1dGVzOworICAgICAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZUZpbHRl
ciIsIGF0dHJpYnV0ZUZpbHRlcikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZUZpbHRlcjsKKyAgICB9CiAgICAgaWYgKG9wdGlvbnNPYmpl
Y3QuZ2V0KCJjaGFyYWN0ZXJEYXRhIiwgb3B0aW9uKSAmJiBvcHRpb24pCiAgICAgICAgIG9wdGlv
bnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0YTsKICAgICBpZiAob3B0
aW9uc09iamVjdC5nZXQoInN1YnRyZWUiLCBvcHRpb24pICYmIG9wdGlvbikKQEAgLTEwMyw3ICsx
MTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpv
YnNlcnZlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZQogICAgIGlmIChvcHRpb25zT2JqZWN0Lmdl
dCgiY2hhcmFjdGVyRGF0YU9sZFZhbHVlIiwgb3B0aW9uKSAmJiBvcHRpb24pCiAgICAgICAgIG9w
dGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0YU9sZFZhbHVlOwog
Ci0gICAgaW1wLT5vYnNlcnZlKHRhcmdldCwgb3B0aW9ucyk7CisgICAgaW1wLT5vYnNlcnZlKHRh
cmdldCwgb3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExp
c3RNdXRhdGlvblNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcAppbmRleCA1ZGNiZGNmZjMwZGFhOThjYjkwMWI3YjZlZWEwZTRkMTY5OGZlNjJi
Li44MTdkNzhiMGM2YzFjMjllZDk0YWU2MTQxODM3ZDQ1MzUxNTI0OWU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCkBAIC00MSw2ICs0MSw3IEBA
CiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4
IDM5Y2FiZDgzNmEwMzU5N2I1OWY0NGUyMDE0NmRmZWMwZDAyNWVhOTAuLmQxNGYzNTdkZjU4MTJj
MDEyYTdkMzZmMGRlYzRmOWM0OTQyMDc2MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYz
NCw3ICs2MzQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNPbGRWYWx1ZVJlcXVlc3RlZChjb25z
dCBIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdQogc3RhdGljIHZvaWQgZW5xdWV1
ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlKQogewogICAgIEhhc2hN
YXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiBvYnNl
cnZlcnM7Ci0gICAgZWxlbWVudC0+Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBl
KG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlcyk7CisgICAgZWxl
bWVudC0+Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlcywgbmFtZS5sb2NhbE5hbWUoKSk7CiAgICAg
aWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CmluZGV4IGJhZGQwN2IyOWMxMzg3ZWNmMmY3OWI0NmJmZWE0NWUzOWZiY2MwYTkuLmE0NTY4YTJl
YTQ3ZjYzMzgzZjJhNWZjMjBiY2FhODk0NWRhY2Y1NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI3
MDEsNyArMjcwMSw3IEBAIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiogTm9k
ZTo6bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKICAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/
IHJhcmVEYXRhKCktPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIDogMDsKIH0KIAotc3RhdGlj
IHZvaWQgYWRkTWF0Y2hpbmdPYnNlcnZlcnMoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+JiBvYnNlcnZlcnMsIFZlY3RvcjxNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uPiogcmVnaXN0cnksIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9w
dGlvbnMpCitzdGF0aWMgdm9pZCBhZGRNYXRjaGluZ09ic2VydmVycyhIYXNoTWFwPFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4mIG9ic2VydmVycywgVmVj
dG9yPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSwgTXV0YXRpb25PYnNl
cnZlck9wdGlvbnMgb3B0aW9ucywgTm9kZSogc291cmNlTm9kZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBhdHRyaWJ1dGVOYW1lKQogewogICAgIGlmICghcmVnaXN0cnkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI3MTAsNyArMjcxMCw3IEBAIHN0YXRpYyB2b2lkIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKEhh
c2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbiYgZW50cnkgPSByZWdpc3RyeS0+YXQoaSk7CiAKLSAgICAgICAgaWYgKCFlbnRy
eS5oYXNBbGxPcHRpb25zKG9wdGlvbnMpKQorICAgICAgICBpZiAoIWVudHJ5LnNob3VsZFJlY2Vp
dmVNdXRhdGlvbihzb3VyY2VOb2RlLCBvcHRpb25zLCBhdHRyaWJ1dGVOYW1lKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHBhaXI8SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
b2JzZXJ2ZXJzLmFkZChlbnRyeS5vYnNlcnZlci5nZXQoKSwgZW50cnkub3B0aW9ucyk7CkBAIC0y
NzE5LDE3ICsyNzE5LDE3IEBAIHN0YXRpYyB2b2lkIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKEhhc2hN
YXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2CiAgICAgfQogfQogCi12
b2lkIE5vZGU6OmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4mIG9ic2VydmVy
cywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUpCit2b2lkIE5vZGU6
OmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4mIG9ic2VydmVycywgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlTmFtZSkKIHsKLSAgICBhZGRNYXRjaGluZ09ic2VydmVycyhvYnNlcnZlcnMsIG11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLCB0eXBlKTsKKyAgICBhZGRNYXRjaGluZ09ic2VydmVy
cyhvYnNlcnZlcnMsIG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLCB0eXBlLCB0aGlzLCBhdHRy
aWJ1dGVOYW1lKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKG9i
c2VydmVycywgbm9kZS0+bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksIHR5cGUgfCBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpTdWJ0cmVlKTsKKyAgICAgICAgYWRkTWF0Y2hpbmdPYnNlcnZlcnMo
b2JzZXJ2ZXJzLCBub2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgdHlwZSB8IFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUsIHRoaXMsIGF0dHJpYnV0ZU5hbWUpOwogfQogCi1O
b2RlOjpNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCBOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2Jz
ZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwgTXV0YXRp
b25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgTm9kZSogcmVnaXN0cmF0aW9uTm9kZSkKK05vZGU6
Ok11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZl
cihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBNdXRhdGlvbk9i
c2VydmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJp
YnV0ZUZpbHRlciwgTm9kZSogcmVnaXN0cmF0aW9uTm9kZSkKIHsKICAgICBWZWN0b3I8TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIHJlZ2lzdHJ5ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7Ci0gICAgTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbiByZWdpc3RyYXRpb24ob2JzZXJ2ZXIsIG9wdGlvbnMsIHJlZ2lzdHJhdGlvbk5vZGUp
OworICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVy
LCBvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIsIHJlZ2lzdHJhdGlvbk5vZGUpOwogCiAgICAgc2l6
ZV90IGluZGV4ID0gcmVnaXN0cnktPmZpbmQocmVnaXN0cmF0aW9uKTsKICAgICBpZiAoaW5kZXgg
PT0gbm90Rm91bmQpIHsKQEAgLTI3MzcsNyArMjczNywxMCBAQCBOb2RlOjpNdXRhdGlvblJlZ2lz
dHJhdGlvblJlc3VsdCBOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxX
ZWJLaQogICAgICAgICByZXR1cm4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQ7CiAgICAgfQog
Ci0gICAgcmVnaXN0cnktPmF0KGluZGV4KS5vcHRpb25zID0gcmVnaXN0cmF0aW9uLm9wdGlvbnM7
CisgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiYgZXhpc3RpbmdSZWdpc3RyYXRpb24g
PSByZWdpc3RyeS0+YXQoaW5kZXgpOworICAgIGV4aXN0aW5nUmVnaXN0cmF0aW9uLm9wdGlvbnMg
PSByZWdpc3RyYXRpb24ub3B0aW9uczsKKyAgICBleGlzdGluZ1JlZ2lzdHJhdGlvbi5hdHRyaWJ1
dGVGaWx0ZXIuc3dhcChyZWdpc3RyYXRpb24uYXR0cmlidXRlRmlsdGVyKTsKKwogICAgIHJldHVy
biBNdXRhdGlvblJlZ2lzdHJhdGlvbk9wdGlvbnNSZXNldDsKIH0KIApAQCAtMjc0OCw3ICsyNzUx
LDggQEAgdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmUKICAgICBpZiAoIXJlZ2lzdHJ5KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlv
bihvYnNlcnZlciwgMCwgcmVnaXN0cmF0aW9uTm9kZSk7CisgICAgSGFzaFNldDxBdG9taWNTdHJp
bmc+IGR1bW15OworICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9u
KG9ic2VydmVyLCAwLCBkdW1teSwgcmVnaXN0cmF0aW9uTm9kZSk7CiAgICAgc2l6ZV90IGluZGV4
ID0gcmVnaXN0cnktPmZpbmQocmVnaXN0cmF0aW9uKTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90
Rm91bmQpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKQEAgLTI3NjcsMTMgKzI3NzEsMTMg
QEAgdm9pZCBOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxsRGV0YWNoKCkKICAg
ICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSByZWdpc3RyeS0+c2l6ZSgpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbiYgcmVnaXN0cmF0aW9uID0gcmVnaXN0cnktPmF0KGkpOwotICAgICAg
ICAgICAgaWYgKCFyZWdpc3RyYXRpb24uaGFzQWxsT3B0aW9ucyhXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpTdWJ0cmVlKSkKKyAgICAgICAgICAgIGlmICghcmVnaXN0cmF0aW9uLmlzU3VidHJlZSgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBOb2RlKiByZWdpc3Ry
YXRpb25Ob2RlID0gcmVnaXN0cmF0aW9uLnJlZ2lzdHJhdGlvbk5vZGU7CiAgICAgICAgICAgICBp
ZiAoIXJlZ2lzdHJhdGlvbk5vZGUpCiAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uTm9kZSA9
IG5vZGU7Ci0gICAgICAgICAgICByZWdpc3RyYXRpb24ub2JzZXJ2ZXItPndpbGxEZXRhY2hOb2Rl
SW5PYnNlcnZlZFN1YnRyZWUocmVnaXN0cmF0aW9uTm9kZSwgcmVnaXN0cmF0aW9uLm9wdGlvbnMs
IHRoaXMpOworICAgICAgICAgICAgcmVnaXN0cmF0aW9uLm9ic2VydmVyLT53aWxsRGV0YWNoTm9k
ZUluT2JzZXJ2ZWRTdWJ0cmVlKHJlZ2lzdHJhdGlvbk5vZGUsIHJlZ2lzdHJhdGlvbi5vcHRpb25z
LCByZWdpc3RyYXRpb24uYXR0cmlidXRlRmlsdGVyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCmluZGV4IGM4YTEzMTk3MGNjYzMwZDU1NzM1MDQyNDM3ZWNhYzY1MTBkOTQ1
NWQuLmU4MTk2ODA3YTcwMGVmNTNiNDNlZGFlYWRjODc2NTZjNmI3YWFiNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiAjaWYgVVNFKEpTQykKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNTkwLDEzICs1OTEsMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIHZvaWQgZ2V0UmVnaXN0ZXJlZE11dGF0aW9u
T2JzZXJ2ZXJzT2ZUeXBlKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zPiYsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSk7
CisgICAgdm9pZCBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoSGFzaE1hcDxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+JiwgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJp
YnV0ZU5hbWUgPSBudWxsQXRvbSk7CiAKICAgICBlbnVtIE11dGF0aW9uUmVnaXN0cmF0aW9uUmVz
dWx0IHsKICAgICAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdGVyZWQsCiAgICAgICAgIE11dGF0
aW9uUmVnaXN0cmF0aW9uT3B0aW9uc1Jlc2V0CiAgICAgfTsKLSAgICBNdXRhdGlvblJlZ2lzdHJh
dGlvblJlc3VsdCByZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRh
dGlvbk9ic2VydmVyPiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIE5vZGUqIHJlZ2lzdHJhdGlv
bk5vZGUgPSAwKTsKKyAgICBNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCByZWdpc3Rlck11dGF0
aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiwgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmls
dGVyLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlID0gMCk7CiAKICAgICB2b2lkIHVucmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIE5vZGUq
IHJlZ2lzdHJhdGlvbk5vZGUgPSAwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4
IGVjYmQ1NTkyMmY0MjkwYmJiMzhkYTMxMDk3MGYwNThhMGI1NjRmNGMuLjI1YWY5Y2RjNjEzZjlh
ZjZiZDRlOGJlNWI2OGI4MDBmNTIxOTBmMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTAsMTAgKzkxLDEyIEBAIHByaXZhdGU6CiAKICNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogc3RydWN0IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gewotICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24oUGFzc1JlZlB0cjxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0
aW9ucywgTm9kZSogbm9kZSkKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NS
ZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmls
dGVyLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQogICAgICAgICA6IG9ic2VydmVyKG9ic2VydmVy
KQogICAgICAgICAsIG9wdGlvbnMob3B0aW9ucykKLSAgICAgICAgLCByZWdpc3RyYXRpb25Ob2Rl
KG5vZGUpCisgICAgICAgICwgYXR0cmlidXRlRmlsdGVyKGF0dHJpYnV0ZUZpbHRlcikKKyAgICAg
ICAgLCByZWdpc3RyYXRpb25Ob2RlKHJlZ2lzdHJhdGlvbk5vZGUpCisgICAgICAgICwgbV9jYXNl
SW5zZW5zaXRpdmVGaWx0ZXJJbml0aWFsaXplZChmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC0x
MDIsMTkgKzEwNSw1NiBAQCBzdHJ1Y3QgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiB7CiAg
ICAgICAgIHJldHVybiBvYnNlcnZlciA9PSBvdGhlci5vYnNlcnZlciAmJiByZWdpc3RyYXRpb25O
b2RlID09IG90aGVyLnJlZ2lzdHJhdGlvbk5vZGU7CiAgICAgfQogCi0gICAgYm9vbCBoYXNBbGxP
cHRpb25zKE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMpIGNvbnN0CisgICAgYm9vbCBz
aG91bGRSZWNlaXZlTXV0YXRpb24oTm9kZSogc291cmNlTm9kZSwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMgb3B0aW9ucywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKQogICAgIHsK
LSAgICAgICAgcmV0dXJuICh0aGlzLT5vcHRpb25zICYgb3B0aW9ucykgPT0gb3B0aW9uczsKKyAg
ICAgICAgaWYgKCh0aGlzLT5vcHRpb25zICYgb3B0aW9ucykgIT0gb3B0aW9ucykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIShvcHRpb25zICYgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6QXR0cmlidXRlcykgfHwgISh0aGlzLT5vcHRpb25zICYgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6QXR0cmlidXRlRmlsdGVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmICh0aGlzLT5hdHRyaWJ1dGVGaWx0ZXIuY29udGFpbnMoYXR0cmlidXRlTmFt
ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoc291cmNlTm9kZS0+
ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBzb3VyY2VOb2RlLT5pc0hUTUxFbGVtZW50
KCkpCisgICAgICAgICAgICByZXR1cm4gY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKCku
Y29udGFpbnMoYXR0cmlidXRlTmFtZSk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgY2FzZUluc2Vuc2l0aXZlQXR0cmli
dXRlRmlsdGVyKCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYXNlSW5zZW5zaXRpdmVGaWx0ZXJJ
bml0aWFsaXplZCkgeworICAgICAgICAgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSB0aGlzLT5hdHRyaWJ1dGVGaWx0ZXIuYmVnaW4oKTsgaXRlciAh
PSB0aGlzLT5hdHRyaWJ1dGVGaWx0ZXIuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgICAg
IEF0b21pY1N0cmluZyBhdHRyaWJ1dGVOYW1lTG93ZXIgPSBpdGVyLT5sb3dlcigpOworICAgICAg
ICAgICAgICAgIGlmICgoKml0ZXIpICE9IGF0dHJpYnV0ZU5hbWVMb3dlcikKKyAgICAgICAgICAg
ICAgICAgICAgbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIuYWRkKGF0dHJpYnV0ZU5h
bWVMb3dlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fY2FzZUluc2Vuc2l0aXZl
RmlsdGVySW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1f
Y2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyOworICAgIH0KKworICAgIGJvb2wgaW5saW5l
IGlzU3VidHJlZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy0+b3B0aW9ucyAmJiBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpTdWJ0cmVlOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJLaXRN
dXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlcjsKICAgICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBv
cHRpb25zOworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBhdHRyaWJ1dGVGaWx0ZXI7CiAKICAg
ICAvLyByZWdpc3RyYXRpb25Ob2RlIHdpbGwgYmUgMCBpZiB0aGUgcmVnaXN0cmF0aW9uIGlzIG5v
bi10cmFuc2llbnQuIEkuZS4gVGhlIHJlZ2lzdHJhdGlvbk5vZGUgaXMgdGhlIE5vZGUgaW4gd2hv
c2UKICAgICAvLyByZWdpc3RyeSBpdCBleGlzdHMuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9l
c24ndCBuZWVkIHRvIGJlIGEgUmVmUHRyIGJlY2F1c2UgdGhlIG9ic2VydmVyIHdpbGwgYmUgaG9s
ZGluZyBhIFJlZlB0ciB0byB0aGUgc2FtZSBub2RlIGF0CiAgICAgLy8gbGVhc3QgZm9yIHRoZSBs
aWZldGltZSBvZiB0aGlzIFJlZ2lzdHJhdGlvbiBpbiBpdHMgbV90cmFuc2llbnRPYnNlcnZlZE5v
ZGVzIG1hcC4KICAgICBOb2RlKiByZWdpc3RyYXRpb25Ob2RlOworCitwcml2YXRlOgorICAgIEhh
c2hTZXQ8QXRvbWljU3RyaW5nPiBtX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcjsKKyAg
ICBib29sIG1fY2FzZUluc2Vuc2l0aXZlRmlsdGVySW5pdGlhbGl6ZWQ7CiB9OwogI2VuZGlmIC8v
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCBiNjZjYWEwODNlZTk5ZTRlNTAzOGJjNDZiMTI1
OGM4YjUwNDU2MGE5Li41MTcxNDFjYjQ5YzYzZGZhNzg1ODU5OTI5ZThhZmExNzRlZmMyMDNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC02
MiwxMSArNjIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyVHJhbnNpZW50T2JzZXJ2YXRp
b25zRm9yUmVnaXN0cmF0aW9uKFdlYktpdE11dGF0aW9uT2JzZXIKICAgICAgICAgKCppdGVyKS0+
dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXIsIHJlZ2lzdHJhdGlvbk5vZGUpOwog
fQogCi12b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSogbm9kZSwgTXV0
YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBj
b25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJpYnV0ZUZpbHRlcikKIHsKICAgICAvLyBG
SVhNRTogTW9yZSBvcHRpb25zIGNvbXBvc2l0aW9uIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSBoZXJl
LCBlLmcuLCB2YWxpZGF0aW9uLgotCi0gICAgaWYgKG5vZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcih0aGlzLCBvcHRpb25zKSA9PSBOb2RlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkg
eworICAgIGlmIChub2RlLT5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcywgb3B0aW9ucywg
YXR0cmlidXRlRmlsdGVyKSA9PSBOb2RlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkgewog
ICAgICAgICBtX29ic2VydmVkTm9kZXMuYXBwZW5kKG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTE0LDEyICsxMTMsMTMgQEAgdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gbXUKICAgICBh
Y3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZCh0aGlzKTsKIH0KIAotdm9pZCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjp3aWxsRGV0YWNoTm9kZUluT2JzZXJ2ZWRTdWJ0cmVlKFBhc3NSZWZQdHI8
Tm9kZT4gcHJwUmVnaXN0cmF0aW9uTm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9u
cywgUGFzc1JlZlB0cjxOb2RlPiBwcnBEZXRhY2hpbmdOb2RlKQordm9pZCBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjp3aWxsRGV0YWNoTm9kZUluT2JzZXJ2ZWRTdWJ0cmVlKFBhc3NSZWZQdHI8Tm9k
ZT4gcHJwUmVnaXN0cmF0aW9uTm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywg
SGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIsIFBhc3NSZWZQdHI8Tm9kZT4g
cHJwRGV0YWNoaW5nTm9kZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gcmVnaXN0cmF0aW9uTm9kZSA9
IHBycFJlZ2lzdHJhdGlvbk5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IGRldGFjaGluZ05vZGUgPSBw
cnBEZXRhY2hpbmdOb2RlOwogCi0gICAgZGV0YWNoaW5nTm9kZS0+cmVnaXN0ZXJNdXRhdGlvbk9i
c2VydmVyKHRoaXMsIG9wdGlvbnMsIHJlZ2lzdHJhdGlvbk5vZGUuZ2V0KCkpOworICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgY3JlYXRlIGFub3RoZXIgY29weSBvZiB0aGUgcmVnaXN0cmF0aW9uLCBp
bmNsdWRpbmcgYSBjb3B5IG9mIHRoZSBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmls
dGVyLgorICAgIGRldGFjaGluZ05vZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBv
cHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIsIHJlZ2lzdHJhdGlvbk5vZGUuZ2V0KCkpOwogICAgIEhh
c2hNYXA8UmVmUHRyPE5vZGU+LCBOb2RlSGFzaFNldCo+OjppdGVyYXRvciBpdGVyID0gbV90cmFu
c2llbnRPYnNlcnZlZE5vZGVzLmZpbmQocmVnaXN0cmF0aW9uTm9kZSk7CiAgICAgaWYgKGl0ZXIg
IT0gbV90cmFuc2llbnRPYnNlcnZlZE5vZGVzLmVuZCgpKSB7CiAgICAgICAgIGl0ZXItPnNlY29u
ZC0+YWRkKGRldGFjaGluZ05vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dl
YktpdE11dGF0aW9uT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmgKaW5kZXggNzUzMjA0YzI0Nzk0ZDRlMzgyZGIwMjU1MWVhNTQ4MDM1NGRjNGE3
NS4uYzYwYjg1ZjhiMDk1Yzc3NmE0N2NjNDgwMTRlZTE3OTgxODdhMjIyYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCkBAIC0zOCw3ICszOCw3IEBACiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjksOSArNjksOSBAQCBwdWJsaWM6CiAKICAgICB+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpOwog
Ci0gICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyk7CisgICAg
dm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNl
dDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpOwogICAgIHZvaWQgZGlzY29ubmVjdCgp
OwotICAgIHZvaWQgd2lsbERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShQYXNzUmVmUHRyPE5v
ZGU+IHJlZ2lzdHJhdGlvbk5vZGUsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zLCBQYXNzUmVmUHRy
PE5vZGU+IGRldGFjaGluZ05vZGUpOworICAgIHZvaWQgd2lsbERldGFjaE5vZGVJbk9ic2VydmVk
U3VidHJlZShQYXNzUmVmUHRyPE5vZGU+IHJlZ2lzdHJhdGlvbk5vZGUsIE11dGF0aW9uT2JzZXJ2
ZXJPcHRpb25zLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJpYnV0ZUZpbHRlciwgUGFzc1Jl
ZlB0cjxOb2RlPiBkZXRhY2hpbmdOb2RlKTsKICAgICB2b2lkIG9ic2VydmVkTm9kZURlc3RydWN0
ZWQoTm9kZSopOwogICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NSZWZQdHI8TXV0
YXRpb25SZWNvcmQ+KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFkY2E0ZGNiYmQ3YmYyNzk5YjUwZjc0OWZjNzA4NTAy
NzE3YWZjNzAuLjBkNjdhMmQ0OGU0OTNkMjkyNDBkODYxNmJiMjdiZWZlMmU2ODg1YWEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMC0zMSAgUmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3VwcG9ydCBhdHRy
aWJ1dGVGaWx0ZXIgZm9yIGF0dHJpYnV0ZSBtdXRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmli
dXRlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJp
YnV0ZXMuaHRtbDoKKwogMjAxMS0xMS0wMiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIExhbmQgY2hyb21pdW0gd2luL2xlb3BhcmQgYmFzZWxpbmVzIGZvciBwcmlu
dGluZy9zZXRQcmludGluZy5odG1sIGFuZCBwcmludGluZyBzaW5nbGUtbGluZS1tdXN0LW5vdC1i
ZS1zcGxpdC1pbnRvLXR3by1wYWdlcy5odG1sLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CmluZGV4IDliYjA3
ZTk1MzBmYTc1NDBhOTkwZWRiMDdjM2VhNDdiNjA1ZDM1YmMuLjY3OWU5MDU4NmE4OGRhMWY5NjVk
ZmI3NjU2NTM2ZGI0NGRlZWVkYzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRp
b24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKQEAgLTkyLDYgKzkyLDY2
IEBAIFBBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCiBQQVNTIG11dGF0aW9u
c1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKIFBBU1MgbXV0YXRpb25zWzFdLm9sZFZhbHVlIGlz
ICJmb28iCiAKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGVGaWx0ZXIgd29ya3MgYXMgZXhwZWN0ZWQg
YW5kIGlnbm9yZXMgY2FzZSB3aXRoIEhUTUwgZWxlbWVudHMuCisuLi5vbmx5IGZvbywgYmFyICYg
Ym9vbSBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMworUEFT
UyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0
dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFj
ZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBt
dXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiYmFyIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0
cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJp
YnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lIGlzICJib29tIgorUEFTUyBt
dXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKKworVGVzdGluZyB0aGUgYmVo
YXZpb3Igb2YgYXR0cmlidXRlRmlsdGVyIHdoZW4gdGhlIHNhbWUgb2JzZXJ2ZXIgb2JzZXJ2ZXMg
YXQgbXVsdGlwbGUgbm9kZXMgaW4gYSBzdWJ0cmVlIHdpdGggZGlmZmVyZW50IGZpbHRlciBvcHRp
b25zLgorLi4ub25seSBmb28sIGJhciAmIGJhdCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11
dGF0aW9ucy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRl
cyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRp
b25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiYmFy
IgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0
YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1
dGVOYW1lIGlzICJiYXQiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMg
bnVsbAorLi4uYmFyLCBiYXQgJiBiYXogc2hvdWxkIGFsbCBiZSByZWNlaXZlZC4KK1BBU1MgbXV0
YXRpb25zLmxlbmd0aCBpcyAzCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVz
IgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiYmFyIgorUEFTUyBtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUg
aXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJiYXQi
CitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRh
dGlvbnNbMl0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0
ZU5hbWUgaXMgImJheiIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBu
dWxsCisKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGVGaWx0ZXIgcmVzcGVjdHMgY2FzZSB3aXRoIG5v
bi1IVE1MIGVsZW1lbnRzLgorLi4ucGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmli
dXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInBhdGhMZW5ndGgiCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgImh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIgorCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNhc2Ug
d2l0aCBub24tSFRNTCBlbGVtZW50cy4KKy4uLm9ubHkgSUQsIGlkLCBib29NLCBwYXRoTGVuZ3Ro
IHNob3VsZCBiZSByZWNlaXZlZC4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyA0CitQQVNTIG11
dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZSBpcyAiSUQiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMg
bnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRp
b25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImlkIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRl
TmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMi
CitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lIGlzICJib29NIgorUEFTUyBtdXRhdGlv
bnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzNdLnR5cGUg
aXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1lIGlzICJwYXRo
TGVuZ3RoIgorUEFTUyBtdXRhdGlvbnNbM10uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29i
c2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMuaHRtbAppbmRleCAzOTVhZjc5ODQ1ODFiZDZhNWY4MjFjYmNlMTU1YWZhNjZi
ZGY0MTljLi5hZjU4YjUxOGI1MTJiMDhlNzlkYTBkZThkZTQ2NzU5MzQ1MDAxOThlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKQEAg
LTEwNyw3ICsxMDcsNyBAQCBmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24oKSB7CiAK
ICAgICBmdW5jdGlvbiBzdGFydCgpIHsKICAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhhdCByZS1v
YnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0aGUgZWZm
ZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKLSAgICAKKwogCQljYWxscyA9IDA7CiAg
ICAgICAgIG11dGF0aW9ucyA9IG51bGw7CiAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOwpAQCAtNDM1LDYgKzQzNSwyMDkgQEAgZnVuY3Rpb24gdGVzdElETEF0dHJp
YnV0ZSgpIHsKICAgICBzdGFydCgpOwogfQogCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRlRmlsdGVy
KCkgeworICAgIHZhciBkaXYsIHBhdGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rp
b24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVy
IHdvcmtzIGFzIGV4cGVjdGVkIGFuZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1lbnRzLicp
OworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25z
ID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRy
dWUsIGF0dHJpYnV0ZUZpbHRlcjogWydmb28nLCAnYmFyJywgJ2Jvb00nXSB9KTsKKyAgICAgICAg
ZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2ZvbycpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRl
KCdiYXInLCAnYmFyJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsK
KyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnQk9PbScsICdib29tJyk7CisKKyAgICAgICAgc2V0
VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAg
ICAgICAgZGVidWcoJy4uLm9ubHkgZm9vLCBiYXIgJiBib29tIHNob3VsZCBiZSByZWNlaXZlZC4n
KTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICczJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImJhciInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZScsICciYm9vbSIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAn
bnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcn
KTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitm
dW5jdGlvbiB0ZXN0QXR0cmlidXRlRmlsdGVyU3VidHJlZSgpIHsKKyAgICB2YXIgZGl2LCBkaXYy
LCBkaXYzOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
ICAgICBkZWJ1ZygnVGVzdGluZyB0aGUgYmVoYXZpb3Igb2YgYXR0cmlidXRlRmlsdGVyIHdoZW4g
dGhlIHNhbWUgb2JzZXJ2ZXIgb2JzZXJ2ZXMgYXQgbXVsdGlwbGUgbm9kZXMgaW4gYSBzdWJ0cmVl
IHdpdGggZGlmZmVyZW50IGZpbHRlciBvcHRpb25zLicpOworCisgICAgICAgIG11dGF0aW9ucyA9
IG51bGw7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVu
Y3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGRpdjIg
PSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAg
ICBkaXYzID0gZGl2Mi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7
CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgc3Vi
dHJlZTogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2ZvbycsICdiYXInXSB9KTsKKyAgICAgICAg
b2JzZXJ2ZXIub2JzZXJ2ZShkaXYyLCB7IGF0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWUs
IGF0dHJpYnV0ZUZpbHRlcjogWydiYXInLCAnYmF0J10gfSk7CisKKyAgICAgICAgZGl2My5zZXRB
dHRyaWJ1dGUoJ2ZvbycsICdmb28nKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2Jhcics
ICdiYXInKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JhdCcsICdiYXQnKTsKKyAgICAg
ICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsKKworICAgICAgICBzZXRUaW1lb3V0
KGNoZWNrQW5kT2JzZXJ2ZUFsbCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tBbmRP
YnNlcnZlQWxsKCkgeworICAgICAgICBkZWJ1ZygnLi4ub25seSBmb28sIGJhciAmIGJhdCBzaG91
bGQgYmUgcmVjZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgn
LCAnMycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0
ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICci
Zm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFj
ZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0
cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1l
JywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFt
ZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50eXBlJywg
JyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0
ZU5hbWUnLCAnImJhdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1
dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2Miwg
eyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOworICAgICAgICBkaXYzLnNldEF0
dHJpYnV0ZSgnYmFyJywgJ2JhcicpOworICAgICAgICBkaXYzLnNldEF0dHJpYnV0ZSgnYmF0Jywg
J2JhdCcpOworICAgICAgICBkaXYzLnNldEF0dHJpYnV0ZSgnYmF6JywgJ2JheicpOworCisgICAg
ICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2go
KSB7CisgICAgICAgIGRlYnVnKCcuLi5iYXIsIGJhdCAmIGJheiBzaG91bGQgYWxsIGJlIHJlY2Vp
dmVkLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzMnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImJhciInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciYmF0Iicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdu
dWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0udHlwZScsICciYXR0cmlidXRl
cyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lJywgJyJi
YXoiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNl
JywgJ251bGwnKTsKKworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQorCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRlRmlsdGVyTm9uSFRNTEVsZW1lbnQoKSB7CisgICAg
dmFyIHBhdGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNhc2Ug
d2l0aCBub24tSFRNTCBlbGVtZW50cy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0p
IHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIHBh
dGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
JywgJ3BhdGgnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShwYXRoLCB7IGF0dHJpYnV0ZXM6
IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydwYXRoTGVuZ3RoJ10gfSk7CisgICAgICAgIHBhdGgu
c2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhMZW5ndGgn
LCAnMjAwJyk7CisgICAgICAgIHBhdGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnJywgJ3BhdGhsZW5ndGgnLCAnMjAwJyk7CisKKyAgICAgICAgc2V0VGltZW91dChm
aW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVi
dWcoJy4uLnBhdGhMZW5ndGggc2hvdWxkIGJlIHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
c1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUnLCAnInBhdGhMZW5ndGgiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJyJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1Zygn
Jyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxEb2N1bWVudCgpIHsKKyAgICB2YXIg
c3ZnRG9jLCBkaXYsIHBhdGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3Bl
Y3RzIGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4nKTsKKworICAgICAgICBzdmdEb2MgPSBk
b2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgnaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmcnLCAnc3ZnJywgJ3N2ZycpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAg
ICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsK
KyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIGRpdiA9
IHN2Z0RvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShk
aXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ0lEJywgJ2lkJywgJ2Jv
b00nXSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnSUQnLCAnSUQnKTsKKyAgICAgICAg
ZGl2LnNldEF0dHJpYnV0ZSgnaWQnLCAnaWQnKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgn
YmF6JywgJ2JheicpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdib29NJywgJ2Jvb20nKTsK
KyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnQk9PbScsICdib29tJyk7CisKKyAgICAgICAgcGF0
aCA9IHN2Z0RvYy5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywg
J3BhdGgnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShwYXRoLCB7IGF0dHJpYnV0ZXM6IHRy
dWUsIGF0dHJpYnV0ZUZpbHRlcjogWydwYXRoTGVuZ3RoJ10gfSk7CisgICAgICAgIHBhdGguc2V0
QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhMZW5ndGgnLCAn
MjAwJyk7CisgICAgICAgIHBhdGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnJywgJ3BhdGhsZW5ndGgnLCAnMjAwJyk7CisKKyAgICAgICAgc2V0VGltZW91dChmaW5p
c2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWco
Jy4uLm9ubHkgSUQsIGlkLCBib29NLCBwYXRoTGVuZ3RoIHNob3VsZCBiZSByZWNlaXZlZC4nKTsK
KworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICc0Jyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJJRCInKTsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciaWQiJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWUnLCAnImJvb00iJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1szXS50eXBlJywgJyJhdHRyaWJ1dGVzIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5hbWUnLCAnInBhdGhM
ZW5ndGgiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbM10uYXR0cmlidXRlTmFtZXNw
YWNlJywgJyJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInKTsKKworICAgICAgICBvYnNlcnZl
ci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3Qo
KTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCiB2YXIgdGVzdHMgPSBbCiAgICAgdGVzdEJh
c2ljLAogICAgIHRlc3RXcm9uZ1R5cGUsCkBAIC00NDYsNyArNjQ5LDExIEBAIHZhciB0ZXN0cyA9
IFsKICAgICB0ZXN0T2xkVmFsdWUsCiAgICAgdGVzdE9sZFZhbHVlQXNSZXF1ZXN0ZWQsCiAgICAg
dGVzdE9sZFZhbHVlVW5pb25NdWx0aXBsZU9ic2VydmF0aW9ucywKLSAgICB0ZXN0SURMQXR0cmli
dXRlCisgICAgdGVzdElETEF0dHJpYnV0ZSwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyLAorICAg
IHRlc3RBdHRyaWJ1dGVGaWx0ZXJTdWJ0cmVlLAorICAgIHRlc3RBdHRyaWJ1dGVGaWx0ZXJOb25I
VE1MRWxlbWVudCwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyTm9uSFRNTERvY3VtZW50CiBdOwog
dmFyIHRlc3RJbmRleCA9IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113582</attachid>
            <date>2011-11-03 16:54:59 -0700</date>
            <delta_ts>2011-11-03 18:27:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111103165458.patch</filename>
            <type>text/plain</type>
            <size>53836</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkyMzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MWM4MWE2NTc1ZjkyMzlj
MjUyMzJiNThlOTAwZWYxNmI3MTViMmVjLi5iZTFhOTU5YWE2YmQ5MzRhMWM3NzBjMjlhMzZjNWM3
Mzc1YzIwN2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMTAtMzEgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhbiBhdHRyaWJ1dGVGaWx0ZXIgdG8gdGhlIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gYW5kCisgICAgICAgIGFkZHMgc3VwcG9ydCBmb3Igb25seSBvYnNlcnZpbmcgYXR0cmli
dXRlcyB3aG9zZSBuYW1lIGFyZSBpbiB0aGUgcHJvdmlkZWQKKyAgICAgICAgZmlsdGVyIHNldCAo
YXJyYXkgb2Ygc3RyaW5ncykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlZmFjdG9ycyBv
dXQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiBpbnRvIGl0cyBvd24gY2xhc3MKKyAgICAg
ICAgd2hpY2ggaXMgbm93IHJlZmVyZW5jZWQgYnkgTm9kZSByYXRoZXIgdGhhbiBjb3BpZWQgd2l0
aGluIGNvbnRhaW5lcnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpvYnNlcnZlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Q6OmdldCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9D
aGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3Bh
dGNoTW9kaWZpZWRFdmVudCk6CisgICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0
YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFkZE1hdGNoaW5nT2JzZXJ2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldFJlZ2lz
dGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpy
ZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdp
c3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm90aWZ5TXV0
YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAg
ICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVN
dXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
OjpjYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNTdWJ0cmVlKToKKyAgICAgICAgKiBkb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpvYnNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OndpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUpOgorICAgICAgICAqIGRvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmg6CisKIDIwMTEtMTEtMDMgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREIgcmVzdWx0IG9mIGRlbGV0aW5n
IGEgcmVjb3JkIHNob3VsZCBiZSB0cnVlIG9yIGZhbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDVm
MjEzZTYyZmZiYWE5NzNmNjcxOWEyYjBlMmQxNmUyMDZiZTJjMS4uMzA4NDEzNzk4YWM4MDM5ODRk
N2I2OGRmNTVlNzUzMTgyZWQ1MmUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTI1Nyw2ICs1MjU3
LDggQEAKICAgICAgICAgICAgICdkb20vTXV0YXRpb25DYWxsYmFjay5oJywKICAgICAgICAgICAg
ICdkb20vTXV0YXRpb25FdmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9NdXRhdGlvbkV2ZW50
LmgnLAorICAgICAgICAgICAgJ2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCcs
CisgICAgICAgICAgICAnZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCcsCiAgICAg
ICAgICAgICAnZG9tL011dGF0aW9uUmVjb3JkLmNwcCcsCiAgICAgICAgICAgICAnZG9tL011dGF0
aW9uUmVjb3JkLmgnLAogICAgICAgICAgICAgJ2RvbS9OYW1lTm9kZUxpc3QuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNlcnZl
ckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCmluZGV4IGNkNjEzZmYxNjBlNTc3NzIzZjM1Y2YyMmU1MWIxZDYx
OGI1MGMzMjEuLmVhY2VjMTQyM2I2OTdlZjQzZmU5ZTE2MDE0YWQ2NjFhNTE0NDA2NmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNlcnZl
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRNdXRh
dGlvbk9ic2VydmVyQ3VzdG9tLmNwcApAQCAtNzgsNiArNzgsNyBAQCBKU1ZhbHVlIEpTV2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICBKU0RpY3Rp
b25hcnkgZGljdGlvbmFyeShleGVjLCBvcHRpb25zT2JqZWN0KTsKICAgICBNdXRhdGlvbk9ic2Vy
dmVyT3B0aW9ucyBvcHRpb25zID0gMDsKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHBh
cnNpbmcgb2YgdGhlIGF0dHJpYnV0ZUZpbHRlciBvcHRpb24uCiAgICAgYm9vbCBvcHRpb247CiAg
ICAgaWYgKGRpY3Rpb25hcnkudHJ5R2V0UHJvcGVydHkoImNoaWxkTGlzdCIsIG9wdGlvbikgJiYg
b3B0aW9uKQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxk
TGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKaW5k
ZXggYWNhZmEyM2IwODc3YzU3Y2E1ODNlYjFhNTkzZWVjZjUxMmQzNzEzYS4uZTY4MWVjZjhkMzgy
NzA2ZWQ2YjZiN2U5NTFhYjhmYTI0NDM5YzI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvT3B0aW9uc09iamVjdC5jcHAKQEAgLTIxMCw2ICsyMTAsMjUgQEAgYm9vbCBPcHRpb25z
T2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIE1lc3NhZ2VQb3J0QXJyYXkmIHZhbHVlKSBj
b25zdAogICAgIHJldHVybiBnZXRNZXNzYWdlUG9ydEFycmF5KHY4VmFsdWUsIHZhbHVlKTsKIH0K
IAorYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhW
YWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBhcnJheS1saWtlIG9iamVjdHMKKyAgICBpZiAo
IXY4VmFsdWUtPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KHY4VmFs
dWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdjhBcnJheS0+TGVuZ3RoKCk7ICsraSkg
eworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbmRleGVkVmFsdWUgPSB2OEFycmF5LT5H
ZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgIHZhbHVlLmFkZCh2OFZhbHVlVG9XZWJD
b3JlU3RyaW5nKGluZGV4ZWRWYWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CiBib29sIE9wdGlvbnNPYmplY3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBT
dHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKICAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2OFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0
aW9uc09iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5o
CmluZGV4IGNkNGMyZmQ4ZWZmOTc1NzM5MzZjNjhiYjQwMDFlNGQyYWU4MDU0N2QuLjY5YzExYjEx
MjcyYTMxMzFiMzc5MGYwMThjYzk2NTI3ODFmODFiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9PcHRpb25zT2JqZWN0LmgKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8djguaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDYgKzU5LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0Owog
ICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxET01XaW5kb3c+JikgY29uc3Q7CiAg
ICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnRBcnJheSYpIGNvbnN0OworICAg
IGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0Owog
CiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3Ry
aW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKaW5k
ZXggZWY1M2VhZjI3ZWYxMDUzY2U3MGVhZGU5ZDRjNzczY2I0M2MzNDg3NC4uOGRmMWFhMmFiNWM0
NWViMzY0ZTBlMGY2MTJmZGQyYjE5ZjdhMDE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNl
cnZlckN1c3RvbS5jcHAKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
V2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC04OSwxMSArOTMsMTUgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6b2JzZXJ2ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWUKIAogICAgIE9wdGlv
bnNPYmplY3Qgb3B0aW9uc09iamVjdChhcmdzWzFdKTsKICAgICB1bnNpZ25lZCBvcHRpb25zID0g
MDsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVyOwogICAgIGJvb2wg
b3B0aW9uOwogICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiY2hpbGRMaXN0Iiwgb3B0aW9uKSAm
JiBvcHRpb24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hp
bGRMaXN0OwotICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmlidXRlcyIsIG9wdGlvbikg
JiYgb3B0aW9uKQorICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmlidXRlcyIsIG9wdGlv
bikgJiYgb3B0aW9uKSB7CiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6QXR0cmlidXRlczsKKyAgICAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJhdHRyaWJ1dGVG
aWx0ZXIiLCBhdHRyaWJ1dGVGaWx0ZXIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVGaWx0ZXI7CisgICAgfQogICAgIGlmIChvcHRpb25z
T2JqZWN0LmdldCgiY2hhcmFjdGVyRGF0YSIsIG9wdGlvbikgJiYgb3B0aW9uKQogICAgICAgICBv
cHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGE7CiAgICAgaWYg
KG9wdGlvbnNPYmplY3QuZ2V0KCJzdWJ0cmVlIiwgb3B0aW9uKSAmJiBvcHRpb24pCkBAIC0xMDMs
NyArMTExLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6b2JzZXJ2ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWUKICAgICBpZiAob3B0aW9uc09iamVj
dC5nZXQoImNoYXJhY3RlckRhdGFPbGRWYWx1ZSIsIG9wdGlvbikgJiYgb3B0aW9uKQogICAgICAg
ICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGFPbGRWYWx1
ZTsKIAotICAgIGltcC0+b2JzZXJ2ZSh0YXJnZXQsIG9wdGlvbnMpOworICAgIGltcC0+b2JzZXJ2
ZSh0YXJnZXQsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcik7CiAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hh
cmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5k
ZXggM2E1ZmQ2ZmVkYjA5YmFmMjI0YzQ1YjRlNTQ0NjVlOTY1YjQ4Y2E1MC4uYzExOTY2ZjIxNjU0
ZGQ3NTQxNTllZjEzZmZiMGRkNWI5OWE1Nzg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJE
YXRhLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyBib29sIGlzT2xkVmFsdWVSZXF1ZXN0
ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PCiAKIHN0
YXRpYyB2b2lkIGVucXVldWVDaGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQoTm9kZSogbm9kZSwg
Y29uc3QgU3RyaW5nJiBvbGREYXRhKQogewotICAgIEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNl
cnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiBvYnNlcnZlcnM7CisgICAgSGFzaE1hcDxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+IG9i
c2VydmVyczsKICAgICBub2RlLT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUo
b2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhKTsKICAgICBp
ZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IDVkY2JkY2ZmMzBkYWE5OGNi
OTAxYjdiNmVlYTBlNGQxNjk4ZmU2MmIuLjUwOWNlYzViMjg1YWQ1ZDk2OGMwMTIwNjE0OTdjNmMz
YWNjMzkyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0yNDQsNyArMjQ1LDcgQEAgdm9pZCBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5jcmVt
ZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRp
b25zPiBvYnNlcnZlcnM7CisgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+IG9ic2VydmVyczsKICAgICB0YXJnZXQtPmdldFJl
Z2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6OkNoaWxkTGlzdCk7CiAgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCiAgICAg
ICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApp
bmRleCAzOWNhYmQ4MzZhMDM1OTdiNTlmNDRlMjAxNDZkZmVjMGQwMjVlYTkwLi5lOGZiNjNiZDZk
ZjVlMmI3MzMyYzQyNjBiYmU0MWFiYTY2Y2Q1ZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC02MzMsOCArNjMzLDggQEAgc3RhdGljIGlubGluZSBib29sIGlzT2xkVmFsdWVSZXF1ZXN0ZWQo
Y29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXUKIAogc3RhdGljIHZvaWQg
ZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlKQogewotICAg
IEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
PiBvYnNlcnZlcnM7Ci0gICAgZWxlbWVudC0+Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJz
T2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlcyk7Cisg
ICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+IG9ic2VydmVyczsKKyAgICBlbGVtZW50LT5nZXRSZWdpc3RlcmVkTXV0YXRpb25P
YnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1
dGVzLCBuYW1lLmxvY2FsTmFtZSgpKTsKICAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQxZWEyN2Y1ZjkxMjI0NDFiZGRkMWYz
NmQxNGIyNWI4OWJkMjcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisKKyNpbmNsdWRl
ICJNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRy
PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b246OmNyZWF0ZShQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBO
b2RlKiByZWdpc3RyYXRpb25Ob2RlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbihvYnNlcnZlciwgcmVnaXN0cmF0aW9uTm9kZSkpOworfQor
CitNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE5vZGUqIHJl
Z2lzdHJhdGlvbk5vZGUpCisgICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKKyAgICAgLCBtX3Jl
Z2lzdHJhdGlvbk5vZGUocmVnaXN0cmF0aW9uTm9kZSkKKyAgICAgLCBtX29wdGlvbnMoMCkKK3sK
KyAgICBtX29ic2VydmVyLT5vYnNlcnZhdGlvblN0YXJ0ZWQodGhpcyk7Cit9CisKK011dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb246On5NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKCkKK3sK
KyAgICBjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKKyAgICBtX29ic2VydmVyLT5vYnNl
cnZhdGlvbkVuZGVkKHRoaXMpOworfQorCit2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b246OnJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgY29u
c3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpCit7CisgICAgY2xlYXJU
cmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CisKKyAgICBtX29wdGlvbnMgPSBvcHRpb25zOworICAg
IG1fYXR0cmlidXRlRmlsdGVyID0gYXR0cmlidXRlRmlsdGVyOworICAgIG1fY2FzZUluc2Vuc2l0
aXZlQXR0cmlidXRlRmlsdGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbjo6b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2goUGFzc1JlZlB0cjxOb2Rl
PiBub2RlKQoreworICAgIGlmICghKG1fb3B0aW9ucyAmIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
OlN1YnRyZWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBub2RlLT5yZWdpc3RlclRyYW5zaWVu
dE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisKKyAgICBpZiAoIW1fdHJhbnNpZW50UmVnaXN0cmF0
aW9uTm9kZXMpIHsKKyAgICAgICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcyA9IGFkb3B0
UHRyKG5ldyBOb2RlSGFzaFNldCk7CisgICAgICAgIG1fcmVnaXN0cmF0aW9uTm9kZUtlZXBBbGl2
ZSA9IG1fcmVnaXN0cmF0aW9uTm9kZTsgLy8gQmFsYW5jZWQgaW4gY2xlYXJUcmFuc2llbnRSZWdp
c3RyYXRpb25zLgorICAgIH0KKyAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLT5hZGQo
bm9kZSk7Cit9CisKK3ZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6Y2xlYXJUcmFu
c2llbnRSZWdpc3RyYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNpZW50UmVnaXN0cmF0aW9u
Tm9kZXMpIHsKKyAgICAgICAgQVNTRVJUKCFtX3JlZ2lzdHJhdGlvbk5vZGVLZWVwQWxpdmUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVnaXN0cmF0aW9uTm9kZUtl
ZXBBbGl2ZSk7CisgICAgZm9yIChOb2RlSGFzaFNldDo6aXRlcmF0b3IgaXRlciA9IG1fdHJhbnNp
ZW50UmVnaXN0cmF0aW9uTm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbV90cmFuc2llbnRSZWdpc3Ry
YXRpb25Ob2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+dW5yZWdpc3RlclRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisKKyAgICBtX3RyYW5zaWVudFJlZ2lzdHJh
dGlvbk5vZGVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RyYXRpb25Ob2RlS2VlcEFsaXZlID0gMDsg
Ly8gQmFsYW5jZWQgaW4gb2JzZXJ2ZVN1YnRyZWVOb2RlV2lsbERldGFjaC4KK30KKwordm9pZCBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjp1bnJlZ2lzdGVyKCkKK3sKKyAgICBtX3JlZ2lz
dHJhdGlvbk5vZGUtPnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOyAvLyBUaGlzIGNh
bGwgd2lsbCBjYXVzZSB0aGlzIG9iamVjdCB0byBiZSBkZWxldGVkLgorfQorCitib29sIE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSog
bm9kZSwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAoIShtX29wdGlvbnMgJiB0eXBl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVnaXN0cmF0aW9uTm9kZSAh
PSBub2RlICYmICEobV9vcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0eXBlICE9IFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6OkF0dHJpYnV0ZXMgfHwgIShtX29wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpBdHRyaWJ1dGVGaWx0ZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICht
X2F0dHJpYnV0ZUZpbHRlci5jb250YWlucyhhdHRyaWJ1dGVOYW1lKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBu
b2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVBdHRy
aWJ1dGVGaWx0ZXIoKS5jb250YWlucyhhdHRyaWJ1dGVOYW1lKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiAgTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbjo6Y2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKCkKK3sKKyAgICBpZiAo
IW1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKSB7CisgICAgICAgIG1fY2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlRmlsdGVyID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5n
PigpKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX2F0dHJpYnV0ZUZpbHRlci5iZWdpbigpOyBpdGVyICE9IG1fYXR0cmlidXRlRmls
dGVyLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBhdHRyaWJ1dGVO
YW1lTG93ZXIgPSBpdGVyLT5sb3dlcigpOworICAgICAgICAgICAgaWYgKCgqaXRlcikgIT0gYXR0
cmlidXRlTmFtZUxvd2VyKQorICAgICAgICAgICAgICAgIG1fY2FzZUluc2Vuc2l0aXZlQXR0cmli
dXRlRmlsdGVyLT5hZGQoYXR0cmlidXRlTmFtZUxvd2VyKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAqbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXI7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mNWQ3OTI2ZjMxYzQwMThlZmJmODk3YmNjODFjOGU3MzBkYjkwMjc5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24uaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uX2gKKyNkZWZpbmUgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbl9oCisKKyNpZiBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNl
cnZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24g
eworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIE5vZGUq
KTsKKworICAgIH5NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKCk7CisKKyAgICB2b2lkIHJl
c2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKKyAgICB2b2lkIG9ic2VydmVkU3VidHJlZU5v
ZGVXaWxsRGV0YWNoKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgY2xlYXJUcmFuc2llbnRS
ZWdpc3RyYXRpb25zKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyKCk7CisKKyAgICBib29sIHNob3Vs
ZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSosIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0
aW9uVHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKTsKKworICAgIFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyKCkgeyByZXR1cm4gbV9vYnNlcnZlci5nZXQoKTsg
fQorICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucygpIHsg
cmV0dXJuIG1fb3B0aW9ucyAmIChXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVPbGRW
YWx1ZSB8IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGFPbGRWYWx1ZSk7IH0K
KworcHJpdmF0ZToKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIE5vZGUqKTsKKworICAgIGNvbnN0IEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYgY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKCk7CisKKyAgICBSZWZQ
dHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKKyAgICBOb2RlKiBtX3JlZ2lz
dHJhdGlvbk5vZGU7IC8vIEJhY2stcG9pbnRlciB0byB0aGUgTm9kZSB3aGljaCBvd25zIHRoaXMg
cmVnaXN0cmF0aW9uLgorICAgIFJlZlB0cjxOb2RlPiBtX3JlZ2lzdHJhdGlvbk5vZGVLZWVwQWxp
dmU7IC8vIFRoaXMgcmVnaXN0cmF0aW9uIHRha2VzIHJlZmVyZW5jZSB0byBpdHMgb3duaW5nIG5v
ZGUgd2hpbGUgaXQgaGFzIHRyYW5zaWVudCByZWdpc3RyYXRpb25zLgorICAgIHR5cGVkZWYgSGFz
aFNldDxSZWZQdHI8Tm9kZT4gPiBOb2RlSGFzaFNldDsKKyAgICBPd25QdHI8Tm9kZUhhc2hTZXQ+
IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CisKKyAgICBNdXRhdGlvbk9ic2VydmVyT3B0
aW9ucyBtX29wdGlvbnM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IG1fYXR0cmlidXRlRmls
dGVyOworICAgIE93blB0cjxIYXNoU2V0PEF0b21pY1N0cmluZz4gPm1fY2FzZUluc2Vuc2l0aXZl
QXR0cmlidXRlRmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworI2VuZGlmIC8vIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGJhZGQwN2IyOWMxMzg3ZWNmMmY3
OWI0NmJmZWE0NWUzOWZiY2MwYTkuLjQ2YjlhOGU1YzExYjdmZTFhNTNiZTI2YWQyMTViNzNjNzc5
NTljNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTU0OCwxMCArNTQ4LDcgQEAgdm9pZCBOb2RlOjpj
bGVhclJhcmVEYXRhKCkKICAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUo
KTsKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgaWYgKFZlY3RvcjxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiogcmVnaXN0cnkgPSBtdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdHJ5LT5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIHJlZ2lzdHJ5LT5hdChpKS5vYnNlcnZlci0+b2JzZXJ2ZWRO
b2RlRGVzdHJ1Y3RlZCh0aGlzKTsKLSAgICB9CisgICAgQVNTRVJUKCF0cmFuc2llbnRNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkoKSB8fCB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnko
KS0+aXNFbXB0eSgpKTsKICNlbmRpZgogCiAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFN
YXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CkBAIC0yNjk2LDU5ICsy
NjkzLDcwIEBAIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkK
IH0KIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi1WZWN0b3I8TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbj4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCitWZWN0
b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIE5vZGU6Om11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyeSgpCiB7CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0
YSgpLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFk
ZE1hdGNoaW5nT2JzZXJ2ZXJzKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0
aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzLCBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbj4qIHJlZ2lzdHJ5LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQor
SGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIE5vZGU6OnRyYW5zaWVudE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCiB7Ci0gICAgaWYgKCFyZWdpc3RyeSkKLSAgICAgICAg
cmV0dXJuOworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+dHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgOiAwOworfQogCi0gICAgY29uc3Qgc2l6ZV90IHNp
emUgPSByZWdpc3RyeS0+c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mIGVudHJ5ID0gcmVn
aXN0cnktPmF0KGkpOworc3RhdGljIGlubGluZSB2b2lkIGFkZE9ic2VydmVyVG9EZWxpdmVyeVNl
dChIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5
T3B0aW9ucz4mIG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIsIE11
dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucykKK3sKKyAgICBwYWly
PEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlP
cHRpb25zPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG9ic2VydmVycy5hZGQob2JzZXJ2ZXIs
IGRlbGl2ZXJ5T3B0aW9ucyk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQorICAgICAgICByZXN1
bHQuZmlyc3QtPnNlY29uZCB8PSBkZWxpdmVyeU9wdGlvbnM7Cit9CiAKLSAgICAgICAgaWYgKCFl
bnRyeS5oYXNBbGxPcHRpb25zKG9wdGlvbnMpKQotICAgICAgICAgICAgY29udGludWU7Cit2b2lk
IE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8V2ViS2l0
TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiYgb2JzZXJ2
ZXJzLCBOb2RlKiBmcm9tTm9kZSwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBl
IHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAoVmVj
dG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiByZWdpc3RyeSA9IGZy
b21Ob2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAgICBjb25zdCBzaXpl
X3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KiByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQoaSkuZ2V0KCk7CisgICAgICAgICAgICBpZiAo
cmVnaXN0cmF0aW9uLT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKHRoaXMsIHR5cGUsIGF0dHJp
YnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyVG9EZWxpdmVyeVNldChvYnNl
cnZlcnMsIHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZXIoKSwgcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9w
dGlvbnMoKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgcGFpcjxIYXNoTWFwPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKGVudHJ5Lm9ic2VydmVyLmdldCgpLCBlbnRyeS5v
cHRpb25zKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAgICAgICAgcmVzdWx0
LmZpcnN0LT5zZWNvbmQgfD0gZW50cnkub3B0aW9uczsKKyAgICBpZiAoSGFzaFNldDxNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudFJlZ2lzdHJ5ID0gZnJvbU5vZGUtPnRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAgIGZvciAoSGFzaFNl
dDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0ZXJhdG9yIGl0ZXIgPSB0cmFuc2ll
bnRSZWdpc3RyeS0+YmVnaW4oKTsgaXRlciAhPSB0cmFuc2llbnRSZWdpc3RyeS0+ZW5kKCk7ICsr
aXRlcikgeworICAgICAgICAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0
cmF0aW9uID0gKml0ZXI7CisgICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5zaG91bGRSZWNl
aXZlTXV0YXRpb25Gcm9tKHRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAg
ICAgIGFkZE9ic2VydmVyVG9EZWxpdmVyeVNldChvYnNlcnZlcnMsIHJlZ2lzdHJhdGlvbi0+b2Jz
ZXJ2ZXIoKSwgcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKSk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKLXZvaWQgTm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBl
KEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
PiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUgdHlwZSkK
K3ZvaWQgTm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKEhhc2hNYXA8
V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiYg
b2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUgdHlwZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIGFkZE1hdGNoaW5nT2JzZXJ2
ZXJzKG9ic2VydmVycywgbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksIHR5cGUpOwotICAgIGZv
ciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgYWRkTWF0Y2hpbmdPYnNlcnZlcnMob2JzZXJ2ZXJzLCBub2RlLT5tdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgdHlwZSB8IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1
YnRyZWUpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9u
KG9ic2VydmVycywgbm9kZSwgdHlwZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAKLU5vZGU6Ok11dGF0
aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNz
UmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucyBvcHRpb25zLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQorTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbiogTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIpCiB7Ci0gICAgVmVjdG9yPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVyLCBvcHRpb25zLCByZWdpc3RyYXRpb25Ob2RlKTsK
LQotICAgIHNpemVfdCBpbmRleCA9IHJlZ2lzdHJ5LT5maW5kKHJlZ2lzdHJhdGlvbik7Ci0gICAg
aWYgKGluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIHJlZ2lzdHJ5LT5hcHBlbmQocmVnaXN0
cmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RlcmVkOworICAg
IFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiogcmVnaXN0cnkg
PSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdHJ5LT5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAocmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlcigpID09IG9ic2VydmVyKQorICAgICAgICAg
ICAgcmV0dXJuIHJlZ2lzdHJ5LT5hdChpKS5nZXQoKTsKICAgICB9CiAKLSAgICByZWdpc3RyeS0+
YXQoaW5kZXgpLm9wdGlvbnMgPSByZWdpc3RyYXRpb24ub3B0aW9uczsKLSAgICByZXR1cm4gTXV0
YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQ7CisgICAgT3duUHRyPE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24+IHJlZ2lzdHJhdGlvbiA9IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b246OmNyZWF0ZShvYnNlcnZlciwgdGhpcyk7CisgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbiogcmVnaXN0cmF0aW9uUHRyID0gcmVnaXN0cmF0aW9uLmdldCgpOworICAgIHJlZ2lzdHJ5
LT5hcHBlbmQocmVnaXN0cmF0aW9uLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlZ2lzdHJhdGlv
blB0cjsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVm
UHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBOb2RlKiByZWdpc3RyYXRpb25O
b2RlKQordm9pZCBOb2RlOjp1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24pCiB7Ci0gICAgVmVjdG9yPE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSA9IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
OworICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiogcmVn
aXN0cnkgPSBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKICAgICBBU1NFUlQocmVnaXN0cnkp
OwogICAgIGlmICghcmVnaXN0cnkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVyLCAwLCByZWdpc3RyYXRpb25O
b2RlKTsKICAgICBzaXplX3QgaW5kZXggPSByZWdpc3RyeS0+ZmluZChyZWdpc3RyYXRpb24pOwog
ICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5k
KQpAQCAtMjc1NywyMyArMjc2NSwzNCBAQCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9i
c2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZQogICAgIHJl
Z2lzdHJ5LT5yZW1vdmUoaW5kZXgpOwogfQogCit2b2lkIE5vZGU6OnJlZ2lzdGVyVHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRp
b24pCit7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlVHJhbnNpZW50TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJ5KCktPmFkZChyZWdpc3RyYXRpb24pOworfQorCit2b2lkIE5vZGU6OnVucmVn
aXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24qIHJlZ2lzdHJhdGlvbikKK3sKKyAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24qPiogdHJhbnNpZW50UmVnaXN0cnkgPSB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKTsKKyAgICBBU1NFUlQodHJhbnNpZW50UmVnaXN0cnkpOworICAgIGlmICghdHJhbnNp
ZW50UmVnaXN0cnkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh0cmFuc2llbnRSZWdp
c3RyeS0+Y29udGFpbnMocmVnaXN0cmF0aW9uKSk7CisgICAgdHJhbnNpZW50UmVnaXN0cnktPnJl
bW92ZShyZWdpc3RyYXRpb24pOworfQorCiB2b2lkIE5vZGU6Om5vdGlmeU11dGF0aW9uT2JzZXJ2
ZXJzTm9kZVdpbGxEZXRhY2goKQogewogICAgIGZvciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUo
KTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBWZWN0b3I8TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIHJlZ2lzdHJ5ID0gbm9kZS0+bXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJ5KCk7Ci0gICAgICAgIGlmICghcmVnaXN0cnkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQo
aSk7Ci0gICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbi5oYXNBbGxPcHRpb25zKFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBy
ZWdpc3RyeSA9IG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAgICAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICByZWdpc3RyeS0+
YXQoaSktPm9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKHRoaXMpOworICAgICAgICB9CiAK
LSAgICAgICAgICAgIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUgPSByZWdpc3RyYXRpb24ucmVnaXN0
cmF0aW9uTm9kZTsKLSAgICAgICAgICAgIGlmICghcmVnaXN0cmF0aW9uTm9kZSkKLSAgICAgICAg
ICAgICAgICByZWdpc3RyYXRpb25Ob2RlID0gbm9kZTsKLSAgICAgICAgICAgIHJlZ2lzdHJhdGlv
bi5vYnNlcnZlci0+d2lsbERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShyZWdpc3RyYXRpb25O
b2RlLCByZWdpc3RyYXRpb24ub3B0aW9ucywgdGhpcyk7CisgICAgICAgIGlmIChIYXNoU2V0PE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50UmVnaXN0cnkgPSBub2RlLT50
cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAgICAgICAgZm9yIChI
YXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPjo6aXRlcmF0b3IgaXRlciA9IHRy
YW5zaWVudFJlZ2lzdHJ5LT5iZWdpbigpOyBpdGVyICE9IHRyYW5zaWVudFJlZ2lzdHJ5LT5lbmQo
KTsgKytpdGVyKQorICAgICAgICAgICAgICAgICgqaXRlciktPm9ic2VydmVkU3VidHJlZU5vZGVX
aWxsRGV0YWNoKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggYzhh
MTMxOTcwY2NjMzBkNTU3MzUwNDI0MzdlY2FjNjUxMGQ5NDU1ZC4uNmI2NmM4MWQwNDkyODNlZWQ2
MzQ0MjU5NmQ3OGQ4M2QzNTU0NWI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+CiAKICNpZiBVU0UoSlNDKQogbmFtZXNwYWNlIEpTQyB7CkBAIC01OTAsMTYg
KzU5MSwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZF
UlMpCi0gICAgdm9pZCBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoSGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+JiwgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlKTsKLQotICAgIGVudW0gTXV0YXRpb25S
ZWdpc3RyYXRpb25SZXN1bHQgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCwK
LSAgICAgICAgTXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQKLSAgICB9OwotICAgIE11
dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IHJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVm
UHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgTm9k
ZSogcmVnaXN0cmF0aW9uTm9kZSA9IDApOwotCi0gICAgdm9pZCB1bnJlZ2lzdGVyTXV0YXRpb25P
YnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+LCBOb2RlKiByZWdpc3Ry
YXRpb25Ob2RlID0gMCk7Ci0KKyAgICB2b2lkIGdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVy
c09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERl
bGl2ZXJ5T3B0aW9ucz4mLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSA9IG51bGxBdG9tKTsKKyAgICBNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0
cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPik7CisgICAgdm9pZCB1bnJlZ2lzdGVyTXV0YXRpb25P
YnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKik7CisgICAgdm9pZCByZWdpc3Rl
clRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiop
OworICAgIHZvaWQgdW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbiopOwogICAgIHZvaWQgbm90aWZ5TXV0YXRpb25PYnNlcnZlcnNO
b2RlV2lsbERldGFjaCgpOwogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAK
QEAgLTcyNyw3ICs3MjMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tGb3JEZWJ1Z2dpbmco
KTsKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgVmVjdG9yPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKKyAgICBW
ZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIG11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyeSgpOworICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKKyAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNl
cnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiYsIE5vZGUqIGZyb21Ob2RlLCBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlTmFtZSk7CiAjZW5kaWYKIAogICAgIG11dGFibGUgdWludDMyX3QgbV9ub2RlRmxh
Z3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggZWNiZDU1OTIyZjQyOTBiYmIzOGRh
MzEwOTcwZjA1OGEwYjU2NGY0Yy4uMGFhMWQ1M2I0NzIzZWE1ZTBlZmYyYWJlZWM2NDE5NDdkM2Y5
MGY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIk1pY3JvRGF0YUl0ZW1MaXN0LmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgIk11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKQEAgLTM2LDYg
KzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtODgsMzYgKzkwLDYgQEAgcHJpdmF0ZToKICAgICBOb2RlTGlzdHNOb2Rl
RGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENhY2hlKDApIHt9CiB9OwogCi0jaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKLXN0cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHsK
LSAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRp
b25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIE5v
ZGUqIG5vZGUpCi0gICAgICAgIDogb2JzZXJ2ZXIob2JzZXJ2ZXIpCi0gICAgICAgICwgb3B0aW9u
cyhvcHRpb25zKQotICAgICAgICAsIHJlZ2lzdHJhdGlvbk5vZGUobm9kZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9ic2VydmVyID09IG90aGVy
Lm9ic2VydmVyICYmIHJlZ2lzdHJhdGlvbk5vZGUgPT0gb3RoZXIucmVnaXN0cmF0aW9uTm9kZTsK
LSAgICB9Ci0KLSAgICBib29sIGhhc0FsbE9wdGlvbnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9ucykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAodGhpcy0+b3B0aW9ucyAmIG9w
dGlvbnMpID09IG9wdGlvbnM7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI+IG9ic2VydmVyOwotICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0K
LSAgICAvLyByZWdpc3RyYXRpb25Ob2RlIHdpbGwgYmUgMCBpZiB0aGUgcmVnaXN0cmF0aW9uIGlz
IG5vbi10cmFuc2llbnQuIEkuZS4gVGhlIHJlZ2lzdHJhdGlvbk5vZGUgaXMgdGhlIE5vZGUgaW4g
d2hvc2UKLSAgICAvLyByZWdpc3RyeSBpdCBleGlzdHMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMg
ZG9lc24ndCBuZWVkIHRvIGJlIGEgUmVmUHRyIGJlY2F1c2UgdGhlIG9ic2VydmVyIHdpbGwgYmUg
aG9sZGluZyBhIFJlZlB0ciB0byB0aGUgc2FtZSBub2RlIGF0Ci0gICAgLy8gbGVhc3QgZm9yIHRo
ZSBsaWZldGltZSBvZiB0aGlzIFJlZ2lzdHJhdGlvbiBpbiBpdHMgbV90cmFuc2llbnRPYnNlcnZl
ZE5vZGVzIG1hcC4KLSAgICBOb2RlKiByZWdpc3RyYXRpb25Ob2RlOwotfTsKLSNlbmRpZiAvLyBF
TkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotCiBjbGFzcyBOb2RlUmFyZURhdGEgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOiAgICAKQEAgLTE2OCwxMyArMTQwLDIxIEBAIHB1YmxpYzoKICAgICB9CiAKICNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uPiogbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyByZXR1cm4gbV9tdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnkuZ2V0KCk7IH0KLSAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbj4qIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCisgICAgVmVj
dG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBtdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeS5nZXQoKTsg
fQorICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiogZW5z
dXJlTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKICAgICB7CiAgICAgICAgIGlmICghbV9tdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnkpCi0gICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4p
OworICAgICAgICAgICAgbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KTsKICAgICAgICAg
cmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOwogICAgIH0KKworICAgIEhh
c2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeS5nZXQoKTsgfQorICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+
KiBlbnN1cmVUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkKKyAgICAgICAgICAg
IG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5ID0gYWRvcHRQdHIobmV3IEhhc2hT
ZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KTsKKyAgICAgICAgcmV0dXJuIG1fdHJh
bnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOworICAgIH0KICNlbmRpZgogCiAg
ICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9jdXNlZDsgfQpAQCAtMTk1
LDcgKzE3NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoIDogMTsKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
Ci0gICAgT3duUHRyPFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+IG1fbXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJ5OworICAgIE93blB0cjxWZWN0b3I8T3duUHRyPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4gPiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsKKyAg
ICBPd25QdHI8SGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gPiBtX3RyYW5z
aWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IGI2NmNhYTA4M2VlOTll
NGU1MDM4YmM0NmIxMjU4YzhiNTA0NTYwYTkuLjViYjlhYWExYmQ2MzA2MDk3ZWE4ZGE3ZDMwMTVj
NGJhMDBkZDgyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNl
cnZlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyLmgiCiAKICNpbmNsdWRlICJNdXRhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oIgogI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCiAj
aW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNTMsNTEg
KzU0LDMyIEBAIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OldlYktpdE11dGF0aW9uT2JzZXJ2ZXIo
UGFzc1JlZlB0cjxNdXRhdGlvbkNhbGxiYWNrPiBjYWxsCiAKIFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6On5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKCkKIHsKLSAgICBjbGVhckFsbFRyYW5zaWVudE9i
c2VydmF0aW9ucygpOworICAgIEFTU0VSVChtX3JlZ2lzdHJhdGlvbnMuaXNFbXB0eSgpKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyVHJhbnNpZW50T2JzZXJ2YXRpb25zRm9yUmVnaXN0
cmF0aW9uKFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyLCBOb2RlKiByZWdpc3RyYXRp
b25Ob2RlLCBQYXNzT3duUHRyPE5vZGVIYXNoU2V0PiB0cmFuc2llbnROb2RlcykKK3ZvaWQgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJpYnV0ZUZp
bHRlcikKIHsKLSAgICBmb3IgKE5vZGVIYXNoU2V0OjppdGVyYXRvciBpdGVyID0gdHJhbnNpZW50
Tm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gdHJhbnNpZW50Tm9kZXMtPmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgICgqaXRlciktPnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyLCByZWdp
c3RyYXRpb25Ob2RlKTsKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3Ry
YXRpb24gPSBub2RlLT5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisgICAgcmVnaXN0
cmF0aW9uLT5yZXNldE9ic2VydmF0aW9uKG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcik7CiB9CiAK
LXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlv
bk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQordm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpk
aXNjb25uZWN0KCkKIHsKLSAgICAvLyBGSVhNRTogTW9yZSBvcHRpb25zIGNvbXBvc2l0aW9uIHdv
cmsgbmVlZHMgdG8gYmUgZG9uZSBoZXJlLCBlLmcuLCB2YWxpZGF0aW9uLgotCi0gICAgaWYgKG5v
ZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBvcHRpb25zKSA9PSBOb2RlOjpNdXRh
dGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkgewotICAgICAgICBtX29ic2VydmVkTm9kZXMuYXBwZW5k
KG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSGFzaE1hcDxSZWZQdHI8Tm9k
ZT4sIE5vZGVIYXNoU2V0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVudE9ic2VydmVkTm9k
ZXMuZmluZChub2RlKTsKLSAgICBpZiAoaXRlciA9PSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMu
ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyVHJhbnNpZW50T2JzZXJ2YXRpb25z
Rm9yUmVnaXN0cmF0aW9uKHRoaXMsIG5vZGUsIGFkb3B0UHRyKGl0ZXItPnNlY29uZCkpOwotICAg
IG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5yZW1vdmUoaXRlcik7CisgICAgSGFzaFNldDxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gcmVnaXN0cmF0aW9ucyhtX3JlZ2lzdHJhdGlvbnMp
OworICAgIGZvciAoSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0ZXJh
dG9yIGl0ZXIgPSByZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gcmVnaXN0cmF0aW9ucy5l
bmQoKTsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyKCk7CiB9CiAKLXZvaWQg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCit2b2lkIFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6Om9ic2VydmF0aW9uU3RhcnRlZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KiByZWdpc3RyYXRpb24pCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29ic2VydmVk
Tm9kZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fb2JzZXJ2ZWROb2Rlc1tpXS0+dW5yZWdpc3Rl
ck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7Ci0KLSAgICBtX29ic2VydmVkTm9kZXMuY2xlYXIoKTsK
LSAgICBjbGVhckFsbFRyYW5zaWVudE9ic2VydmF0aW9ucygpOworICAgIEFTU0VSVCghbV9yZWdp
c3RyYXRpb25zLmNvbnRhaW5zKHJlZ2lzdHJhdGlvbikpOworICAgIG1fcmVnaXN0cmF0aW9ucy5h
ZGQocmVnaXN0cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNl
cnZlZE5vZGVEZXN0cnVjdGVkKE5vZGUqIG5vZGUpCit2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6Om9ic2VydmF0aW9uRW5kZWQoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0
cmF0aW9uKQogewotICAgIEFTU0VSVCghbV90cmFuc2llbnRPYnNlcnZlZE5vZGVzLmNvbnRhaW5z
KG5vZGUpKTsKLQotICAgIHNpemVfdCBpbmRleCA9IG1fb2JzZXJ2ZWROb2Rlcy5maW5kKG5vZGUp
OwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgaWYgKGluZGV4ID09IG5vdEZv
dW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkTm9kZXMucmVtb3ZlKGluZGV4
KTsKKyAgICBBU1NFUlQobV9yZWdpc3RyYXRpb25zLmNvbnRhaW5zKHJlZ2lzdHJhdGlvbikpOwor
ICAgIG1fcmVnaXN0cmF0aW9ucy5yZW1vdmUocmVnaXN0cmF0aW9uKTsKIH0KIAogdHlwZWRlZiBM
aXN0SGFzaFNldDxSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gPiBNdXRhdGlvbk9ic2Vy
dmVyU2V0OwpAQCAtMTE0LDM2ICs5NiwxNCBAQCB2b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
OmVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdQogICAg
IGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOwogfQogCi12b2lkIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OndpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUoUGFzc1JlZlB0
cjxOb2RlPiBwcnBSZWdpc3RyYXRpb25Ob2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRp
b25zLCBQYXNzUmVmUHRyPE5vZGU+IHBycERldGFjaGluZ05vZGUpCi17Ci0gICAgUmVmUHRyPE5v
ZGU+IHJlZ2lzdHJhdGlvbk5vZGUgPSBwcnBSZWdpc3RyYXRpb25Ob2RlOwotICAgIFJlZlB0cjxO
b2RlPiBkZXRhY2hpbmdOb2RlID0gcHJwRGV0YWNoaW5nTm9kZTsKLQotICAgIGRldGFjaGluZ05v
ZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBvcHRpb25zLCByZWdpc3RyYXRpb25O
b2RlLmdldCgpKTsKLSAgICBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTm9kZUhhc2hTZXQqPjo6aXRl
cmF0b3IgaXRlciA9IG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5maW5kKHJlZ2lzdHJhdGlvbk5v
ZGUpOwotICAgIGlmIChpdGVyICE9IG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5lbmQoKSkgewot
ICAgICAgICBpdGVyLT5zZWNvbmQtPmFkZChkZXRhY2hpbmdOb2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE93blB0cjxOb2RlSGFzaFNldD4gc2V0ID0gYWRvcHRQdHIobmV3IE5v
ZGVIYXNoU2V0KCkpOwotICAgIHNldC0+YWRkKGRldGFjaGluZ05vZGUpOwotICAgIG1fdHJhbnNp
ZW50T2JzZXJ2ZWROb2Rlcy5zZXQocmVnaXN0cmF0aW9uTm9kZSwgc2V0LmxlYWtQdHIoKSk7Ci19
Ci0KLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Y2xlYXJBbGxUcmFuc2llbnRPYnNlcnZh
dGlvbnMoKQotewotICAgIGZvciAoSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIE5vZGVIYXNoU2V0Kj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMuYmVnaW4oKTsgaXRlciAh
PSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgY2xlYXJU
cmFuc2llbnRPYnNlcnZhdGlvbnNGb3JSZWdpc3RyYXRpb24odGhpcywgaXRlci0+Zmlyc3QuZ2V0
KCksIGFkb3B0UHRyKGl0ZXItPnNlY29uZCkpOwotCi0gICAgbV90cmFuc2llbnRPYnNlcnZlZE5v
ZGVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlcigp
CiB7CiAgICAgTXV0YXRpb25SZWNvcmRBcnJheSByZWNvcmRzOwogICAgIHJlY29yZHMuc3dhcCht
X3JlY29yZHMpOwotICAgIGNsZWFyQWxsVHJhbnNpZW50T2JzZXJ2YXRpb25zKCk7CisKKyAgICBm
b3IgKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+OjppdGVyYXRvciBpdGVy
ID0gbV9yZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpc3RyYXRpb25zLmVuZCgp
OyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucygp
OworCiAgICAgbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQoJnJlY29yZHMsIHRoaXMpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaAppbmRleCA3NTMyMDRj
MjQ3OTRkNGUzODJkYjAyNTUxZWE1NDgwMzU0ZGM0YTc1Li42NGFiMDcwMjRkYjUxMzkyZGE0MGU3
ZWI1OTRiZjFhOGY5MjJlNGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLmgKQEAgLTMzLDIxICszMywyMiBAQAogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBNdXRhdGlvbkNhbGxiYWNrOworY2xhc3MgTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbjsKIGNsYXNzIE11dGF0aW9uUmVjb3JkOwogY2xhc3MgTm9kZTsK
IAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zOwotdHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IE5vZGVIYXNoU2V0OwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zOwogCiBjbGFzcyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gewog
cHVibGljOgpAQCAtNTcsMTEgKzU4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgQ2hhcmFjdGVyRGF0
YSA9IDEgPDwgMgogICAgIH07CiAKLSAgICBlbnVtIE9wdGlvbkZsYWdzIHsKKyAgICBlbnVtIE9i
c2VydmF0aW9uRmxhZ3MgIHsKICAgICAgICAgU3VidHJlZSA9IDEgPDwgMywKLSAgICAgICAgQXR0
cmlidXRlT2xkVmFsdWUgPSAxIDw8IDQsCi0gICAgICAgIENoYXJhY3RlckRhdGFPbGRWYWx1ZSA9
IDEgPDwgNSwKLSAgICAgICAgQXR0cmlidXRlRmlsdGVyID0gMSA8PCA2CisgICAgICAgIEF0dHJp
YnV0ZUZpbHRlciA9IDEgPDwgNAorICAgIH07CisKKyAgICBlbnVtIERlbGl2ZXJ5RmxhZ3Mgewor
ICAgICAgICBBdHRyaWJ1dGVPbGRWYWx1ZSA9IDEgPDwgNSwKKyAgICAgICAgQ2hhcmFjdGVyRGF0
YU9sZFZhbHVlID0gMSA8PCA2LAogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxNdXRhdGlvbkNhbGxiYWNrPik7
CkBAIC02OSwyNCArNzMsMTkgQEAgcHVibGljOgogCiAgICAgfldlYktpdE11dGF0aW9uT2JzZXJ2
ZXIoKTsKIAotICAgIHZvaWQgb2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMp
OworICAgIHZvaWQgb2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lkIGRpc2Nv
bm5lY3QoKTsKLSAgICB2b2lkIHdpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUoUGFzc1Jl
ZlB0cjxOb2RlPiByZWdpc3RyYXRpb25Ob2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgUGFz
c1JlZlB0cjxOb2RlPiBkZXRhY2hpbmdOb2RlKTsKLSAgICB2b2lkIG9ic2VydmVkTm9kZURlc3Ry
dWN0ZWQoTm9kZSopOworICAgIHZvaWQgb2JzZXJ2YXRpb25TdGFydGVkKE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24qKTsKKyAgICB2b2lkIG9ic2VydmF0aW9uRW5kZWQoTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbiopOwogICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+KTsKIAogcHJpdmF0ZToKICAgICBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKFBhc3NSZWZQdHI8TXV0YXRpb25DYWxsYmFjaz4pOwotCi0gICAgdm9pZCBjbGVhckFs
bFRyYW5zaWVudE9ic2VydmF0aW9ucygpOwogICAgIHZvaWQgZGVsaXZlcigpOwogCiAgICAgUmVm
UHRyPE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CiAgICAgVmVjdG9yPFJlZlB0cjxNdXRh
dGlvblJlY29yZD4gPiBtX3JlY29yZHM7Ci0gICAgVmVjdG9yPE5vZGUqPiBtX29ic2VydmVkTm9k
ZXM7IC8vIE5vZGVSYXJlRGF0YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28gdXNlIGEgd2VhayBw
b2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCi0KLSAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8g
YmUgT3duUHRyPE5vZGVIYXNoU2V0PiB3aGVuIE93blB0ciBzdXBwb3J0cyBiZWluZyBjb250YWlu
ZWQgYXMgbWFwIHZhbHVlcy4KLSAgICBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTm9kZUhhc2hTZXQq
PiBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXM7CisgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKj4gbV9yZWdpc3RyYXRpb25zOyAvLyBCYWNrLXBvaW50ZXJzIHRvIHJlZ2lz
dHJhdGlvbnMgd2hpY2ggYXJlIGhvbGRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG9ic2VydmVyLgog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDYyNzc2MmJlYjNlOTE4ZWZiM2E5NTNkYmQwN2MyNWQ1MzIzYTA5MGUu
LjVhNTViZDJlNGFiYTk5NWMxZWI3ZDdjNTE4ZGQxNzZhY2ZlNTNmYzAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMS0xMC0zMSAgUmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3VwcG9ydCBhdHRyaWJ1dGVGaWx0
ZXIgZm9yIGF0dHJpYnV0ZSBtdXRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcwODYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRt
bDoKKwogMjAxMS0xMS0wMyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIE1hcmsgdGVzdHMgYXMgc2xvdyBpbiBjaHJvbWl1bS4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAppbmRl
eCA5YmIwN2U5NTMwZmE3NTQwYTk5MGVkYjA3YzNlYTQ3YjYwNWQzNWJjLi42NzllOTA1ODZhODhk
YTFmOTY1ZGZiNzY1NjUzNmRiNDRkZWVlZGMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC05Miw2
ICs5Miw2NiBAQCBQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogUEFTUyBt
dXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiaWQiCiBQQVNTIG11dGF0aW9uc1sxXS5vbGRW
YWx1ZSBpcyAiZm9vIgogCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHdvcmtzIGFzIGV4
cGVjdGVkIGFuZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1lbnRzLgorLi4ub25seSBmb28s
IGJhciAmIGJvb20gc2hvdWxkIGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlz
IDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9u
c1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIK
K1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25z
WzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlz
ICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9vbSIK
K1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1Rlc3Rpbmcg
dGhlIGJlaGF2aW9yIG9mIGF0dHJpYnV0ZUZpbHRlciB3aGVuIHRoZSBzYW1lIG9ic2VydmVyIG9i
c2VydmVzIGF0IG11bHRpcGxlIG5vZGVzIGluIGEgc3VidHJlZSB3aXRoIGRpZmZlcmVudCBmaWx0
ZXIgb3B0aW9ucy4KKy4uLm9ubHkgZm9vLCBiYXIgJiBiYXQgc2hvdWxkIGJlIHJlY2VpdmVkLgor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0
dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNT
IG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNb
MV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUg
aXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQ
QVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0u
YXR0cmlidXRlTmFtZSBpcyAiYmF0IgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNw
YWNlIGlzIG51bGwKKy4uLmJhciwgYmF0ICYgYmF6IHNob3VsZCBhbGwgYmUgcmVjZWl2ZWQuCitQ
QVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0
cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1Mg
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sx
XS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBp
cyAiYmF0IgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BB
U1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5h
dHRyaWJ1dGVOYW1lIGlzICJiYXoiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UgaXMgbnVsbAorCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNhc2Ug
d2l0aCBub24tSFRNTCBlbGVtZW50cy4KKy4uLnBhdGhMZW5ndGggc2hvdWxkIGJlIHJlY2VpdmVk
LgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMg
ImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJwYXRoTGVu
Z3RoIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyIKKworVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNwZWN0
cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuCisuLi5vbmx5IElELCBpZCwgYm9vTSwgcGF0
aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgNAor
UEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBd
LmF0dHJpYnV0ZU5hbWUgaXMgIklEIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNw
YWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNT
IG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJhdHRy
aWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9vTSIKK1BBU1Mg
bXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sz
XS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbM10uYXR0cmlidXRlTmFtZSBp
cyAicGF0aExlbmd0aCIKK1BBU1MgbXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyAi
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRh
dGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggMzk1YWY3OTg0NTgxYmQ2YTVmODIxY2JjZTE1
NWFmYTY2YmRmNDE5Yy4uYWY1OGI1MThiNTEyYjA4ZTc5ZGEwZGU4ZGU0Njc1OTM0NTAwMTk4ZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5o
dG1sCkBAIC0xMDcsNyArMTA3LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0aW9u
KCkgewogCiAgICAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRo
YXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBoYXMg
dGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7Ci0gICAgCisKIAkJY2FsbHMg
PSAwOwogICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwogICAgICAgICBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKQEAgLTQzNSw2ICs0MzUsMjA5IEBAIGZ1bmN0aW9uIHRlc3RJ
RExBdHRyaWJ1dGUoKSB7CiAgICAgc3RhcnQoKTsKIH0KIAorZnVuY3Rpb24gdGVzdEF0dHJpYnV0
ZUZpbHRlcigpIHsKKyAgICB2YXIgZGl2LCBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAg
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0
ZUZpbHRlciB3b3JrcyBhcyBleHBlY3RlZCBhbmQgaWdub3JlcyBjYXNlIHdpdGggSFRNTCBlbGVt
ZW50cy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlciA9
IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11
dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRyaWJ1
dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnZm9vJywgJ2JhcicsICdib29NJ10gfSk7Cisg
ICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdmb28nKTsKKyAgICAgICAgZGl2LnNldEF0
dHJpYnV0ZSgnYmFyJywgJ2JhcicpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiYXonLCAn
YmF6Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9vbScpOworCisgICAg
ICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2go
KSB7CisgICAgICAgIGRlYnVnKCcuLi5vbmx5IGZvbywgYmFyICYgYm9vbSBzaG91bGQgYmUgcmVj
ZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMycpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxs
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlJywg
J251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50eXBlJywgJyJhdHRyaWJ1
dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWUnLCAn
ImJvb20iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNw
YWNlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBk
ZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsK
K30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlclN1YnRyZWUoKSB7CisgICAgdmFyIGRp
diwgZGl2MiwgZGl2MzsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgp
IHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIGF0dHJpYnV0ZUZpbHRl
ciB3aGVuIHRoZSBzYW1lIG9ic2VydmVyIG9ic2VydmVzIGF0IG11bHRpcGxlIG5vZGVzIGluIGEg
c3VidHJlZSB3aXRoIGRpZmZlcmVudCBmaWx0ZXIgb3B0aW9ucy4nKTsKKworICAgICAgICBtdXRh
dGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0p
OworCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAg
ICBkaXYyID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsK
KyAgICAgICAgZGl2MyA9IGRpdjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRy
dWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydmb28nLCAnYmFyJ10gfSk7Cisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2MiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVl
OiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnYmFyJywgJ2JhdCddIH0pOworCisgICAgICAgIGRp
djMuc2V0QXR0cmlidXRlKCdmb28nLCAnZm9vJyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRl
KCdiYXInLCAnYmFyJyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXQnLCAnYmF0Jyk7
CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF6Jyk7CisKKyAgICAgICAgc2V0
VGltZW91dChjaGVja0FuZE9ic2VydmVBbGwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNo
ZWNrQW5kT2JzZXJ2ZUFsbCgpIHsKKyAgICAgICAgZGVidWcoJy4uLm9ubHkgZm9vLCBiYXIgJiBi
YXQgc2hvdWxkIGJlIHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMu
bGVuZ3RoJywgJzMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJh
dHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUn
LCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmli
dXRlTmFtZScsICciYmFyIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJp
YnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0u
dHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5h
dHRyaWJ1dGVOYW1lJywgJyJiYXQiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0u
YXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdjIsIHsgYXR0cmlidXRlczogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKKyAgICAgICAgZGl2
My5zZXRBdHRyaWJ1dGUoJ2JhcicsICdiYXInKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUo
J2JhdCcsICdiYXQnKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsK
KworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4uYmFyLCBiYXQgJiBiYXogc2hvdWxkIGFsbCBi
ZSByZWNlaXZlZC4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcz
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXIi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywg
J251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1
dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAn
ImJhdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLnR5cGUnLCAnImF0
dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFt
ZScsICciYmF6IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5h
bWVzcGFjZScsICdudWxsJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAg
ICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3Rh
cnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxFbGVtZW50KCkg
eworICAgIHZhciBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNwZWN0
cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0g
bnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5j
dGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAg
ICAgICBwYXRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZycsICdwYXRoJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUocGF0aCwgeyBhdHRy
aWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsncGF0aExlbmd0aCddIH0pOworICAgICAg
ICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRo
TGVuZ3RoJywgJzIwMCcpOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZycsICdwYXRobGVuZ3RoJywgJzIwMCcpOworCisgICAgICAgIHNldFRp
bWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAg
ICAgIGRlYnVnKCcuLi5wYXRoTGVuZ3RoIHNob3VsZCBiZSByZWNlaXZlZC4nKTsKKworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJwYXRoTGVuZ3RoIicpOworICAgICAgICBzaG91
bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICciaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmciJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAg
ZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RBdHRyaWJ1dGVGaWx0ZXJOb25IVE1MRG9jdW1lbnQoKSB7Cisg
ICAgdmFyIHN2Z0RvYywgZGl2LCBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRl
ciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuJyk7CisKKyAgICAgICAgc3Zn
RG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoJ2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycsICdzdmcnKTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVs
bDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlv
bihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAg
ICBkaXYgPSBzdmdEb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydJRCcsICdp
ZCcsICdib29NJ10gfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0lEJywgJ0lEJyk7Cisg
ICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2lkJyk7CisgICAgICAgIGRpdi5zZXRBdHRy
aWJ1dGUoJ2JheicsICdiYXonKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYm9vTScsICdi
b29tJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9vbScpOworCisgICAg
ICAgIHBhdGggPSBzdmdEb2MuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZycsICdwYXRoJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUocGF0aCwgeyBhdHRyaWJ1
dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsncGF0aExlbmd0aCddIH0pOworICAgICAgICBw
YXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoTGVu
Z3RoJywgJzIwMCcpOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZycsICdwYXRobGVuZ3RoJywgJzIwMCcpOworCisgICAgICAgIHNldFRpbWVv
dXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAg
IGRlYnVnKCcuLi5vbmx5IElELCBpZCwgYm9vTSwgcGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2
ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnNCcpOworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciSUQiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImlkIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxs
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0udHlwZScsICciYXR0cmlidXRlcyIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lJywgJyJib29N
IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZScs
ICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbM10udHlwZScsICciYXR0cmli
dXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1lJywg
JyJwYXRoTGVuZ3RoIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzNdLmF0dHJpYnV0
ZU5hbWVzcGFjZScsICciaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJyk7CisKKyAgICAgICAg
b2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5l
eHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwogdmFyIHRlc3RzID0gWwogICAg
IHRlc3RCYXNpYywKICAgICB0ZXN0V3JvbmdUeXBlLApAQCAtNDQ2LDcgKzY0OSwxMSBAQCB2YXIg
dGVzdHMgPSBbCiAgICAgdGVzdE9sZFZhbHVlLAogICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVk
LAogICAgIHRlc3RPbGRWYWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMsCi0gICAgdGVzdElE
TEF0dHJpYnV0ZQorICAgIHRlc3RJRExBdHRyaWJ1dGUsCisgICAgdGVzdEF0dHJpYnV0ZUZpbHRl
ciwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyU3VidHJlZSwKKyAgICB0ZXN0QXR0cmlidXRlRmls
dGVyTm9uSFRNTEVsZW1lbnQsCisgICAgdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxEb2N1bWVu
dAogXTsKIHZhciB0ZXN0SW5kZXggPSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113602</attachid>
            <date>2011-11-03 18:27:21 -0700</date>
            <delta_ts>2011-11-04 20:14:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111103182719.patch</filename>
            <type>text/plain</type>
            <size>61600</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkyMzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MWM4MWE2NTc1ZjkyMzlj
MjUyMzJiNThlOTAwZWYxNmI3MTViMmVjLi5iZTFhOTU5YWE2YmQ5MzRhMWM3NzBjMjlhMzZjNWM3
Mzc1YzIwN2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMTAtMzEgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhbiBhdHRyaWJ1dGVGaWx0ZXIgdG8gdGhlIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gYW5kCisgICAgICAgIGFkZHMgc3VwcG9ydCBmb3Igb25seSBvYnNlcnZpbmcgYXR0cmli
dXRlcyB3aG9zZSBuYW1lIGFyZSBpbiB0aGUgcHJvdmlkZWQKKyAgICAgICAgZmlsdGVyIHNldCAo
YXJyYXkgb2Ygc3RyaW5ncykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlZmFjdG9ycyBv
dXQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiBpbnRvIGl0cyBvd24gY2xhc3MKKyAgICAg
ICAgd2hpY2ggaXMgbm93IHJlZmVyZW5jZWQgYnkgTm9kZSByYXRoZXIgdGhhbiBjb3BpZWQgd2l0
aGluIGNvbnRhaW5lcnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpvYnNlcnZlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Q6OmdldCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlQ2FsbGJhY2spOgorICAgICAgICAqIGRvbS9D
aGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3Bh
dGNoTW9kaWZpZWRFdmVudCk6CisgICAgICAgICogZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwpOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVucXVldWVBdHRyaWJ1dGVzTXV0
YXRpb25SZWNvcmQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFkZE1hdGNoaW5nT2JzZXJ2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldFJlZ2lz
dGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpy
ZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdp
c3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm90aWZ5TXV0
YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAg
ICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVN
dXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
OjpjYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNTdWJ0cmVlKToKKyAgICAgICAgKiBkb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpvYnNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OndpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRyZWUpOgorICAgICAgICAqIGRvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmg6CisKIDIwMTEtMTEtMDMgIEpvc2h1YSBCZWxsICA8anNi
ZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVkREIgcmVzdWx0IG9mIGRlbGV0aW5n
IGEgcmVjb3JkIHNob3VsZCBiZSB0cnVlIG9yIGZhbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCAxODQ4MjVjY2NlZGI5YmUwOGIzMTdjZTAxOWVlMGU4YTVmZGE0YWNjLi5hZDE5
MTkxZmIxNTRmN2YxYjk5MGU4MjVmZjMyZDg3M2QzZTI0MDkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTEyNjIsNiArMTI2Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uQ2FsbGJhY2suaCBcCiAJU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVu
dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDVmMjEzZTYyZmZiYWE5NzNmNjcxOWEyYjBl
MmQxNmUyMDZiZTJjMS4uMzA4NDEzNzk4YWM4MDM5ODRkN2I2OGRmNTVlNzUzMTgyZWQ1MmUwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTI1Nyw2ICs1MjU3LDggQEAKICAgICAgICAgICAgICdkb20v
TXV0YXRpb25DYWxsYmFjay5oJywKICAgICAgICAgICAgICdkb20vTXV0YXRpb25FdmVudC5jcHAn
LAogICAgICAgICAgICAgJ2RvbS9NdXRhdGlvbkV2ZW50LmgnLAorICAgICAgICAgICAgJ2RvbS9N
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCcsCisgICAgICAgICAgICAnZG9tL011dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCcsCiAgICAgICAgICAgICAnZG9tL011dGF0aW9uUmVj
b3JkLmNwcCcsCiAgICAgICAgICAgICAnZG9tL011dGF0aW9uUmVjb3JkLmgnLAogICAgICAgICAg
ICAgJ2RvbS9OYW1lTm9kZUxpc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggODljOTc0NGFiYTA4
ZGExOWUxMWIzNTAyZjlkODRkNzVjMzI4MjljNi4uYWUwY2I3YjVjMjA4ZTJjMDlmODM1OWRiODY5
OGEwODYyOWJmMjJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTUyMiw2ICs1MjIsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBkb20vTW91c2VFdmVudC5jcHAgXAogICAgIGRvbS9Nb3VzZVJlbGF0ZWRFdmVu
dC5jcHAgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmNwcCBcCisgICAgZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIFwKICAgICBkb20vTXV0YXRpb25SZWNvcmQuY3BwIFwKICAg
ICBkb20vTmFtZWROb2RlTWFwLmNwcCBcCiAgICAgZG9tL05hbWVOb2RlTGlzdC5jcHAgXApAQCAt
MTU5OCw2ICsxNTk5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZG9tL01vdXNlUmVsYXRlZEV2ZW50
LmggXAogICAgIGRvbS9NdXRhdGlvbkNhbGxiYWNrLmggXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50
LmggXAorICAgIGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmggXAogICAgIGRvbS9N
dXRhdGlvblJlY29yZC5oIFwKICAgICBkb20vTmFtZWROb2RlTWFwLmggXAogICAgIGRvbS9OYW1l
Tm9kZUxpc3QuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGZkNjk2MTFmZDhjNGRiZWNjMTFlNGVlNWIyNjBiMmFjYjY5MDRiZWEuLjI0NWQ4
MDBkOGJkMzhkNDcwYmIwYzMxYTY3MjFiNjVjNmZhNjQyNGYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00NjYzNCw2ICs0NjYzNCw2MiBAQAog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxNdXRhdGlvblJlY29yZC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGYxOGQ5YzJmYWRkNzc0Y2RlZTg5ZjhiMzkxY2RiNWFiNjEyYmM1ZmMuLjQ4ZDYw
NjJlNjgwN2FiODhmYjNhODNiZjVhNjE1MTk5NTdlNzBlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU3NzEsNiArNTc3MSw4
IEBACiAJCUQzRDRFOTczMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcxMTMw
QzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCAqLzsgfTsKIAkJRDYxOUEzMDcx
NDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDUxNDRFMDBCRTAwNEJD
MzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICovOyB9OwogCQlENjE5QTMwODE0NEUw
MEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8q
IENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLzsgfTsKKwkJRDZFMjc2QUYxNDYzNzQ1NTAwMUQy
ODBBIC8qIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDZFMjc2QUQxNDYzNzQ1NTAwMUQyODBBIC8q
IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwICovOyB9OworCQlENkUyNzZCMDE0NjM3
NDU1MDAxRDI4MEEgLyogTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDZFMjc2QUUxNDYzNzQ1NTAwMUQy
ODBBIC8qIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCAqLzsgfTsKIAkJRDcwQUQ2NTcx
M0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVu
ZGVyUmVnaW9uLmNwcCAqLzsgfTsKIAkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRl
clJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovOyB9OwogCQlEOEI2
MTUyRjEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEOEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2ll
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEz
MDYzLDYgKzEzMDY1LDggQEAKIAkJRDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1t
YXJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFy
eUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDYxOUEzMDUxNDRFMDBC
RTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExp
c3RNdXRhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoaWxk
TGlzdE11dGF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDZFMjc2
QUQxNDYzNzQ1NTAwMUQyODBBIC8qIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQ2RTI3NkFFMTQ2Mzc0
NTUwMDFEMjgwQSAvKiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJl
bmRlclJlZ2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENzBBRDY1NjEzRTEz
NDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEOEI2
MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvb2tpZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwNzMs
NiArMjEwNzcsOCBAQAogCQkJCTg1MDMxQjMzMEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2
ZW50LmNwcCAqLywKIAkJCQk4NTAzMUIzNDBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVu
dC5oICovLAogCQkJCTkzRUVDMUYzMDlDMjg3NzcwMEM1MTVEMSAvKiBNdXRhdGlvbkV2ZW50Lmlk
bCAqLywKKwkJCQlENkUyNzZBRDE0NjM3NDU1MDAxRDI4MEEgLyogTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5jcHAgKi8sCisJCQkJRDZFMjc2QUUxNDYzNzQ1NTAwMUQyODBBIC8qIE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCAqLywKIAkJCQlDNkYwOEZCOTE0MzBGRThGMDA2ODU4
NDkgLyogTXV0YXRpb25SZWNvcmQuY3BwICovLAogCQkJCUM2RjA4RkJBMTQzMEZFOEYwMDY4NTg0
OSAvKiBNdXRhdGlvblJlY29yZC5oICovLAogCQkJCUM2RjA4RkJCMTQzMEZFOEYwMDY4NTg0OSAv
KiBNdXRhdGlvblJlY29yZC5pZGwgKi8sCkBAIC0yMzU1MSw2ICsyMzU1Nyw3IEBACiAJCQkJOTMz
MDlERkMwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDNkYwOTAwQTE0MzI3QjYxMDA2ODU4NDkgLyogTXV0YXRpb25DYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCNEEwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQ2RTI3NkIwMTQ2Mzc0NTUwMDFEMjgwQSAvKiBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNkYwOEZC
RDE0MzBGRThGMDA2ODU4NDkgLyogTXV0YXRpb25SZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MTg3MjIzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4MTg3MjFFMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjY2MDIsNiArMjY2MDksNyBAQAogCQkJCTg1MDMxQjQ3MEE0NEVGQzcwMEY5
OTJFMCAvKiBNb3VzZVJlbGF0ZWRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURG
QjA5OUU2NDkyMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODUwMzFCNDkwQTQ0RUZDNzAwRjk5MkUwIC8qIE11dGF0aW9uRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRDZFMjc2QUYxNDYzNzQ1NTAwMUQyODBBIC8qIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDhGQkMxNDMwRkU4
RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRjM0
QTM3MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0
YXRpb25PYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCmluZGV4IGNkNjEzZmYxNjBlNTc3NzIzZjM1
Y2YyMmU1MWIxZDYxOGI1MGMzMjEuLmVhY2VjMTQyM2I2OTdlZjQzZmU5ZTE2MDE0YWQ2NjFhNTE0
NDA2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0TXV0
YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcApAQCAtNzgsNiArNzgsNyBAQCBKU1Zh
bHVlIEpTV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShFeGVjU3RhdGUqIGV4ZWMpCiAK
ICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShleGVjLCBvcHRpb25zT2JqZWN0KTsKICAgICBN
dXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zID0gMDsKKyAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIHBhcnNpbmcgb2YgdGhlIGF0dHJpYnV0ZUZpbHRlciBvcHRpb24uCiAgICAgYm9v
bCBvcHRpb247CiAgICAgaWYgKGRpY3Rpb25hcnkudHJ5R2V0UHJvcGVydHkoImNoaWxkTGlzdCIs
IG9wdGlvbikgJiYgb3B0aW9uKQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OkNoaWxkTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L09wdGlvbnNPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09i
amVjdC5jcHAKaW5kZXggYWNhZmEyM2IwODc3YzU3Y2E1ODNlYjFhNTkzZWVjZjUxMmQzNzEzYS4u
ZTY4MWVjZjhkMzgyNzA2ZWQ2YjZiN2U5NTFhYjhmYTI0NDM5YzI5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKQEAgLTIxMCw2ICsyMTAsMjUgQEAg
Ym9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIE1lc3NhZ2VQb3J0QXJy
YXkmIHZhbHVlKSBjb25zdAogICAgIHJldHVybiBnZXRNZXNzYWdlUG9ydEFycmF5KHY4VmFsdWUs
IHZhbHVlKTsKIH0KIAorYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXks
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBhcnJheS1saWtlIG9iamVj
dHMKKyAgICBpZiAoIXY4VmFsdWUtPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+
OjpDYXN0KHY4VmFsdWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdjhBcnJheS0+TGVu
Z3RoKCk7ICsraSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbmRleGVkVmFsdWUg
PSB2OEFycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgIHZhbHVlLmFkZCh2
OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGluZGV4ZWRWYWx1ZSkpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIE9wdGlvbnNPYmplY3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxD
aGVjayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0
aW9uc09iamVjdC5oCmluZGV4IGNkNGMyZmQ4ZWZmOTc1NzM5MzZjNjhiYjQwMDFlNGQyYWU4MDU0
N2QuLjY5YzExYjExMjcyYTMxMzFiMzc5MGYwMThjYzk2NTI3ODFmODFiMGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgKQEAgLTMwLDYgKzMwLDggQEAKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDYgKzU5LDcg
QEAgcHVibGljOgogICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9u
ZyYpIGNvbnN0OwogICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxET01XaW5kb3c+
JikgY29uc3Q7CiAgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnRBcnJheSYp
IGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
PiYpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3Qg
U3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1
c3RvbS5jcHAKaW5kZXggZWY1M2VhZjI3ZWYxMDUzY2U3MGVhZGU5ZDRjNzczY2I0M2MzNDg3NC4u
OGRmMWFhMmFiNWM0NWViMzY0ZTBlMGY2MTJmZGQyYjE5ZjdhMDE1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0
TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSAi
VjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgorCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04OSwxMSArOTMsMTUgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWUK
IAogICAgIE9wdGlvbnNPYmplY3Qgb3B0aW9uc09iamVjdChhcmdzWzFdKTsKICAgICB1bnNpZ25l
ZCBvcHRpb25zID0gMDsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVy
OwogICAgIGJvb2wgb3B0aW9uOwogICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiY2hpbGRMaXN0
Iiwgb3B0aW9uKSAmJiBvcHRpb24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6Q2hpbGRMaXN0OwotICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmlidXRl
cyIsIG9wdGlvbikgJiYgb3B0aW9uKQorICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmli
dXRlcyIsIG9wdGlvbikgJiYgb3B0aW9uKSB7CiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlczsKKyAgICAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0
KCJhdHRyaWJ1dGVGaWx0ZXIiLCBhdHRyaWJ1dGVGaWx0ZXIpKQorICAgICAgICAgICAgb3B0aW9u
cyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVGaWx0ZXI7CisgICAgfQogICAg
IGlmIChvcHRpb25zT2JqZWN0LmdldCgiY2hhcmFjdGVyRGF0YSIsIG9wdGlvbikgJiYgb3B0aW9u
KQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRh
dGE7CiAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJzdWJ0cmVlIiwgb3B0aW9uKSAmJiBvcHRp
b24pCkBAIC0xMDMsNyArMTExLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWUKICAgICBpZiAo
b3B0aW9uc09iamVjdC5nZXQoImNoYXJhY3RlckRhdGFPbGRWYWx1ZSIsIG9wdGlvbikgJiYgb3B0
aW9uKQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3Rl
ckRhdGFPbGRWYWx1ZTsKIAotICAgIGltcC0+b2JzZXJ2ZSh0YXJnZXQsIG9wdGlvbnMpOworICAg
IGltcC0+b2JzZXJ2ZSh0YXJnZXQsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcik7CiAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVy
RGF0YS5jcHAKaW5kZXggM2E1ZmQ2ZmVkYjA5YmFmMjI0YzQ1YjRlNTQ0NjVlOTY1YjQ4Y2E1MC4u
YzExOTY2ZjIxNjU0ZGQ3NTQxNTllZjEzZmZiMGRkNWI5OWE1Nzg2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHN0YXRpYyBib29sIGlzT2xk
VmFsdWVSZXF1ZXN0ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25PCiAKIHN0YXRpYyB2b2lkIGVucXVldWVDaGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvbGREYXRhKQogewotICAgIEhhc2hNYXA8V2ViS2l0
TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiBvYnNlcnZlcnM7Cisg
ICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+IG9ic2VydmVyczsKICAgICBub2RlLT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJE
YXRhKTsKICAgICBpZiAob2JzZXJ2ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IDVkY2Jk
Y2ZmMzBkYWE5OGNiOTAxYjdiNmVlYTBlNGQxNjk4ZmU2MmIuLjUwOWNlYzViMjg1YWQ1ZDk2OGMw
MTIwNjE0OTdjNmMzYWNjMzkyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZExpc3RNdXRhdGlvblNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTdGF0aWNOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0yNDQsNyArMjQ1LDcgQEAgdm9pZCBNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zPiBvYnNlcnZlcnM7CisgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+IG9ic2VydmVyczsKICAgICB0
YXJnZXQtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCk7CiAgICAgaWYgKG9ic2VydmVycy5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAppbmRleCAzOWNhYmQ4MzZhMDM1OTdiNTlmNDRlMjAxNDZkZmVjMGQwMjVlYTkw
Li5lOGZiNjNiZDZkZjVlMmI3MzMyYzQyNjBiYmU0MWFiYTY2Y2Q1ZmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCkBAIC02MzMsOCArNjMzLDggQEAgc3RhdGljIGlubGluZSBib29sIGlzT2xkVmFs
dWVSZXF1ZXN0ZWQoY29uc3QgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXUKIAog
c3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlvblJlY29yZChFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZh
bHVlKQogewotICAgIEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zPiBvYnNlcnZlcnM7Ci0gICAgZWxlbWVudC0+Z2V0UmVnaXN0ZXJlZE11dGF0
aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0
cmlidXRlcyk7CisgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25S
ZWNvcmREZWxpdmVyeU9wdGlvbnM+IG9ic2VydmVyczsKKyAgICBlbGVtZW50LT5nZXRSZWdpc3Rl
cmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpBdHRyaWJ1dGVzLCBuYW1lLmxvY2FsTmFtZSgpKTsKICAgICBpZiAob2JzZXJ2ZXJzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQxZWEyN2Y1Zjkx
MjI0NDFiZGRkMWYzNmQxNGIyNWI4OWJkMjcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcApAQCAtMCwwICsxLDE0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CisKKyNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgiCisKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+IE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb246OmNyZWF0ZShQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+
IG9ic2VydmVyLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbihvYnNlcnZlciwgcmVnaXN0cmF0aW9u
Tm9kZSkpOworfQorCitNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2
ZXIsIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUpCisgICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikK
KyAgICAgLCBtX3JlZ2lzdHJhdGlvbk5vZGUocmVnaXN0cmF0aW9uTm9kZSkKKyAgICAgLCBtX29w
dGlvbnMoMCkKK3sKKyAgICBtX29ic2VydmVyLT5vYnNlcnZhdGlvblN0YXJ0ZWQodGhpcyk7Cit9
CisKK011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246On5NdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uKCkKK3sKKyAgICBjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKKyAgICBtX29i
c2VydmVyLT5vYnNlcnZhdGlvbkVuZGVkKHRoaXMpOworfQorCit2b2lkIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb246OnJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpCit7
CisgICAgY2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CisKKyAgICBtX29wdGlvbnMgPSBv
cHRpb25zOworICAgIG1fYXR0cmlidXRlRmlsdGVyID0gYXR0cmlidXRlRmlsdGVyOworICAgIG1f
Y2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2goUGFz
c1JlZlB0cjxOb2RlPiBub2RlKQoreworICAgIGlmICghKG1fb3B0aW9ucyAmIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OlN1YnRyZWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBub2RlLT5yZWdp
c3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisKKyAgICBpZiAoIW1fdHJhbnNp
ZW50UmVnaXN0cmF0aW9uTm9kZXMpIHsKKyAgICAgICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25O
b2RlcyA9IGFkb3B0UHRyKG5ldyBOb2RlSGFzaFNldCk7CisgICAgICAgIG1fcmVnaXN0cmF0aW9u
Tm9kZUtlZXBBbGl2ZSA9IG1fcmVnaXN0cmF0aW9uTm9kZTsgLy8gQmFsYW5jZWQgaW4gY2xlYXJU
cmFuc2llbnRSZWdpc3RyYXRpb25zLgorICAgIH0KKyAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlv
bk5vZGVzLT5hZGQobm9kZSk7Cit9CisKK3ZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bjo6Y2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fdHJhbnNpZW50
UmVnaXN0cmF0aW9uTm9kZXMpIHsKKyAgICAgICAgQVNTRVJUKCFtX3JlZ2lzdHJhdGlvbk5vZGVL
ZWVwQWxpdmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVnaXN0
cmF0aW9uTm9kZUtlZXBBbGl2ZSk7CisgICAgZm9yIChOb2RlSGFzaFNldDo6aXRlcmF0b3IgaXRl
ciA9IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gbV90cmFu
c2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+
dW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7CisKKyAgICBtX3RyYW5z
aWVudFJlZ2lzdHJhdGlvbk5vZGVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RyYXRpb25Ob2RlS2Vl
cEFsaXZlID0gMDsgLy8gQmFsYW5jZWQgaW4gb2JzZXJ2ZVN1YnRyZWVOb2RlV2lsbERldGFjaC4K
K30KKwordm9pZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjp1bnJlZ2lzdGVyKCkKK3sK
KyAgICBtX3JlZ2lzdHJhdGlvbk5vZGUtPnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMp
OyAvLyBUaGlzIGNhbGwgd2lsbCBjYXVzZSB0aGlzIG9iamVjdCB0byBiZSBkZWxldGVkLgorfQor
Citib29sIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlv
bkZyb20oTm9kZSogbm9kZSwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5
cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSkKK3sKKyAgICBpZiAoIShtX29w
dGlvbnMgJiB0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVnaXN0
cmF0aW9uTm9kZSAhPSBub2RlICYmICEobV9vcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6U3VidHJlZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0eXBlICE9IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZXMgfHwgIShtX29wdGlvbnMgJiBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVGaWx0ZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChtX2F0dHJpYnV0ZUZpbHRlci5jb250YWlucyhhdHRyaWJ1dGVOYW1lKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBjYXNlSW5z
ZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIoKS5jb250YWlucyhhdHRyaWJ1dGVOYW1lKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiAgTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6Y2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKCkK
K3sKKyAgICBpZiAoIW1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKSB7CisgICAgICAg
IG1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8
QXRvbWljU3RyaW5nPigpKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2F0dHJpYnV0ZUZpbHRlci5iZWdpbigpOyBpdGVyICE9IG1f
YXR0cmlidXRlRmlsdGVyLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBhdHRyaWJ1dGVOYW1lTG93ZXIgPSBpdGVyLT5sb3dlcigpOworICAgICAgICAgICAgaWYgKCgq
aXRlcikgIT0gYXR0cmlidXRlTmFtZUxvd2VyKQorICAgICAgICAgICAgICAgIG1fY2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlRmlsdGVyLT5hZGQoYXR0cmlidXRlTmFtZUxvd2VyKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAqbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXI7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWQ3OTI2ZjMxYzQwMThlZmJmODk3YmNjODFjOGU3
MzBkYjkwMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24uaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uX2gKKyNkZWZpbmUgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bl9oCisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorCisjaW5jbHVkZSAiV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
SGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24geworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NPd25QdHI8TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNl
cnZlcj4sIE5vZGUqKTsKKworICAgIH5NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKCk7CisK
KyAgICB2b2lkIHJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKKyAgICB2b2lkIG9ic2Vy
dmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgY2xl
YXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyKCk7CisKKyAg
ICBib29sIHNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSosIFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKTsK
KworICAgIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyKCkgeyByZXR1cm4gbV9vYnNl
cnZlci5nZXQoKTsgfQorICAgIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5
T3B0aW9ucygpIHsgcmV0dXJuIG1fb3B0aW9ucyAmIChXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpB
dHRyaWJ1dGVPbGRWYWx1ZSB8IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGFP
bGRWYWx1ZSk7IH0KKworcHJpdmF0ZToKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4sIE5vZGUqKTsKKworICAgIGNvbnN0
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKCk7
CisKKyAgICBSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKKyAgICBO
b2RlKiBtX3JlZ2lzdHJhdGlvbk5vZGU7IC8vIEJhY2stcG9pbnRlciB0byB0aGUgTm9kZSB3aGlj
aCBvd25zIHRoaXMgcmVnaXN0cmF0aW9uLgorICAgIFJlZlB0cjxOb2RlPiBtX3JlZ2lzdHJhdGlv
bk5vZGVLZWVwQWxpdmU7IC8vIFRoaXMgcmVnaXN0cmF0aW9uIHRha2VzIHJlZmVyZW5jZSB0byBp
dHMgb3duaW5nIG5vZGUgd2hpbGUgaXQgaGFzIHRyYW5zaWVudCByZWdpc3RyYXRpb25zLgorICAg
IHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBOb2RlSGFzaFNldDsKKyAgICBPd25QdHI8
Tm9kZUhhc2hTZXQ+IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CisKKyAgICBNdXRhdGlv
bk9ic2VydmVyT3B0aW9ucyBtX29wdGlvbnM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IG1f
YXR0cmlidXRlRmlsdGVyOworICAgIE93blB0cjxIYXNoU2V0PEF0b21pY1N0cmluZz4gPm1fY2Fz
ZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKworI2VuZGlmIC8vIE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGJhZGQwN2Iy
OWMxMzg3ZWNmMmY3OWI0NmJmZWE0NWUzOWZiY2MwYTkuLjQ2YjlhOGU1YzExYjdmZTFhNTNiZTI2
YWQyMTViNzNjNzc5NTljNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTU0OCwxMCArNTQ4LDcgQEAg
dm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKICAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZU5v
ZGVMaXN0Q2FjaGUoKTsKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgaWYg
KFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiogcmVnaXN0cnkgPSBtdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
Z2lzdHJ5LT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJlZ2lzdHJ5LT5hdChpKS5vYnNlcnZl
ci0+b2JzZXJ2ZWROb2RlRGVzdHJ1Y3RlZCh0aGlzKTsKLSAgICB9CisgICAgQVNTRVJUKCF0cmFu
c2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB8fCB0cmFuc2llbnRNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKS0+aXNFbXB0eSgpKTsKICNlbmRpZgogCiAgICAgTm9kZVJhcmVEYXRhOjpO
b2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CkBA
IC0yNjk2LDU5ICsyNjkzLDcwIEBAIEV2ZW50VGFyZ2V0RGF0YSogTm9kZTo6ZW5zdXJlRXZlbnRU
YXJnZXREYXRhKCkKIH0KIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi1WZWN0b3I8
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeSgpCitWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIE5v
ZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCiB7CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRh
KCkgPyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CiB9CiAKLXN0
YXRpYyB2b2lkIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNl
cnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzLCBWZWN0b3I8TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIHJlZ2lzdHJ5LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyBvcHRpb25zKQorSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIE5vZGU6
OnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCiB7Ci0gICAgaWYgKCFyZWdpc3Ry
eSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEo
KS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgOiAwOworfQogCi0gICAgY29u
c3Qgc2l6ZV90IHNpemUgPSByZWdpc3RyeS0+c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24m
IGVudHJ5ID0gcmVnaXN0cnktPmF0KGkpOworc3RhdGljIGlubGluZSB2b2lkIGFkZE9ic2VydmVy
VG9EZWxpdmVyeVNldChIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJl
Y29yZERlbGl2ZXJ5T3B0aW9ucz4mIG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlciog
b2JzZXJ2ZXIsIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zIGRlbGl2ZXJ5T3B0aW9ucykK
K3sKKyAgICBwYWlyPEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVj
b3JkRGVsaXZlcnlPcHRpb25zPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG9ic2VydmVycy5h
ZGQob2JzZXJ2ZXIsIGRlbGl2ZXJ5T3B0aW9ucyk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQor
ICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCB8PSBkZWxpdmVyeU9wdGlvbnM7Cit9CiAKLSAg
ICAgICAgaWYgKCFlbnRyeS5oYXNBbGxPcHRpb25zKG9wdGlvbnMpKQotICAgICAgICAgICAgY29u
dGludWU7Cit2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhh
c2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRp
b25zPiYgb2JzZXJ2ZXJzLCBOb2RlKiBmcm9tTm9kZSwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSkKK3sK
KyAgICBpZiAoVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBy
ZWdpc3RyeSA9IGZyb21Ob2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQoaSkuZ2V0KCk7CisgICAg
ICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKHRoaXMs
IHR5cGUsIGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyVG9EZWxp
dmVyeVNldChvYnNlcnZlcnMsIHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZXIoKSwgcmVnaXN0cmF0aW9u
LT5kZWxpdmVyeU9wdGlvbnMoKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgcGFpcjxI
YXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz46
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBvYnNlcnZlcnMuYWRkKGVudHJ5Lm9ic2VydmVyLmdl
dCgpLCBlbnRyeS5vcHRpb25zKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAg
ICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgfD0gZW50cnkub3B0aW9uczsKKyAgICBpZiAoSGFz
aFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudFJlZ2lzdHJ5ID0g
ZnJvbU5vZGUtPnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAg
IGZvciAoSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0ZXJhdG9yIGl0
ZXIgPSB0cmFuc2llbnRSZWdpc3RyeS0+YmVnaW4oKTsgaXRlciAhPSB0cmFuc2llbnRSZWdpc3Ry
eS0+ZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbiogcmVnaXN0cmF0aW9uID0gKml0ZXI7CisgICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9u
LT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKHRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpKQor
ICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyVG9EZWxpdmVyeVNldChvYnNlcnZlcnMsIHJlZ2lz
dHJhdGlvbi0+b2JzZXJ2ZXIoKSwgcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKSk7Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgTm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2Jz
ZXJ2ZXJzT2ZUeXBlKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlv
blR5cGUgdHlwZSkKK3ZvaWQgTm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZU
eXBlKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZl
cnlPcHRpb25zPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIGFkZE1h
dGNoaW5nT2JzZXJ2ZXJzKG9ic2VydmVycywgbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksIHR5
cGUpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgYWRkTWF0Y2hpbmdPYnNlcnZlcnMob2JzZXJ2ZXJz
LCBub2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgdHlwZSB8IFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6OlN1YnRyZWUpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ09ic2VydmVy
c0Zvck11dGF0aW9uKG9ic2VydmVycywgbm9kZSwgdHlwZSwgYXR0cmlidXRlTmFtZSk7CiB9CiAK
LU5vZGU6Ok11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6OnJlZ2lzdGVyTXV0YXRpb25P
YnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBOb2RlKiByZWdpc3RyYXRpb25Ob2RlKQorTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVy
KFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIpCiB7Ci0gICAgVmVj
dG9yPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSA9IGVuc3VyZVJhcmVE
YXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVyLCBvcHRpb25zLCByZWdpc3Ry
YXRpb25Ob2RlKTsKLQotICAgIHNpemVfdCBpbmRleCA9IHJlZ2lzdHJ5LT5maW5kKHJlZ2lzdHJh
dGlvbik7Ci0gICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIHJlZ2lzdHJ5LT5h
cHBlbmQocmVnaXN0cmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RlcmVkOworICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4g
PiogcmVnaXN0cnkgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdHJ5LT5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAocmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlcigpID09IG9ic2VydmVy
KQorICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LT5hdChpKS5nZXQoKTsKICAgICB9CiAKLSAg
ICByZWdpc3RyeS0+YXQoaW5kZXgpLm9wdGlvbnMgPSByZWdpc3RyYXRpb24ub3B0aW9uczsKLSAg
ICByZXR1cm4gTXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQ7CisgICAgT3duUHRyPE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+IHJlZ2lzdHJhdGlvbiA9IE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb246OmNyZWF0ZShvYnNlcnZlciwgdGhpcyk7CisgICAgTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uUHRyID0gcmVnaXN0cmF0aW9uLmdldCgpOwor
ICAgIHJlZ2lzdHJ5LT5hcHBlbmQocmVnaXN0cmF0aW9uLnJlbGVhc2UoKSk7CisgICAgcmV0dXJu
IHJlZ2lzdHJhdGlvblB0cjsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyLCBOb2RlKiBy
ZWdpc3RyYXRpb25Ob2RlKQordm9pZCBOb2RlOjp1bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24pCiB7Ci0gICAgVmVjdG9y
PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiByZWdpc3RyeSA9IG11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyeSgpOworICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbj4gPiogcmVnaXN0cnkgPSBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKICAgICBBU1NF
UlQocmVnaXN0cnkpOwogICAgIGlmICghcmVnaXN0cnkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24gcmVnaXN0cmF0aW9uKG9ic2VydmVyLCAwLCBy
ZWdpc3RyYXRpb25Ob2RlKTsKICAgICBzaXplX3QgaW5kZXggPSByZWdpc3RyeS0+ZmluZChyZWdp
c3RyYXRpb24pOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CiAgICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKQpAQCAtMjc1NywyMyArMjc2NSwzNCBAQCB2b2lkIE5vZGU6OnVucmVnaXN0
ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2Jz
ZXJ2ZQogICAgIHJlZ2lzdHJ5LT5yZW1vdmUoaW5kZXgpOwogfQogCit2b2lkIE5vZGU6OnJlZ2lz
dGVyVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KiByZWdpc3RyYXRpb24pCit7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlVHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCktPmFkZChyZWdpc3RyYXRpb24pOworfQorCit2b2lk
IE5vZGU6OnVucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24qIHJlZ2lzdHJhdGlvbikKK3sKKyAgICBIYXNoU2V0PE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50UmVnaXN0cnkgPSB0cmFuc2llbnRNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkoKTsKKyAgICBBU1NFUlQodHJhbnNpZW50UmVnaXN0cnkpOworICAg
IGlmICghdHJhbnNpZW50UmVnaXN0cnkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh0
cmFuc2llbnRSZWdpc3RyeS0+Y29udGFpbnMocmVnaXN0cmF0aW9uKSk7CisgICAgdHJhbnNpZW50
UmVnaXN0cnktPnJlbW92ZShyZWdpc3RyYXRpb24pOworfQorCiB2b2lkIE5vZGU6Om5vdGlmeU11
dGF0aW9uT2JzZXJ2ZXJzTm9kZVdpbGxEZXRhY2goKQogewogICAgIGZvciAoTm9kZSogbm9kZSA9
IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIHJlZ2lzdHJ5ID0gbm9kZS0+
bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7Ci0gICAgICAgIGlmICghcmVnaXN0cnkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5
LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgICAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24gPSBy
ZWdpc3RyeS0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbi5oYXNBbGxPcHRp
b25zKFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uPiA+KiByZWdpc3RyeSA9IG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7
CisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAg
ICByZWdpc3RyeS0+YXQoaSktPm9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKHRoaXMpOwor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGUqIHJlZ2lzdHJhdGlvbk5vZGUgPSByZWdpc3Ry
YXRpb24ucmVnaXN0cmF0aW9uTm9kZTsKLSAgICAgICAgICAgIGlmICghcmVnaXN0cmF0aW9uTm9k
ZSkKLSAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25Ob2RlID0gbm9kZTsKLSAgICAgICAgICAg
IHJlZ2lzdHJhdGlvbi5vYnNlcnZlci0+d2lsbERldGFjaE5vZGVJbk9ic2VydmVkU3VidHJlZShy
ZWdpc3RyYXRpb25Ob2RlLCByZWdpc3RyYXRpb24ub3B0aW9ucywgdGhpcyk7CisgICAgICAgIGlm
IChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50UmVnaXN0
cnkgPSBub2RlLT50cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAg
ICAgICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPjo6aXRlcmF0
b3IgaXRlciA9IHRyYW5zaWVudFJlZ2lzdHJ5LT5iZWdpbigpOyBpdGVyICE9IHRyYW5zaWVudFJl
Z2lzdHJ5LT5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgICgqaXRlciktPm9ic2VydmVk
U3VidHJlZU5vZGVXaWxsRGV0YWNoKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKaW5kZXggYzhhMTMxOTcwY2NjMzBkNTU3MzUwNDI0MzdlY2FjNjUxMGQ5NDU1ZC4uNmI2NmM4
MWQwNDkyODNlZWQ2MzQ0MjU5NmQ3OGQ4M2QzNTU0NWI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKICNpZiBVU0UoSlNDKQogbmFtZXNwYWNlIEpTQyB7
CkBAIC01OTAsMTYgKzU5MSwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCi0gICAgdm9pZCBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNP
ZlR5cGUoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnM+JiwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlKTsKLQotICAgIGVu
dW0gTXV0YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgewotICAgICAgICBNdXRhdGlvbk9ic2VydmVy
UmVnaXN0ZXJlZCwKLSAgICAgICAgTXV0YXRpb25SZWdpc3RyYXRpb25PcHRpb25zUmVzZXQKLSAg
ICB9OwotICAgIE11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IHJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+LCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucywgTm9kZSogcmVnaXN0cmF0aW9uTm9kZSA9IDApOwotCi0gICAgdm9pZCB1bnJlZ2lz
dGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+LCBO
b2RlKiByZWdpc3RyYXRpb25Ob2RlID0gMCk7Ci0KKyAgICB2b2lkIGdldFJlZ2lzdGVyZWRNdXRh
dGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRh
dGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSA9IG51bGxBdG9tKTsK
KyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3Rlck11dGF0aW9uT2JzZXJ2
ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPik7CisgICAgdm9pZCB1bnJlZ2lz
dGVyTXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKik7CisgICAg
dm9pZCByZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbiopOworICAgIHZvaWQgdW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2
ZXIoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiopOwogICAgIHZvaWQgbm90aWZ5TXV0YXRp
b25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgpOwogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCiAKQEAgLTcyNyw3ICs3MjMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tG
b3JEZWJ1Z2dpbmcoKTsKIAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgVmVj
dG9yPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+KiBtdXRhdGlvbk9ic2VydmVyUmVnaXN0
cnkoKTsKKyAgICBWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4q
IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOworICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKKyAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8V2ViS2l0
TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiYsIE5vZGUq
IGZyb21Ob2RlLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSk7CiAjZW5kaWYKIAogICAgIG11dGFibGUgdWludDMy
X3QgbV9ub2RlRmxhZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggZWNiZDU1OTIy
ZjQyOTBiYmIzOGRhMzEwOTcwZjA1OGEwYjU2NGY0Yy4uMGFhMWQ1M2I0NzIzZWE1ZTBlZmYyYWJl
ZWM2NDE5NDdkM2Y5MGY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIk1pY3JvRGF0YUl0ZW1MaXN0LmgiCiAjZW5kaWYKIAorI2luY2x1
ZGUgIk11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCIKICNpbmNsdWRlICJOYW1lTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiVGFnTm9kZUxpc3Qu
aCIKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsMzYgKzkwLDYgQEAgcHJpdmF0ZToKICAgICBO
b2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENhY2hlKDApIHt9CiB9OwogCi0j
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLXN0cnVjdCBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uIHsKLSAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKFBhc3NSZWZQdHI8
V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
IG9wdGlvbnMsIE5vZGUqIG5vZGUpCi0gICAgICAgIDogb2JzZXJ2ZXIob2JzZXJ2ZXIpCi0gICAg
ICAgICwgb3B0aW9ucyhvcHRpb25zKQotICAgICAgICAsIHJlZ2lzdHJhdGlvbk5vZGUobm9kZSkK
LSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG9ic2Vy
dmVyID09IG90aGVyLm9ic2VydmVyICYmIHJlZ2lzdHJhdGlvbk5vZGUgPT0gb3RoZXIucmVnaXN0
cmF0aW9uTm9kZTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0FsbE9wdGlvbnMoTXV0YXRpb25PYnNl
cnZlck9wdGlvbnMgb3B0aW9ucykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAodGhpcy0+
b3B0aW9ucyAmIG9wdGlvbnMpID09IG9wdGlvbnM7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyOwotICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
IG9wdGlvbnM7Ci0KLSAgICAvLyByZWdpc3RyYXRpb25Ob2RlIHdpbGwgYmUgMCBpZiB0aGUgcmVn
aXN0cmF0aW9uIGlzIG5vbi10cmFuc2llbnQuIEkuZS4gVGhlIHJlZ2lzdHJhdGlvbk5vZGUgaXMg
dGhlIE5vZGUgaW4gd2hvc2UKLSAgICAvLyByZWdpc3RyeSBpdCBleGlzdHMuCi0gICAgLy8gTm90
ZSB0aGF0IHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGEgUmVmUHRyIGJlY2F1c2UgdGhlIG9ic2Vy
dmVyIHdpbGwgYmUgaG9sZGluZyBhIFJlZlB0ciB0byB0aGUgc2FtZSBub2RlIGF0Ci0gICAgLy8g
bGVhc3QgZm9yIHRoZSBsaWZldGltZSBvZiB0aGlzIFJlZ2lzdHJhdGlvbiBpbiBpdHMgbV90cmFu
c2llbnRPYnNlcnZlZE5vZGVzIG1hcC4KLSAgICBOb2RlKiByZWdpc3RyYXRpb25Ob2RlOwotfTsK
LSNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotCiBjbGFzcyBOb2RlUmFyZURh
dGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOiAgICAKQEAgLTE2OCwxMyArMTQwLDIxIEBAIHB1YmxpYzoK
ICAgICB9CiAKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFZlY3RvcjxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiogbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyBy
ZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkuZ2V0KCk7IH0KLSAgICBWZWN0b3I8TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4qIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpCisgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBt
dXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeS5nZXQoKTsgfQorICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbj4gPiogZW5zdXJlTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKICAgICB7CiAgICAgICAg
IGlmICghbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpCi0gICAgICAgICAgICBtX211dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyeSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbj4pOworICAgICAgICAgICAgbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkgPSBh
ZG9wdFB0cihuZXcgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+
KTsKICAgICAgICAgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOwogICAg
IH0KKworICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX3RyYW5zaWVudE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyeS5nZXQoKTsgfQorICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbio+KiBlbnN1cmVUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkK
KyAgICAgICAgICAgIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5ID0gYWRvcHRQ
dHIobmV3IEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KTsKKyAgICAgICAg
cmV0dXJuIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOworICAgIH0K
ICNlbmRpZgogCiAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9jdXNl
ZDsgfQpAQCAtMTk1LDcgKzE3NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzRm9jdXNB
cHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoIDogMTsKIAogI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCi0gICAgT3duUHRyPFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uPiA+IG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5OworICAgIE93blB0cjxWZWN0b3I8T3du
UHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4gPiBtX211dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeTsKKyAgICBPd25QdHI8SGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
Kj4gPiBtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsKICNlbmRpZgogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IGI2
NmNhYTA4M2VlOTllNGU1MDM4YmM0NmIxMjU4YzhiNTA0NTYwYTkuLjViYjlhYWExYmQ2MzA2MDk3
ZWE4ZGE3ZDMwMTVjNGJhMDBkZDgyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmgiCiAKICNpbmNsdWRlICJNdXRhdGlvbkNhbGxiYWNrLmgiCisjaW5j
bHVkZSAiTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oIgogI2luY2x1ZGUgIk11dGF0aW9u
UmVjb3JkLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5o
PgpAQCAtNTMsNTEgKzU0LDMyIEBAIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OldlYktpdE11dGF0
aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxNdXRhdGlvbkNhbGxiYWNrPiBjYWxsCiAKIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6On5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKCkKIHsKLSAgICBjbGVhckFs
bFRyYW5zaWVudE9ic2VydmF0aW9ucygpOworICAgIEFTU0VSVChtX3JlZ2lzdHJhdGlvbnMuaXNF
bXB0eSgpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyVHJhbnNpZW50T2JzZXJ2YXRp
b25zRm9yUmVnaXN0cmF0aW9uKFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyLCBOb2Rl
KiByZWdpc3RyYXRpb25Ob2RlLCBQYXNzT3duUHRyPE5vZGVIYXNoU2V0PiB0cmFuc2llbnROb2Rl
cykKK3ZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4m
IGF0dHJpYnV0ZUZpbHRlcikKIHsKLSAgICBmb3IgKE5vZGVIYXNoU2V0OjppdGVyYXRvciBpdGVy
ID0gdHJhbnNpZW50Tm9kZXMtPmJlZ2luKCk7IGl0ZXIgIT0gdHJhbnNpZW50Tm9kZXMtPmVuZCgp
OyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKG9i
c2VydmVyLCByZWdpc3RyYXRpb25Ob2RlKTsKKyAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uKiByZWdpc3RyYXRpb24gPSBub2RlLT5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7
CisgICAgcmVnaXN0cmF0aW9uLT5yZXNldE9ic2VydmF0aW9uKG9wdGlvbnMsIGF0dHJpYnV0ZUZp
bHRlcik7CiB9CiAKLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBu
b2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQordm9pZCBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKLSAgICAvLyBGSVhNRTogTW9yZSBvcHRpb25zIGNv
bXBvc2l0aW9uIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSBoZXJlLCBlLmcuLCB2YWxpZGF0aW9uLgot
Ci0gICAgaWYgKG5vZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBvcHRpb25zKSA9
PSBOb2RlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZCkgewotICAgICAgICBtX29ic2VydmVk
Tm9kZXMuYXBwZW5kKG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSGFzaE1h
cDxSZWZQdHI8Tm9kZT4sIE5vZGVIYXNoU2V0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVu
dE9ic2VydmVkTm9kZXMuZmluZChub2RlKTsKLSAgICBpZiAoaXRlciA9PSBtX3RyYW5zaWVudE9i
c2VydmVkTm9kZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyVHJhbnNpZW50
T2JzZXJ2YXRpb25zRm9yUmVnaXN0cmF0aW9uKHRoaXMsIG5vZGUsIGFkb3B0UHRyKGl0ZXItPnNl
Y29uZCkpOwotICAgIG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5yZW1vdmUoaXRlcik7CisgICAg
SGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gcmVnaXN0cmF0aW9ucyhtX3Jl
Z2lzdHJhdGlvbnMpOworICAgIGZvciAoSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uKj46Oml0ZXJhdG9yIGl0ZXIgPSByZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gcmVn
aXN0cmF0aW9ucy5lbmQoKTsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT51bnJlZ2lzdGVyKCk7
CiB9CiAKLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6ZGlzY29ubmVjdCgpCit2b2lkIFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmF0aW9uU3RhcnRlZChNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24pCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX29ic2VydmVkTm9kZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fb2JzZXJ2ZWROb2Rlc1tp
XS0+dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIodGhpcyk7Ci0KLSAgICBtX29ic2VydmVkTm9k
ZXMuY2xlYXIoKTsKLSAgICBjbGVhckFsbFRyYW5zaWVudE9ic2VydmF0aW9ucygpOworICAgIEFT
U0VSVCghbV9yZWdpc3RyYXRpb25zLmNvbnRhaW5zKHJlZ2lzdHJhdGlvbikpOworICAgIG1fcmVn
aXN0cmF0aW9ucy5hZGQocmVnaXN0cmF0aW9uKTsKIH0KIAotdm9pZCBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpvYnNlcnZlZE5vZGVEZXN0cnVjdGVkKE5vZGUqIG5vZGUpCit2b2lkIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmF0aW9uRW5kZWQoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbiogcmVnaXN0cmF0aW9uKQogewotICAgIEFTU0VSVCghbV90cmFuc2llbnRPYnNlcnZlZE5v
ZGVzLmNvbnRhaW5zKG5vZGUpKTsKLQotICAgIHNpemVfdCBpbmRleCA9IG1fb2JzZXJ2ZWROb2Rl
cy5maW5kKG5vZGUpOwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgaWYgKGlu
ZGV4ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkTm9kZXMu
cmVtb3ZlKGluZGV4KTsKKyAgICBBU1NFUlQobV9yZWdpc3RyYXRpb25zLmNvbnRhaW5zKHJlZ2lz
dHJhdGlvbikpOworICAgIG1fcmVnaXN0cmF0aW9ucy5yZW1vdmUocmVnaXN0cmF0aW9uKTsKIH0K
IAogdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gPiBN
dXRhdGlvbk9ic2VydmVyU2V0OwpAQCAtMTE0LDM2ICs5NiwxNCBAQCB2b2lkIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6OmVucXVldWVNdXRhdGlvblJlY29yZChQYXNzUmVmUHRyPE11dGF0aW9uUmVj
b3JkPiBtdQogICAgIGFjdGl2ZU11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKHRoaXMpOwogfQogCi12
b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OndpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1YnRy
ZWUoUGFzc1JlZlB0cjxOb2RlPiBwcnBSZWdpc3RyYXRpb25Ob2RlLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucyBvcHRpb25zLCBQYXNzUmVmUHRyPE5vZGU+IHBycERldGFjaGluZ05vZGUpCi17Ci0g
ICAgUmVmUHRyPE5vZGU+IHJlZ2lzdHJhdGlvbk5vZGUgPSBwcnBSZWdpc3RyYXRpb25Ob2RlOwot
ICAgIFJlZlB0cjxOb2RlPiBkZXRhY2hpbmdOb2RlID0gcHJwRGV0YWNoaW5nTm9kZTsKLQotICAg
IGRldGFjaGluZ05vZGUtPnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcih0aGlzLCBvcHRpb25zLCBy
ZWdpc3RyYXRpb25Ob2RlLmdldCgpKTsKLSAgICBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTm9kZUhh
c2hTZXQqPjo6aXRlcmF0b3IgaXRlciA9IG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5maW5kKHJl
Z2lzdHJhdGlvbk5vZGUpOwotICAgIGlmIChpdGVyICE9IG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rl
cy5lbmQoKSkgewotICAgICAgICBpdGVyLT5zZWNvbmQtPmFkZChkZXRhY2hpbmdOb2RlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93blB0cjxOb2RlSGFzaFNldD4gc2V0ID0gYWRv
cHRQdHIobmV3IE5vZGVIYXNoU2V0KCkpOwotICAgIHNldC0+YWRkKGRldGFjaGluZ05vZGUpOwot
ICAgIG1fdHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5zZXQocmVnaXN0cmF0aW9uTm9kZSwgc2V0Lmxl
YWtQdHIoKSk7Ci19Ci0KLXZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Y2xlYXJBbGxUcmFu
c2llbnRPYnNlcnZhdGlvbnMoKQotewotICAgIGZvciAoSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIE5v
ZGVIYXNoU2V0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMuYmVn
aW4oKTsgaXRlciAhPSBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXMuZW5kKCk7ICsraXRlcikKLSAg
ICAgICAgY2xlYXJUcmFuc2llbnRPYnNlcnZhdGlvbnNGb3JSZWdpc3RyYXRpb24odGhpcywgaXRl
ci0+Zmlyc3QuZ2V0KCksIGFkb3B0UHRyKGl0ZXItPnNlY29uZCkpOwotCi0gICAgbV90cmFuc2ll
bnRPYnNlcnZlZE5vZGVzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6ZGVsaXZlcigpCiB7CiAgICAgTXV0YXRpb25SZWNvcmRBcnJheSByZWNvcmRzOwogICAgIHJl
Y29yZHMuc3dhcChtX3JlY29yZHMpOwotICAgIGNsZWFyQWxsVHJhbnNpZW50T2JzZXJ2YXRpb25z
KCk7CisKKyAgICBmb3IgKEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+Ojpp
dGVyYXRvciBpdGVyID0gbV9yZWdpc3RyYXRpb25zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpc3Ry
YXRpb25zLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmNsZWFyVHJhbnNpZW50UmVn
aXN0cmF0aW9ucygpOworCiAgICAgbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQoJnJlY29yZHMsIHRo
aXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaApp
bmRleCA3NTMyMDRjMjQ3OTRkNGUzODJkYjAyNTUxZWE1NDgwMzU0ZGM0YTc1Li42NGFiMDcwMjRk
YjUxMzkyZGE0MGU3ZWI1OTRiZjFhOGY5MjJlNGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9X
ZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKQEAgLTMzLDIxICszMywyMiBAQAogCiAjaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2gu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNdXRhdGlvbkNhbGxiYWNrOworY2xh
c3MgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjsKIGNsYXNzIE11dGF0aW9uUmVjb3JkOwog
Y2xhc3MgTm9kZTsKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIE11dGF0aW9uT2JzZXJ2ZXJPcHRp
b25zOwotdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IE5vZGVIYXNoU2V0OwordHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zOwogCiBjbGFzcyBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0TXV0YXRpb25P
YnNlcnZlcj4gewogcHVibGljOgpAQCAtNTcsMTEgKzU4LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
Q2hhcmFjdGVyRGF0YSA9IDEgPDwgMgogICAgIH07CiAKLSAgICBlbnVtIE9wdGlvbkZsYWdzIHsK
KyAgICBlbnVtIE9ic2VydmF0aW9uRmxhZ3MgIHsKICAgICAgICAgU3VidHJlZSA9IDEgPDwgMywK
LSAgICAgICAgQXR0cmlidXRlT2xkVmFsdWUgPSAxIDw8IDQsCi0gICAgICAgIENoYXJhY3RlckRh
dGFPbGRWYWx1ZSA9IDEgPDwgNSwKLSAgICAgICAgQXR0cmlidXRlRmlsdGVyID0gMSA8PCA2Cisg
ICAgICAgIEF0dHJpYnV0ZUZpbHRlciA9IDEgPDwgNAorICAgIH07CisKKyAgICBlbnVtIERlbGl2
ZXJ5RmxhZ3MgeworICAgICAgICBBdHRyaWJ1dGVPbGRWYWx1ZSA9IDEgPDwgNSwKKyAgICAgICAg
Q2hhcmFjdGVyRGF0YU9sZFZhbHVlID0gMSA8PCA2LAogICAgIH07CiAKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxNdXRhdGlv
bkNhbGxiYWNrPik7CkBAIC02OSwyNCArNzMsMTkgQEAgcHVibGljOgogCiAgICAgfldlYktpdE11
dGF0aW9uT2JzZXJ2ZXIoKTsKIAotICAgIHZvaWQgb2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNl
cnZlck9wdGlvbnMpOworICAgIHZvaWQgb2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAg
ICB2b2lkIGRpc2Nvbm5lY3QoKTsKLSAgICB2b2lkIHdpbGxEZXRhY2hOb2RlSW5PYnNlcnZlZFN1
YnRyZWUoUGFzc1JlZlB0cjxOb2RlPiByZWdpc3RyYXRpb25Ob2RlLCBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucywgUGFzc1JlZlB0cjxOb2RlPiBkZXRhY2hpbmdOb2RlKTsKLSAgICB2b2lkIG9ic2Vy
dmVkTm9kZURlc3RydWN0ZWQoTm9kZSopOworICAgIHZvaWQgb2JzZXJ2YXRpb25TdGFydGVkKE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qKTsKKyAgICB2b2lkIG9ic2VydmF0aW9uRW5kZWQo
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiopOwogICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+KTsKIAogcHJpdmF0ZToKICAgICBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQdHI8TXV0YXRpb25DYWxsYmFjaz4pOwotCi0gICAg
dm9pZCBjbGVhckFsbFRyYW5zaWVudE9ic2VydmF0aW9ucygpOwogICAgIHZvaWQgZGVsaXZlcigp
OwogCiAgICAgUmVmUHRyPE11dGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CiAgICAgVmVjdG9y
PFJlZlB0cjxNdXRhdGlvblJlY29yZD4gPiBtX3JlY29yZHM7Ci0gICAgVmVjdG9yPE5vZGUqPiBt
X29ic2VydmVkTm9kZXM7IC8vIE5vZGVSYXJlRGF0YSBoYXMgYSBSZWZQdHIgdG8gdGhpcywgc28g
dXNlIGEgd2VhayBwb2ludGVyIHRvIGF2b2lkIGEgY3ljbGUuCi0KLSAgICAvLyBGSVhNRTogQ2hh
bmdlIHRoaXMgdG8gYmUgT3duUHRyPE5vZGVIYXNoU2V0PiB3aGVuIE93blB0ciBzdXBwb3J0cyBi
ZWluZyBjb250YWluZWQgYXMgbWFwIHZhbHVlcy4KLSAgICBIYXNoTWFwPFJlZlB0cjxOb2RlPiwg
Tm9kZUhhc2hTZXQqPiBtX3RyYW5zaWVudE9ic2VydmVkTm9kZXM7CisgICAgSGFzaFNldDxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gbV9yZWdpc3RyYXRpb25zOyAvLyBCYWNrLXBvaW50
ZXJzIHRvIHJlZ2lzdHJhdGlvbnMgd2hpY2ggYXJlIGhvbGRpbmcgcmVmZXJlbmNlcyB0byB0aGlz
IG9ic2VydmVyLgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYyNzc2MmJlYjNlOTE4ZWZiM2E5NTNkYmQwN2My
NWQ1MzIzYTA5MGUuLjVhNTViZDJlNGFiYTk5NWMxZWI3ZDdjNTE4ZGQxNzZhY2ZlNTNmYzAgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMC0zMSAgUmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFl
bHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3VwcG9ydCBh
dHRyaWJ1dGVGaWx0ZXIgZm9yIGF0dHJpYnV0ZSBtdXRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0
cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0
dHJpYnV0ZXMuaHRtbDoKKwogMjAxMS0xMS0wMyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIE1hcmsgdGVzdHMgYXMgc2xvdyBpbiBjaHJvbWl1bS4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVj
dGVkLnR4dAppbmRleCA5YmIwN2U5NTMwZmE3NTQwYTk5MGVkYjA3YzNlYTQ3YjYwNWQzNWJjLi42
NzllOTA1ODZhODhkYTFmOTY1ZGZiNzY1NjUzNmRiNDRkZWVlZGMxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQu
dHh0CkBAIC05Miw2ICs5Miw2NiBAQCBQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1
dGVzIgogUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiaWQiCiBQQVNTIG11dGF0
aW9uc1sxXS5vbGRWYWx1ZSBpcyAiZm9vIgogCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVy
IHdvcmtzIGFzIGV4cGVjdGVkIGFuZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1lbnRzLgor
Li4ub25seSBmb28sIGJhciAmIGJvb20gc2hvdWxkIGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sw
XS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAi
YXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BB
U1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9u
c1syXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFt
ZSBpcyAiYm9vbSIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxs
CisKK1Rlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIGF0dHJpYnV0ZUZpbHRlciB3aGVuIHRoZSBzYW1l
IG9ic2VydmVyIG9ic2VydmVzIGF0IG11bHRpcGxlIG5vZGVzIGluIGEgc3VidHJlZSB3aXRoIGRp
ZmZlcmVudCBmaWx0ZXIgb3B0aW9ucy4KKy4uLm9ubHkgZm9vLCBiYXIgJiBiYXQgc2hvdWxkIGJl
IHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlz
ICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFT
UyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFj
ZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBt
dXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYmF0IgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0
cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKKy4uLmJhciwgYmF0ICYgYmF6IHNob3VsZCBhbGwgYmUg
cmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0u
dHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMg
ImJhciIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNT
IG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0
cmlidXRlTmFtZSBpcyAiYmF0IgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNl
IGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11
dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lIGlzICJiYXoiCitQQVNTIG11dGF0aW9uc1syXS5hdHRy
aWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJl
c3BlY3RzIGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4KKy4uLnBhdGhMZW5ndGggc2hvdWxk
IGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25z
WzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1l
IGlzICJwYXRoTGVuZ3RoIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlz
ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKworVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZp
bHRlciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuCisuLi5vbmx5IElELCBp
ZCwgYm9vTSwgcGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5s
ZW5ndGggaXMgNAorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgIklEIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0
cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJp
YnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKK1BBU1MgbXV0
YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50
eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAi
Ym9vTSIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNT
IG11dGF0aW9uc1szXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbM10uYXR0
cmlidXRlTmFtZSBpcyAicGF0aExlbmd0aCIKK1BBU1MgbXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5h
bWVzcGFjZSBpcyAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisKIFBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggMzk1YWY3OTg0NTgxYmQ2
YTVmODIxY2JjZTE1NWFmYTY2YmRmNDE5Yy4uYWY1OGI1MThiNTEyYjA4ZTc5ZGEwZGU4ZGU0Njc1
OTM0NTAwMTk4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
YXR0cmlidXRlcy5odG1sCkBAIC0xMDcsNyArMTA3LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxl
UmVnaXN0cmF0aW9uKCkgewogCiAgICAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICAgICAgIGRlYnVn
KCdUZXN0aW5nIHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBv
YnNlcnZlciBoYXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7Ci0gICAg
CisKIAkJY2FsbHMgPSAwOwogICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwogICAgICAgICBkaXYg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKQEAgLTQzNSw2ICs0MzUsMjA5IEBAIGZ1
bmN0aW9uIHRlc3RJRExBdHRyaWJ1dGUoKSB7CiAgICAgc3RhcnQoKTsKIH0KIAorZnVuY3Rpb24g
dGVzdEF0dHJpYnV0ZUZpbHRlcigpIHsKKyAgICB2YXIgZGl2LCBwYXRoOworICAgIHZhciBvYnNl
cnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0
aGF0IGF0dHJpYnV0ZUZpbHRlciB3b3JrcyBhcyBleHBlY3RlZCBhbmQgaWdub3JlcyBjYXNlIHdp
dGggSFRNTCBlbGVtZW50cy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAg
ICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAg
ICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRp
diwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnZm9vJywgJ2JhcicsICdi
b29NJ10gfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdmb28nKTsKKyAgICAg
ICAgZGl2LnNldEF0dHJpYnV0ZSgnYmFyJywgJ2JhcicpOworICAgICAgICBkaXYuc2V0QXR0cmli
dXRlKCdiYXonLCAnYmF6Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9v
bScpOworCisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5vbmx5IGZvbywgYmFyICYgYm9vbSBz
aG91bGQgYmUgcmVjZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScs
ICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVz
cGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICci
YXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVO
YW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRl
TmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50eXBl
JywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJp
YnV0ZU5hbWUnLCAnImJvb20iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0
cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgp
OworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisg
ICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlclN1YnRyZWUoKSB7
CisgICAgdmFyIGRpdiwgZGl2MiwgZGl2MzsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIGF0
dHJpYnV0ZUZpbHRlciB3aGVuIHRoZSBzYW1lIG9ic2VydmVyIG9ic2VydmVzIGF0IG11bHRpcGxl
IG5vZGVzIGluIGEgc3VidHJlZSB3aXRoIGRpZmZlcmVudCBmaWx0ZXIgb3B0aW9ucy4nKTsKKwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07
CisgICAgICAgIH0pOworCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgICAgICBkaXYyID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpKTsKKyAgICAgICAgZGl2MyA9IGRpdjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0
dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydmb28nLCAn
YmFyJ10gfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2MiwgeyBhdHRyaWJ1dGVzOiB0
cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnYmFyJywgJ2JhdCddIH0pOwor
CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdmb28nLCAnZm9vJyk7CisgICAgICAgIGRpdjMu
c2V0QXR0cmlidXRlKCdiYXInLCAnYmFyJyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdi
YXQnLCAnYmF0Jyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF6Jyk7CisK
KyAgICAgICAgc2V0VGltZW91dChjaGVja0FuZE9ic2VydmVBbGwsIDApOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGNoZWNrQW5kT2JzZXJ2ZUFsbCgpIHsKKyAgICAgICAgZGVidWcoJy4uLm9ubHkg
Zm9vLCBiYXIgJiBiYXQgc2hvdWxkIGJlIHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnMubGVuZ3RoJywgJzMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBd
LmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sw
XS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMV0uYXR0cmlidXRlTmFtZScsICciYmFyIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMl0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lJywgJyJiYXQiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBvYnNl
cnZlci5vYnNlcnZlKGRpdjIsIHsgYXR0cmlidXRlczogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsK
KyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JhcicsICdiYXInKTsKKyAgICAgICAgZGl2My5z
ZXRBdHRyaWJ1dGUoJ2JhdCcsICdiYXQnKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2Jh
eicsICdiYXonKTsKKworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4uYmFyLCBiYXQgJiBiYXog
c2hvdWxkIGFsbCBiZSByZWNlaXZlZC4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
Lmxlbmd0aCcsICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICci
YXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRl
TmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBl
JywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJp
YnV0ZU5hbWUnLCAnImJhdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRy
aWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJd
LnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0u
YXR0cmlidXRlTmFtZScsICciYmF6IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJd
LmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29u
bmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAg
fQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhU
TUxFbGVtZW50KCkgeworICAgIHZhciBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZp
bHRlciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuJyk7CisKKyAgICAgICAg
bXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25P
YnNlcnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAg
ICB9KTsKKworICAgICAgICBwYXRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
cGF0aCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsncGF0aExlbmd0aCdd
IH0pOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZycsICdwYXRoTGVuZ3RoJywgJzIwMCcpOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5T
KCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRobGVuZ3RoJywgJzIwMCcpOworCisg
ICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5p
c2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5wYXRoTGVuZ3RoIHNob3VsZCBiZSByZWNlaXZlZC4n
KTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAg
c2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJwYXRoTGVuZ3RoIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICciaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3Qo
KTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKwor
ICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBdHRyaWJ1dGVGaWx0ZXJOb25IVE1MRG9j
dW1lbnQoKSB7CisgICAgdmFyIHN2Z0RvYywgZGl2LCBwYXRoOworICAgIHZhciBvYnNlcnZlcjsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0
dHJpYnV0ZUZpbHRlciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuJyk7CisK
KyAgICAgICAgc3ZnRG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQo
J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycsICdzdmcnKTsKKyAgICAgICAgbXV0
YXRpb25zID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcihmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9
KTsKKworICAgICAgICBkaXYgPSBzdmdEb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRl
cjogWydJRCcsICdpZCcsICdib29NJ10gfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0lE
JywgJ0lEJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2lkJyk7CisgICAgICAg
IGRpdi5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0
ZSgnYm9vTScsICdib29tJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9v
bScpOworCisgICAgICAgIHBhdGggPSBzdmdEb2MuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUocGF0
aCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsncGF0aExlbmd0aCddIH0p
OworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZycsICdwYXRoTGVuZ3RoJywgJzIwMCcpOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRobGVuZ3RoJywgJzIwMCcpOworCisgICAg
ICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2go
KSB7CisgICAgICAgIGRlYnVnKCcuLi5vbmx5IElELCBpZCwgYm9vTSwgcGF0aExlbmd0aCBzaG91
bGQgYmUgcmVjZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgn
LCAnNCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0
ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICci
SUQiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNl
JywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUn
LCAnImlkIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVz
cGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0udHlwZScsICci
YXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVO
YW1lJywgJyJib29NIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0
ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbM10udHlw
ZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1szXS5hdHRy
aWJ1dGVOYW1lJywgJyJwYXRoTGVuZ3RoIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzNdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICciaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJyk7
CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7Cisg
ICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwogdmFyIHRl
c3RzID0gWwogICAgIHRlc3RCYXNpYywKICAgICB0ZXN0V3JvbmdUeXBlLApAQCAtNDQ2LDcgKzY0
OSwxMSBAQCB2YXIgdGVzdHMgPSBbCiAgICAgdGVzdE9sZFZhbHVlLAogICAgIHRlc3RPbGRWYWx1
ZUFzUmVxdWVzdGVkLAogICAgIHRlc3RPbGRWYWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMs
Ci0gICAgdGVzdElETEF0dHJpYnV0ZQorICAgIHRlc3RJRExBdHRyaWJ1dGUsCisgICAgdGVzdEF0
dHJpYnV0ZUZpbHRlciwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyU3VidHJlZSwKKyAgICB0ZXN0
QXR0cmlidXRlRmlsdGVyTm9uSFRNTEVsZW1lbnQsCisgICAgdGVzdEF0dHJpYnV0ZUZpbHRlck5v
bkhUTUxEb2N1bWVudAogXTsKIHZhciB0ZXN0SW5kZXggPSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113748</attachid>
            <date>2011-11-04 20:14:30 -0700</date>
            <delta_ts>2011-11-08 16:15:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111104201429.patch</filename>
            <type>text/plain</type>
            <size>30351</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkzNDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MmU5YzUyODNjMjEzNzBk
MGI3Y2E0ZjkxZWViYjQ0Mzg2ZGI4YWUzLi4zNWIzYWZkOTRhMWIxMzAwNmZhODNhNjEwYmIxMjQ0
YjM1MTlhNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTEtMDQgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhbiBhdHRyaWJ1dGVGaWx0ZXIgdG8gdGhlIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gYW5kCisgICAgICAgIGFkZHMgc3VwcG9ydCBmb3Igb25seSBvYnNlcnZpbmcgYXR0cmli
dXRlcyB3aG9zZSBuYW1lIGFyZSBpbiB0aGUgcHJvdmlkZWQKKyAgICAgICAgZmlsdGVyIHNldCAo
YXJyYXkgb2Ygc3RyaW5ncykuCisKKyAgICAgICAgVGVzdDogZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMuaHRtbC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRp
b25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9PcHRpb25zT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlv
blJlY29yZCk6CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6cmVzZXRP
YnNlcnZhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmNhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcik6
CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaDoKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb2xsZWN0TWF0Y2hpbmdP
YnNlcnZlcnNGb3JNdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRSZWdpc3Rl
cmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAg
ICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11
dGF0aW9uT2JzZXJ2ZXIuaDoKKwogMjAxMS0xMS0wNCAgQmVuIFdlbGxzICA8YmVud2VsbHNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIENhbnZhcyBkcmF3SW1hZ2UoY2FudmFzKSB3aXRoIFNvdXJj
ZUluLCBEZXN0aW5hdGlvbkluLCBTb3VyY2VPdXQsIERlc3RpbmF0aW9uQXRvcCBhbmQgQ29weSBo
YXZlIGVycm9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJL
aXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKaW5kZXggY2Q2MTNmZjE2MGU1Nzc3
MjNmMzVjZjIyZTUxYjFkNjE4YjUwYzMyMS4uZWFjZWMxNDIzYjY5N2VmNDNmZTllMTYwMTRhZDY2
MWE1MTQ0MDY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJL
aXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCkBAIC03OCw2ICs3OCw3IEBA
IEpTVmFsdWUgSlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKEV4ZWNTdGF0ZSogZXhl
YykKIAogICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIG9wdGlvbnNPYmplY3QpOwog
ICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMgPSAwOworICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgcGFyc2luZyBvZiB0aGUgYXR0cmlidXRlRmlsdGVyIG9wdGlvbi4KICAg
ICBib29sIG9wdGlvbjsKICAgICBpZiAoZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgiY2hpbGRM
aXN0Iiwgb3B0aW9uKSAmJiBvcHRpb24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6Q2hpbGRMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvT3B0aW9uc09iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRp
b25zT2JqZWN0LmNwcAppbmRleCA2OTAyNWVlMzJjZjQ3NjM1NDcxZjYxNmJjMTY1MWU2NmVhMGNj
MGQxLi5mODAyNzBkODU1ZTJjNjQ0NDRjZjhjZDY0NzgxZWI5MTliNzlhZjU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcApAQCAtMjE1LDYgKzIxNSwy
NSBAQCBib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgTWVzc2FnZVBv
cnRBcnJheSYgdmFsdWUpIGNvbnN0CiAgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0QXJyYXkodjhW
YWx1ZSwgdmFsdWUpOwogfQogCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcm
IGtleSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFycmF5LWxpa2Ug
b2JqZWN0cworICAgIGlmICghdjhWYWx1ZS0+SXNBcnJheSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiB2OEFycmF5ID0gdjg6OkxvY2FsPHY4OjpB
cnJheT46OkNhc3QodjhWYWx1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2OEFycmF5
LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGluZGV4ZWRW
YWx1ZSA9IHY4QXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKTsKKyAgICAgICAgdmFsdWUu
YWRkKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoaW5kZXhlZFZhbHVlKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgT3B0aW9uc09iamVjdDo6Z2V0V2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewogICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9PcHRpb25zT2JqZWN0LmgKaW5kZXggMjFkNGU4MzUwNmVkMDkyNzIxNmQ4ODYzMmFjOTY3NjA3
YmRhYzQwYi4uN2M0ZTYzNzY0OGFkMzI5ZDllMzQyMjdhOTRiMWIxYzM1ODg3YTNmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApAQCAtMzAsNiArMzAsOCBA
QAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNiAr
NjMsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGJvb2wgZ2V0KGNv
bnN0IFN0cmluZyYsIFJlZlB0cjxUcmFja0Jhc2U+JikgY29uc3Q7CiAjZW5kaWYKKyAgICBib29s
IGdldChjb25zdCBTdHJpbmcmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mKSBjb25zdDsKIAogICAg
IGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYsIFN0cmluZyYp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCmluZGV4IGVm
NTNlYWYyN2VmMTA1M2NlNzBlYWRlOWQ0Yzc3M2NiNDNjMzQ4NzQuLjhkZjFhYTJhYjVjNDVlYjM2
NGUwZTBmNjEyZmRkMmIxOWY3YTAxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1
ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIldlYktp
dE11dGF0aW9uT2JzZXJ2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
ODksMTEgKzkzLDE1IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lCiAKICAgICBPcHRpb25zT2Jq
ZWN0IG9wdGlvbnNPYmplY3QoYXJnc1sxXSk7CiAgICAgdW5zaWduZWQgb3B0aW9ucyA9IDA7Cisg
ICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IGF0dHJpYnV0ZUZpbHRlcjsKICAgICBib29sIG9wdGlv
bjsKICAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImNoaWxkTGlzdCIsIG9wdGlvbikgJiYgb3B0
aW9uKQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlz
dDsKLSAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZXMiLCBvcHRpb24pICYmIG9w
dGlvbikKKyAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImF0dHJpYnV0ZXMiLCBvcHRpb24pICYm
IG9wdGlvbikgewogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0
dHJpYnV0ZXM7CisgICAgICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmlidXRlRmlsdGVy
IiwgYXR0cmlidXRlRmlsdGVyKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6QXR0cmlidXRlRmlsdGVyOworICAgIH0KICAgICBpZiAob3B0aW9uc09iamVj
dC5nZXQoImNoYXJhY3RlckRhdGEiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAgb3B0aW9u
cyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhOwogICAgIGlmIChvcHRp
b25zT2JqZWN0LmdldCgic3VidHJlZSIsIG9wdGlvbikgJiYgb3B0aW9uKQpAQCAtMTAzLDcgKzEx
MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9i
c2VydmVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lCiAgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0
KCJjaGFyYWN0ZXJEYXRhT2xkVmFsdWUiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAgb3B0
aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhT2xkVmFsdWU7CiAK
LSAgICBpbXAtPm9ic2VydmUodGFyZ2V0LCBvcHRpb25zKTsKKyAgICBpbXAtPm9ic2VydmUodGFy
Z2V0LCBvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIpOwogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDYyYzNlYWYxYmU0NWU0
NmMzZWJmNmY4N2Q3NDVlZmQ2ZGM4YjZmZjcuLmU4ZmI2M2JkNmRmNWUyYjczMzJjNDI2MGJiZTQx
YWJhNjZjZDVmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYzNCw3ICs2MzQsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNPbGRWYWx1ZVJlcXVlc3RlZChjb25zdCBIYXNoTWFwPFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIqLCBNdQogc3RhdGljIHZvaWQgZW5xdWV1ZUF0dHJpYnV0ZXNNdXRh
dGlvblJlY29yZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlKQogewogICAgIEhhc2hNYXA8V2ViS2l0TXV0YXRp
b25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiBvYnNlcnZlcnM7Ci0g
ICAgZWxlbWVudC0+Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVy
cywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlcyk7CisgICAgZWxlbWVudC0+Z2V0
UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6QXR0cmlidXRlcywgbmFtZS5sb2NhbE5hbWUoKSk7CiAgICAgaWYgKG9ic2Vy
dmVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCmluZGV4IDZiMjFiMTk2ZTA2
OTZlZjIyMTY2Yzg1YWYwOGVjZTYyMzAzMDg0NTMuLmM2MTUzYzU1ZTg4MTZjNDVmODQwMjM5MDBj
ZTllZmY3OGYyOWNiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKQEAgLTU4LDEwICs1OCwxMiBAQCBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uOjp+TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbigpCiAgICAgbV9v
YnNlcnZlci0+b2JzZXJ2YXRpb25FbmRlZCh0aGlzKTsKIH0KIAotdm9pZCBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uOjpyZXNldE9ic2VydmF0aW9uKE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
IG9wdGlvbnMpCit2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnJlc2V0T2JzZXJ2
YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9t
aWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpCiB7CiAgICAgY2xlYXJUcmFuc2llbnRSZWdpc3Ry
YXRpb25zKCk7CiAgICAgbV9vcHRpb25zID0gb3B0aW9uczsKKyAgICBtX2F0dHJpYnV0ZUZpbHRl
ciA9IGF0dHJpYnV0ZUZpbHRlcjsKKyAgICBtX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRl
ci5jbGVhcigpOwogfQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om9ic2Vy
dmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKQEAgLTEwMiw3
ICsxMDQsNyBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnVucmVnaXN0ZXIo
KQogICAgIC8vIFRoZSBhYm92ZSBsaW5lIHdpbGwgY2F1c2UgdGhpcyBvYmplY3QgdG8gYmUgZGVs
ZXRlZCwgc28gZG9uJ3QgZG8gYW55IG1vcmUgaW4gdGhpcyBmdW5jdGlvbi4KIH0KIAotYm9vbCBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKE5v
ZGUqIG5vZGUsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlKQorYm9v
bCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9t
KE5vZGUqIG5vZGUsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgaWYgKCEobV9vcHRpb25z
ICYgdHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMCw3ICsxMTIsMzEgQEAgYm9v
bCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9t
KE5vZGUqIG5vZGUsIFdlYktpdE0KICAgICBpZiAobV9yZWdpc3RyYXRpb25Ob2RlICE9IG5vZGUg
JiYgIShtX29wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpTdWJ0cmVlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUgIT0gV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlcyB8fCAhKG1fb3B0aW9ucyAmIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZUZpbHRlcikpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKG1fYXR0cmlidXRlRmlsdGVyLmNvbnRhaW5zKGF0dHJpYnV0ZU5hbWUpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGNhc2VJbnNl
bnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcigpLmNvbnRhaW5zKGF0dHJpYnV0ZU5hbWUpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mICBNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXIoKQor
eworICAgIGlmIChtX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcikKKyAgICAgICAgcmV0
dXJuICptX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcjsKKworICAgIG1fY2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlRmlsdGVyID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5n
PigpKTsKKyAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1fYXR0cmlidXRlRmlsdGVyLmJlZ2luKCk7IGl0ZXIgIT0gbV9hdHRyaWJ1dGVGaWx0ZXIu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZUxvd2Vy
ID0gaXRlci0+bG93ZXIoKTsKKyAgICAgICAgaWYgKCgqaXRlcikgIT0gYXR0cmlidXRlTmFtZUxv
d2VyKQorICAgICAgICAgICAgIG1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyLT5hZGQo
YXR0cmlidXRlTmFtZUxvd2VyKTsKKyAgICB9CisKKyAgICByZXR1cm4gKm1fY2FzZUluc2Vuc2l0
aXZlQXR0cmlidXRlRmlsdGVyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaAppbmRleCAy
YjgyMjIxMWJlM2QwYTM2ZWQ1NDAzMjk2NTNlNDY2MGMzMjQ4MWIyLi42ZjY1MDAzYjcwYTI2Yzgw
YzI1NGZmNWViMTgyY2U5Yzg4NzZhYjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgKQEAgLTQ3LDEyICs0NywxMiBAQCBwdWJsaWM6
CiAKICAgICB+TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbigpOwogCi0gICAgdm9pZCByZXNl
dE9ic2VydmF0aW9uKE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKTsKKyAgICB2b2lkIHJlc2V0T2Jz
ZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3Ry
aW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lkIG9ic2VydmVkU3VidHJlZU5vZGVXaWxs
RGV0YWNoKFBhc3NSZWZQdHI8Tm9kZT4pOwogICAgIHZvaWQgY2xlYXJUcmFuc2llbnRSZWdpc3Ry
YXRpb25zKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyKCk7CiAKLSAgICBib29sIHNob3VsZFJlY2Vp
dmVNdXRhdGlvbkZyb20oTm9kZSosIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlw
ZSk7CisgICAgYm9vbCBzaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKE5vZGUqLCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
TmFtZSk7CiAKICAgICBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlcigpIHsgcmV0dXJu
IG1fb2JzZXJ2ZXIuZ2V0KCk7IH0KICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBk
ZWxpdmVyeU9wdGlvbnMoKSB7IHJldHVybiBtX29wdGlvbnMgJiAoV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6QXR0cmlidXRlT2xkVmFsdWUgfCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0
ZXJEYXRhT2xkVmFsdWUpOyB9CkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI+LCBOb2RlKik7CiAKKyAgICBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGNh
c2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcigpOworCiAgICAgUmVmUHRyPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI+IG1fb2JzZXJ2ZXI7CiAgICAgTm9kZSogbV9yZWdpc3RyYXRpb25Ob2RlOwog
ICAgIFJlZlB0cjxOb2RlPiBtX3JlZ2lzdHJhdGlvbk5vZGVLZWVwQWxpdmU7CkBAIC02Nyw2ICs2
OSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPE5vZGVIYXNoU2V0PiBtX3RyYW5zaWVudFJlZ2lz
dHJhdGlvbk5vZGVzOwogCiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgbV9vcHRpb25zOwor
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKKyAgICBPd25QdHI8
SGFzaFNldDxBdG9taWNTdHJpbmc+ID5tX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBiNzZiNmQ2
NWI0NTk0ODY5MDdiYjRkNzZjZjhiZmQ0OThlYjFkYWUyLi4xNDkyOGUyNDNmMjEwMDdkMDMyOTA3
MmEyNmUyMmQ0MjNmMWY4NTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNzAzLDEzICsyNzAzLDEz
IEBAIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiBOb2RlOjp0cmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoCiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBy
YXJlRGF0YSgpLT50cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CiB9CiAK
LXZvaWQgTm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiBv
YnNlcnZlcnMsIE5vZGUqIGZyb21Ob2RlLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlv
blR5cGUgdHlwZSkKK3ZvaWQgTm9kZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRp
b24oSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVy
eU9wdGlvbnM+JiBvYnNlcnZlcnMsIE5vZGUqIGZyb21Ob2RlLCBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpNdXRhdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1l
KQogewogICAgIGlmIChWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+
ID4qIHJlZ2lzdHJ5ID0gZnJvbU5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CiAg
ICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gcmVnaXN0cnktPnNpemUoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24qIHJlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJ5LT5hdChpKS5nZXQoKTsK
LSAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb24tPnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20o
dGhpcywgdHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb24tPnNob3VsZFJlY2Vp
dmVNdXRhdGlvbkZyb20odGhpcywgdHlwZSwgYXR0cmlidXRlTmFtZSkpIHsKICAgICAgICAgICAg
ICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdp
c3RyYXRpb24tPmRlbGl2ZXJ5T3B0aW9ucygpOwogICAgICAgICAgICAgICAgIHBhaXI8SGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9i
c2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKQpAQCAtMjcyMiw3ICsyNzIyLDcgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdP
YnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLAogICAg
IGlmIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50UmVn
aXN0cnkgPSBmcm9tTm9kZS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsK
ICAgICAgICAgZm9yIChIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPjo6aXRl
cmF0b3IgaXRlciA9IHRyYW5zaWVudFJlZ2lzdHJ5LT5iZWdpbigpOyBpdGVyICE9IHRyYW5zaWVu
dFJlZ2lzdHJ5LT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24gPSAqaXRlcjsKLSAgICAgICAgICAgIGlmIChyZWdp
c3RyYXRpb24tPnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20odGhpcywgdHlwZSkpIHsKKyAgICAg
ICAgICAgIGlmIChyZWdpc3RyYXRpb24tPnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20odGhpcywg
dHlwZSwgYXR0cmlidXRlTmFtZSkpIHsKICAgICAgICAgICAgICAgICBNdXRhdGlvblJlY29yZERl
bGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlvbnMgPSByZWdpc3RyYXRpb24tPmRlbGl2ZXJ5T3B0
aW9ucygpOwogICAgICAgICAgICAgICAgIHBhaXI8SGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+OjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gb2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0
aW9ucyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQpAQCAtMjczMiwxMCAr
MjczMiwxMCBAQCB2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9u
KEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosCiAgICAgfQogfQogCi12b2lkIE5vZGU6
OmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mIG9ic2VydmVycywg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUpCit2b2lkIE5vZGU6Omdl
dFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mIG9ic2VydmVycywgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZl
cnNGb3JNdXRhdGlvbihvYnNlcnZlcnMsIG5vZGUsIHR5cGUpOworICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihvYnNlcnZlcnMsIG5vZGUsIHR5cGUsIGF0dHJpYnV0
ZU5hbWUpOwogfQogCiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiBOb2RlOjpyZWdpc3Rl
ck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNl
cnZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCmluZGV4IDU0OGJjOGE0NDNkNzhhZWM1YTAwMjAxYTU3NDAxZGVjNDAy
YjAzZWUuLjZiNjZjODFkMDQ5MjgzZWVkNjM0NDI1OTZkNzhkODNkMzU1NDViNzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaApAQCAtNTkxLDcgKzU5MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKLSAgICB2b2lkIGdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVy
c09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvblJlY29yZERl
bGl2ZXJ5T3B0aW9ucz4mLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUpOwor
ICAgIHZvaWQgZ2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKEhhc2hNYXA8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiYsIFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVOYW1lID0gbnVsbEF0b20pOwogICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24qIHJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI+KTsKICAgICB2b2lkIHVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24qKTsKICAgICB2b2lkIHJlZ2lzdGVyVHJhbnNpZW50TXV0YXRpb25P
YnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKik7CkBAIC03MjUsNyArNzI1LDcg
QEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIFZlY3RvcjxP
d25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiogbXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KCk7CiAgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIHZvaWQgY29sbGVjdE1hdGNo
aW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwg
TXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiwgTm9kZSogZnJvbU5vZGUsIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSk7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdP
YnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mLCBOb2RlKiBmcm9tTm9kZSwgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6TXV0YXRpb25UeXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5h
bWUpOwogI2VuZGlmCiAKICAgICBtdXRhYmxlIHVpbnQzMl90IG1fbm9kZUZsYWdzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDBjN2NiZmMy
NDBkMTllMTljYzE5NjVkZWY3OGEyNjU3NTBiNmU3NjAuLjc1NWFjNmEwZGU5MzljMDVjYmE4NjIz
ZDczN2Y2OTk0NjE1NmEzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRN
dXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5jcHAKQEAgLTU3LDEwICs1NywxMCBAQCBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
Ojp+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpCiAgICAgQVNTRVJUKG1fcmVnaXN0cmF0aW9ucy5p
c0VtcHR5KCkpOwogfQogCi12b2lkIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9k
ZSogbm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyBvcHRpb25zLCAgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIp
CiB7CiAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uID0gbm9k
ZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwotICAgIHJlZ2lzdHJhdGlvbi0+cmVz
ZXRPYnNlcnZhdGlvbihvcHRpb25zKTsKKyAgICByZWdpc3RyYXRpb24tPnJlc2V0T2JzZXJ2YXRp
b24ob3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKTsKIH0KIAogdm9pZCBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpkaXNjb25uZWN0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0TXV0YXRpb25P
YnNlcnZlci5oCmluZGV4IGZlNmU2ZTI3ZTA5YTYxNDczZmZkODJlNGQ3YWVhZGVlNzdjYTNkYjku
LmMzM2E5YTRhMDVmZjNjYmU4YzEwMzFjMWJmOWMxZTliMzdmZmMzMTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAKICAgICB+V2ViS2l0TXV0YXRpb25PYnNlcnZlcigpOwogCi0gICAgdm9pZCBvYnNlcnZl
KE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyk7CisgICAgdm9pZCBvYnNlcnZlKE5vZGUq
LCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBh
dHRyaWJ1dGVGaWx0ZXIpOwogICAgIHZvaWQgZGlzY29ubmVjdCgpOwogICAgIHZvaWQgb2JzZXJ2
YXRpb25TdGFydGVkKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qKTsKICAgICB2b2lkIG9i
c2VydmF0aW9uRW5kZWQoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiopOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUx
NGNhNmQ1YTA1MDUxODFiOTBmOGY2ZjMxMGZhMDFhNDg0NTM0YzQuLjUxMWMwMzBjYjE1NTQxY2Q1
YmM2YTRjY2NhMDc0MjFlZjdkYmNmYzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMS0w
NCAgUmFmYWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtN
dXRhdGlvbk9ic2VydmVyc10gU3VwcG9ydCBhdHRyaWJ1dGVGaWx0ZXIgZm9yIGF0dHJpYnV0ZSBt
dXRhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcwODYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbDoKKwogMjAxMS0xMS0wNCAg
QmVuIFdlbGxzICA8YmVud2VsbHNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENhbnZhcyBkcmF3
SW1hZ2UoY2FudmFzKSB3aXRoIFNvdXJjZUluLCBEZXN0aW5hdGlvbkluLCBTb3VyY2VPdXQsIERl
c3RpbmF0aW9uQXRvcCBhbmQgQ29weSBoYXZlIGVycm9ycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CmluZGV4
IDliYjA3ZTk1MzBmYTc1NDBhOTkwZWRiMDdjM2VhNDdiNjA1ZDM1YmMuLjY3OWU5MDU4NmE4OGRh
MWY5NjVkZmI3NjU2NTM2ZGI0NGRlZWVkYzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
bXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKQEAgLTkyLDYg
KzkyLDY2IEBAIFBBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCiBQQVNTIG11
dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKIFBBU1MgbXV0YXRpb25zWzFdLm9sZFZh
bHVlIGlzICJmb28iCiAKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGVGaWx0ZXIgd29ya3MgYXMgZXhw
ZWN0ZWQgYW5kIGlnbm9yZXMgY2FzZSB3aXRoIEhUTUwgZWxlbWVudHMuCisuLi5vbmx5IGZvbywg
YmFyICYgYm9vbSBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MworUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgor
UEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiYmFyIgorUEFTUyBtdXRhdGlvbnNb
MV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMg
ImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lIGlzICJib29tIgor
UEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKKworVGVzdGluZyB0
aGUgYmVoYXZpb3Igb2YgYXR0cmlidXRlRmlsdGVyIHdoZW4gdGhlIHNhbWUgb2JzZXJ2ZXIgb2Jz
ZXJ2ZXMgYXQgbXVsdGlwbGUgbm9kZXMgaW4gYSBzdWJ0cmVlIHdpdGggZGlmZmVyZW50IGZpbHRl
ciBvcHRpb25zLgorLi4ub25seSBmb28sIGJhciAmIGJhdCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQ
QVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0
cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1Mg
bXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1sx
XS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBp
cyAiYmFyIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BB
U1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5h
dHRyaWJ1dGVOYW1lIGlzICJiYXQiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UgaXMgbnVsbAorLi4uYmFyLCBiYXQgJiBiYXogc2hvdWxkIGFsbCBiZSByZWNlaXZlZC4KK1BB
U1MgbXV0YXRpb25zLmxlbmd0aCBpcyAzCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRy
aWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiYmFyIgorUEFTUyBt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlz
ICJiYXQiCitQQVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFT
UyBtdXRhdGlvbnNbMl0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzJdLmF0
dHJpYnV0ZU5hbWUgaXMgImJheiIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFj
ZSBpcyBudWxsCisKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGVGaWx0ZXIgcmVzcGVjdHMgY2FzZSB3
aXRoIG5vbi1IVE1MIGVsZW1lbnRzLgorLi4ucGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQu
CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAi
YXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgInBhdGhMZW5n
dGgiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgImh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIgorCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3Rz
IGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4KKy4uLm9ubHkgSUQsIGlkLCBib29NLCBwYXRo
TGVuZ3RoIHNob3VsZCBiZSByZWNlaXZlZC4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyA0CitQ
QVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0u
YXR0cmlidXRlTmFtZSBpcyAiSUQiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImlkIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0
cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJp
YnV0ZXMiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lIGlzICJib29NIgorUEFTUyBt
dXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzNd
LnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1lIGlz
ICJwYXRoTGVuZ3RoIgorUEFTUyBtdXRhdGlvbnNbM10uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAppbmRleCAzOTVhZjc5ODQ1ODFiZDZhNWY4MjFjYmNlMTU1
YWZhNjZiZGY0MTljLi5hZjU4YjUxOGI1MTJiMDhlNzlkYTBkZThkZTQ2NzU5MzQ1MDAxOThlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0
bWwKQEAgLTEwNyw3ICsxMDcsNyBAQCBmdW5jdGlvbiB0ZXN0TXVsdGlwbGVSZWdpc3RyYXRpb24o
KSB7CiAKICAgICBmdW5jdGlvbiBzdGFydCgpIHsKICAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhh
dCByZS1vYnNlcnZpbmcgdGhlIHNhbWUgbm9kZSB3aXRoIHRoZSBzYW1lIG9ic2VydmVyIGhhcyB0
aGUgZWZmZWN0IG9mIHJlc2V0dGluZyB0aGUgb3B0aW9ucy4nKTsKLSAgICAKKwogCQljYWxscyA9
IDA7CiAgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CiAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOwpAQCAtNDM1LDYgKzQzNSwyMDkgQEAgZnVuY3Rpb24gdGVzdElE
TEF0dHJpYnV0ZSgpIHsKICAgICBzdGFydCgpOwogfQogCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRl
RmlsdGVyKCkgeworICAgIHZhciBkaXYsIHBhdGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRl
RmlsdGVyIHdvcmtzIGFzIGV4cGVjdGVkIGFuZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1l
bnRzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyID0g
bmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0
YXRpb25zID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0
ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydmb28nLCAnYmFyJywgJ2Jvb00nXSB9KTsKKyAg
ICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2ZvbycpOworICAgICAgICBkaXYuc2V0QXR0
cmlidXRlKCdiYXInLCAnYmFyJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2JheicsICdi
YXonKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnQk9PbScsICdib29tJyk7CisKKyAgICAg
ICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgp
IHsKKyAgICAgICAgZGVidWcoJy4uLm9ubHkgZm9vLCBiYXIgJiBib29tIHNob3VsZCBiZSByZWNl
aXZlZC4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICczJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImJhciIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAn
bnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLnR5cGUnLCAnImF0dHJpYnV0
ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZScsICci
Ym9vbSInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQorCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRlRmlsdGVyU3VidHJlZSgpIHsKKyAgICB2YXIgZGl2
LCBkaXYyLCBkaXYzOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGUgYmVoYXZpb3Igb2YgYXR0cmlidXRlRmlsdGVy
IHdoZW4gdGhlIHNhbWUgb2JzZXJ2ZXIgb2JzZXJ2ZXMgYXQgbXVsdGlwbGUgbm9kZXMgaW4gYSBz
dWJ0cmVlIHdpdGggZGlmZmVyZW50IGZpbHRlciBvcHRpb25zLicpOworCisgICAgICAgIG11dGF0
aW9ucyA9IG51bGw7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAg
IGRpdjIgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwor
ICAgICAgICBkaXYzID0gZGl2Mi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSk7CisKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1
ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2ZvbycsICdiYXInXSB9KTsKKyAg
ICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkaXYyLCB7IGF0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6
IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydiYXInLCAnYmF0J10gfSk7CisKKyAgICAgICAgZGl2
My5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdmb28nKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUo
J2JhcicsICdiYXInKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JhdCcsICdiYXQnKTsK
KyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXonKTsKKworICAgICAgICBzZXRU
aW1lb3V0KGNoZWNrQW5kT2JzZXJ2ZUFsbCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tBbmRPYnNlcnZlQWxsKCkgeworICAgICAgICBkZWJ1ZygnLi4ub25seSBmb28sIGJhciAmIGJh
dCBzaG91bGQgYmUgcmVjZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5s
ZW5ndGgnLCAnMycpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0
dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFt
ZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1
dGVOYW1lJywgJyJiYXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmli
dXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50
eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0
dHJpYnV0ZU5hbWUnLCAnImJhdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5h
dHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUo
ZGl2MiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOworICAgICAgICBkaXYz
LnNldEF0dHJpYnV0ZSgnYmFyJywgJ2JhcicpOworICAgICAgICBkaXYzLnNldEF0dHJpYnV0ZSgn
YmF0JywgJ2JhdCcpOworICAgICAgICBkaXYzLnNldEF0dHJpYnV0ZSgnYmF6JywgJ2JheicpOwor
CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBm
aW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5iYXIsIGJhdCAmIGJheiBzaG91bGQgYWxsIGJl
IHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzMn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImJhciIn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAn
bnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0
ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICci
YmF0IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFj
ZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0udHlwZScsICciYXR0
cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1l
JywgJyJiYXoiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFt
ZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAg
ICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFy
dCgpOworfQorCitmdW5jdGlvbiB0ZXN0QXR0cmlidXRlRmlsdGVyTm9uSFRNTEVsZW1lbnQoKSB7
CisgICAgdmFyIHBhdGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3Rz
IGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBu
dWxsOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0
aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAg
ICAgIHBhdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnJywgJ3BhdGgnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShwYXRoLCB7IGF0dHJp
YnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydwYXRoTGVuZ3RoJ10gfSk7CisgICAgICAg
IHBhdGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhM
ZW5ndGgnLCAnMjAwJyk7CisgICAgICAgIHBhdGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhsZW5ndGgnLCAnMjAwJyk7CisKKyAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAg
ICAgZGVidWcoJy4uLnBhdGhMZW5ndGggc2hvdWxkIGJlIHJlY2VpdmVkLicpOworCisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnInBhdGhMZW5ndGgiJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJyJodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZyInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBk
ZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsK
K30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxEb2N1bWVudCgpIHsKKyAg
ICB2YXIgc3ZnRG9jLCBkaXYsIHBhdGg7CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rp
b24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVy
IHJlc3BlY3RzIGNhc2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4nKTsKKworICAgICAgICBzdmdE
b2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgnaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmcnLCAnc3ZnJywgJ3N2ZycpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxs
OworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9u
KG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAg
IGRpdiA9IHN2Z0RvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2Jz
ZXJ2ZShkaXYsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ0lEJywgJ2lk
JywgJ2Jvb00nXSB9KTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnSUQnLCAnSUQnKTsKKyAg
ICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnaWQnLCAnaWQnKTsKKyAgICAgICAgZGl2LnNldEF0dHJp
YnV0ZSgnYmF6JywgJ2JheicpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdib29NJywgJ2Jv
b20nKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnQk9PbScsICdib29tJyk7CisKKyAgICAg
ICAgcGF0aCA9IHN2Z0RvYy5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnJywgJ3BhdGgnKTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShwYXRoLCB7IGF0dHJpYnV0
ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydwYXRoTGVuZ3RoJ10gfSk7CisgICAgICAgIHBh
dGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGhMZW5n
dGgnLCAnMjAwJyk7CisgICAgICAgIHBhdGguc2V0QXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMu
b3JnLzIwMDAvc3ZnJywgJ3BhdGhsZW5ndGgnLCAnMjAwJyk7CisKKyAgICAgICAgc2V0VGltZW91
dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAg
ZGVidWcoJy4uLm9ubHkgSUQsIGlkLCBib29NLCBwYXRoTGVuZ3RoIHNob3VsZCBiZSByZWNlaXZl
ZC4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICc0Jyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJJRCInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZScsICciaWQiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50eXBlJywgJyJhdHRyaWJ1dGVzIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWUnLCAnImJvb00i
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZXNwYWNlJywg
J251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1szXS50eXBlJywgJyJhdHRyaWJ1
dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5hbWUnLCAn
InBhdGhMZW5ndGgiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbM10uYXR0cmlidXRl
TmFtZXNwYWNlJywgJyJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInKTsKKworICAgICAgICBv
YnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4
dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCiB2YXIgdGVzdHMgPSBbCiAgICAg
dGVzdEJhc2ljLAogICAgIHRlc3RXcm9uZ1R5cGUsCkBAIC00NDYsNyArNjQ5LDExIEBAIHZhciB0
ZXN0cyA9IFsKICAgICB0ZXN0T2xkVmFsdWUsCiAgICAgdGVzdE9sZFZhbHVlQXNSZXF1ZXN0ZWQs
CiAgICAgdGVzdE9sZFZhbHVlVW5pb25NdWx0aXBsZU9ic2VydmF0aW9ucywKLSAgICB0ZXN0SURM
QXR0cmlidXRlCisgICAgdGVzdElETEF0dHJpYnV0ZSwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVy
LAorICAgIHRlc3RBdHRyaWJ1dGVGaWx0ZXJTdWJ0cmVlLAorICAgIHRlc3RBdHRyaWJ1dGVGaWx0
ZXJOb25IVE1MRWxlbWVudCwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyTm9uSFRNTERvY3VtZW50
CiBdOwogdmFyIHRlc3RJbmRleCA9IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114168</attachid>
            <date>2011-11-08 16:03:30 -0800</date>
            <delta_ts>2011-11-11 10:56:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70860-20111108160329.patch</filename>
            <type>text/plain</type>
            <size>33578</size>
            <attacher name="Rafael Weinstein">rafaelw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk2MTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNjg0YTY2OGM3MzAyNThm
Y2NjYmM1YWViOGI2MmRlMTQ4MjViNTY0Li4xY2NkOWUwN2UyNjdkNjMwZjQ1NWJmZDY2YWFhYmRk
NjMzZTM1MTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTEtMDQgIFJhZmFl
bCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25P
YnNlcnZlcnNdIFN1cHBvcnQgYXR0cmlidXRlRmlsdGVyIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhbiBhdHRyaWJ1dGVGaWx0ZXIgdG8gdGhlIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24gYW5kCisgICAgICAgIGFkZHMgc3VwcG9ydCBmb3Igb25seSBvYnNlcnZpbmcgYXR0cmli
dXRlcyB3aG9zZSBuYW1lIGFyZSBpbiB0aGUgcHJvdmlkZWQKKyAgICAgICAgZmlsdGVyIHNldCAo
YXJyYXkgb2Ygc3RyaW5ncykuCisKKyAgICAgICAgVGVzdDogZmFzdC9tdXRhdGlvbi9vYnNlcnZl
LWF0dHJpYnV0ZXMuaHRtbC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRp
b25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9PcHRpb25zT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5xdWV1ZUF0dHJpYnV0ZXNNdXRhdGlv
blJlY29yZCk6CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6cmVzZXRP
YnNlcnZhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmNhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcik6
CisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaDoKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb2xsZWN0TWF0Y2hpbmdP
YnNlcnZlcnNGb3JNdXRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRSZWdpc3Rl
cmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAg
ICAgICogZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZSk6CisgICAgICAgICogZG9tL1dlYktpdE11
dGF0aW9uT2JzZXJ2ZXIuaDoKKwogMjAxMS0xMS0wOCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTjogcnRsIGhvcml6b250YWwgc2Nyb2xsYmFyIC8g
cmVzaXplIGJ1ZyAtIEJvZHkgc2hpZnRzIG9uIHJlc2l6ZSB3aGVuIHNjcm9sbGVkIGFsbCB0aGUg
d2F5IHRvIHRoZSBsZWZ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCAwMThlZTQyNGU5
MTJiMDM1ZjZiMzVjYzQ2YjFhY2RkZTEwZjUwNzVkLi4zOGMzOWU0MjI0MDdkNWI0YzkyMjYzYTUy
MGIzNDRiMmRmYWQzOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKQEAgLTc4LDYgKzc4
LDcgQEAgSlNWYWx1ZSBKU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoRXhlY1N0YXRl
KiBleGVjKQogCiAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgb3B0aW9uc09iamVj
dCk7CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucyA9IDA7CisgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBwYXJzaW5nIG9mIHRoZSBhdHRyaWJ1dGVGaWx0ZXIgb3B0aW9u
LgogICAgIGJvb2wgb3B0aW9uOwogICAgIGlmIChkaWN0aW9uYXJ5LnRyeUdldFByb3BlcnR5KCJj
aGlsZExpc3QiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRN
dXRhdGlvbk9ic2VydmVyOjpDaGlsZExpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L09wdGlvbnNPYmplY3QuY3BwCmluZGV4IDY5MDI1ZWUzMmNmNDc2MzU0NzFmNjE2YmMxNjUxZTY2
ZWEwY2MwZDEuLmY4MDI3MGQ4NTVlMmM2NDQ0NGNmOGNkNjQ3ODFlYjkxOWI3OWFmNTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwCkBAIC0yMTUsNiAr
MjE1LDI1IEBAIGJvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBNZXNz
YWdlUG9ydEFycmF5JiB2YWx1ZSkgY29uc3QKICAgICByZXR1cm4gZ2V0TWVzc2FnZVBvcnRBcnJh
eSh2OFZhbHVlLCB2YWx1ZSk7CiB9CiAKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0
cmluZyYga2V5LCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHZhbHVlKSBjb25zdAoreworICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFN1cHBvcnQgYXJyYXkt
bGlrZSBvYmplY3RzCisgICAgaWYgKCF2OFZhbHVlLT5Jc0FycmF5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHY4QXJyYXkgPSB2ODo6TG9jYWw8
djg6OkFycmF5Pjo6Q2FzdCh2OFZhbHVlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHY4
QXJyYXktPkxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW5k
ZXhlZFZhbHVlID0gdjhBcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpOworICAgICAgICB2
YWx1ZS5hZGQodjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhpbmRleGVkVmFsdWUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7
CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L09wdGlvbnNPYmplY3QuaAppbmRleCAyMWQ0ZTgzNTA2ZWQwOTI3MjE2ZDg4NjMyYWM5
Njc2MDdiZGFjNDBiLi43YzRlNjM3NjQ4YWQzMjlkOWUzNDIyN2E5NGIxYjFjMzU4ODdhM2YyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCkBAIC0zMCw2ICsz
MCw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MSw2ICs2Myw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgYm9vbCBn
ZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFRyYWNrQmFzZT4mKSBjb25zdDsKICNlbmRpZgorICAg
IGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0Owog
CiAgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3Ry
aW5nJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKaW5k
ZXggOTY2ZGNmODgzOGE3NDEwYTc5M2ExM2Y2NWYwYmEzNjAyMzkwZmQ4OC4uZDMyYjQ0ZmZjMTFj
NDllZDdjYTkxMjU1MjI4NDYxYWI3OWE4ZTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNl
cnZlckN1c3RvbS5jcHAKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
V2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC04OSwxMSArOTMsMTQgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6b2JzZXJ2ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWUKIAogICAgIE9wdGlv
bnNPYmplY3Qgb3B0aW9uc09iamVjdChhcmdzWzFdKTsKICAgICB1bnNpZ25lZCBvcHRpb25zID0g
MDsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVyOwogICAgIGJvb2wg
b3B0aW9uOwogICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiY2hpbGRMaXN0Iiwgb3B0aW9uKSAm
JiBvcHRpb24pCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hp
bGRMaXN0OwogICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgiYXR0cmlidXRlcyIsIG9wdGlvbikg
JiYgb3B0aW9uKQogICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0
dHJpYnV0ZXM7CisgICAgaWYgKG9wdGlvbnNPYmplY3QuZ2V0KCJhdHRyaWJ1dGVGaWx0ZXIiLCBh
dHRyaWJ1dGVGaWx0ZXIpKQorICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6OkF0dHJpYnV0ZUZpbHRlcjsKICAgICBpZiAob3B0aW9uc09iamVjdC5nZXQoImNoYXJhY3Rl
ckRhdGEiLCBvcHRpb24pICYmIG9wdGlvbikKICAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhOwogICAgIGlmIChvcHRpb25zT2JqZWN0LmdldCgi
c3VidHJlZSIsIG9wdGlvbikgJiYgb3B0aW9uKQpAQCAtMTA0LDcgKzExMSw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lCiAgICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6Q2hhcmFjdGVyRGF0YU9sZFZhbHVlOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgaW1wLT5vYnNlcnZlKHRhcmdldCwgb3B0aW9ucywgZWMpOworICAgIGltcC0+b2JzZXJ2ZSh0
YXJnZXQsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlciwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNjJjM2VhZjFiZTQ1ZTQ2YzNl
YmY2Zjg3ZDc0NWVmZDZkYzhiNmZmNy4uZThmYjYzYmQ2ZGY1ZTJiNzMzMmM0MjYwYmJlNDFhYmE2
NmNkNWZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjM0LDcgKzYzNCw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc09sZFZhbHVlUmVxdWVzdGVkKGNvbnN0IEhhc2hNYXA8V2ViS2l0TXV0
YXRpb25PYnNlcnZlciosIE11CiBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9u
UmVjb3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYgb2xkVmFsdWUpCiB7CiAgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+IG9ic2VydmVyczsKLSAgICBl
bGVtZW50LT5nZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzKTsKKyAgICBlbGVtZW50LT5nZXRSZWdp
c3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyOjpBdHRyaWJ1dGVzLCBuYW1lLmxvY2FsTmFtZSgpKTsKICAgICBpZiAob2JzZXJ2ZXJz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKaW5kZXggNmIyMWIxOTZlMDY5NmVm
MjIxNjZjODVhZjA4ZWNlNjIzMDMwODQ1My4uYjhlYjU5NDg3NDcwYWE4OWNhZTk0ZjVjNjliYjBk
MmE3NWEyOTQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uLmNwcApAQCAtNTgsMTUgKzU4LDE3IEBAIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb246On5NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKCkKICAgICBtX29ic2Vy
dmVyLT5vYnNlcnZhdGlvbkVuZGVkKHRoaXMpOwogfQogCi12b2lkIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb246OnJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0
aW9ucykKK3ZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6cmVzZXRPYnNlcnZhdGlv
bihNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0
cmluZz4mIGF0dHJpYnV0ZUZpbHRlcikKIHsKICAgICBjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlv
bnMoKTsKICAgICBtX29wdGlvbnMgPSBvcHRpb25zOworICAgIG1fYXR0cmlidXRlRmlsdGVyID0g
YXR0cmlidXRlRmlsdGVyOworICAgIG1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyLmNs
ZWFyKCk7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b2JzZXJ2ZWRT
dWJ0cmVlTm9kZVdpbGxEZXRhY2goUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogewotICAgIGlmICgh
KG1fb3B0aW9ucyAmIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUpKQorICAgIGlmICgh
aXNTdWJ0cmVlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG5vZGUtPnJlZ2lzdGVyVHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlcih0aGlzKTsKQEAgLTEwMiwxNSArMTA0LDM5IEBAIHZvaWQgTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6dW5yZWdpc3RlcigpCiAgICAgLy8gVGhlIGFib3Zl
IGxpbmUgd2lsbCBjYXVzZSB0aGlzIG9iamVjdCB0byBiZSBkZWxldGVkLCBzbyBkb24ndCBkbyBh
bnkgbW9yZSBpbiB0aGlzIGZ1bmN0aW9uLgogfQogCi1ib29sIE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSogbm9kZSwgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUpCitib29sIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSogbm9kZSwgV2ViS2l0
TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlTmFtZSkKIHsKICAgICBpZiAoIShtX29wdGlvbnMgJiB0eXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fcmVnaXN0cmF0aW9uTm9kZSAhPSBub2RlICYmICEo
bV9vcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZSkpCisgICAgaWYgKG1f
cmVnaXN0cmF0aW9uTm9kZSAhPSBub2RlICYmICFpc1N1YnRyZWUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUgIT0gV2ViS2l0TXV0YXRp
b25PYnNlcnZlcjo6QXR0cmlidXRlcyB8fCAhKG1fb3B0aW9ucyAmIFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXI6OkF0dHJpYnV0ZUZpbHRlcikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KG1fYXR0cmlidXRlRmlsdGVyLmNvbnRhaW5zKGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYm
IG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUF0
dHJpYnV0ZUZpbHRlcigpLmNvbnRhaW5zKGF0dHJpYnV0ZU5hbWUpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb246OmNhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcigpCit7CisgICAgaWYg
KG1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyKQorICAgICAgICByZXR1cm4gKm1fY2Fz
ZUluc2Vuc2l0aXZlQXR0cmlidXRlRmlsdGVyOworCisgICAgbV9jYXNlSW5zZW5zaXRpdmVBdHRy
aWJ1dGVGaWx0ZXIgPSBhZG9wdFB0cihuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+KCkpOworICAg
IGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9hdHRy
aWJ1dGVGaWx0ZXIuYmVnaW4oKTsgaXRlciAhPSBtX2F0dHJpYnV0ZUZpbHRlci5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBhdHRyaWJ1dGVOYW1lTG93ZXIgPSBpdGVyLT5s
b3dlcigpOworICAgICAgICBpZiAoKCppdGVyKSAhPSBhdHRyaWJ1dGVOYW1lTG93ZXIpCisgICAg
ICAgICAgICAgbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXItPmFkZChhdHRyaWJ1dGVO
YW1lTG93ZXIpOworICAgIH0KKworICAgIHJldHVybiAqbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1
dGVGaWx0ZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oCmluZGV4IDNjN2U2YjU3YjZk
NjJiYzZkOGJjZDc2NDVjODU1MDQ0NzU1NGFlNWQuLjYzNjJlNmFhZmVhZjY0Nzg3NjY5NjRiNDgz
YTYxNWNkZWU2NzI0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uaApAQCAtNDcsMTMgKzQ3LDEzIEBAIHB1YmxpYzoKIAogICAgIH5N
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKCk7CiAKLSAgICB2b2lkIHJlc2V0T2JzZXJ2YXRp
b24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMpOworICAgIHZvaWQgcmVzZXRPYnNlcnZhdGlvbihN
dXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRy
aWJ1dGVGaWx0ZXIpOwogICAgIHZvaWQgb2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2goUGFz
c1JlZlB0cjxOb2RlPik7CiAgICAgdm9pZCBjbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXIoKTsKIAotICAgIGJvb2wgc2hvdWxkUmVjZWl2ZU11dGF0aW9u
RnJvbShOb2RlKiwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlKTsKLSAgICBi
b29sIGlzU3VidHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucyAmIFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI6OlN1YnRyZWU7IH0KKyAgICBib29sIHNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20o
Tm9kZSosIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVOYW1lKTsKKyAgICBib29sIGlubGluZSBpc1N1YnRyZWUoKSBjb25z
dCB7IHJldHVybiBtX29wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpTdWJ0cmVlOyB9
CiAKICAgICBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlcigpIHsgcmV0dXJuIG1fb2Jz
ZXJ2ZXIuZ2V0KCk7IH0KICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVy
eU9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMgJiAoV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6QXR0cmlidXRlT2xkVmFsdWUgfCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0
ZXJEYXRhT2xkVmFsdWUpOyB9CkBAIC02Miw2ICs2Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbihQYXNzUmVmUHRyPFdlYktpdE11dGF0aW9u
T2JzZXJ2ZXI+LCBOb2RlKik7CiAKKyAgICBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGNh
c2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZUZpbHRlcigpOworCiAgICAgUmVmUHRyPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI+IG1fb2JzZXJ2ZXI7CiAgICAgTm9kZSogbV9yZWdpc3RyYXRpb25Ob2RlOwog
ICAgIFJlZlB0cjxOb2RlPiBtX3JlZ2lzdHJhdGlvbk5vZGVLZWVwQWxpdmU7CkBAIC02OSw2ICs3
MSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPE5vZGVIYXNoU2V0PiBtX3RyYW5zaWVudFJlZ2lz
dHJhdGlvbk5vZGVzOwogCiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgbV9vcHRpb25zOwor
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKKyAgICBPd25QdHI8
SGFzaFNldDxBdG9taWNTdHJpbmc+ID4gbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVGaWx0ZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNThiN2Nm
NDkyNjVjZWE5MDg4MGE3NjE2MDA4YmRhNjQwYWIwYjE5NS4uNWJlMzRmYjZmOGEyMDU5NTRlNzg4
ZGEyMjliYTZkODc3MTU1YWFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjcyMSwxMyArMjcyMSwx
MyBAQCBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogTm9kZTo6dHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KAogICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8g
cmFyZURhdGEoKS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgOiAwOwogfQog
Ci12b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8
V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPiYg
b2JzZXJ2ZXJzLCBOb2RlKiBmcm9tTm9kZSwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRp
b25UeXBlIHR5cGUpCit2b2lkIE5vZGU6OmNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0
aW9uKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZl
cnlPcHRpb25zPiYgb2JzZXJ2ZXJzLCBOb2RlKiBmcm9tTm9kZSwgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFt
ZSkKIHsKICAgICBpZiAoVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
PiA+KiByZWdpc3RyeSA9IGZyb21Ob2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgewog
ICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQoaSkuZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9t
KHRoaXMsIHR5cGUpKSB7CisgICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5zaG91bGRSZWNl
aXZlTXV0YXRpb25Gcm9tKHRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpKSB7CiAgICAgICAgICAg
ICAgICAgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVn
aXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAgICAgICAgICBwYWlyPEhhc2hN
YXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25z
Pjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5v
YnNlcnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
LnNlY29uZCkKQEAgLTI3NDAsNyArMjc0MCw3IEBAIHZvaWQgTm9kZTo6Y29sbGVjdE1hdGNoaW5n
T2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwKICAg
ICBpZiAoSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudFJl
Z2lzdHJ5ID0gZnJvbU5vZGUtPnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7
CiAgICAgICAgIGZvciAoSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj46Oml0
ZXJhdG9yIGl0ZXIgPSB0cmFuc2llbnRSZWdpc3RyeS0+YmVnaW4oKTsgaXRlciAhPSB0cmFuc2ll
bnRSZWdpc3RyeS0+ZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uID0gKml0ZXI7Ci0gICAgICAgICAgICBpZiAocmVn
aXN0cmF0aW9uLT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKHRoaXMsIHR5cGUpKSB7CisgICAg
ICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKHRoaXMs
IHR5cGUsIGF0dHJpYnV0ZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgTXV0YXRpb25SZWNvcmRE
ZWxpdmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zID0gcmVnaXN0cmF0aW9uLT5kZWxpdmVyeU9w
dGlvbnMoKTsKICAgICAgICAgICAgICAgICBwYWlyPEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNl
cnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRpb25zPjo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5vYnNlcnZlcigpLCBkZWxpdmVyeU9w
dGlvbnMpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkKQEAgLTI3NTAsMTUg
KzI3NTAsMTUgQEAgdm9pZCBOb2RlOjpjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlv
bihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLAogICAgIH0KIH0KIAotdm9pZCBOb2Rl
OjpnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoSGFzaE1hcDxXZWJLaXRNdXRh
dGlvbk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiBvYnNlcnZlcnMs
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlKQordm9pZCBOb2RlOjpn
ZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoSGFzaE1hcDxXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiBvYnNlcnZlcnMsIFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgY29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0
YXRpb24ob2JzZXJ2ZXJzLCB0aGlzLCB0eXBlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZl
cnNGb3JNdXRhdGlvbihvYnNlcnZlcnMsIHRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpOwogCiAg
ICAgaWYgKCFkb2N1bWVudCgpLT5oYXNTdWJ0cmVlTXV0YXRpb25PYnNlcnZlck9mVHlwZSh0eXBl
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgp
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdPYnNlcnZlcnNGb3JNdXRhdGlvbihvYnNlcnZlcnMsIG5vZGUsIHR5cGUpOworICAgICAgICBj
b2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihvYnNlcnZlcnMsIG5vZGUsIHR5cGUs
IGF0dHJpYnV0ZU5hbWUpOwogfQogCiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiBOb2Rl
OjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyPiBvYnNlcnZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGJkOTZmMDc4MDQ2NmM3MzkxZTExZjBjYzk1
NzVhZmNkNjU0NjI0NGIuLjI4YmI4YzM4ZGJiZmJhYjM0Y2Q1NTA1NTBlNTBiMWJkZThhN2RiYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaApAQCAtNTg5LDcgKzU4OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICB2b2lkIGdldFJlZ2lzdGVyZWRNdXRhdGlv
bk9ic2VydmVyc09mVHlwZShIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlv
blJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlv
blR5cGUpOworICAgIHZvaWQgZ2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKEhh
c2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRp
b25zPiYsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gbnVsbEF0b20pOwogICAgIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24qIHJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI+KTsKICAgICB2b2lkIHVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qKTsKICAgICB2b2lkIHJlZ2lzdGVyVHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKik7CkBAIC03MjMs
NyArNzIzLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAg
IFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiogbXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJ5KCk7CiAgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uKj4qIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIHZvaWQgY29s
bGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24oSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiwgTm9kZSogZnJvbU5vZGUs
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSk7CisgICAgdm9pZCBjb2xsZWN0
TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIqLCBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mLCBOb2RlKiBmcm9tTm9kZSwgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZU5hbWUpOwogI2VuZGlmCiAKICAgICBtdXRhYmxlIHVpbnQzMl90IG1fbm9kZUZsYWdz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4
IDdjYTc2MTJkY2FmNjk5MjRhYWNiOWNhYWQyNTczOTY5NDhlZDM4MWEuLjc0NWJmYTAzNWVkYWQ2
ZGU4M2UxZWFhNTE3OWQyMmFkZWE4MGQ2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2Vi
S2l0TXV0YXRpb25PYnNlcnZlci5jcHAKQEAgLTYzLDEyICs2MywxMSBAQCBib29sIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXI6OnZhbGlkYXRlT3B0aW9ucyhNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBv
cHRpb25zKQogewogICAgIHJldHVybiAob3B0aW9ucyAmIChBdHRyaWJ1dGVzIHwgQ2hhcmFjdGVy
RGF0YSB8IENoaWxkTGlzdCkpCiAgICAgICAgICYmICgob3B0aW9ucyAmIEF0dHJpYnV0ZXMpIHx8
ICEob3B0aW9ucyAmIEF0dHJpYnV0ZU9sZFZhbHVlKSkKLSAgICAgICAgLy8gRklYTUU6IFVuY29t
bWVudCB0aGUgbGluZSBiZWxvdyBvbmNlIGF0dHJpYnV0ZUZpbHRlciBpcyBzdXBwb3J0ZWQuCi0g
ICAgICAgIC8vICYmICgob3B0aW9ucyAmIEF0dHJpYnV0ZXMpIHx8ICEob3B0aW9ucyAmIEF0dHJp
YnV0ZUZpbHRlcikpCisgICAgICAgICYmICgob3B0aW9ucyAmIEF0dHJpYnV0ZXMpIHx8ICEob3B0
aW9ucyAmIEF0dHJpYnV0ZUZpbHRlcikpCiAgICAgICAgICYmICgob3B0aW9ucyAmIENoYXJhY3Rl
ckRhdGEpIHx8ICEob3B0aW9ucyAmIENoYXJhY3RlckRhdGFPbGRWYWx1ZSkpOwogfQogCi12b2lk
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSogbm9kZSwgTXV0YXRpb25PYnNl
cnZlck9wdGlvbnMgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSogbm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbm9kZSkgewogICAgICAgICBlYyA9IE5PVF9G
T1VORF9FUlI7CkBAIC04Miw3ICs4MSw3IEBAIHZvaWQgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
b2JzZXJ2ZShOb2RlKiBub2RlLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zCiAgICAg
fQogCiAgICAgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uID0gbm9k
ZS0+cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKHRoaXMpOwotICAgIHJlZ2lzdHJhdGlvbi0+cmVz
ZXRPYnNlcnZhdGlvbihvcHRpb25zKTsKKyAgICByZWdpc3RyYXRpb24tPnJlc2V0T2JzZXJ2YXRp
b24ob3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKTsKIAogICAgIGlmIChyZWdpc3RyYXRpb24tPmlz
U3VidHJlZSgpKQogICAgICAgICBub2RlLT5kb2N1bWVudCgpLT5hZGRTdWJ0cmVlTXV0YXRpb25P
YnNlcnZlclR5cGVzKHJlZ2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9ic2VydmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oCmluZGV4IDVjNGUyMjBmYmNjZjVhZDA4
MmY3ZWFjNTcwZjA5YTNhM2JjNWU1MzIuLmE5ODdiMDhiODY0M2U3Y2I0N2QyZTlmNTg3NDhmYTU5
MzVhNDk5ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRNdXRhdGlvbk9i
c2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIu
aApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB+V2ViS2l0TXV0YXRpb25PYnNlcnZl
cigpOwogCi0gICAgdm9pZCBvYnNlcnZlKE5vZGUqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgb2JzZXJ2ZShOb2RlKiwgTXV0YXRpb25PYnNlcnZl
ck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkaXNjb25uZWN0KCk7CiAgICAgdm9pZCBvYnNlcnZh
dGlvblN0YXJ0ZWQoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiopOwogICAgIHZvaWQgb2Jz
ZXJ2YXRpb25FbmRlZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKik7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzFm
ZGVlZjlmOGIyZGY5ZjNmODc4Zjc0NTZhN2ExMDc0NTQ2MGIzMy4uMDI0ODAxY2MwNDZjZGI2NzJi
ZThjY2EwYjcxMjExOWM5YTQ3OWVkMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTExLTA0
ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011
dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0IGF0dHJpYnV0ZUZpbHRlciBmb3IgYXR0cmlidXRlIG11
dGF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzA4NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sOgorCiAyMDExLTExLTA4ICBY
aWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OOiBydGwg
aG9yaXpvbnRhbCBzY3JvbGxiYXIgLyByZXNpemUgYnVnIC0gQm9keSBzaGlmdHMgb24gcmVzaXpl
IHdoZW4gc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dApp
bmRleCA5YmIwN2U5NTMwZmE3NTQwYTk5MGVkYjA3YzNlYTQ3YjYwNWQzNWJjLi42NzllOTA1ODZh
ODhkYTFmOTY1ZGZiNzY1NjUzNmRiNDRkZWVlZGMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC05
Miw2ICs5Miw2NiBAQCBQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogUEFT
UyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZSBpcyAiaWQiCiBQQVNTIG11dGF0aW9uc1sxXS5v
bGRWYWx1ZSBpcyAiZm9vIgogCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHdvcmtzIGFz
IGV4cGVjdGVkIGFuZCBpZ25vcmVzIGNhc2Ugd2l0aCBIVE1MIGVsZW1lbnRzLgorLi4ub25seSBm
b28sIGJhciAmIGJvb20gc2hvdWxkIGJlIHJlY2VpdmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3Ro
IGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRl
cyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BBU1MgbXV0YXRp
b25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBl
IGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9v
bSIKK1BBU1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1Rlc3Rp
bmcgdGhlIGJlaGF2aW9yIG9mIGF0dHJpYnV0ZUZpbHRlciB3aGVuIHRoZSBzYW1lIG9ic2VydmVy
IG9ic2VydmVzIGF0IG11bHRpcGxlIG5vZGVzIGluIGEgc3VidHJlZSB3aXRoIGRpZmZlcmVudCBm
aWx0ZXIgb3B0aW9ucy4KKy4uLm9ubHkgZm9vLCBiYXIgJiBiYXQgc2hvdWxkIGJlIHJlY2VpdmVk
LgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDMKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMg
ImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQ
QVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlv
bnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5h
bWUgaXMgImJhciIKK1BBU1MgbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxs
CitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNb
Ml0uYXR0cmlidXRlTmFtZSBpcyAiYmF0IgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFt
ZXNwYWNlIGlzIG51bGwKKy4uLmJhciwgYmF0ICYgYmF6IHNob3VsZCBhbGwgYmUgcmVjZWl2ZWQu
CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMworUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAi
YXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImJhciIKK1BB
U1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9u
c1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFt
ZSBpcyAiYmF0IgorUEFTUyBtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwK
K1BBU1MgbXV0YXRpb25zWzJdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sy
XS5hdHRyaWJ1dGVOYW1lIGlzICJiYXoiCitQQVNTIG11dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1l
c3BhY2UgaXMgbnVsbAorCitUZXN0aW5nIHRoYXQgYXR0cmlidXRlRmlsdGVyIHJlc3BlY3RzIGNh
c2Ugd2l0aCBub24tSFRNTCBlbGVtZW50cy4KKy4uLnBhdGhMZW5ndGggc2hvdWxkIGJlIHJlY2Vp
dmVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUg
aXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJwYXRo
TGVuZ3RoIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIKKworVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNw
ZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuCisuLi5vbmx5IElELCBpZCwgYm9vTSwg
cGF0aExlbmd0aCBzaG91bGQgYmUgcmVjZWl2ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
NAorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWUgaXMgIklEIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFt
ZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQ
QVNTIG11dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lIGlzICJpZCIKK1BBU1MgbXV0YXRpb25zWzFd
LmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9uc1syXS50eXBlIGlzICJh
dHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFtZSBpcyAiYm9vTSIKK1BB
U1MgbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9u
c1szXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbM10uYXR0cmlidXRlTmFt
ZSBpcyAicGF0aExlbmd0aCIKK1BBU1MgbXV0YXRpb25zWzNdLmF0dHJpYnV0ZU5hbWVzcGFjZSBp
cyAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRp
b24vb2JzZXJ2ZS1hdHRyaWJ1dGVzLmh0bWwKaW5kZXggMzk1YWY3OTg0NTgxYmQ2YTVmODIxY2Jj
ZTE1NWFmYTY2YmRmNDE5Yy4uYWY1OGI1MThiNTEyYjA4ZTc5ZGEwZGU4ZGU0Njc1OTM0NTAwMTk4
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0
ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRl
cy5odG1sCkBAIC0xMDcsNyArMTA3LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVnaXN0cmF0
aW9uKCkgewogCiAgICAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICAgICAgIGRlYnVnKCdUZXN0aW5n
IHRoYXQgcmUtb2JzZXJ2aW5nIHRoZSBzYW1lIG5vZGUgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciBo
YXMgdGhlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIG9wdGlvbnMuJyk7Ci0gICAgCisKIAkJY2Fs
bHMgPSAwOwogICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwogICAgICAgICBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKQEAgLTQzNSw2ICs0MzUsMjA5IEBAIGZ1bmN0aW9uIHRl
c3RJRExBdHRyaWJ1dGUoKSB7CiAgICAgc3RhcnQoKTsKIH0KIAorZnVuY3Rpb24gdGVzdEF0dHJp
YnV0ZUZpbHRlcigpIHsKKyAgICB2YXIgZGl2LCBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKwor
ICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJp
YnV0ZUZpbHRlciB3b3JrcyBhcyBleHBlY3RlZCBhbmQgaWdub3JlcyBjYXNlIHdpdGggSFRNTCBl
bGVtZW50cy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZl
ciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg
IG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwgeyBhdHRy
aWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnZm9vJywgJ2JhcicsICdib29NJ10gfSk7
CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdmb28nKTsKKyAgICAgICAgZGl2LnNl
dEF0dHJpYnV0ZSgnYmFyJywgJ2JhcicpOworICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdiYXon
LCAnYmF6Jyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9vbScpOworCisg
ICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5p
c2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5vbmx5IGZvbywgYmFyICYgYm9vbSBzaG91bGQgYmUg
cmVjZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMycp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdu
dWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udHlwZScsICciYXR0cmlidXRl
cyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1lJywgJyJi
YXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0cmlidXRlTmFtZXNwYWNl
JywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWUn
LCAnImJvb20iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRlTmFt
ZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAg
ICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQo
KTsKK30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlclN1YnRyZWUoKSB7CisgICAgdmFy
IGRpdiwgZGl2MiwgZGl2MzsKKyAgICB2YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFy
dCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIGF0dHJpYnV0ZUZp
bHRlciB3aGVuIHRoZSBzYW1lIG9ic2VydmVyIG9ic2VydmVzIGF0IG11bHRpcGxlIG5vZGVzIGlu
IGEgc3VidHJlZSB3aXRoIGRpZmZlcmVudCBmaWx0ZXIgb3B0aW9ucy4nKTsKKworICAgICAgICBt
dXRhdGlvbnMgPSBudWxsOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAg
IH0pOworCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
ICAgICBkaXYyID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
KTsKKyAgICAgICAgZGl2MyA9IGRpdjIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2JykpOworCisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6
IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydmb28nLCAnYmFyJ10gfSk7
CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2MiwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0
cmVlOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnYmFyJywgJ2JhdCddIH0pOworCisgICAgICAg
IGRpdjMuc2V0QXR0cmlidXRlKCdmb28nLCAnZm9vJyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmli
dXRlKCdiYXInLCAnYmFyJyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXQnLCAnYmF0
Jyk7CisgICAgICAgIGRpdjMuc2V0QXR0cmlidXRlKCdiYXonLCAnYmF6Jyk7CisKKyAgICAgICAg
c2V0VGltZW91dChjaGVja0FuZE9ic2VydmVBbGwsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGNoZWNrQW5kT2JzZXJ2ZUFsbCgpIHsKKyAgICAgICAgZGVidWcoJy4uLm9ubHkgZm9vLCBiYXIg
JiBiYXQgc2hvdWxkIGJlIHJlY2VpdmVkLicpOworCisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMubGVuZ3RoJywgJzMnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywg
JyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0
ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1
dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5
cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0uYXR0
cmlidXRlTmFtZScsICciYmFyIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0
dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
Ml0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sy
XS5hdHRyaWJ1dGVOYW1lJywgJyJiYXQiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
Ml0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKworICAgICAgICBvYnNlcnZlci5vYnNl
cnZlKGRpdjIsIHsgYXR0cmlidXRlczogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKKyAgICAgICAg
ZGl2My5zZXRBdHRyaWJ1dGUoJ2JhcicsICdiYXInKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1
dGUoJ2JhdCcsICdiYXQnKTsKKyAgICAgICAgZGl2My5zZXRBdHRyaWJ1dGUoJ2JheicsICdiYXon
KTsKKworICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZmluaXNoKCkgeworICAgICAgICBkZWJ1ZygnLi4uYmFyLCBiYXQgJiBiYXogc2hvdWxkIGFs
bCBiZSByZWNlaXZlZC4nKTsKKworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcs
ICczJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRl
cyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJi
YXIiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNl
JywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRy
aWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUn
LCAnImJhdCInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS5hdHRyaWJ1dGVOYW1l
c3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0uYXR0cmlidXRl
TmFtZScsICciYmF6IicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0
ZU5hbWVzcGFjZScsICdudWxsJyk7CisKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwor
ICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAg
c3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxFbGVtZW50
KCkgeworICAgIHZhciBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZpbHRlciByZXNw
ZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuJyk7CisKKyAgICAgICAgbXV0YXRpb25z
ID0gbnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihm
dW5jdGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKwor
ICAgICAgICBwYXRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9y
Zy8yMDAwL3N2ZycsICdwYXRoJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUocGF0aCwgeyBh
dHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsncGF0aExlbmd0aCddIH0pOworICAg
ICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdw
YXRoTGVuZ3RoJywgJzIwMCcpOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRobGVuZ3RoJywgJzIwMCcpOworCisgICAgICAgIHNl
dFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7Cisg
ICAgICAgIGRlYnVnKCcuLi5wYXRoTGVuZ3RoIHNob3VsZCBiZSByZWNlaXZlZC4nKTsKKworICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJwYXRoTGVuZ3RoIicpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICciaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAg
ICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0
KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBdHRyaWJ1dGVGaWx0ZXJOb25IVE1MRG9jdW1lbnQoKSB7
CisgICAgdmFyIHN2Z0RvYywgZGl2LCBwYXRoOworICAgIHZhciBvYnNlcnZlcjsKKworICAgIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0IGF0dHJpYnV0ZUZp
bHRlciByZXNwZWN0cyBjYXNlIHdpdGggbm9uLUhUTUwgZWxlbWVudHMuJyk7CisKKyAgICAgICAg
c3ZnRG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoJ2h0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycsICdzdmcnKTsKKyAgICAgICAgbXV0YXRpb25zID0g
bnVsbDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5j
dGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAg
ICAgICBkaXYgPSBzdmdEb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG9ic2VydmVy
Lm9ic2VydmUoZGl2LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydJRCcs
ICdpZCcsICdib29NJ10gfSk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0lEJywgJ0lEJyk7
CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2lkJyk7CisgICAgICAgIGRpdi5zZXRB
dHRyaWJ1dGUoJ2JheicsICdiYXonKTsKKyAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnYm9vTScs
ICdib29tJyk7CisgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ0JPT20nLCAnYm9vbScpOworCisg
ICAgICAgIHBhdGggPSBzdmdEb2MuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZycsICdwYXRoJyk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUocGF0aCwgeyBhdHRy
aWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsncGF0aExlbmd0aCddIH0pOworICAgICAg
ICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRo
TGVuZ3RoJywgJzIwMCcpOworICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZycsICdwYXRobGVuZ3RoJywgJzIwMCcpOworCisgICAgICAgIHNldFRp
bWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAg
ICAgIGRlYnVnKCcuLi5vbmx5IElELCBpZCwgYm9vTSwgcGF0aExlbmd0aCBzaG91bGQgYmUgcmVj
ZWl2ZWQuJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnNCcpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZScsICciSUQiJyk7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sxXS50eXBlJywgJyJhdHRyaWJ1dGVzIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWUnLCAnImlkIicp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdu
dWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMl0udHlwZScsICciYXR0cmlidXRl
cyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1syXS5hdHRyaWJ1dGVOYW1lJywgJyJi
b29NIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzJdLmF0dHJpYnV0ZU5hbWVzcGFj
ZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbM10udHlwZScsICciYXR0
cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1szXS5hdHRyaWJ1dGVOYW1l
JywgJyJwYXRoTGVuZ3RoIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzNdLmF0dHJp
YnV0ZU5hbWVzcGFjZScsICciaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJyk7CisKKyAgICAg
ICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1
bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwogdmFyIHRlc3RzID0gWwog
ICAgIHRlc3RCYXNpYywKICAgICB0ZXN0V3JvbmdUeXBlLApAQCAtNDQ2LDcgKzY0OSwxMSBAQCB2
YXIgdGVzdHMgPSBbCiAgICAgdGVzdE9sZFZhbHVlLAogICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVz
dGVkLAogICAgIHRlc3RPbGRWYWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMsCi0gICAgdGVz
dElETEF0dHJpYnV0ZQorICAgIHRlc3RJRExBdHRyaWJ1dGUsCisgICAgdGVzdEF0dHJpYnV0ZUZp
bHRlciwKKyAgICB0ZXN0QXR0cmlidXRlRmlsdGVyU3VidHJlZSwKKyAgICB0ZXN0QXR0cmlidXRl
RmlsdGVyTm9uSFRNTEVsZW1lbnQsCisgICAgdGVzdEF0dHJpYnV0ZUZpbHRlck5vbkhUTUxEb2N1
bWVudAogXTsKIHZhciB0ZXN0SW5kZXggPSAwOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtZXhjZXB0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKaW5kZXggNTM5
MDEyMGRhODkxMDUxZjUxNmUxOTgzOTQ0ZDY5MGI4YmJmYWI3Mi4uOWY2ZTM3YTkxMDZmMDYzODAw
YWRkMzNkN2JlMGUzMTJlMGQxOGIyNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRh
dGlvbi9vYnNlcnZlLWV4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1leGNlcHRpb25zLWV4cGVjdGVkLnR4dApAQCAtMTQsNiArMTQs
NyBAQCBQQVNTIG9ic2VydmVyLm9ic2VydmUodW5kZWZpbmVkLCB7YXR0cmlidXRlczogdHJ1ZX0p
IHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTk9UXwogUEFTUyBvYnNlcnZlci5vYnNlcnZlKGRvY3Vt
ZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlfSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJv
ZHksIHtjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlfSkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBvYnNlcnZl
ci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHthdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRh
T2xkVmFsdWU6IHRydWV9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIuCitQQVNTIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge2NoYXJh
Y3RlckRhdGE6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWyJpZCJdfSkgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtZXhjZXB0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWV4Y2VwdGlvbnMuaHRtbAppbmRleCBhNTI1YTQ5MmNlOTI1M2Q0NGMw
N2VjZjY2ZmNlZmRkYTY3YWE1N2EwLi5kNDY1N2I2ZGQ3YzJlMzMxMjgzZTI4OTI1Y2RmOTBjNWRm
NDYyMDU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtZXhj
ZXB0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1leGNl
cHRpb25zLmh0bWwKQEAgLTIzLDggKzIzLDcgQEAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICBz
aG91bGRUaHJvdygnb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1
ZX0pJyk7CiAgICAgc2hvdWxkVGhyb3coJ29ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwg
e2NoaWxkTGlzdDogdHJ1ZSwgYXR0cmlidXRlT2xkVmFsdWU6IHRydWV9KScpOwogICAgIHNob3Vs
ZFRocm93KCdvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHthdHRyaWJ1dGVzOiB0cnVl
LCBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IHRydWV9KScpOwotICAgIC8vIEZJWE1FOiBVbmNvbW1l
bnQgdGhlIGJlbG93IHdoZW4gYXR0cmlidXRlRmlsdGVyIGlzIHN1cHBvcnRlZC4KLSAgICAvL3No
b3VsZFRocm93KCdvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtjaGFyYWN0ZXJEYXRh
OiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsiaWQiXX0pJyk7CisgICAgc2hvdWxkVGhyb3coJ29i
c2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge2NoYXJhY3RlckRhdGE6IHRydWUsIGF0dHJp
YnV0ZUZpbHRlcjogWyJpZCJdfSknKTsKIH0KIAogZGVzY3JpcHRpb24oJ1Rlc3QgdGhhdCBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUgdGhyb3dzIGV4Y2VwdGlvbnMgYXBwcm9wcmlhdGVs
eScpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>