<?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>77574</bug_id>
          
          <creation_ts>2012-02-01 13:26:08 -0800</creation_ts>
          <short_desc>Avoid creating NamedNodeMap unnecessarily</short_desc>
          <delta_ts>2012-02-01 16:20:59 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>547324</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-01 13:26:08 -0800</bug_when>
    <thetext>Avoid creating NamedNodeMap unnecessarily</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547329</commentid>
    <comment_count>1</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-01 13:31:27 -0800</bug_when>
    <thetext>This is related to work I&apos;m doing for bug 75069.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547335</commentid>
    <comment_count>2</comment_count>
      <attachid>125007</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-01 13:34:23 -0800</bug_when>
    <thetext>Created attachment 125007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547346</commentid>
    <comment_count>3</comment_count>
      <attachid>125007</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-01 13:57:22 -0800</bug_when>
    <thetext>Comment on attachment 125007
Patch

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

&gt; Source/WebCore/dom/Element.h:220
&gt; +    NamedNodeMap* ensureAttributes() const;

I&apos;d call this one ensureUpdatedAttributes() to be consistent.

&gt; Source/WebCore/dom/Node.cpp:1836
&gt; -                NamedNodeMap* attrs = elem-&gt;attributes();
&gt; -                
&gt; +                NamedNodeMap* attrs = elem-&gt;attributeMap();
&gt; +

It seems dangerous to rely on the fact hasAttributes have updated the attributes. Given that updateInvalidAttributes should be fast when there are no updates required, I&apos;d prefer leaving as is (or replace it with updatedAttributes).

&gt; Source/WebCore/dom/Node.cpp:1923
&gt; -                NamedNodeMap *attrs = elem-&gt;attributes();
&gt; +                NamedNodeMap* attrs = elem-&gt;attributeMap();

Ditto.

&gt; Source/WebCore/dom/Node.cpp:1979
&gt; +        if (NamedNodeMap* attrs = toElement(this)-&gt;attributeMap()) {

Ditto.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:316
&gt; +    if (!node-&gt;isElementNode())
&gt; +        return true;
&gt; +
&gt; +    const NamedNodeMap* attributeMap = toElement(node)-&gt;updatedAttributes();
&gt;      if (!attributeMap || attributeMap-&gt;isEmpty())
&gt;          return true;

We can just call hasAttributes here.

&gt; Source/WebCore/editing/htmlediting.cpp:1168
&gt; +    // Neither element have attributes, so they are the same.

I don&apos;t think we need this comment.

&gt; Source/WebCore/xml/XPathFunctions.cpp:595
&gt; +        if (node-&gt;isElementNode() &amp;&amp; toElement(node)-&gt;hasAttributes())
&gt; +            languageAttribute = toElement(node)-&gt;attributeMap()-&gt;getAttributeItem(XMLNames::langAttr);

You&apos;re adding unnecessary updates of style and SVG animation attributes implicitly in hasAttributes. I don&apos;t think we should do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547347</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-01 13:59:21 -0800</bug_when>
    <thetext>In general, this refactoring looks great. It clarifies semantics in many call sites of attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547382</commentid>
    <comment_count>5</comment_count>
      <attachid>125007</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 14:41:25 -0800</bug_when>
    <thetext>Comment on attachment 125007
Patch

Attachment 125007 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11396581</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547425</commentid>
    <comment_count>6</comment_count>
      <attachid>125007</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-01 15:20:50 -0800</bug_when>
    <thetext>Comment on attachment 125007
Patch

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

&gt;&gt; Source/WebCore/dom/Element.h:220
&gt;&gt; +    NamedNodeMap* ensureAttributes() const;
&gt; 
&gt; I&apos;d call this one ensureUpdatedAttributes() to be consistent.

Fixed.

&gt;&gt; Source/WebCore/dom/Node.cpp:1836
&gt;&gt; +
&gt; 
&gt; It seems dangerous to rely on the fact hasAttributes have updated the attributes. Given that updateInvalidAttributes should be fast when there are no updates required, I&apos;d prefer leaving as is (or replace it with updatedAttributes).

I agree. I changed this pattern to &quot;if (NamedNodeMap* attrs = elem-&gt;updatedAttributes())&quot;. If is empty we will enter the conditional but not run any iteration in the loop inside.

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:316
&gt;&gt;          return true;
&gt; 
&gt; We can just call hasAttributes here.

Of course! :-) Fixed.

&gt;&gt; Source/WebCore/editing/htmlediting.cpp:1168
&gt;&gt; +    // Neither element have attributes, so they are the same.
&gt; 
&gt; I don&apos;t think we need this comment.

Fixed.

&gt;&gt; Source/WebCore/xml/XPathFunctions.cpp:595
&gt;&gt; +            languageAttribute = toElement(node)-&gt;attributeMap()-&gt;getAttributeItem(XMLNames::langAttr);
&gt; 
&gt; You&apos;re adding unnecessary updates of style and SVG animation attributes implicitly in hasAttributes. I don&apos;t think we should do this.

No. Previous call to node-&gt;attributes() (now known as ensureUpdatedAttributes()) would update style and SVG animation attributes.

I also rewrote the code to avoid using hasAttribute()/attributeMap().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547426</commentid>
    <comment_count>7</comment_count>
      <attachid>125030</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-01 15:21:12 -0800</bug_when>
    <thetext>Created attachment 125030
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547428</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-01 15:23:34 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 125007 [details])
&gt; Attachment 125007 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/11396581

It appears that you have to modify Source/WebKit/chromium/src/WebPageSerializerImpl.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547433</commentid>
    <comment_count>9</comment_count>
      <attachid>125033</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-01 15:28:20 -0800</bug_when>
    <thetext>Created attachment 125033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547468</commentid>
    <comment_count>10</comment_count>
      <attachid>125033</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 16:20:54 -0800</bug_when>
    <thetext>Comment on attachment 125033
Patch

Clearing flags on attachment: 125033

Committed r106515: &lt;http://trac.webkit.org/changeset/106515&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547469</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 16:20:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125007</attachid>
            <date>2012-02-01 13:34:23 -0800</date>
            <delta_ts>2012-02-01 15:21:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77574-20120201183424.patch</filename>
            <type>text/plain</type>
            <size>45416</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU0MmI1ZmI2Y2NkYjAw
MDE1MjE4NGFmYjEyMGQzNDJiZTdmMGU1YS4uYjFlNDAyM2FlODA2ZWNmMDhhNGExMjJmYzBkMjc0
MGM3ZTQxMmU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNiBAQAorMjAxMi0wMi0wMSAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIEF2b2lkIGNyZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtZXRob2Qg
RWxlbWVudDo6YXR0cmlidXRlcygpIHdhcyBiZWluZyB1c2VkIGZvciBtdWx0aXBsZSB0aGluZ3Mg
aW4gb3VyCisgICAgICAgIGNvZGViYXNlOiAoMSkgYXMgdGhlIGdldHRlciBmb3IgTmFtZWROb2Rl
TWFwIGV4cG9zZWQgdG8gRE9NLCAoMikgYXMgYSB3YXkgdG8gb3RoZXIgV2ViQ29yZQorICAgICAg
ICBjb2RlIGdldCB0aGUgImF0dHJpYnV0ZSBzdG9yYWdlIiAoY3VycmVudGx5IGluc2lkZSBOYW1l
ZE5vZGVNYXApLCBhbmQgKDMpIGFzIGEgd2F5IHRvCisgICAgICAgIGdldCB0aGUgYXR0cmlidXRl
IHN0b3JhZ2UgY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICBUaGlzIGNvbW1p
dCBzZXBhcmF0ZSB0aGUgam9icyBpbiBkaWZmZXJlbnQgZnVuY3Rpb25zOgorCisgICAgICAgIDEp
IGF0dHJpYnV0ZXMoKSBrZWVwcyBiZWluZyB0aGUgRE9NIGdldHRlciwgYW5kIGxvc2VzIGl0cyBi
b29sZWFuIHBhcmFtZXRlci4KKworICAgICAgICAyKSB1cGRhdGVkQXR0cmlidXRlcygpIHVwZGF0
ZXMgdGhlIGludmFsaWQgYXR0cmlidXRlcyBhbmQgcmV0dXJucyB0aGUgYXR0cmlidXRlCisgICAg
ICAgIHN0b3JhZ2UuIElmIHdlIGRvbid0IGhhdmUgb25lLCByZXR1cm4gMC4KKworICAgICAgICAz
KSBlbnN1cmVBdHRyaWJ1dGVzKCkgdXBkYXRlcyB0aGUgaW52YWxpZCBhdHRyaWJ1dGVzIGFuZCBm
b3JjZXMgdGhlCisgICAgICAgIGNyZWF0aW9uIG9mIGF0dHJpYnV0ZSBzdG9yYWdlIHRvIHJldHVy
bi4KKworICAgICAgICBUaGVyZSBpcyBhbHNvIGFub3RoZXIgd2F5IHRvIGdldCB0byB0aGUgYXR0
cmlidXRlIHN0b3JhZ2UgY3VycmVudGx5LCB2aWEKKyAgICAgICAgYXR0cmlidXRlTWFwKCksIHdo
aWNoIGRvZXNuJ3QgdXBkYXRlIHRoZSBhdHRyaWJ1dGVzIGZvciBwb3NzaWJsZSBjaGFuZ2VzIGlu
IFN0eWxlCisgICAgICAgIG9yIFNWRyBhdHRyaWJ1dGVzLiBJdCBzaG91bGQgYmUgdXNlZCB3aGVu
IHdlIGtub3cgd2UgZG9uJ3QgbmVlZCB0aG9zZSB1cGRhdGVzIG9yCisgICAgICAgIHdoZW4gdGhl
eSB3ZXJlIGp1c3QgZG9uZSwgbGlrZSBhZnRlciBnZXR0aW5nIHRydWUgcmV0dXJuIGZyb20gaGFz
QXR0cmlidXRlcygpLgorCisgICAgICAgIFRoaXMgc2VwYXJhdGlvbiBhbHNvIG1ha2VzIGVhc2ll
ciB0byBzcG90IGFuZCBmaXggc29tZSBwbGFjZXMgd2hlcmUgd2UgZG8gbm90CisgICAgICAgIG5l
ZWQgdG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZSBpZiBpdCBkb2Vzbid0IGV4aXN0Lgor
CisgICAgICAgIE5vdGUgdGhhdCB0aGUgbmV3IGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBp
biBOb2RlIGNsYXNzLCBzbyBDKysgY29kZSBtYW5pcHVsYXRpbmcKKyAgICAgICAgYXR0cmlidXRl
cyBzaG91bGQgY2FzdCB0byBFbGVtZW50LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBj
b21taXQgc2hvdWxkbid0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgZXhpc3RpbmcgY29kZS4KKwor
ICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vRGF0YXNldERP
TVN0cmluZ01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpn
ZXROYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjppdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRET01TdHJpbmdNYXA6OmNvbnRhaW5zKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcG9y
dE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpnZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlQXR0
cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVBdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVBdHRyaWJ1dGVNYXApOiBtYWRlIGNvbnN0IHRvIGJl
IHJldXNlZCBieSBlbnN1cmVBdHRyaWJ1dGUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IGRvbS9OYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpt
YXBzRXF1aXZhbGVudCk6IGhhdmluZyBubyBhdHRyaWJ1dGVzIGlzIGVxdWl2YWxlbnQgdG8KKyAg
ICAgICAgbm90IGhhdmluZyBhbiBhdHRyaWJ1dGUgc3RvcmFnZSBiZWNhdXNlIHRoZSBhdHRyaWJ1
dGUgc3RvcmFnZSBpcyBsYXppbHkgY3JlYXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0VxdWFsTm9kZSk6IGRvIG5vdCBmb3JjZSB0aGUgY3Jl
YXRpb24gb2YgYXR0cmlidXRlIHN0b3JhZ2UgdG8KKyAgICAgICAgY29tcGFyZSB0d28gbm9kZXMu
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UpOiB1c2UgYXR0cmli
dXRlTWFwKCkgc2luY2UgaGFzQXR0cmlidXRlcygpCisgICAgICAgIHJldHVybmluZyB0cnVlIGd1
YXJhbnRlZSBib3RoIHVwZGF0ZSBvZiBpbnZhbGlkIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyBhdHRy
aWJ1dGVzCisgICAgICAgIGV4aXN0ZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxvb2t1
cE5hbWVzcGFjZVVSSSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bG9va3VwTmFt
ZXNwYWNlUHJlZml4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9j
dW1lbnRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0VtcHR5Rm9udFRhZyk6CisgICAgICAgICogZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6aXNSZW1vdmFibGVCbG9jayk6IGRvIG5vdCBjcmVhdGUgdGhlIGF0dHJp
YnV0ZSBzdG9yYWdlCisgICAgICAgIHVubmVjZXNzYXJpbHkuIFVzZSBpc0VsZW1lbnROb2RlKCkg
ZXhwbGljaXRseSB0byBpZGVudGlmeSBub24tRWxlbWVudCBub2Rlcy4KKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aGlnaGVzdFZpc3VhbGx5RXF1aXZhbGVudERpdkJlbG93Um9vdCk6CisgICAgICAgICogZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6IGRvIG5vdCBjcmVhdGUgdGhlIGF0dHJpYnV0ZSBzdG9y
YWdlCisgICAgICAgIHVubmVjZXNzYXJpbHkuCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmVJZGVudGljYWxFbGVtZW50cyk6IGRvIG5vdCBj
cmVhdGUgdGhlIGF0dHJpYnV0ZSBzdG9yYWdlCisgICAgICAgIHVubmVjZXNzYXJpbHkuIFVzZSBt
YXBzRXF1aXZhbGVudCgpIGZvciBjb21wYXJpbmcgdGhlIGF0dHJpYnV0ZXMuCisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKTogZG8g
bm90IGNyZWF0ZSB0aGUgYXR0cmlidXRlIHN0b3JhZ2UgdW5uZWNlc3NhcmlseS4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6IGhhc0F0dHJpYnV0ZXMoKSB3
aWxsIGF2b2lkIGNyZWF0aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgc3RvcmFnZSB1bm5lY2Vz
c2FyaWx5LgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAg
KiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJh
bUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6aXNVUkxB
dHRyaWJ1dGUpOiBkbyBub3QgY3JlYXRlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZQorICAgICAgICB1
bm5lY2Vzc2FyaWx5LgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJp
YnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCk6IHVzZQorICAgICAgICBlbnN1cmVBdHRyaWJ1dGVz
KCkgc2luY2Ugd2Ugd2lsbCBhZGQgbmV3IGF0dHJpYnV0ZXMuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JBdHRyaWJ1dGVTdHlsZXMpOiBk
byBub3QgY3JlYXRlIHRoZQorICAgICAgICBhdHRyaWJ1dGUgc3RvcmFnZSB1bm5lY2Vzc2FyaWx5
LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVz
KToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKTogZG8gbm90IGFzc3VtZSBhdHRyaWJ1dGVNYXAgd2ls
bCBleGlzdC4KKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3lu
Y2hyb25pemVyLmg6IHVzZSBlbnN1cmVBdHRyaWJ1dGVzKCkgc2luY2UKKyAgICAgICAgd2Ugd2ls
bCBhZGQgbmV3IGF0dHJpYnV0ZXMuCisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5MYW5nOjpldmFsdWF0ZSk6IGRvIG5vdCBjcmVh
dGUgdGhlIGF0dHJpYnV0ZSBzdG9yYWdlCisgICAgICAgIHVubmVjZXNzYXJpbHkuCisgICAgICAg
ICogeG1sL1hQYXRoTm9kZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Tm9kZVNl
dDo6dHJhdmVyc2FsU29ydCk6CisgICAgICAgICogeG1sL1hQYXRoU3RlcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOiB1c2UgaXNFbGVtZW50Tm9kZSgp
IGluc3RlYWQgb2YgY29tcGFyaW5nCisgICAgICAgIG5vZGVUeXBlKCkgbWFudWFsbHkuIERvIG5v
dCBjcmVhdGV0aGUgYXR0cmlidXRlIHN0b3JhZ2UgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOiBkbyBub3QgY3JlYXRlIHRo
ZSBhdHRyaWJ1dGUKKyAgICAgICAgc3RvcmFnZSB1bm5lY2Vzc2FyaWx5LgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOiBEaXR0by4KKyAgICAgICAgKiB4bWwv
cGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVCdWls
ZGVyOjpYTUxUcmVlQnVpbGRlcik6IERpdHRvLgorCiAyMDEyLTAyLTAxICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRlYnVn
Z2VyIHJlcG9ydHMgd3Jvbmcgc291cmNlcyB3aGVuIHBhdXNlZCBpbiBpbmxpbmUgc2NyaXB0IG9u
IHBhZ2UgcmVsb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGNjZDlmNmE5M2I5MzRiYzdlYmU2YTdmMTJm
ZWU5Njg4Mzg3MDkxOTEuLmJkOTYzMGY1YzA4NjlkMDZlYTZjNjZlYTYxOTY4OWE5NGYwZDYyNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMDEgIENhaW8gTWFyY2Vs
byBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBBdm9pZCBjcmVhdGluZyBOYW1lZE5vZGVNYXAgdW5uZWNlc3NhcmlseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NzQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5j
cHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6YXR0cmlidXRlTmFtZXMpOiB1c2UgdXBkYXRlQXR0
cmlidXRlcygpLgorCiAyMDEyLTAxLTMxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBUcnkgdG8gZml4IFF0IGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAppbmRleCA4MjA1YWYwMzljYTljODNiYTljNmI0NzAzOTFmOTk4NWVjZmJl
ZWE0Li4zNjc3ZmNmNzliMDAyYjQ0ZTdlMDJkN2FlMGMwMzVhNzIzYjg1ZjNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNzA3LDcgKzcwNyw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQq
IGUsIFBzZXVkb0lkJiBkCiAgICAgaWYgKHNlbC0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOwogCi0g
ICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPmF0dHJpYnV0ZXModHJ1ZSk7Cisg
ICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7
CiAgICAgICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCmluZGV4IGUwZDg3NWRj
YmIwZDdiZTYwNDdmMTdmM2ExMTFlZjU5MTFmMGU4YjUuLmRmZjBhZDc1MDcyMDY3ZTU1NmNlMWUy
ODYxNDUxMjQyN2UxMzBjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmRl
cmVmKCkKIAogdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyhWZWN0b3I8U3RyaW5n
PiYgbmFtZXMpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBtX2VsZW1lbnQt
PmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBtX2Vs
ZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKGF0dHJpYnV0ZU1hcCkgewogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTE1NSw3ICsxNTUsNyBA
QCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKFZlY3RvcjxTdHJpbmc+JiBuYW1l
cykKIAogU3RyaW5nIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbV9lbGVtZW50LT5hdHRyaWJ1
dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbV9lbGVtZW50LT51
cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlmIChhdHRyaWJ1dGVNYXApIHsKICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYXR0cmlidXRlTWFwLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xNzAsNyArMTcwLDcgQEAgU3RyaW5n
IERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKQogCiBib29sIERh
dGFzZXRET01TdHJpbmdNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBO
YW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsK
KyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJp
YnV0ZXMoKTsKICAgICBpZiAoYXR0cmlidXRlTWFwKSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGF0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMDk2YTM4ZWU4
YjViNTYzMjY1Y2UzMzllMWZjMmU2MjE5ODliZjYxNC4uMTNkNDUwMTBjMDQ5MTExNGYwMTA4ODJh
NDMxOTI2NTExYTVjODhiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04NDEsNyArODQx
LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6aW1wb3J0Tm9kZShOb2RlKiBpbXBvcnRl
ZE5vZGUsIGJvb2wgZGVlcCwgRXhjZXB0aW9uQ28KICAgICAgICAgaWYgKGVjKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IG9sZEVsZW1lbnQt
PmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBvbGRFbGVt
ZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgICAgICBpZiAoYXR0cnMpIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IDkxZDg2NjNhYzA1OGNhOTAyNDRlM2JhZDlkNTQ1MGQwMWU2YjUzMDEuLjVhYWQyZTc5Mjhm
NzM1NmQ1M2IwMzE1NjkwM2VmOWFiNGQ4ZjRiMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAg
LTYxNiwxNCArNjE2LDE0IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKIAogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/
IG5hbWUubG93ZXIoKSA6IG5hbWU7CiAKLSAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1dGVzKGZh
bHNlKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFsc2UpOworICAgIHNpemVf
dCBpbmRleCA9IGVuc3VyZUF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2Fs
TmFtZSwgZmFsc2UpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0g
bm90Rm91bmQgPyBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOwogICAgIHNldEF0
dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6
OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGF0dHJpYnV0ZXMoZmFsc2Up
LT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlKTsKKyAgICBzZXRBdHRy
aWJ1dGVJbnRlcm5hbChlbnN1cmVBdHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChu
YW1lKSwgbmFtZSwgdmFsdWUpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1
dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC03NzUsMTQgKzc3NSw3IEBAIHZvaWQgRWxlbWVudDo6
cGFyc2VyU2V0QXR0cmlidXRlTWFwKFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBsaXN0LCBGcmFn
bWVudFNjcmlwCiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlcygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFpc1N0eWxlQXR0cmlidXRlVmFsaWQoKSkKLSAgICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1
dGUoKTsKLQotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKCFhcmVTVkdBdHRyaWJ1dGVzVmFsaWQo
KSkKLSAgICAgICAgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoYW55UU5hbWUoKSk7Ci0jZW5k
aWYKLQorICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7CiAgICAgcmV0dXJuIG1fYXR0cmli
dXRlTWFwICYmIG1fYXR0cmlidXRlTWFwLT5sZW5ndGgoKTsKIH0KIApAQCAtMTQyMiw3ICsxNDE1
LDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0
dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8
QXR0cj4oYXR0cmlidXRlcyhmYWxzZSktPnNldE5hbWVkSXRlbShhdHRyLCBlYykpOworICAgIHJl
dHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEF0dHI+KGVuc3VyZUF0dHJpYnV0ZXMoKS0+c2V0TmFt
ZWRJdGVtKGF0dHIsIGVjKSk7CiB9CiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQzMSw3ICsx
NDI0LDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0
ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJf
Y2FzdDxBdHRyPihhdHRyaWJ1dGVzKGZhbHNlKS0+c2V0TmFtZWRJdGVtKGF0dHIsIGVjKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oZW5zdXJlQXR0cmlidXRlcygpLT5z
ZXROYW1lZEl0ZW0oYXR0ciwgZWMpKTsKIH0KIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50Ojpy
ZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQ0
Nyw3ICsxNDQwLDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVO
b2RlKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgQVNTRVJUKGRvY3VtZW50
KCkgPT0gYXR0ci0+ZG9jdW1lbnQoKSk7CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gYXR0
cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0
ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTQ5Myw3ICsx
NDg2LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE4KIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVt
ZW50OjpnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJz
ID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4g
MDsKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlz
KSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CkBAIC0xNTAyLDcgKzE0OTUsNyBAQCBQYXNzUmVmUHRy
PEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGUoY29uc3QgU3RyaW5nJiBuYW1lKQogCiBQ
YXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCiB7Ci0gICAgTmFtZWROb2Rl
TWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9
IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oYXR0cnMtPmdldE5hbWVkSXRl
bShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpKTsKQEAg
LTE1MTAsNyArMTUwMyw3IEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRl
Tm9kZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTCiAKIGJvb2wgRWxlbWVu
dDo6aGFzQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJz
ID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTE1MjIsNyArMTUxNSw3IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRl
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIAogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVO
Uyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNv
bnN0CiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CisgICAg
TmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRy
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBhdHRycy0+Z2V0QXR0cmlidXRl
SXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwpA
QCAtMTcxMiw4ICsxNzA1LDcgQEAgdm9pZCBFbGVtZW50OjpjYW5jZWxGb2N1c0FwcGVhcmFuY2VV
cGRhdGUoKQogCiB2b2lkIEVsZW1lbnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMoKQogewotICAgIC8v
IE5vcm1hbGl6ZSBhdHRyaWJ1dGVzLgotICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBhdHRyaWJ1
dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSB1cGRhdGVkQXR0cmlidXRlcygp
OwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5k
ZXggNTRlMTcxNjJlYjAxYmJjNjJmN2I4ZWQyZTQ4YWU2OWJiMzAzMTZkMi4uMDM5OWM3MjQ3N2Zk
Y2NkMmY3OTVlYTdkNGZlOWFmZWJmYzg1ZTBmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yMTQs
NyArMjE0LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Qm9vbGVhbkF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sKTsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlcyhib29sIHJlYWRvbmx5ID0gZmFsc2UpIGNvbnN0OworICAgIC8vIEZvciBleHBvc2luZyB0
byBET00gb25seS4KKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVy
biBlbnN1cmVBdHRyaWJ1dGVzKCk7IH0KKworICAgIE5hbWVkTm9kZU1hcCogZW5zdXJlQXR0cmli
dXRlcygpIGNvbnN0OworICAgIE5hbWVkTm9kZU1hcCogdXBkYXRlZEF0dHJpYnV0ZXMoKSBjb25z
dDsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBhdHRyaWJ1dGUg
aXMgYWRkZWQsIGNoYW5nZWQgb3IgcmVtb3ZlZC4KICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CkBAIC0yMjMs
MTAgKzIyNywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFz
c093blB0cjxOYW1lZE5vZGVNYXA+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAg
ICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZU1hcC5nZXQoKTsgfQotICAgIE5hbWVkTm9kZU1hcCogZW5zdXJlQXR0cmlidXRlTWFwKCk7Cisg
ICAgTmFtZWROb2RlTWFwKiBlbnN1cmVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVNYXAgPyBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpIDogMDsgfQotICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gYXR0
cmlidXRlcygpLT5hdHRyaWJ1dGVEYXRhKCk7IH0KKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSog
ZW5zdXJlQXR0cmlidXRlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGVuc3VyZUF0dHJpYnV0ZXMoKS0+
YXR0cmlidXRlRGF0YSgpOyB9CiAKICAgICB2b2lkIHNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudChj
b25zdCBFbGVtZW50Jik7CiAKQEAgLTQwOSw2ICs0MTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSFRN
TENvbGxlY3Rpb24qIGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlKTsK
IAogcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCkgY29uc3Q7CisK
ICAgICB2b2lkIHNjcm9sbEJ5VW5pdHMoaW50IHVuaXRzLCBTY3JvbGxHcmFudWxhcml0eSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKQEAgLTUwMCwyNSArNTA2LDIyIEBAIGlubGluZSBFbGVtZW50KiBOb2RlOjpwYXJl
bnRFbGVtZW50KCkgY29uc3QKICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50
Tm9kZSgpID8gdG9FbGVtZW50KHBhcmVudCkgOiAwOwogfQogCi1pbmxpbmUgTmFtZWROb2RlTWFw
KiBFbGVtZW50OjphdHRyaWJ1dGVzKGJvb2wgcmVhZG9ubHkpIGNvbnN0CitpbmxpbmUgTmFtZWRO
b2RlTWFwKiBFbGVtZW50OjplbnN1cmVBdHRyaWJ1dGVzKCkgY29uc3QKIHsKLSAgICBpZiAoIWlz
U3R5bGVBdHRyaWJ1dGVWYWxpZCgpKQotICAgICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpOwot
Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoIWFyZVNWR0F0dHJpYnV0ZXNWYWxpZCgpKQotICAg
ICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgpKTsKLSNlbmRpZgorICAg
IHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7CisgICAgcmV0dXJuIGVuc3VyZUF0dHJpYnV0ZU1h
cCgpOworfQogCi0gICAgaWYgKCFyZWFkb25seSAmJiAhbV9hdHRyaWJ1dGVNYXApCi0gICAgICAg
IGNyZWF0ZUF0dHJpYnV0ZU1hcCgpOworaW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6dXBk
YXRlZEF0dHJpYnV0ZXMoKSBjb25zdAoreworICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7
CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLmdldCgpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVt
ZW50OjpzZXRBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCiB7Ci0g
ICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gb3RoZXIuYXR0cmlidXRlcyh0cnVl
KSkKLSAgICAgICAgYXR0cmlidXRlcyhmYWxzZSktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZU1h
cCk7CisgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gb3RoZXIudXBkYXRlZEF0
dHJpYnV0ZXMoKSkKKyAgICAgICAgZW5zdXJlQXR0cmlidXRlcygpLT5zZXRBdHRyaWJ1dGVzKCph
dHRyaWJ1dGVNYXApOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKQpAQCAt
NTk4LDEzICs2MDEsMjQgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRBdHRyaWJ1dGUoZG9jdW1lbnQoKS0+aWRB
dHRyaWJ1dGVOYW1lKCksIHZhbHVlKTsKIH0KIAotaW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVu
dDo6ZW5zdXJlQXR0cmlidXRlTWFwKCkKK2lubGluZSBOYW1lZE5vZGVNYXAqIEVsZW1lbnQ6OmVu
c3VyZUF0dHJpYnV0ZU1hcCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2F0dHJpYnV0ZU1hcCkKICAg
ICAgICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLmdl
dCgpOwogfQogCitpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygp
IGNvbnN0Cit7CisgICAgaWYgKCFpc1N0eWxlQXR0cmlidXRlVmFsaWQoKSkKKyAgICAgICAgdXBk
YXRlU3R5bGVBdHRyaWJ1dGUoKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKCFhcmVTVkdB
dHRyaWJ1dGVzVmFsaWQoKSkKKyAgICAgICAgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoYW55
UU5hbWUoKSk7CisjZW5kaWYKK30KKwogaW5saW5lIEVsZW1lbnQqIGZpcnN0RWxlbWVudENoaWxk
KGNvbnN0IENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcikKIHsKICAgICBBU1NFUlRfQVJHKGNvbnRh
aW5lciwgY29udGFpbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5v
ZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggMDEz
NDQ0MTRlMzVkNDZlNzAxMWQwZTcwZDI2OGEyYjIwZWQxMjEzMC4uN2Y2MjI5Nzc1MzZhNzg1Mzhj
ZDRiZTVhMTMzODkxZTI4ZWYwM2MzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05h
bWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAK
QEAgLTMwNSw3ICszMDUsNyBAQCB2b2lkIE5hbWVkTm9kZU1hcDo6cmVwbGFjZUF0dHJpYnV0ZShz
aXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaQogYm9vbCBOYW1lZE5v
ZGVNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXApIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlck1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gaXNFbXB0eSgpOwogICAgIAogICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwogICAg
IGlmIChsZW4gIT0gb3RoZXJNYXAtPmxlbmd0aCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGNkNzcw
NzQxNjNkZWY4NTUzMTRmNmJmYWJlNjE1MDRiYjQ3YzNmYTYuLjdjNmRmYTc5MjdhNjM2YWRlZWJj
ODNmNzcwMTIzZDg4ZWZmY2M3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE3NjQsMTQgKzE3NjQs
MTYgQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9kZShOb2RlKiBvdGhlcikgY29uc3QKICAgICBpZiAo
bm9kZVZhbHVlKCkgIT0gb3RoZXItPm5vZGVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdGhpcy0+YXR0cmlidXRlcygp
OwotICAgIE5hbWVkTm9kZU1hcCogb3RoZXJBdHRyaWJ1dGVzID0gb3RoZXItPmF0dHJpYnV0ZXMo
KTsKLSAgICAKLSAgICBpZiAoIWF0dHJpYnV0ZXMgJiYgb3RoZXJBdHRyaWJ1dGVzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWF0dHJpYnV0ZXMt
Pm1hcHNFcXVpdmFsZW50KG90aGVyQXR0cmlidXRlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlcyA9IHRvRWxlbWVudCh0aGlzKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgTmFt
ZWROb2RlTWFwKiBvdGhlckF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQob3RoZXIpLT51cGRhdGVkQXR0
cmlidXRlcygpOworCisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYmICFhdHRyaWJ1dGVzLT5tYXBz
RXF1aXZhbGVudChvdGhlckF0dHJpYnV0ZXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmIChvdGhlckF0dHJpYnV0ZXMgJiYgIW90aGVyQXR0cmlidXRlcy0+bWFwc0Vx
dWl2YWxlbnQoYXR0cmlidXRlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
ICAgIAogICAgIE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIE5vZGUqIG90aGVyQ2hp
bGQgPSBvdGhlci0+Zmlyc3RDaGlsZCgpOwpAQCAtMTgzMCw4ICsxODMyLDggQEAgYm9vbCBOb2Rl
Ojppc0RlZmF1bHROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUklNYXli
ZUVtcHR5KSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLT5uYW1lc3BhY2VVUkko
KSA9PSBuYW1lc3BhY2VVUkk7CiAKICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGVz
KCkpIHsKLSAgICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbS0+YXR0cmli
dXRlcygpOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCog
YXR0cnMgPSBlbGVtLT5hdHRyaWJ1dGVNYXAoKTsKKwogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAg
ICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0xOTE4LDcgKzE5MjAsNyBAQCBTdHJpbmcgTm9kZTo6bG9va3VwTmFt
ZXNwYWNlVVJJKGNvbnN0IFN0cmluZyAmcHJlZml4KSBjb25zdAogICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLT5uYW1lc3BhY2VVUkkoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KGVsZW0tPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCAq
YXR0cnMgPSBlbGVtLT5hdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFw
KiBhdHRycyA9IGVsZW0tPmF0dHJpYnV0ZU1hcCgpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykg
ewogICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgKmF0dHIgPSBhdHRycy0+YXR0cmlidXRl
SXRlbShpKTsKQEAgLTE5NzQsMTUgKzE5NzYsMTQgQEAgU3RyaW5nIE5vZGU6Omxvb2t1cE5hbWVz
cGFjZVByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IEVsZW0K
ICAgICAgICAgcmV0dXJuIHByZWZpeCgpOwogICAgIAogICAgIGlmIChoYXNBdHRyaWJ1dGVzKCkp
IHsKLSAgICAgICAgTmFtZWROb2RlTWFwICphdHRycyA9IGF0dHJpYnV0ZXMoKTsKLSAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykg
ewotICAgICAgICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7
CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gdG9FbGVtZW50KHRoaXMpLT5hdHRy
aWJ1dGVNYXAoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJz
LT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0
cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhdHRy
LT5wcmVmaXgoKSA9PSB4bWxuc0F0b20gJiYKLSAgICAgICAgICAgICAgICBhdHRyLT52YWx1ZSgp
ID09IF9uYW1lc3BhY2VVUkkgJiYKLSAgICAgICAgICAgICAgICBvcmlnaW5hbEVsZW1lbnQtPmxv
b2t1cE5hbWVzcGFjZVVSSShhdHRyLT5sb2NhbE5hbWUoKSkgPT0gX25hbWVzcGFjZVVSSSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYXR0ci0+bG9jYWxOYW1lKCk7CisgICAgICAgICAgICAgICAg
aWYgKGF0dHItPnByZWZpeCgpID09IHhtbG5zQXRvbSAmJiBhdHRyLT52YWx1ZSgpID09IF9uYW1l
c3BhY2VVUkkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG9yaWdpbmFsRWxlbWVudC0+bG9v
a3VwTmFtZXNwYWNlVVJJKGF0dHItPmxvY2FsTmFtZSgpKSA9PSBfbmFtZXNwYWNlVVJJKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYXR0ci0+bG9jYWxOYW1lKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yMTIxLDcgKzIxMjIsNyBAQCB1bnNpZ25lZCBz
aG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2RlKiBvdGhlck5vZGUpCiAgICAg
aWYgKGF0dHIxICYmIGF0dHIyICYmIHN0YXJ0MSA9PSBzdGFydDIgJiYgc3RhcnQxKSB7CiAgICAg
ICAgIC8vIFdlIGFyZSBjb21wYXJpbmcgdHdvIGF0dHJpYnV0ZXMgb24gdGhlIHNhbWUgbm9kZS4g
IENyYXdsIG91ciBhdHRyaWJ1dGUgbWFwCiAgICAgICAgIC8vIGFuZCBzZWUgd2hpY2ggb25lIHdl
IGhpdCBmaXJzdC4KLSAgICAgICAgTmFtZWROb2RlTWFwKiBtYXAgPSBhdHRyMS0+b3duZXJFbGVt
ZW50KCktPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gYXR0
cjEtPm93bmVyRWxlbWVudCgpLT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBtYXAtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBk
ZXRlcm1pbmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1l
IGZvciBib3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVuIGFuIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA0MTczNWM1NTgyNDk3NzI5N2Y0NTA2
Y2JkMDgyNzI4OGY1MmM5NjJmLi40MzgyMGM0YzJkOWU4NTQ0OGM1ZDdlNDYyOTNmMGMxOWJiY2Iy
NzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApA
QCAtNzMsOCArNzMsNyBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSAq
bm9kZSkKIGVudW0gU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHsgQWxsb3dOb25FbXB0eVN0
eWxlQXR0cmlidXRlLCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkgfTsKIHN0YXRpYyBib29s
IGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCog
ZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0cmlidXRl
QmVFbXB0eSkKIHsKLSAgICBjb25zdCBib29sIHJlYWRvbmx5ID0gdHJ1ZTsKLSAgICBOYW1lZE5v
ZGVNYXAqIG1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMocmVhZG9ubHkpOworICAgIE5hbWVkTm9k
ZU1hcCogbWFwID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIW1hcCB8
fCBtYXAtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTEwOSw3ICsxMDgs
NyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBOb2RlICpub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBFbGVtZW50ICplbGVtID0gc3RhdGljX2Nhc3Q8
Y29uc3QgRWxlbWVudCAqPihub2RlKTsKLSAgICBOYW1lZE5vZGVNYXAgKm1hcCA9IGVsZW0tPmF0
dHJpYnV0ZXModHJ1ZSk7IC8vIHRydWUgZm9yIHJlYWQtb25seQorICAgIE5hbWVkTm9kZU1hcCog
bWFwID0gZWxlbS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIW1hcCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIG1hcC0+aXNFbXB0eSgpIHx8IChtYXAtPmxlbmd0aCgp
ID09IDEgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NT
dHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCmluZGV4IGJlNWRiYWM4MDI0YWQ0NWNlMWZmMmQ3OTBiZWFlNWFhYzhhMzk5ZTguLjky
NzcwYTNhOWMzZTczYzllZTI4OTU5MGNmNTE4YTZlMjM2MmNkYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0zMDgsNyArMzA4LDEw
IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2soY29uc3QgTm9k
ZSogbm9kZSkKICAgICBpZiAoKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgp
ICE9IHBhcmVudE5vZGUtPmxhc3RDaGlsZCgpKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShkaXZUYWcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZU1hcCA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0
dHJpYnV0ZU1hcCA9IHRvRWxlbWVudChub2RlKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBp
ZiAoIWF0dHJpYnV0ZU1hcCB8fCBhdHRyaWJ1dGVNYXAtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCBmNDBjMTVjYjRiN2EyNmMy
MGU3ZjI5MjY2MWI5YmVkNGRiNTA0MTMzLi5lNjQ2YjUxZjIyYWFlYTgxZDdjZjA3ZDM3M2U5ODhi
ZDY5MTM1NjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGlj
IEVsZW1lbnQqIGhpZ2hlc3RWaXN1YWxseUVxdWl2YWxlbnREaXZCZWxvd1Jvb3QoRWxlbWVudCog
c3RhcnRCbG9jaykKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJldHVybiBhIHJvb3Qgbm9kZSAo
aWYgaXQgaGFwcGVucyB0byBiZSBhIGRpdiwgZS5nLiwgaW4gYSBkb2N1bWVudCBmcmFnbWVudCkg
YmVjYXVzZSB0aGVyZSBhcmUgbm8KICAgICAvLyBzaWJsaW5ncyBmb3IgdXMgdG8gYXBwZW5kIHRv
LgogICAgIHdoaWxlICghY3VyQmxvY2stPm5leHRTaWJsaW5nKCkgJiYgY3VyQmxvY2stPnBhcmVu
dEVsZW1lbnQoKS0+aGFzVGFnTmFtZShkaXZUYWcpICYmIGN1ckJsb2NrLT5wYXJlbnRFbGVtZW50
KCktPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMg
PSBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICBO
YW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpLT51cGRh
dGVkQXR0cmlidXRlcygpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmJiAhYXR0cmlidXRlcy0+
aXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGN1ckJsb2NrID0gY3VyQmxv
Y2stPnBhcmVudEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1
bXVsYXRvci5jcHAKaW5kZXggYzdkMjcwZmM3MjYwMjdjYjUzNTM1MmZjMjNhYjk3OTZhYzU1ZTUz
Ny4uNTIyNmIyMTRjMjU4MTE3NjA5MzVjNTY2OTY0ZTc2MzBmMDJmOWQxOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKQEAgLTM0OSwxMCArMzQ5LDEy
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYg
b3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiB7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVs
ZW1lbnQsIG5hbWVzcGFjZXMpOwogCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxl
bWVudC0+YXR0cmlidXRlcygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxl
bmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0g
ICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1
dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBl
bGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIGlmIChhdHRyaWJ1dGVzKSB7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgYXBwZW5k
QXR0cmlidXRlKG91dCwgZWxlbWVudCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5h
bWVzcGFjZXMpOworICAgIH0KIAogICAgIC8vIEdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gc3ViY2xh
c3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJpYnV0ZXMuCiAgICAgYXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcAppbmRleCA0ZTZkNTI4MTQ0YmMyZDk4ZmNhYTExYmYzNWRjYTU0YjRkZGU0ZmUy
Li5jM2VkYjc3YjAyN2I4YTExZmZhNDkxZDEzZjc5ODI4YzA2MDMwOTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMTE1NywyMCArMTE1NywxNSBAQCBib29sIGFy
ZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqIGZpcnN0LCBjb25zdCBOb2RlKiBzZWNvbmQp
CiAgICAgaWYgKCF0b0VsZW1lbnQoZmlyc3QpLT50YWdRTmFtZSgpLm1hdGNoZXModG9FbGVtZW50
KHNlY29uZCktPnRhZ1FOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOYW1l
ZE5vZGVNYXAqIGZpcnN0TWFwID0gdG9FbGVtZW50KGZpcnN0KS0+YXR0cmlidXRlcygpOwotICAg
IE5hbWVkTm9kZU1hcCogc2Vjb25kTWFwID0gdG9FbGVtZW50KHNlY29uZCktPmF0dHJpYnV0ZXMo
KTsKLSAgICB1bnNpZ25lZCBmaXJzdExlbmd0aCA9IGZpcnN0TWFwLT5sZW5ndGgoKTsKKyAgICBO
YW1lZE5vZGVNYXAqIGZpcnN0TWFwID0gdG9FbGVtZW50KGZpcnN0KS0+dXBkYXRlZEF0dHJpYnV0
ZXMoKTsKKyAgICBOYW1lZE5vZGVNYXAqIHNlY29uZE1hcCA9IHRvRWxlbWVudChzZWNvbmQpLT51
cGRhdGVkQXR0cmlidXRlcygpOwogCi0gICAgaWYgKGZpcnN0TGVuZ3RoICE9IHNlY29uZE1hcC0+
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmaXJzdExlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRl
ID0gZmlyc3RNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgIEF0dHJpYnV0ZSogc2Vjb25k
QXR0cmlidXRlID0gc2Vjb25kTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZS0+bmFtZSgp
KTsKLSAgICAgICAgaWYgKCFzZWNvbmRBdHRyaWJ1dGUgfHwgYXR0cmlidXRlLT52YWx1ZSgpICE9
IHNlY29uZEF0dHJpYnV0ZS0+dmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgaWYgKGZpcnN0TWFwKQorICAgICAgICByZXR1cm4gZmlyc3RNYXAtPm1hcHNFcXVp
dmFsZW50KHNlY29uZE1hcCk7CisgICAgaWYgKHNlY29uZE1hcCkKKyAgICAgICAgcmV0dXJuIHNl
Y29uZE1hcC0+bWFwc0VxdWl2YWxlbnQoZmlyc3RNYXApOwogCisgICAgLy8gTmVpdGhlciBlbGVt
ZW50IGhhdmUgYXR0cmlidXRlcywgc28gdGhleSBhcmUgdGhlIHNhbWUuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBjNjQ0MWU2MzAwZTllNWYz
ZTgzN2RhMTBkZmQxMDI1Y2Q0YTFjNmNkLi5hNTQ4MmFmMjM0YjY0YmYzMDJkZGE5YzFiMjcxOTg5
NTRjOTA3YjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC0xMDQsNyArMTA0LDkg
QEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgYmFz
ZVVSTCkKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICE9IGVuZDsgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAg
ICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZS0+YXR0cmlidXRlcygpOworICAgICAgICAgICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAg
ICAgICAgIGlmICghYXR0cmlidXRlcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwpA
QCAtMjg3LDggKzI4OSw4IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50CiAgICAgY29uc3QgYm9v
bCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCk7
CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIDApOwogCi0gICAgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwotICAgIGNvbnN0IHVuc2lnbmVk
IGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgY29uc3QgdW5zaWduZWQg
bGVuZ3RoID0gYXR0cmlidXRlcyA/IGF0dHJpYnV0ZXMtPmxlbmd0aCgpIDogMDsKICAgICBjb25z
dCBib29sIHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSA9IGVsZW1lbnQtPmlzSFRNTEVsZW1l
bnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBhZGREaXNwbGF5SW5saW5lKTsKICAgICBjb25z
dCBib29sIHNob3VsZE92ZXJyaWRlU3R5bGVBdHRyID0gc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5s
aW5lIHx8IHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZShlbGVtZW50KTsKICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC04MjIsNyArODI0LDcgQEAgc3Rh
dGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBo
LCBjb25zdCBTdHJpbmcmIHN0cmkKIAogYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlICpub2Rl
KQogewotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFub2RlLT5oYXNUYWdOYW1l
KGRpdlRhZykgfHwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5hdHRyaWJ1dGVzKCktPmxl
bmd0aCgpKQorICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFub2RlLT5oYXNUYWdO
YW1lKGRpdlRhZykgfHwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5oYXNBdHRyaWJ1dGVz
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAobm9kZS0+Y2hpbGROb2Rl
Q291bnQoKSA9PSAxICYmIChub2RlLT5maXJzdENoaWxkKCktPmlzVGV4dE5vZGUoKSB8fCAobm9k
ZS0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxkKCkpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bWJlZEVsZW1lbnQuY3BwCmluZGV4IDA4YzE1ZTkyNTA2NmQyZjllMGNlYTQ4ZmI4N2IyODdiM2Ey
NTg3MmIuLjMwOWFhZmUwNTVhM2ExYmY0ZjQ1YjE1ZWY5MmIxMjc0NTE4OGYwNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHZv
aWQgSFRNTEVtYmVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogCiB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcmFtZXRlcnNGb3JQbHVnaW4oVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKIHsKLSAgICBO
YW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0aGlzLT5hdHRyaWJ1dGVzKHRydWUpOworICAgIE5h
bWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFh
dHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAKaW5kZXggOTI1Mjc1ZjY3MWQ0NzE2NTk4YWUyOWI0MGU2MDIxNmJlODEz
Y2U0Yi4uNTkwZDY5Yjk4YjI0Yzk2YjcwNzQxMWNiNWQ4NzAyM2EzZTk4OWMyMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2
b2lkIEhUTUxPYmplY3RFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBWZWN0b3I8UwogICAgIH0KICAgICAKICAgICAvLyBUdXJuIHRoZSBhdHRy
aWJ1dGVzIG9mIHRoZSA8b2JqZWN0PiBlbGVtZW50IGludG8gYXJyYXlzLCBidXQgZG9uJ3Qgb3Zl
cnJpZGUgPHBhcmFtPiB2YWx1ZXMuCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdGhp
cy0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB1cGRh
dGVkQXR0cmlidXRlcygpOwogICAgIGlmIChhdHRyaWJ1dGVzKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAg
ICBBdHRyaWJ1dGUqIGl0ID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCmluZGV4IGQxZjUzYTE0ZGI3NDFiNjE5ODg1
OTVlMDczMjQ1ODUzNGM3M2ZhYzIuLmFhMjI4YmMzMTY2M2FiMDgyYTMyMDIyYjg0ZTFjZTNlYjA5
YmZhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcApAQCAtNjUs
MTAgKzY1LDEwIEBAIHZvaWQgSFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKQogCiBib29sIEhUTUxQYXJhbUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVl
QXR0cikgewotICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVzKCktPmdldEF0dHJp
YnV0ZUl0ZW0obmFtZUF0dHIpOwotICAgICAgICBpZiAoYXR0cikgewotICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSB2YWx1ZUF0dHIgJiYgaGFzQXR0cmlidXRlcygpKSB7CisgICAgICAgIEF0dHJpYnV0
ZSogbmFtZUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU1hcCgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWVB
dHRyKTsKKyAgICAgICAgaWYgKG5hbWVBdHRyaWJ1dGUpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUgPSBuYW1lQXR0cmlidXRlLT52YWx1ZSgpOwogICAgICAgICAgICAg
aWYgKGlzVVJMUGFyYW1ldGVyKHZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENv
bnN0cnVjdGlvblNpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCmluZGV4IDRjZjc5OGM2OTBjZmJmYjFjYmE4ZGU2MDA5YzllNTYzNGEw
YzRiOTQuLjBlNzU5N2NmYjM2MWE0NTZjNTBkYzYwMGJkZDlmOTQ0ZTM2NTg0ZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAK
QEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJp
YnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mCiAgICAgaWYgKCF0b2tl
bi5hdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgIE5hbWVkTm9kZU1hcCog
YXR0cmlidXRlcyA9IGVsZW1lbnQtPmVuc3VyZUF0dHJpYnV0ZXMoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5sZW5ndGgoKTsgKytpKSB7CiAgICAg
ICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLT5hdHRyaWJ1dGVJ
dGVtKGkpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmli
dXRlLT5uYW1lKCkpKQpAQCAtNDI1LDcgKzQyNSw3IEBAIG5hbWVzcGFjZSB7CiAvLyBGSVhNRTog
TW92ZSB0aGlzIGZ1bmN0aW9uIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCiBpbmxpbmUgUGFzc093
blB0cjxOYW1lZE5vZGVNYXA+IGNsb25lQXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQogewot
ICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXModHJ1ZSk7
CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0
ZXMoKTsKICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBi
MWE1OWEzOTRiNDdkYjUzNjMyODgyNTU5MWE0NmExMzE3YzI0NTBjLi4wNjYzNWY1MjMzNmM5ZmQ0
MDRiMzQxOGU4Mjk0ZjViYjc1ZDlkM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTcxNyw3ICs3MTcsMTAgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChD
U1NSdWxlTGlzdCoKIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckNTU0FnZW50
OjpidWlsZEFycmF5Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhdHRyU3R5bGVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMo
KTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmli
dXRlcygpOworICAgIGlmICghYXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIGF0dHJTdHlsZXMu
cmVsZWFzZSgpOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwg
YXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmICghYXR0cmlidXRl
LT5kZWNsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAppbmRleCAyOGMwZjNiN2QwMTk5Nzk3ZjExNjE5MjU1MGY0ZGNiNzcwY2NhNTMxLi5iNTAw
MjViYjAwOTc3YTU2YmZiY2I2ZTJjM2ZhMDE2MmM5MjZlNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTUzMCw3ICs1MzAsNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IGVsZW1lbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29u
c3QgTmFtZWROb2RlTWFwKiBhdHRyTWFwID0gdG9IVE1MRWxlbWVudChjaGlsZCktPmF0dHJpYnV0
ZXModHJ1ZSk7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyTWFwID0gdG9IVE1MRWxlbWVu
dChjaGlsZCktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRyTWFwICYmIG5hbWUp
IHsKICAgICAgICAgZWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlKCpuYW1lKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNzgxLDcgKzc4MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1T
ZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAv
LyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KLSAgICAgICAg
ICAgICAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJNYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSktPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgY29uc3QgTmFtZWRO
b2RlTWFwKiBhdHRyTWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT51cGRhdGVkQXR0
cmlidXRlcygpOwogICAgICAgICAgICAgICAgIGlmICghYXR0ck1hcCkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKQEAgLTExNTksNyArMTE1OSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMo
RWxlCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhdHRyaWJ1dGVzVmFsdWUgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBh
bmQgc2VyaWFsaXplIHRoZW0uCi0gICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyTWFwID0gZWxl
bWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJNYXAg
PSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlmICghYXR0ck1hcCkKICAgICAg
ICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZS5yZWxlYXNlKCk7CiAgICAgdW5zaWduZWQgbnVtQXR0
cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKaW5kZXggOTlhYjJlZmU0MmQwOGNhYTA1Y2YwOTQ2YjU5NGY5ZjY2NGEyNDIyMS4uMmMzNzc4
YjQ2MDMyMGJjZGNlYmFmMDdjOWU4NTMwNzVjYmUyMGQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAKQEAgLTY5LDExICs2OSwxMiBAQCBzdGF0aWMgYm9vbCBpc0NoYXJz
ZXRTcGVjaWZ5aW5nTm9kZShOb2RlKiBub2RlKQogICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om1ldGFUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTE1l
dGFDaGFyc2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0gICAgY29uc3QgTmFt
ZWROb2RlTWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkg
ewotICAgICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVt
KGkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRo
IHRoZSBhdHRyaWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgotICAgICAgICBhdHRyaWJ1
dGVzLmFwcGVuZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVl
KCkuc3RyaW5nKCkpKTsKKyAgICBpZiAoY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzTWFw
ID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAg
QXR0cmlidXRlKiBpdGVtID0gYXR0cmlidXRlc01hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGVhbCBhcHByb3ByaWF0ZWx5IHdpdGggdGhlIGF0
dHJpYnV0ZSBpZiB0aGV5IGhhdmUgYSBuYW1lc3BhY2UuCisgICAgICAgICAgICBhdHRyaWJ1dGVz
LmFwcGVuZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCku
c3RyaW5nKCkpKTsKKyAgICAgICAgfQogICAgIH0KICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29k
aW5nID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhh
dHRyaWJ1dGVzKTsKICAgICByZXR1cm4gdGV4dEVuY29kaW5nLmlzVmFsaWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5j
aHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJv
cGVydHlTeW5jaHJvbml6ZXIuaAppbmRleCBjYjc4OWYzZjE4MWUxNmM2YTgzNGVjOTk1NzZkYmFl
ZjM5ODdiMTU4Li42MWYyNjA5NDhlYWI4NWNkMmFhZTVkYjM2MTljODQ3ODgzMGM0OWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
U3luY2hyb25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplci5oCkBAIC0zNyw3ICszNyw3IEBAIHN0cnVjdCBTVkdB
bmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyPHRydWU+IHsKICAgICAgICAgLy8gQXR0cmlidXRl
IGRpcmVjdGx5IHRvIGF2b2lkIGEgY2FsbCB0byBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkCiAg
ICAgICAgIC8vIHRoYXQgY291bGQgY2F1c2UgdGhlIFNWR0VsZW1lbnQgdG8gZXJyb25lb3VzbHkg
cmVzZXQgaXRzIHByb3BlcnRpZXMuCiAgICAgICAgIC8vIHN2Zy9kb20vU1ZHU3RyaW5nTGlzdC1i
YXNpY3MueGh0bWwgZXhlcmNpc2VzIHRoaXMgYmVoYXZpb3IuCi0gICAgICAgIE5hbWVkTm9kZU1h
cCogbmFtZWRBdHRyTWFwID0gb3duZXJFbGVtZW50LT5hdHRyaWJ1dGVzKGZhbHNlKTsKKyAgICAg
ICAgTmFtZWROb2RlTWFwKiBuYW1lZEF0dHJNYXAgPSBvd25lckVsZW1lbnQtPmVuc3VyZUF0dHJp
YnV0ZXMoKTsKICAgICAgICAgQXR0cmlidXRlKiBvbGQgPSBuYW1lZEF0dHJNYXAtPmdldEF0dHJp
YnV0ZUl0ZW0oYXR0ck5hbWUpOwogICAgICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKQog
ICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5yZW1vdmVBdHRyaWJ1dGUob2xkLT5uYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKaW5kZXggN2IzZjU4ZjNiNTY2MjIxMDdi
ZDZiODliYTJmM2U3MTJlOGJiZGUyNi4uYWZlYWZjMTMzOTU4MTdhMTk5ZGIzYzBlNmU4NGFlM2Yx
ZmJiMmExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCkBAIC01OTEsOSAr
NTkxLDggQEAgVmFsdWUgRnVuTGFuZzo6ZXZhbHVhdGUoKSBjb25zdAogICAgIEF0dHJpYnV0ZSog
bGFuZ3VhZ2VBdHRyaWJ1dGUgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4
dCgpLm5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgTmFtZWROb2RlTWFw
KiBhdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgaWYgKGF0dHJzKQotICAgICAg
ICAgICAgbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShYTUxOYW1l
czo6bGFuZ0F0dHIpOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxl
bWVudChub2RlKS0+aGFzQXR0cmlidXRlcygpKQorICAgICAgICAgICAgbGFuZ3VhZ2VBdHRyaWJ1
dGUgPSB0b0VsZW1lbnQobm9kZSktPmF0dHJpYnV0ZU1hcCgpLT5nZXRBdHRyaWJ1dGVJdGVtKFhN
TE5hbWVzOjpsYW5nQXR0cik7CiAgICAgICAgIGlmIChsYW5ndWFnZUF0dHJpYnV0ZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhOb2RlU2V0LmNwcAppbmRleCBlZGI3N2ViZDUxNjI0MjllYjU4MWU4M2MyOGNl
YzliNDYyMTAwNDdhLi44ZWVmYzU3M2ZmNDQ3OTQyNTIxZmJkMDc3YWRmMTUyMWQyYTM5YWY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQg
Tm9kZVNldDo6dHJhdmVyc2FsU29ydCgpIGNvbnN0CiAgICAgICAgIGlmICghY29udGFpbnNBdHRy
aWJ1dGVOb2RlcyB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9FbGVtZW50KG4pLT5hdHRy
aWJ1dGVzKHRydWUgLyogcmVhZC1vbmx5ICovKTsKKyAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRy
aWJ1dGVzID0gdG9FbGVtZW50KG4pLT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgICAgICBpZiAo
IWF0dHJpYnV0ZXMpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVw
LmNwcAppbmRleCAyODY2YWI2YTFhOWFhNjhlMDBjMjRhMWQ3NzRiZmZiMDBjODJhMDNlLi4xMmYz
OTRmMmNhMGI0NDU2YTgxZDEwODk4M2I3OTI0ZDVjNGQ4NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhT
dGVwLmNwcApAQCAtMzI4LDEyICszMjgsMTQgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2Rl
KiBjb250ZXh0LCBOb2RlU2V0JiBub2RlcykgY29uc3QKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEF0dHJpYnV0ZUF4aXM6IHsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgICAgIGlm
ICghY29udGV4dC0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAor
ICAgICAgICAgICAgRWxlbWVudCogY29udGV4dEVsZW1lbnQgPSB0b0VsZW1lbnQoY29udGV4dCk7
CisKICAgICAgICAgICAgIC8vIEF2b2lkIGxhemlseSBjcmVhdGluZyBhdHRyaWJ1dGUgbm9kZXMg
Zm9yIGF0dHJpYnV0ZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbnl3YXkuCiAgICAgICAgICAgICBp
ZiAobV9ub2RlVGVzdC5raW5kKCkgPT0gTm9kZVRlc3Q6Ok5hbWVUZXN0ICYmIG1fbm9kZVRlc3Qu
ZGF0YSgpICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG4gPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4oY29udGV4dCktPmdldEF0dHJpYnV0ZU5vZGVOUyhtX25vZGVU
ZXN0Lm5hbWVzcGFjZVVSSSgpLCBtX25vZGVUZXN0LmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
UmVmUHRyPE5vZGU+IG4gPSBjb250ZXh0RWxlbWVudC0+Z2V0QXR0cmlidXRlTm9kZU5TKG1fbm9k
ZVRlc3QubmFtZXNwYWNlVVJJKCksIG1fbm9kZVRlc3QuZGF0YSgpKTsKICAgICAgICAgICAgICAg
ICBpZiAobiAmJiBuLT5uYW1lc3BhY2VVUkkoKSAhPSBYTUxOU05hbWVzOjp4bWxuc05hbWVzcGFj
ZVVSSSkgeyAvLyBJbiBYUGF0aCBsYW5kLCBuYW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBhY2Nlc3Np
YmxlIG9uIHRoZSBhdHRyaWJ1dGUgYXhpcy4KICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVN
YXRjaGVzKG4uZ2V0KCksIEF0dHJpYnV0ZUF4aXMsIG1fbm9kZVRlc3QpKSAvLyBTdGlsbCBuZWVk
IHRvIGNoZWNrIG1lcmdlZCBwcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZXMuYXBwZW5kKG4ucmVsZWFzZSgpKTsKQEAgLTM0MSw3ICszNDMsNyBAQCB2b2lkIFN0ZXA6Om5v
ZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vZGVTZXQmIG5vZGVzKSBjb25zdAogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
TmFtZWROb2RlTWFwKiBhdHRycyA9IGNvbnRleHQtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAg
IE5hbWVkTm9kZU1hcCogYXR0cnMgPSBjb250ZXh0RWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMo
KTsKICAgICAgICAgICAgIGlmICghYXR0cnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAKaW5kZXggMGZkZDIyNzA4MTVlNGQyZjAzOGVkYjM1NjEyZGEwYTZmMzQ2MGQ2ZC4u
NGUxZDQ5ZWVmZDA0YmZlZjY4NmUwYTJjNWNlMmI2MGMxZDhkODdjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApA
QCAtNTk5LDcgKzU5OSw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihE
b2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAKICAgICBmb3IgKDsg
IWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKICAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7Ci0gICAgICAgIGlmIChOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgIGlmIChOYW1l
ZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAg
ICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7
CiAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmlu
ZGV4IDBlYmZhYTk5MDk4ZTAyNDMwODVhNmI5ZTgzYzU0ODE0YzNiOWExOGMuLmNkNmVhMTQ5NGY1
MTI2MTAyNThjNjgyMzkyYjFhNTRmOGFiNDM5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIFhN
TERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgRWxlbWVudCogcGFyZW50CiAKICAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRp
b25zIG5hbWVzcGFjZXM7CiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxh
c3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKLSAg
ICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkpIHsK
KyAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmli
dXRlcygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxl
bmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+
YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkg
PT0gInhtbG5zIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJl
ZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5j
cHAKaW5kZXggNjQ3NmExZDU3ZDY2ZTBiZWFhZmU1MjE2YTE1YzBkYzU0N2MwY2I4Yy4uOGRlMWEw
ODE3YTRlNGRmMWJhOGE4MDhhYzkzOTY3NWE3YWVhMDMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgWE1MVHJlZUJ1
aWxkZXI6OlhNTFRyZWVCdWlsZGVyKE5ld1hNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3Vt
ZW50RnJhZ21lbnQqIGYKIAogICAgIGZvciAoRWxlbWVudCogZWxlbWVudDsgIW5vZGVTdGFjay5p
c0VtcHR5KCk7IG5vZGVTdGFjay5yZW1vdmVMYXN0KCkpIHsKICAgICAgICAgZWxlbWVudCA9IG5v
ZGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVu
dC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxl
bWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0
ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAgIGlmIChh
dHRyLT5sb2NhbE5hbWUoKSA9PSB4bWxuc0F0b20pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVu
dC5jcHAKaW5kZXggNmIxODk5NDY2NjMxMmRiMGRjM2EwY2IxNjBhMGUwNmE5MGM1YzEwNC4uMmRk
ZGE4YjA0OWZlYzkwNmYzNWRlOWI2YmFmMjUzOTViZjg0YjA0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJlbGVtZW50LmNwcApAQCAtNTAzLDcgKzUwMyw3IEBAIFFTdHJpbmdMaXN0IFFXZWJFbGVt
ZW50OjphdHRyaWJ1dGVOYW1lcyhjb25zdCBRU3RyaW5nJiBuYW1lc3BhY2VVcmkpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwogCiAgICAgUVN0cmluZ0xpc3QgYXR0cmlidXRl
TmFtZUxpc3Q7Ci0gICAgY29uc3QgTmFtZWROb2RlTWFwKiBjb25zdCBhdHRycyA9IG1fZWxlbWVu
dC0+YXR0cmlidXRlcygvKiByZWFkIG9ubHkgPSAqLyB0cnVlKTsKKyAgICBjb25zdCBOYW1lZE5v
ZGVNYXAqIGNvbnN0IGF0dHJzID0gbV9lbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAg
IGlmIChhdHRycykgewogICAgICAgICBjb25zdCBTdHJpbmcgbmFtZXNwYWNlVXJpU3RyaW5nKG5h
bWVzcGFjZVVyaSk7IC8vIGNvbnZlcnQgUVN0cmluZyAtPiBTdHJpbmcgb25jZQogICAgICAgICBj
b25zdCB1bnNpZ25lZCBhdHRyc0NvdW50ID0gYXR0cnMtPmxlbmd0aCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125030</attachid>
            <date>2012-02-01 15:21:12 -0800</date>
            <delta_ts>2012-02-01 15:28:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77574-20120201202114.patch</filename>
            <type>text/plain</type>
            <size>45291</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU0MmI1ZmI2Y2NkYjAw
MDE1MjE4NGFmYjEyMGQzNDJiZTdmMGU1YS4uOTk5ZWViMzA0ODRjMjg2ZDA0ZjBkZTM3ZDIwODVm
YjE4ZTY5MjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAxMi0wMi0wMSAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIEF2b2lkIGNyZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtZXRob2Qg
RWxlbWVudDo6YXR0cmlidXRlcygpIHdhcyBiZWluZyB1c2VkIGZvciBtdWx0aXBsZSB0aGluZ3Mg
aW4gb3VyCisgICAgICAgIGNvZGViYXNlOiAoMSkgYXMgdGhlIGdldHRlciBmb3IgTmFtZWROb2Rl
TWFwIGV4cG9zZWQgdG8gRE9NLCAoMikgYXMgYSB3YXkgdG8gb3RoZXIgV2ViQ29yZQorICAgICAg
ICBjb2RlIGdldCB0aGUgImF0dHJpYnV0ZSBzdG9yYWdlIiAoY3VycmVudGx5IGluc2lkZSBOYW1l
ZE5vZGVNYXApLCBhbmQgKDMpIGFzIGEgd2F5IHRvCisgICAgICAgIGdldCB0aGUgYXR0cmlidXRl
IHN0b3JhZ2UgY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICBUaGlzIGNvbW1p
dCBzZXBhcmF0ZSB0aGUgam9icyBpbiBkaWZmZXJlbnQgZnVuY3Rpb25zOgorCisgICAgICAgIDEp
IGF0dHJpYnV0ZXMoKSBrZWVwcyBiZWluZyB0aGUgRE9NIGdldHRlciwgYW5kIGxvc2VzIGl0cyBi
b29sZWFuIHBhcmFtZXRlci4KKworICAgICAgICAyKSB1cGRhdGVkQXR0cmlidXRlcygpIHVwZGF0
ZXMgdGhlIGludmFsaWQgYXR0cmlidXRlcyBhbmQgcmV0dXJucyB0aGUgYXR0cmlidXRlCisgICAg
ICAgIHN0b3JhZ2UuIElmIHdlIGRvbid0IGhhdmUgb25lLCByZXR1cm4gMC4KKworICAgICAgICAz
KSBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpIHVwZGF0ZXMgdGhlIGludmFsaWQgYXR0cmlidXRl
cyBhbmQgZm9yY2VzIHRoZQorICAgICAgICBjcmVhdGlvbiBvZiBhdHRyaWJ1dGUgc3RvcmFnZSB0
byByZXR1cm4uCisKKyAgICAgICAgVGhlcmUgaXMgYWxzbyBhbm90aGVyIHdheSB0byBnZXQgdG8g
dGhlIGF0dHJpYnV0ZSBzdG9yYWdlIGN1cnJlbnRseSwgdmlhCisgICAgICAgIGF0dHJpYnV0ZU1h
cCgpLCB3aGljaCBkb2Vzbid0IHVwZGF0ZSB0aGUgYXR0cmlidXRlcyBmb3IgcG9zc2libGUgY2hh
bmdlcyBpbiBTdHlsZQorICAgICAgICBvciBTVkcgYXR0cmlidXRlcy4KKworICAgICAgICBOb3Rl
IHRoYXQgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4gTm9kZSBjbGFzcywg
c28gQysrIGNvZGUgbWFuaXB1bGF0aW5nCisgICAgICAgIGF0dHJpYnV0ZXMgc2hvdWxkIGNhc3Qg
dG8gRWxlbWVudC4KKworICAgICAgICBUaGlzIHNlcGFyYXRpb24gYWxzbyBtYWRlIGVhc2llciB0
byBzcG90IGFuZCBmaXggc29tZSBwbGFjZXMgd2hlcmUgd2UgZG8gbm90CisgICAgICAgIG5lZWQg
dG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBjb21taXQgc2hvdWxkbid0IGNoYW5nZSB0aGUgYmVo
YXZpb3Igb2YgZXhpc3RpbmcgY29kZS4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KToKKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhc2V0RE9NU3RyaW5nTWFwOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRET01T
dHJpbmdNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcG9ydE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0
QXR0cmlidXRlTm9kZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJp
YnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om5vcm1h
bGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjplbnN1cmVVcGRhdGVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojp1cGRhdGVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5z
dXJlQXR0cmlidXRlTWFwKTogTWFkZSBjb25zdCB0byBiZSByZXVzZWQgYnkgZW5zdXJlVXBkYXRl
ZEF0dHJpYnV0ZXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUludmFsaWRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjptYXBzRXF1aXZhbGVudCk6
IEhhdmluZyBubyBhdHRyaWJ1dGVzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgbm90IGhhdmlu
ZyBhbiBhdHRyaWJ1dGUgc3RvcmFnZSBiZWNhdXNlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZSBpcyBs
YXppbHkgY3JlYXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjppc0VxdWFsTm9kZSk6IERvIG5vdCBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYXR0cmli
dXRlIHN0b3JhZ2UgdG8KKyAgICAgICAgY29tcGFyZSB0d28gbm9kZXMuCisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UpOiBVc2UgdXBkYXRlZEF0dHJpYnV0ZXMoKS4g
U2luY2Ugd2UgaXRlcmF0ZQorICAgICAgICB1c2luZyBsZW5ndGgsIGl0J3MgT0sgaWYgdGhlIGF0
dHJpYnV0ZSBzdG9yYWdlIGlzIGVtcHR5LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bG9va3Vw
TmFtZXNwYWNlVVJJKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1l
c3BhY2VQcmVmaXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlGb250VGFnKToKKyAgICAgICAgKiBlZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjppc1JlbW92YWJsZUJsb2NrKTogVXNlIGlzRWxlbWVudE5vZGUoKSBleHBs
aWNpdGx5CisgICAgICAgIHRvIGlkZW50aWZ5IG5vbi1FbGVtZW50IG5vZGVzLCB0aGVuIHVzZSBo
YXNBdHRyaWJ1dGVzKCkgaWYgaXMgRWxlbWVudC4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdFZp
c3VhbGx5RXF1aXZhbGVudERpdkJlbG93Um9vdCk6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudCk6IERvIG5vdCBjcmVhdGUgdGhlIGF0dHJpYnV0ZSBzdG9yYWdlCisgICAgICAg
IHVubmVjZXNzYXJpbHkuCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphcmVJZGVudGljYWxFbGVtZW50cyk6IERvIG5vdCBjcmVhdGUgdGhlIGF0
dHJpYnV0ZSBzdG9yYWdlCisgICAgICAgIHVubmVjZXNzYXJpbHkuIFVzZSBtYXBzRXF1aXZhbGVu
dCgpIGZvciBjb21wYXJpbmcgdGhlIGF0dHJpYnV0ZXMuCisgICAgICAgICogZWRpdGluZy9tYXJr
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKTogRG8gbm90IGNyZWF0ZSB0
aGUgYXR0cmlidXRlIHN0b3JhZ2UgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6IGhhc0F0dHJpYnV0ZXMoKSB3aWxsIGF2b2lkIGNy
ZWF0aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgc3RvcmFnZSB1bm5lY2Vzc2FyaWx5LgorICAg
ICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RW1iZWRFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAgKiBodG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpw
YXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUpOiBE
byBub3QgY3JlYXRlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZQorICAgICAgICB1bm5lY2Vzc2FyaWx5
LgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9r
ZW5JbnRvRWxlbWVudCk6IFVzZQorICAgICAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpIHNp
bmNlIHdlIHdpbGwgYWRkIG5ldyBhdHRyaWJ1dGVzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yQXR0cmlidXRlU3R5bGVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyk6CisgICAg
ICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NoYXJz
ZXRTcGVjaWZ5aW5nTm9kZSk6IERvIG5vdCBhc3N1bWUgYXR0cmlidXRlTWFwIHdpbGwgZXhpc3Qu
CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXpl
ci5oOiBVc2UgZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKQorICAgICAgICBzaW5jZSB3ZSB3aWxs
IGFkZCBuZXcgYXR0cmlidXRlcy4KKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmV2YWx1YXRlKTogRG8gbm90IGNyZWF0
ZSB0aGUgYXR0cmlidXRlIHN0b3JhZ2UKKyAgICAgICAgdW5uZWNlc3NhcmlseS4KKyAgICAgICAg
KiB4bWwvWFBhdGhOb2RlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0
Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6IFVzZSBpc0VsZW1lbnROb2RlKCkg
aW5zdGVhZCBvZiBjb21wYXJpbmcKKyAgICAgICAgbm9kZVR5cGUoKSBtYW51YWxseS4gRG8gbm90
IGNyZWF0ZSB0aGUgYXR0cmlidXRlIHN0b3JhZ2UgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOiBEbyBub3QgY3JlYXRlIHRo
ZSBhdHRyaWJ1dGUKKyAgICAgICAgc3RvcmFnZSB1bm5lY2Vzc2FyaWx5LgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOiBEaXR0by4KKyAgICAgICAgKiB4bWwv
cGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVCdWls
ZGVyOjpYTUxUcmVlQnVpbGRlcik6IERpdHRvLgorCiAyMDEyLTAyLTAxICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRlYnVn
Z2VyIHJlcG9ydHMgd3Jvbmcgc291cmNlcyB3aGVuIHBhdXNlZCBpbiBpbmxpbmUgc2NyaXB0IG9u
IHBhZ2UgcmVsb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGNjZDlmNmE5M2I5MzRiYzdlYmU2YTdmMTJm
ZWU5Njg4Mzg3MDkxOTEuLmJkOTYzMGY1YzA4NjlkMDZlYTZjNjZlYTYxOTY4OWE5NGYwZDYyNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMDEgIENhaW8gTWFyY2Vs
byBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBBdm9pZCBjcmVhdGluZyBOYW1lZE5vZGVNYXAgdW5uZWNlc3NhcmlseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NzQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5j
cHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6YXR0cmlidXRlTmFtZXMpOiB1c2UgdXBkYXRlQXR0
cmlidXRlcygpLgorCiAyMDEyLTAxLTMxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBUcnkgdG8gZml4IFF0IGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAppbmRleCA4MjA1YWYwMzljYTljODNiYTljNmI0NzAzOTFmOTk4NWVjZmJl
ZWE0Li4zNjc3ZmNmNzliMDAyYjQ0ZTdlMDJkN2FlMGMwMzVhNzIzYjg1ZjNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNzA3LDcgKzcwNyw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQq
IGUsIFBzZXVkb0lkJiBkCiAgICAgaWYgKHNlbC0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOwogCi0g
ICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPmF0dHJpYnV0ZXModHJ1ZSk7Cisg
ICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7
CiAgICAgICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCmluZGV4IGUwZDg3NWRj
YmIwZDdiZTYwNDdmMTdmM2ExMTFlZjU5MTFmMGU4YjUuLmRmZjBhZDc1MDcyMDY3ZTU1NmNlMWUy
ODYxNDUxMjQyN2UxMzBjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmRl
cmVmKCkKIAogdm9pZCBEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyhWZWN0b3I8U3RyaW5n
PiYgbmFtZXMpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBtX2VsZW1lbnQt
PmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBtX2Vs
ZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKGF0dHJpYnV0ZU1hcCkgewogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTE1NSw3ICsxNTUsNyBA
QCB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKFZlY3RvcjxTdHJpbmc+JiBuYW1l
cykKIAogU3RyaW5nIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbV9lbGVtZW50LT5hdHRyaWJ1
dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbV9lbGVtZW50LT51
cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlmIChhdHRyaWJ1dGVNYXApIHsKICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYXR0cmlidXRlTWFwLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xNzAsNyArMTcwLDcgQEAgU3RyaW5n
IERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKQogCiBib29sIERh
dGFzZXRET01TdHJpbmdNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBO
YW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsK
KyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJp
YnV0ZXMoKTsKICAgICBpZiAoYXR0cmlidXRlTWFwKSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGF0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMDk2YTM4ZWU4
YjViNTYzMjY1Y2UzMzllMWZjMmU2MjE5ODliZjYxNC4uMTNkNDUwMTBjMDQ5MTExNGYwMTA4ODJh
NDMxOTI2NTExYTVjODhiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04NDEsNyArODQx
LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6aW1wb3J0Tm9kZShOb2RlKiBpbXBvcnRl
ZE5vZGUsIGJvb2wgZGVlcCwgRXhjZXB0aW9uQ28KICAgICAgICAgaWYgKGVjKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IG9sZEVsZW1lbnQt
PmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBvbGRFbGVt
ZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgICAgICBpZiAoYXR0cnMpIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IDkxZDg2NjNhYzA1OGNhOTAyNDRlM2JhZDlkNTQ1MGQwMWU2YjUzMDEuLjVhMjIwMjEyNmZm
MTQ1NDYwY2M2OTQ0MzJkYjEzYmIwYTIwNTY0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAg
LTYxNiwxNCArNjE2LDE0IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKIAogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/
IG5hbWUubG93ZXIoKSA6IG5hbWU7CiAKLSAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1dGVzKGZh
bHNlKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFsc2UpOworICAgIHNpemVf
dCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSA9IGlu
ZGV4ICE9IG5vdEZvdW5kID8gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT5u
YW1lKCkgOiBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG51bGxBdG9tKTsKICAg
ICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwgcU5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBF
bGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChhdHRyaWJ1dGVz
KGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1ZSk7CisgICAg
c2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmli
dXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1ZSk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1l
bnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKQEAgLTc3NSwxNCArNzc1LDcgQEAg
dm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxOYW1lZE5vZGVN
YXA+IGxpc3QsIEZyYWdtZW50U2NyaXAKIAogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkg
Y29uc3QKIHsKLSAgICBpZiAoIWlzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpKQotICAgICAgICB1cGRh
dGVTdHlsZUF0dHJpYnV0ZSgpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoIWFyZVNWR0F0
dHJpYnV0ZXNWYWxpZCgpKQotICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlR
TmFtZSgpKTsKLSNlbmRpZgotCisgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKICAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVNYXAgJiYgbV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOwogfQogCkBA
IC0xNDIyLDcgKzE0MTUsNyBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZU5vZGUoQXR0ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gVFlQRV9N
SVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGlj
X3BvaW50ZXJfY2FzdDxBdHRyPihhdHRyaWJ1dGVzKGZhbHNlKS0+c2V0TmFtZWRJdGVtKGF0dHIs
IGVjKSk7CisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oZW5zdXJlVXBkYXRl
ZEF0dHJpYnV0ZXMoKS0+c2V0TmFtZWRJdGVtKGF0dHIsIGVjKSk7CiB9CiAKIFBhc3NSZWZQdHI8
QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTQzMSw3ICsxNDI0LDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAg
IGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBy
ZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihhdHRyaWJ1dGVzKGZhbHNlKS0+c2V0TmFt
ZWRJdGVtKGF0dHIsIGVjKSk7CisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4o
ZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKS0+c2V0TmFtZWRJdGVtKGF0dHIsIGVjKSk7CiB9CiAK
IFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRyKiBhdHRy
LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE0NDcsNyArMTQ0MCw3IEBAIFBhc3NSZWZQdHI8QXR0
cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRyKiBhdHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKIAogICAgIEFTU0VSVChkb2N1bWVudCgpID09IGF0dHItPmRvY3VtZW50KCkpOwogCi0g
ICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2Rl
TWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRycykKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTE0OTMsNyArMTQ4Niw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3Zl
QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9j
YWxOCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZShjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAg
aWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwpAQCAt
MTUwMiw3ICsxNDk1LDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVO
b2RlKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRB
dHRyaWJ1dGVOb2RlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYg
bG9jYWxOYW1lKQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBhdHRyaWJ1dGVzKHRydWUp
OworICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSB1cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlm
ICghYXR0cnMpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9j
YXN0PEF0dHI+KGF0dHJzLT5nZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9j
YWxOYW1lLCBuYW1lc3BhY2VVUkkpKSk7CkBAIC0xNTEwLDcgKzE1MDMsNyBAQCBQYXNzUmVmUHRy
PEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgUwogCiBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0CiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAg
aWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNTIyLDcgKzE1MTUsNyBA
QCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAK
IGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkks
IGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewotICAgIE5hbWVkTm9kZU1hcCogYXR0
cnMgPSBhdHRyaWJ1dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSB1cGRhdGVk
QXR0cmlidXRlcygpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
bG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKQEAgLTE3MTIsOCArMTcwNSw3IEBAIHZvaWQgRWxl
bWVudDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKIAogdm9pZCBFbGVtZW50Ojpub3Jt
YWxpemVBdHRyaWJ1dGVzKCkKIHsKLSAgICAvLyBOb3JtYWxpemUgYXR0cmlidXRlcy4KLSAgICBO
YW1lZE5vZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAq
IGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDU0ZTE3MTYyZWIwMWJiYzYyZjdiOGVkMmU0
OGFlNjliYjMwMzE2ZDIuLjFkMzdlYWVjMGQ4MzU5YTc4YmJjZTUzNThjNmI3Y2I4M2Y3YzY3NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjE0LDcgKzIxNCwxMSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldEJvb2xlYW5BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgYm9vbCk7
CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoYm9vbCByZWFkb25seSA9IGZhbHNlKSBj
b25zdDsKKyAgICAvLyBGb3IgZXhwb3NpbmcgdG8gRE9NIG9ubHkuCisgICAgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKTsg
fQorCisgICAgTmFtZWROb2RlTWFwKiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpIGNvbnN0Owor
ICAgIE5hbWVkTm9kZU1hcCogdXBkYXRlZEF0dHJpYnV0ZXMoKSBjb25zdDsKIAogICAgIC8vIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBhdHRyaWJ1dGUgaXMgYWRkZWQsIGNoYW5n
ZWQgb3IgcmVtb3ZlZC4KICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1
dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CkBAIC0yMjMsMTAgKzIyNywxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxOYW1lZE5v
ZGVNYXA+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAgICAgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVNYXAoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcC5nZXQoKTsgfQot
ICAgIE5hbWVkTm9kZU1hcCogZW5zdXJlQXR0cmlidXRlTWFwKCk7CisgICAgTmFtZWROb2RlTWFw
KiBlbnN1cmVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVNYXAgPyBtX2F0dHJp
YnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpIDogMDsgfQotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlcygpLT5hdHRy
aWJ1dGVEYXRhKCk7IH0KKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlQXR0cmlidXRl
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCktPmF0dHJpYnV0
ZURhdGEoKTsgfQogCiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxl
bWVudCYpOwogCkBAIC00MDksNiArNDEzLDggQEAgcHJvdGVjdGVkOgogICAgIEhUTUxDb2xsZWN0
aW9uKiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7CiAKIHByaXZh
dGU6CisgICAgdm9pZCB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpIGNvbnN0OworCiAgICAgdm9p
ZCBzY3JvbGxCeVVuaXRzKGludCB1bml0cywgU2Nyb2xsR3JhbnVsYXJpdHkpOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CkBAIC01MDAsMjUgKzUwNiwyMiBAQCBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSA/
IHRvRWxlbWVudChwYXJlbnQpIDogMDsKIH0KIAotaW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVu
dDo6YXR0cmlidXRlcyhib29sIHJlYWRvbmx5KSBjb25zdAoraW5saW5lIE5hbWVkTm9kZU1hcCog
RWxlbWVudDo6ZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKSBjb25zdAogewotICAgIGlmICghaXNT
dHlsZUF0dHJpYnV0ZVZhbGlkKCkpCi0gICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0K
LSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghYXJlU1ZHQXR0cmlidXRlc1ZhbGlkKCkpCi0gICAg
ICAgIHVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1lKCkpOwotI2VuZGlmCisgICAg
dXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gZW5zdXJlQXR0cmlidXRlTWFw
KCk7Cit9CiAKLSAgICBpZiAoIXJlYWRvbmx5ICYmICFtX2F0dHJpYnV0ZU1hcCkKLSAgICAgICAg
Y3JlYXRlQXR0cmlidXRlTWFwKCk7CitpbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50Ojp1cGRh
dGVkQXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsK
ICAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAuZ2V0KCk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1l
bnQ6OnNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKIHsKLSAg
ICBpZiAoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBvdGhlci5hdHRyaWJ1dGVzKHRydWUp
KQotICAgICAgICBhdHRyaWJ1dGVzKGZhbHNlKS0+c2V0QXR0cmlidXRlcygqYXR0cmlidXRlTWFw
KTsKKyAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBvdGhlci51cGRhdGVkQXR0
cmlidXRlcygpKQorICAgICAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5zZXRBdHRyaWJ1
dGVzKCphdHRyaWJ1dGVNYXApOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1l
KGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1l
KQpAQCAtNTk4LDEzICs2MDEsMjQgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1
dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRBdHRyaWJ1dGUoZG9jdW1lbnQo
KS0+aWRBdHRyaWJ1dGVOYW1lKCksIHZhbHVlKTsKIH0KIAotaW5saW5lIE5hbWVkTm9kZU1hcCog
RWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlTWFwKCkKK2lubGluZSBOYW1lZE5vZGVNYXAqIEVsZW1l
bnQ6OmVuc3VyZUF0dHJpYnV0ZU1hcCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2F0dHJpYnV0ZU1h
cCkKICAgICAgICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7CiAgICAgcmV0dXJuIG1fYXR0cmlidXRl
TWFwLmdldCgpOwogfQogCitpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJbnZhbGlkQXR0cmli
dXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFpc1N0eWxlQXR0cmlidXRlVmFsaWQoKSkKKyAgICAg
ICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKCFh
cmVTVkdBdHRyaWJ1dGVzVmFsaWQoKSkKKyAgICAgICAgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1
dGUoYW55UU5hbWUoKSk7CisjZW5kaWYKK30KKwogaW5saW5lIEVsZW1lbnQqIGZpcnN0RWxlbWVu
dENoaWxkKGNvbnN0IENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcikKIHsKICAgICBBU1NFUlRfQVJH
KGNvbnRhaW5lciwgY29udGFpbmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5k
ZXggMDEzNDQ0MTRlMzVkNDZlNzAxMWQwZTcwZDI2OGEyYjIwZWQxMjEzMC4uN2Y2MjI5Nzc1MzZh
Nzg1MzhjZDRiZTVhMTMzODkxZTI4ZWYwM2MzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1h
cC5jcHAKQEAgLTMwNSw3ICszMDUsNyBAQCB2b2lkIE5hbWVkTm9kZU1hcDo6cmVwbGFjZUF0dHJp
YnV0ZShzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaQogYm9vbCBO
YW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXAp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlck1hcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gaXNFbXB0eSgpOwogICAgIAogICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgp
OwogICAgIGlmIChsZW4gIT0gb3RoZXJNYXAtPmxlbmd0aCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4
IGNkNzcwNzQxNjNkZWY4NTUzMTRmNmJmYWJlNjE1MDRiYjQ3YzNmYTYuLjczODAwMGZlY2QzMTRh
ZTBkY2JlZjdhMmE5Y2Q4MTFmNTgyNTM1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE3NjQsMTQg
KzE3NjQsMTYgQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9kZShOb2RlKiBvdGhlcikgY29uc3QKICAg
ICBpZiAobm9kZVZhbHVlKCkgIT0gb3RoZXItPm5vZGVWYWx1ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdGhpcy0+YXR0cmli
dXRlcygpOwotICAgIE5hbWVkTm9kZU1hcCogb3RoZXJBdHRyaWJ1dGVzID0gb3RoZXItPmF0dHJp
YnV0ZXMoKTsKLSAgICAKLSAgICBpZiAoIWF0dHJpYnV0ZXMgJiYgb3RoZXJBdHRyaWJ1dGVzKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWF0dHJp
YnV0ZXMtPm1hcHNFcXVpdmFsZW50KG90aGVyQXR0cmlidXRlcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIE5hbWVkTm9kZU1hcCog
YXR0cmlidXRlcyA9IHRvRWxlbWVudCh0aGlzKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAg
ICAgTmFtZWROb2RlTWFwKiBvdGhlckF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQob3RoZXIpLT51cGRh
dGVkQXR0cmlidXRlcygpOworCisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYmICFhdHRyaWJ1dGVz
LT5tYXBzRXF1aXZhbGVudChvdGhlckF0dHJpYnV0ZXMpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmIChvdGhlckF0dHJpYnV0ZXMgJiYgIW90aGVyQXR0cmlidXRlcy0+
bWFwc0VxdWl2YWxlbnQoYXR0cmlidXRlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIAogICAgIE5vZGUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIE5vZGUqIG90
aGVyQ2hpbGQgPSBvdGhlci0+Zmlyc3RDaGlsZCgpOwpAQCAtMTgyOSw5ICsxODMxLDcgQEAgYm9v
bCBOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UklNYXliZUVtcHR5KSBjb25zdAogICAgICAgICAgICAgaWYgKGVsZW0tPnByZWZpeCgpLmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBuYW1l
c3BhY2VVUkk7CiAKLSAgICAgICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbS0+YXR0cmlidXRlcygpOwot
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBl
bGVtLT51cGRhdGVkQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAg
IEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTE5MTcsOSArMTkxNyw3IEBAIFN0cmluZyBOb2RlOjpsb29rdXBOYW1lc3Bh
Y2VVUkkoY29uc3QgU3RyaW5nICZwcmVmaXgpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIWVsZW0t
Pm5hbWVzcGFjZVVSSSgpLmlzTnVsbCgpICYmIGVsZW0tPnByZWZpeCgpID09IHByZWZpeCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbS0+bmFtZXNwYWNlVVJJKCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChlbGVtLT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAg
ICBOYW1lZE5vZGVNYXAgKmF0dHJzID0gZWxlbS0+YXR0cmlidXRlcygpOwotICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtLT51cGRhdGVk
QXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAq
YXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAgICAgICAKQEAg
LTE5NzMsMTUgKzE5NzEsMTIgQEAgU3RyaW5nIE5vZGU6Omxvb2t1cE5hbWVzcGFjZVByZWZpeChj
b25zdCBBdG9taWNTdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IEVsZW0KICAgICBpZiAob3Jp
Z2luYWxFbGVtZW50LT5sb29rdXBOYW1lc3BhY2VVUkkocHJlZml4KCkpID09IF9uYW1lc3BhY2VV
UkkpCiAgICAgICAgIHJldHVybiBwcmVmaXgoKTsKICAgICAKLSAgICBpZiAoaGFzQXR0cmlidXRl
cygpKSB7Ci0gICAgICAgIE5hbWVkTm9kZU1hcCAqYXR0cnMgPSBhdHRyaWJ1dGVzKCk7Ci0gICAg
ICAgIAorICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gdG9FbGVtZW50KHRoaXMpLT51cGRh
dGVkQXR0cmlidXRlcygpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRy
cy0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cnMt
PmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+
YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGF0dHItPnBy
ZWZpeCgpID09IHhtbG5zQXRvbSAmJgotICAgICAgICAgICAgICAgIGF0dHItPnZhbHVlKCkgPT0g
X25hbWVzcGFjZVVSSSAmJgotICAgICAgICAgICAgICAgIG9yaWdpbmFsRWxlbWVudC0+bG9va3Vw
TmFtZXNwYWNlVVJJKGF0dHItPmxvY2FsTmFtZSgpKSA9PSBfbmFtZXNwYWNlVVJJKQorICAgICAg
ICAgICAgaWYgKGF0dHItPnByZWZpeCgpID09IHhtbG5zQXRvbSAmJiBhdHRyLT52YWx1ZSgpID09
IF9uYW1lc3BhY2VVUkkKKyAgICAgICAgICAgICAgICAgICAgJiYgb3JpZ2luYWxFbGVtZW50LT5s
b29rdXBOYW1lc3BhY2VVUkkoYXR0ci0+bG9jYWxOYW1lKCkpID09IF9uYW1lc3BhY2VVUkkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGF0dHItPmxvY2FsTmFtZSgpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMjEyMSw3ICsyMTE2LDcgQEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3Vt
ZW50UG9zaXRpb24oTm9kZSogb3RoZXJOb2RlKQogICAgIGlmIChhdHRyMSAmJiBhdHRyMiAmJiBz
dGFydDEgPT0gc3RhcnQyICYmIHN0YXJ0MSkgewogICAgICAgICAvLyBXZSBhcmUgY29tcGFyaW5n
IHR3byBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIG5vZGUuICBDcmF3bCBvdXIgYXR0cmlidXRlIG1h
cAogICAgICAgICAvLyBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBoaXQgZmlyc3QuCi0gICAgICAgIE5h
bWVkTm9kZU1hcCogbWFwID0gYXR0cjEtPm93bmVyRWxlbWVudCgpLT5hdHRyaWJ1dGVzKHRydWUp
OworICAgICAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGF0dHIxLT5vd25lckVsZW1lbnQoKS0+dXBk
YXRlZEF0dHJpYnV0ZXMoKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbWFwLT5sZW5ndGgo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIHRoZSB0d28gZGV0ZXJtaW5pbmcgbm9kZXMgaXMgYSBj
aGlsZCBub2RlIGFuZCBub2RlVHlwZSBpcyB0aGUgc2FtZSBmb3IgYm90aCBkZXRlcm1pbmluZyBu
b2RlcywgdGhlbiBhbiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAKaW5kZXggNDE3MzVjNTU4MjQ5NzcyOTdmNDUwNmNiZDA4MjcyODhmNTJjOTYyZi4uNDM4
MjBjNGMyZDllODU0NDhjNWQ3ZTQ2MjkzZjBjMTliYmNiMjc5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTczLDggKzczLDcgQEAgYm9vbCBp
c0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUgKm5vZGUpCiBlbnVtIFNob3VsZFN0eWxl
QXR0cmlidXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRy
aWJ1dGVTaG91bGRCZUVtcHR5IH07CiBzdGF0aWMgYm9vbCBoYXNOb0F0dHJpYnV0ZU9yT25seVN0
eWxlQXR0cmlidXRlKGNvbnN0IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFNob3VsZFN0eWxlQXR0
cmlidXRlQmVFbXB0eSBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpCiB7Ci0gICAgY29uc3Qg
Ym9vbCByZWFkb25seSA9IHRydWU7Ci0gICAgTmFtZWROb2RlTWFwKiBtYXAgPSBlbGVtZW50LT5h
dHRyaWJ1dGVzKHJlYWRvbmx5KTsKKyAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGVsZW1lbnQtPnVw
ZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFtYXAgfHwgbWFwLT5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCkBAIC0xMDksNyArMTA4LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0
eUZvbnRUYWcoY29uc3QgTm9kZSAqbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y29uc3QgRWxlbWVudCAqZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSk7
Ci0gICAgTmFtZWROb2RlTWFwICptYXAgPSBlbGVtLT5hdHRyaWJ1dGVzKHRydWUpOyAvLyB0cnVl
IGZvciByZWFkLW9ubHkKKyAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGVsZW0tPnVwZGF0ZWRBdHRy
aWJ1dGVzKCk7CiAgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBtYXAtPmlzRW1wdHkoKSB8fCAobWFwLT5sZW5ndGgoKSA9PSAxICYmIGVsZW0tPmdldEF0dHJp
YnV0ZShjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCBiZTVkYmFjODAy
NGFkNDVjZTFmZjJkNzkwYmVhZTVhYWM4YTM5OWU4Li4yYTYyOWMzYTBjM2Y2YzljMWUwMjM2Zjk2
YmIxMmNkYjVlNDlkYTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcApAQCAtMzA4LDEwICszMDgsOSBAQCBib29sIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjppc1JlbW92YWJsZUJsb2NrKGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgaWYgKChwYXJl
bnROb2RlICYmIHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKSAhPSBwYXJlbnROb2RlLT5sYXN0Q2hp
bGQoKSkgfHwgIW5vZGUtPmhhc1RhZ05hbWUoZGl2VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBub2RlLT5hdHRyaWJ1
dGVzKCk7Ci0gICAgaWYgKCFhdHRyaWJ1dGVNYXAgfHwgYXR0cmlidXRlTWFwLT5pc0VtcHR5KCkp
CisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIXRvRWxlbWVudChub2RlKS0+aGFz
QXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIHJldHVybiBm
YWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKaW5kZXggZjQwYzE1Y2I0YjdhMjZjMjBlN2Yy
OTI2NjFiOWJlZDRkYjUwNDEzMy4uZTY0NmI1MWYyMmFhZWE4MWQ3Y2YwN2QzNzNlOTg4YmQ2OTEz
NTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBFbGVt
ZW50KiBoaWdoZXN0VmlzdWFsbHlFcXVpdmFsZW50RGl2QmVsb3dSb290KEVsZW1lbnQqIHN0YXJ0
QmxvY2spCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gYSByb290IG5vZGUgKGlmIGl0
IGhhcHBlbnMgdG8gYmUgYSBkaXYsIGUuZy4sIGluIGEgZG9jdW1lbnQgZnJhZ21lbnQpIGJlY2F1
c2UgdGhlcmUgYXJlIG5vCiAgICAgLy8gc2libGluZ3MgZm9yIHVzIHRvIGFwcGVuZCB0by4KICAg
ICB3aGlsZSAoIWN1ckJsb2NrLT5uZXh0U2libGluZygpICYmIGN1ckJsb2NrLT5wYXJlbnRFbGVt
ZW50KCktPmhhc1RhZ05hbWUoZGl2VGFnKSAmJiBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpLT5w
YXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gY3Vy
QmxvY2stPnBhcmVudEVsZW1lbnQoKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVzID0gY3VyQmxvY2stPnBhcmVudEVsZW1lbnQoKS0+dXBkYXRlZEF0
dHJpYnV0ZXMoKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWF0dHJpYnV0ZXMtPmlzRW1w
dHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJCbG9jayA9IGN1ckJsb2NrLT5w
YXJlbnRFbGVtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1
cEFjY3VtdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwCmluZGV4IGM3ZDI3MGZjNzI2MDI3Y2I1MzUzNTJmYzIzYWI5Nzk2YWM1NWU1MzcuLjUy
MjZiMjE0YzI1ODExNzYwOTM1YzU2Njk2NGU3NjMwZjAyZjlkMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCkBAIC0zNDksMTAgKzM0OSwxMiBAQCB2
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwg
RWxlbWVudCogZWxlbWVudCwgTmFtZQogewogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50
LCBuYW1lc3BhY2VzKTsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQt
PmF0dHJpYnV0ZXMoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVzLT5sZW5ndGgo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlcy0+YXR0cmlidXRlSXRl
bShpKSwgbmFtZXNwYWNlcyk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVu
dC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoYXR0cmlidXRlcykgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGFwcGVuZEF0dHJp
YnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3Bh
Y2VzKTsKKyAgICB9CiAKICAgICAvLyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMg
dG8gYWRkIHRoZWlyIG93biBhdHRyaWJ1dGVzLgogICAgIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMo
b3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAKaW5kZXggNGU2ZDUyODE0NGJjMmQ5OGZjYWExMWJmMzVkY2E1NGI0ZGRlNGZlMi4uMjhj
YzAyOWQwMWIwNTk5MDI0ODVmMTA2YTk0MDUyMmQwZTJiNDcxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTExNTcsMjAgKzExNTcsMTMgQEAgYm9vbCBhcmVJZGVu
dGljYWxFbGVtZW50cyhjb25zdCBOb2RlKiBmaXJzdCwgY29uc3QgTm9kZSogc2Vjb25kKQogICAg
IGlmICghdG9FbGVtZW50KGZpcnN0KS0+dGFnUU5hbWUoKS5tYXRjaGVzKHRvRWxlbWVudChzZWNv
bmQpLT50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTmFtZWROb2Rl
TWFwKiBmaXJzdE1hcCA9IHRvRWxlbWVudChmaXJzdCktPmF0dHJpYnV0ZXMoKTsKLSAgICBOYW1l
ZE5vZGVNYXAqIHNlY29uZE1hcCA9IHRvRWxlbWVudChzZWNvbmQpLT5hdHRyaWJ1dGVzKCk7Ci0g
ICAgdW5zaWduZWQgZmlyc3RMZW5ndGggPSBmaXJzdE1hcC0+bGVuZ3RoKCk7Ci0KLSAgICBpZiAo
Zmlyc3RMZW5ndGggIT0gc2Vjb25kTWFwLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpcnN0TGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBmaXJzdE1hcC0+YXR0cmlidXRlSXRlbShpKTsK
LSAgICAgICAgQXR0cmlidXRlKiBzZWNvbmRBdHRyaWJ1dGUgPSBzZWNvbmRNYXAtPmdldEF0dHJp
YnV0ZUl0ZW0oYXR0cmlidXRlLT5uYW1lKCkpOwotICAgICAgICBpZiAoIXNlY29uZEF0dHJpYnV0
ZSB8fCBhdHRyaWJ1dGUtPnZhbHVlKCkgIT0gc2Vjb25kQXR0cmlidXRlLT52YWx1ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBOYW1lZE5vZGVNYXAqIGZpcnN0TWFw
ID0gdG9FbGVtZW50KGZpcnN0KS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBOYW1lZE5vZGVN
YXAqIHNlY29uZE1hcCA9IHRvRWxlbWVudChzZWNvbmQpLT51cGRhdGVkQXR0cmlidXRlcygpOwog
CisgICAgaWYgKGZpcnN0TWFwKQorICAgICAgICByZXR1cm4gZmlyc3RNYXAtPm1hcHNFcXVpdmFs
ZW50KHNlY29uZE1hcCk7CisgICAgaWYgKHNlY29uZE1hcCkKKyAgICAgICAgcmV0dXJuIHNlY29u
ZE1hcC0+bWFwc0VxdWl2YWxlbnQoZmlyc3RNYXApOwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggYzY0NDFlNjMwMGU5ZTVmM2U4MzdkYTEwZGZk
MTAyNWNkNGExYzZjZC4uYTU0ODJhZjIzNGI2NGJmMzAyZGRhOWMxYjI3MTk4OTU0YzkwN2IxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTA0LDcgKzEwNCw5IEBAIHN0YXRpYyB2
b2lkIGNvbXBsZXRlVVJMcyhOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwpCiAgICAg
Zm9yIChOb2RlKiBuID0gbm9kZTsgbiAhPSBlbmQ7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgRWxlbWVu
dCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIE5hbWVkTm9kZU1h
cCogYXR0cmlidXRlcyA9IGUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIE5hbWVkTm9kZU1h
cCogYXR0cmlidXRlcyA9IGUtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICBpZiAo
IWF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0
ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKQEAgLTI4Nyw4ICsy
ODksOCBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmlu
Z0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudAogICAgIGNvbnN0IGJvb2wgZG9jdW1lbnRJ
c0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpOwogICAgIGFwcGVu
ZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRl
cyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKLSAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBh
dHRyaWJ1dGVzLT5sZW5ndGgoKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVt
ZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGF0
dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzLT5sZW5ndGgoKSA6IDA7CiAgICAgY29uc3QgYm9vbCBzaG91
bGRBbm5vdGF0ZU9yRm9yY2VJbmxpbmUgPSBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgKHNo
b3VsZEFubm90YXRlKCkgfHwgYWRkRGlzcGxheUlubGluZSk7CiAgICAgY29uc3QgYm9vbCBzaG91
bGRPdmVycmlkZVN0eWxlQXR0ciA9IHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSB8fCBzaG91
bGRBcHBseVdyYXBwaW5nU3R5bGUoZWxlbWVudCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtODIyLDcgKzgyNCw3IEBAIHN0YXRpYyB2b2lkIGZp
bGxDb250YWluZXJGcm9tU3RyaW5nKENvbnRhaW5lck5vZGUqIHBhcmFncmFwaCwgY29uc3QgU3Ry
aW5nJiBzdHJpCiAKIGJvb2wgaXNQbGFpblRleHRNYXJrdXAoTm9kZSAqbm9kZSkKIHsKLSAgICBp
ZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShkaXZUYWcpIHx8
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+YXR0cmlidXRlcygpLT5sZW5ndGgoKSkKKyAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShkaXZUYWcp
IHx8IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aGFzQXR0cmlidXRlcygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkgPT0g
MSAmJiAobm9kZS0+Zmlyc3RDaGlsZCgpLT5pc1RleHROb2RlKCkgfHwgKG5vZGUtPmZpcnN0Q2hp
bGQoKS0+Zmlyc3RDaGlsZCgpKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmNwcAppbmRleCAwOGMxNWU5MjUwNjZkMmY5ZTBjZWE0OGZiODdiMjg3YjNhMjU4NzJiLi4zMDlh
YWZlMDU1YTNhMWJmNGY0NWIxNWVmOTJiMTI3NDUxODhmMDRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEhUTUxFbWJl
ZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIAogdm9pZCBI
VE1MRW1iZWRFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCiB7Ci0gICAgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzID0gdGhpcy0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAq
IGF0dHJpYnV0ZXMgPSB1cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlmICghYXR0cmlidXRlcykK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCmluZGV4IDkyNTI3NWY2NzFkNDcxNjU5OGFlMjliNDBlNjAyMTZiZTgxM2NlNGIuLjU5MGQ2
OWI5OGIyNGM5NmI3MDc0MTFjYjVkODcwMjNhM2U5ODljMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudDo6cGFyYW1ldGVyc0ZvclBsdWdpbihWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywgVmVjdG9yPFMKICAgICB9CiAgICAgCiAgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBvZiB0
aGUgPG9iamVjdD4gZWxlbWVudCBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92ZXJyaWRlIDxwYXJh
bT4gdmFsdWVzLgotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRoaXMtPmF0dHJpYnV0
ZXModHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdXBkYXRlZEF0dHJpYnV0
ZXMoKTsKICAgICBpZiAoYXR0cmlidXRlcykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgQXR0cmlidXRl
KiBpdCA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MUGFyYW1FbGVtZW50LmNwcAppbmRleCBkMWY1M2ExNGRiNzQxYjYxOTg4NTk1ZTA3MzI0NTg1
MzRjNzNmYWMyLi5hYTIyOGJjMzE2NjNhYjA4MmEzMjAyMmI4NGUxY2UzZWIwOWJmYWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAKQEAgLTY1LDEwICs2NSwxMCBA
QCB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKIAogYm9vbCBIVE1MUGFyYW1FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
IGF0dHIpIGNvbnN0CiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKLSAg
ICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKG5h
bWVBdHRyKTsKLSAgICAgICAgaWYgKGF0dHIpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFs
dWVBdHRyICYmIGhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICBBdHRyaWJ1dGUqIG5hbWVBdHRy
aWJ1dGUgPSBhdHRyaWJ1dGVNYXAoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lQXR0cik7CisgICAg
ICAgIGlmIChuYW1lQXR0cmlidXRlKSB7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gbmFtZUF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICAgICAgICAgIGlmIChpc1VSTFBh
cmFtZXRlcih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmNwcAppbmRleCA0Y2Y3OThjNjkwY2ZiZmIxY2JhOGRlNjAwOWM5ZTU2MzRhMGM0Yjk0Li4wZWU4
OWYxNTI1MDMyODEyM2M3ZjA0MTg2NTJjMThlMzQ5ODMyMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC0yMDgsNyAr
MjA4LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRv
a2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJgogICAgIGlmICghdG9rZW4uYXR0cmlidXRl
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBl
bGVtZW50LT5hdHRyaWJ1dGVzKGZhbHNlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMg
PSBlbGVtZW50LT5lbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAg
QXR0cmlidXRlKiBhdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZUl0ZW0o
aSk7CiAgICAgICAgIGlmICghYXR0cmlidXRlcy0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUt
Pm5hbWUoKSkpCkBAIC00MjUsNyArNDI1LDcgQEAgbmFtZXNwYWNlIHsKIC8vIEZJWE1FOiBNb3Zl
IHRoaXMgZnVuY3Rpb24gdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KIGlubGluZSBQYXNzT3duUHRy
PE5hbWVkTm9kZU1hcD4gY2xvbmVBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygp
OwogICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IGIxYTU5
YTM5NGI0N2RiNTM2MzI4ODI1NTkxYTQ2YTEzMTdjMjQ1MGMuLjA2NjM1ZjUyMzM2YzlmZDQwNGIz
NDE4ZTgyOTRmNWJiNzVkOWQzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcApAQCAtNzE3LDcgKzcxNywxMCBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1
bGVMaXN0KgogUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGF0dHJTdHlsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwor
ICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVz
KCk7CisgICAgaWYgKCFhdHRyaWJ1dGVzKQorICAgICAgICByZXR1cm4gYXR0clN0eWxlcy5yZWxl
YXNlKCk7CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRy
aWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
YXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPmRl
Y2woKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CmluZGV4IDI4YzBmM2I3ZDAxOTk3OTdmMTE2MTkyNTUwZjRkY2I3NzBjY2E1MzEuLmI1MDAyNWJi
MDA5NzdhNTZiZmJjYjZlMmMzZmEwMTYyYzkyNmU0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNTMwLDcgKzUzMCw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBpbnQgZWxlbWVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBO
YW1lZE5vZGVNYXAqIGF0dHJNYXAgPSB0b0hUTUxFbGVtZW50KGNoaWxkKS0+YXR0cmlidXRlcyh0
cnVlKTsKKyAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJNYXAgPSB0b0hUTUxFbGVtZW50KGNo
aWxkKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJNYXAgJiYgbmFtZSkgewog
ICAgICAgICBlbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUoKm5hbWUpOwogICAgICAgICByZXR1cm47
CkBAIC03ODEsNyArNzgxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW0KICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIEdv
IHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtLgotICAgICAgICAgICAg
ICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBOYW1lZE5vZGVN
YXAqIGF0dHJNYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPnVwZGF0ZWRBdHRyaWJ1
dGVzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhdHRyTWFwKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIApAQCAtMTE1OSw3ICsxMTU5LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGUK
IHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGF0dHJpYnV0ZXNWYWx1ZSA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKICAgICAvLyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBz
ZXJpYWxpemUgdGhlbS4KLSAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJNYXAgPSBlbGVtZW50
LT5hdHRyaWJ1dGVzKHRydWUpOworICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IGVs
ZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRyTWFwKQogICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlc1ZhbHVlLnJlbGVhc2UoKTsKICAgICB1bnNpZ25lZCBudW1BdHRycyA9
IGF0dHJNYXAtPmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApp
bmRleCA5OWFiMmVmZTQyZDA4Y2FhMDVjZjA5NDZiNTk0ZjlmNjY0YTI0MjIxLi4yYzM3NzhiNDYw
MzIwYmNkY2ViYWYwN2M5ZTg1MzA3NWNiZTIwZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcApAQCAtNjksMTEgKzY5LDEyIEBAIHN0YXRpYyBib29sIGlzQ2hhcnNldFNw
ZWNpZnlpbmdOb2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bWV0YVRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MTWV0YUNo
YXJzZXRQYXJzZXI6OkF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBjb25zdCBOYW1lZE5v
ZGVNYXAqIGF0dHJpYnV0ZXNNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzTWFwLT5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgIEF0dHJpYnV0ZSogaXRlbSA9IGF0dHJpYnV0ZXNNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGVhbCBhcHByb3ByaWF0ZWx5IHdpdGggdGhl
IGF0dHJpYnV0ZSBpZiB0aGV5IGhhdmUgYSBuYW1lc3BhY2UuCi0gICAgICAgIGF0dHJpYnV0ZXMu
YXBwZW5kKG1ha2VfcGFpcihpdGVtLT5uYW1lKCkudG9TdHJpbmcoKSwgaXRlbS0+dmFsdWUoKS5z
dHJpbmcoKSkpOworICAgIGlmIChjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXNNYXAgPSBl
bGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhdHRyaWJ1dGVzTWFwLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBBdHRy
aWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBkZWFsIGFwcHJvcHJpYXRlbHkgd2l0aCB0aGUgYXR0cmli
dXRlIGlmIHRoZXkgaGF2ZSBhIG5hbWVzcGFjZS4KKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuYXBw
ZW5kKG1ha2VfcGFpcihpdGVtLT5uYW1lKCkudG9TdHJpbmcoKSwgaXRlbS0+dmFsdWUoKS5zdHJp
bmcoKSkpOworICAgICAgICB9CiAgICAgfQogICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmcg
PSBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpOwogICAgIHJldHVybiB0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9u
aXplci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0
eVN5bmNocm9uaXplci5oCmluZGV4IGNiNzg5ZjNmMTgxZTE2YzZhODM0ZWM5OTU3NmRiYWVmMzk4
N2IxNTguLmU2YmQwMTNlYmY4ZmUwNmRlMjRkZjhhNjY4Y2UxMTNmMmJlY2E5MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5j
aHJvbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFByb3BlcnR5U3luY2hyb25pemVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgc3RydWN0IFNWR0FuaW1h
dGVkUHJvcGVydHlTeW5jaHJvbml6ZXI8dHJ1ZT4gewogICAgICAgICAvLyBBdHRyaWJ1dGUgZGly
ZWN0bHkgdG8gYXZvaWQgYSBjYWxsIHRvIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQKICAgICAg
ICAgLy8gdGhhdCBjb3VsZCBjYXVzZSB0aGUgU1ZHRWxlbWVudCB0byBlcnJvbmVvdXNseSByZXNl
dCBpdHMgcHJvcGVydGllcy4KICAgICAgICAgLy8gc3ZnL2RvbS9TVkdTdHJpbmdMaXN0LWJhc2lj
cy54aHRtbCBleGVyY2lzZXMgdGhpcyBiZWhhdmlvci4KLSAgICAgICAgTmFtZWROb2RlTWFwKiBu
YW1lZEF0dHJNYXAgPSBvd25lckVsZW1lbnQtPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICBO
YW1lZE5vZGVNYXAqIG5hbWVkQXR0ck1hcCA9IG93bmVyRWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0
dHJpYnV0ZXMoKTsKICAgICAgICAgQXR0cmlidXRlKiBvbGQgPSBuYW1lZEF0dHJNYXAtPmdldEF0
dHJpYnV0ZUl0ZW0oYXR0ck5hbWUpOwogICAgICAgICBpZiAob2xkICYmIHZhbHVlLmlzTnVsbCgp
KQogICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5yZW1vdmVBdHRyaWJ1dGUob2xkLT5uYW1lKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKaW5kZXggN2IzZjU4ZjNiNTY2MjIx
MDdiZDZiODliYTJmM2U3MTJlOGJiZGUyNi4uMjgzNTgzZDc4M2FmYTZlZjEwZWE3NzkyY2IyMDlj
ZDUxMzQzMzVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCkBAIC01OTEs
OSArNTkxLDEwIEBAIFZhbHVlIEZ1bkxhbmc6OmV2YWx1YXRlKCkgY29uc3QKICAgICBBdHRyaWJ1
dGUqIGxhbmd1YWdlQXR0cmlidXRlID0gMDsKICAgICBOb2RlKiBub2RlID0gZXZhbHVhdGlvbkNv
bnRleHQoKS5ub2RlLmdldCgpOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIE5hbWVkTm9k
ZU1hcCogYXR0cnMgPSBub2RlLT5hdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGlmIChhdHRycykKLSAg
ICAgICAgICAgIGxhbmd1YWdlQXR0cmlidXRlID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oWE1M
TmFtZXM6OmxhbmdBdHRyKTsKKyAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewor
ICAgICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRvRWxlbWVudChub2Rl
KS0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgICAgICBsYW5ndWFnZUF0dHJpYnV0
ZSA9IGF0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0oWE1MTmFtZXM6OmxhbmdBdHRyKTsKKyAg
ICAgICAgfQogICAgICAgICBpZiAobGFuZ3VhZ2VBdHRyaWJ1dGUpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
Tm9kZVNldC5jcHAKaW5kZXggZWRiNzdlYmQ1MTYyNDI5ZWI1ODFlODNjMjhjZWM5YjQ2MjEwMDQ3
YS4uOGVlZmM1NzNmZjQ0Nzk0MjUyMWZiZDA3N2FkZjE1MjFkMmEzOWFmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoTm9kZVNldC5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIE5vZGVTZXQ6OnRy
YXZlcnNhbFNvcnQoKSBjb25zdAogICAgICAgICBpZiAoIWNvbnRhaW5zQXR0cmlidXRlTm9kZXMg
fHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRvRWxlbWVudChuKS0+YXR0cmlidXRlcyh0cnVl
IC8qIHJlYWQtb25seSAqLyk7CisgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRv
RWxlbWVudChuKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVz
KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFN0ZXAuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKaW5kZXgg
Mjg2NmFiNmExYTlhYTY4ZTAwYzI0YTFkNzc0YmZmYjAwYzgyYTAzZS4uMTJmMzk0ZjJjYTBiNDQ1
NmE4MWQxMDg5ODNiNzkyNGQ1YzRkODc1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoU3RlcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKQEAg
LTMyOCwxMiArMzI4LDE0IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwg
Tm9kZVNldCYgbm9kZXMpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOiB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAg
IEVsZW1lbnQqIGNvbnRleHRFbGVtZW50ID0gdG9FbGVtZW50KGNvbnRleHQpOworCiAgICAgICAg
ICAgICAvLyBBdm9pZCBsYXppbHkgY3JlYXRpbmcgYXR0cmlidXRlIG5vZGVzIGZvciBhdHRyaWJ1
dGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW55d2F5LgogICAgICAgICAgICAgaWYgKG1fbm9kZVRl
c3Qua2luZCgpID09IE5vZGVUZXN0OjpOYW1lVGVzdCAmJiBtX25vZGVUZXN0LmRhdGEoKSAhPSBz
dGFyQXRvbSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KGNvbnRleHQpLT5nZXRBdHRyaWJ1dGVOb2RlTlMobV9ub2RlVGVzdC5uYW1lc3Bh
Y2VVUkkoKSwgbV9ub2RlVGVzdC5kYXRhKCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBuID0gY29udGV4dEVsZW1lbnQtPmdldEF0dHJpYnV0ZU5vZGVOUyhtX25vZGVUZXN0Lm5hbWVz
cGFjZVVSSSgpLCBtX25vZGVUZXN0LmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG4gJiYg
bi0+bmFtZXNwYWNlVVJJKCkgIT0gWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkkpIHsgLy8g
SW4gWFBhdGggbGFuZCwgbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgYWNjZXNzaWJsZSBvbiB0aGUg
YXR0cmlidXRlIGF4aXMuCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLmdl
dCgpLCBBdHRyaWJ1dGVBeGlzLCBtX25vZGVUZXN0KSkgLy8gU3RpbGwgbmVlZCB0byBjaGVjayBt
ZXJnZWQgcHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChu
LnJlbGVhc2UoKSk7CkBAIC0zNDEsNyArMzQzLDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhO
b2RlKiBjb250ZXh0LCBOb2RlU2V0JiBub2RlcykgY29uc3QKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5hbWVkTm9kZU1h
cCogYXR0cnMgPSBjb250ZXh0LT5hdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICBOYW1lZE5vZGVN
YXAqIGF0dHJzID0gY29udGV4dEVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgICAg
ICAgICBpZiAoIWF0dHJzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmlu
ZGV4IDBmZGQyMjcwODE1ZTRkMmYwMzhlZGIzNTYxMmRhMGE2ZjM0NjBkNmQuLjRlMWQ0OWVlZmQw
NGJmZWY2ODZlMGEyYzVjZTJiNjBjMWQ4ZDg3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTU5OSw3ICs1
OTksNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFn
bWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogCiAgICAgZm9yICg7ICFlbGVtU3RhY2su
aXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBlbGVtU3RhY2subGFzdCgpOwotICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRy
cyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKSkgeworICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBh
dHRycyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAg
ICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAg
ICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSB4bWxuc0F0b20pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRleCAwZWJmYWE5
OTA5OGUwMjQzMDg1YTZiOWU4M2M1NDgxNGMzYjlhMThjLi5jZDZlYTE0OTRmNTEyNjEwMjU4YzY4
MjM5MmIxYTU0ZjhhYjQzOTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCBYTUxEb2N1bWVudFBh
cnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1l
bnQqIHBhcmVudAogCiAgICAgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyBuYW1lc3Bh
Y2VzOwogICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVt
U3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7Ci0gICAgICAgIGlmIChO
YW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAgIGlm
IChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0
ZW0oaSk7CiAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09ICJ4bWxucyIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDY0
NzZhMWQ1N2Q2NmUwYmVhYWZlNTIxNmExNWMwZGM1NDdjMGNiOGMuLjhkZTFhMDgxN2E0ZTRkZjFi
YThhODA4YWM5Mzk2NzVhN2FlYTAzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC04MCw3ICs4MCw3IEBAIFhNTFRyZWVCdWlsZGVyOjpYTUxU
cmVlQnVpbGRlcihOZXdYTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50
KiBmCiAKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQ7ICFub2RlU3RhY2suaXNFbXB0eSgpOyBu
b2RlU3RhY2sucmVtb3ZlTGFzdCgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBub2RlU3RhY2subGFz
dCgpOwotICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0
ZXMoKSkgeworICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0
ZWRBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0
cnMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBh
dHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxO
YW1lKCkgPT0geG1sbnNBdG9tKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCmluZGV4
IDZiMTg5OTQ2NjYzMTJkYjBkYzNhMGNiMTYwYTBlMDZhOTBjNWMxMDQuLjJkZGRhOGIwNDlmZWM5
MDZmMzVkZTliNmJhZjI1Mzk1YmY4NGIwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJlbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVu
dC5jcHAKQEAgLTUwMyw3ICs1MDMsNyBAQCBRU3RyaW5nTGlzdCBRV2ViRWxlbWVudDo6YXR0cmli
dXRlTmFtZXMoY29uc3QgUVN0cmluZyYgbmFtZXNwYWNlVXJpKSBjb25zdAogICAgICAgICByZXR1
cm4gUVN0cmluZ0xpc3QoKTsKIAogICAgIFFTdHJpbmdMaXN0IGF0dHJpYnV0ZU5hbWVMaXN0Owot
ICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogY29uc3QgYXR0cnMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0
ZXMoLyogcmVhZCBvbmx5ID0gKi8gdHJ1ZSk7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBjb25z
dCBhdHRycyA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoYXR0cnMp
IHsKICAgICAgICAgY29uc3QgU3RyaW5nIG5hbWVzcGFjZVVyaVN0cmluZyhuYW1lc3BhY2VVcmkp
OyAvLyBjb252ZXJ0IFFTdHJpbmcgLT4gU3RyaW5nIG9uY2UKICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgYXR0cnNDb3VudCA9IGF0dHJzLT5sZW5ndGgoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125033</attachid>
            <date>2012-02-01 15:28:20 -0800</date>
            <delta_ts>2012-02-01 16:20:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77574-20120201202821.patch</filename>
            <type>text/plain</type>
            <size>46804</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU0MmI1ZmI2Y2NkYjAw
MDE1MjE4NGFmYjEyMGQzNDJiZTdmMGU1YS4uOTk5ZWViMzA0ODRjMjg2ZDA0ZjBkZTM3ZDIwODVm
YjE4ZTY5MjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAxMi0wMi0wMSAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIEF2b2lkIGNyZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtZXRob2Qg
RWxlbWVudDo6YXR0cmlidXRlcygpIHdhcyBiZWluZyB1c2VkIGZvciBtdWx0aXBsZSB0aGluZ3Mg
aW4gb3VyCisgICAgICAgIGNvZGViYXNlOiAoMSkgYXMgdGhlIGdldHRlciBmb3IgTmFtZWROb2Rl
TWFwIGV4cG9zZWQgdG8gRE9NLCAoMikgYXMgYSB3YXkgdG8gb3RoZXIgV2ViQ29yZQorICAgICAg
ICBjb2RlIGdldCB0aGUgImF0dHJpYnV0ZSBzdG9yYWdlIiAoY3VycmVudGx5IGluc2lkZSBOYW1l
ZE5vZGVNYXApLCBhbmQgKDMpIGFzIGEgd2F5IHRvCisgICAgICAgIGdldCB0aGUgYXR0cmlidXRl
IHN0b3JhZ2UgY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICBUaGlzIGNvbW1p
dCBzZXBhcmF0ZSB0aGUgam9icyBpbiBkaWZmZXJlbnQgZnVuY3Rpb25zOgorCisgICAgICAgIDEp
IGF0dHJpYnV0ZXMoKSBrZWVwcyBiZWluZyB0aGUgRE9NIGdldHRlciwgYW5kIGxvc2VzIGl0cyBi
b29sZWFuIHBhcmFtZXRlci4KKworICAgICAgICAyKSB1cGRhdGVkQXR0cmlidXRlcygpIHVwZGF0
ZXMgdGhlIGludmFsaWQgYXR0cmlidXRlcyBhbmQgcmV0dXJucyB0aGUgYXR0cmlidXRlCisgICAg
ICAgIHN0b3JhZ2UuIElmIHdlIGRvbid0IGhhdmUgb25lLCByZXR1cm4gMC4KKworICAgICAgICAz
KSBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpIHVwZGF0ZXMgdGhlIGludmFsaWQgYXR0cmlidXRl
cyBhbmQgZm9yY2VzIHRoZQorICAgICAgICBjcmVhdGlvbiBvZiBhdHRyaWJ1dGUgc3RvcmFnZSB0
byByZXR1cm4uCisKKyAgICAgICAgVGhlcmUgaXMgYWxzbyBhbm90aGVyIHdheSB0byBnZXQgdG8g
dGhlIGF0dHJpYnV0ZSBzdG9yYWdlIGN1cnJlbnRseSwgdmlhCisgICAgICAgIGF0dHJpYnV0ZU1h
cCgpLCB3aGljaCBkb2Vzbid0IHVwZGF0ZSB0aGUgYXR0cmlidXRlcyBmb3IgcG9zc2libGUgY2hh
bmdlcyBpbiBTdHlsZQorICAgICAgICBvciBTVkcgYXR0cmlidXRlcy4KKworICAgICAgICBOb3Rl
IHRoYXQgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4gTm9kZSBjbGFzcywg
c28gQysrIGNvZGUgbWFuaXB1bGF0aW5nCisgICAgICAgIGF0dHJpYnV0ZXMgc2hvdWxkIGNhc3Qg
dG8gRWxlbWVudC4KKworICAgICAgICBUaGlzIHNlcGFyYXRpb24gYWxzbyBtYWRlIGVhc2llciB0
byBzcG90IGFuZCBmaXggc29tZSBwbGFjZXMgd2hlcmUgd2UgZG8gbm90CisgICAgICAgIG5lZWQg
dG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBjb21taXQgc2hvdWxkbid0IGNoYW5nZSB0aGUgYmVo
YXZpb3Igb2YgZXhpc3RpbmcgY29kZS4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KToKKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpnZXROYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhc2V0RE9NU3RyaW5nTWFwOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRET01T
dHJpbmdNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcG9ydE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0
QXR0cmlidXRlTm9kZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJp
YnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om5vcm1h
bGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjplbnN1cmVVcGRhdGVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojp1cGRhdGVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5z
dXJlQXR0cmlidXRlTWFwKTogTWFkZSBjb25zdCB0byBiZSByZXVzZWQgYnkgZW5zdXJlVXBkYXRl
ZEF0dHJpYnV0ZXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUludmFsaWRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjptYXBzRXF1aXZhbGVudCk6
IEhhdmluZyBubyBhdHRyaWJ1dGVzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgbm90IGhhdmlu
ZyBhbiBhdHRyaWJ1dGUgc3RvcmFnZSBiZWNhdXNlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZSBpcyBs
YXppbHkgY3JlYXRlZC4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjppc0VxdWFsTm9kZSk6IERvIG5vdCBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYXR0cmli
dXRlIHN0b3JhZ2UgdG8KKyAgICAgICAgY29tcGFyZSB0d28gbm9kZXMuCisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjppc0RlZmF1bHROYW1lc3BhY2UpOiBVc2UgdXBkYXRlZEF0dHJpYnV0ZXMoKS4g
U2luY2Ugd2UgaXRlcmF0ZQorICAgICAgICB1c2luZyBsZW5ndGgsIGl0J3MgT0sgaWYgdGhlIGF0
dHJpYnV0ZSBzdG9yYWdlIGlzIGVtcHR5LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bG9va3Vw
TmFtZXNwYWNlVVJJKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1l
c3BhY2VQcmVmaXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlGb250VGFnKToKKyAgICAgICAgKiBlZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjppc1JlbW92YWJsZUJsb2NrKTogVXNlIGlzRWxlbWVudE5vZGUoKSBleHBs
aWNpdGx5CisgICAgICAgIHRvIGlkZW50aWZ5IG5vbi1FbGVtZW50IG5vZGVzLCB0aGVuIHVzZSBo
YXNBdHRyaWJ1dGVzKCkgaWYgaXMgRWxlbWVudC4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGlnaGVzdFZp
c3VhbGx5RXF1aXZhbGVudERpdkJlbG93Um9vdCk6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudCk6IERvIG5vdCBjcmVhdGUgdGhlIGF0dHJpYnV0ZSBzdG9yYWdlCisgICAgICAg
IHVubmVjZXNzYXJpbHkuCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphcmVJZGVudGljYWxFbGVtZW50cyk6IERvIG5vdCBjcmVhdGUgdGhlIGF0
dHJpYnV0ZSBzdG9yYWdlCisgICAgICAgIHVubmVjZXNzYXJpbHkuIFVzZSBtYXBzRXF1aXZhbGVu
dCgpIGZvciBjb21wYXJpbmcgdGhlIGF0dHJpYnV0ZXMuCisgICAgICAgICogZWRpdGluZy9tYXJr
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxldGVVUkxzKTogRG8gbm90IGNyZWF0ZSB0
aGUgYXR0cmlidXRlIHN0b3JhZ2UgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjppc1BsYWluVGV4dE1hcmt1cCk6IGhhc0F0dHJpYnV0ZXMoKSB3aWxsIGF2b2lkIGNy
ZWF0aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgc3RvcmFnZSB1bm5lY2Vzc2FyaWx5LgorICAg
ICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RW1iZWRFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAgKiBodG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpw
YXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUpOiBE
byBub3QgY3JlYXRlIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZQorICAgICAgICB1bm5lY2Vzc2FyaWx5
LgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9r
ZW5JbnRvRWxlbWVudCk6IFVzZQorICAgICAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpIHNp
bmNlIHdlIHdpbGwgYWRkIG5ldyBhdHRyaWJ1dGVzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yQXR0cmlidXRlU3R5bGVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyk6CisgICAg
ICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NoYXJz
ZXRTcGVjaWZ5aW5nTm9kZSk6IERvIG5vdCBhc3N1bWUgYXR0cmlidXRlTWFwIHdpbGwgZXhpc3Qu
CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXpl
ci5oOiBVc2UgZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKQorICAgICAgICBzaW5jZSB3ZSB3aWxs
IGFkZCBuZXcgYXR0cmlidXRlcy4KKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkxhbmc6OmV2YWx1YXRlKTogRG8gbm90IGNyZWF0
ZSB0aGUgYXR0cmlidXRlIHN0b3JhZ2UKKyAgICAgICAgdW5uZWNlc3NhcmlseS4KKyAgICAgICAg
KiB4bWwvWFBhdGhOb2RlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0
Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6IFVzZSBpc0VsZW1lbnROb2RlKCkg
aW5zdGVhZCBvZiBjb21wYXJpbmcKKyAgICAgICAgbm9kZVR5cGUoKSBtYW51YWxseS4gRG8gbm90
IGNyZWF0ZSB0aGUgYXR0cmlidXRlIHN0b3JhZ2UgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOiBEbyBub3QgY3JlYXRlIHRo
ZSBhdHRyaWJ1dGUKKyAgICAgICAgc3RvcmFnZSB1bm5lY2Vzc2FyaWx5LgorICAgICAgICAqIHht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOiBEaXR0by4KKyAgICAgICAgKiB4bWwv
cGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVCdWls
ZGVyOjpYTUxUcmVlQnVpbGRlcik6IERpdHRvLgorCiAyMDEyLTAyLTAxICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGRlYnVn
Z2VyIHJlcG9ydHMgd3Jvbmcgc291cmNlcyB3aGVuIHBhdXNlZCBpbiBpbmxpbmUgc2NyaXB0IG9u
IHBhZ2UgcmVsb2FkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGM5N2U0YzNiOGI0YTUx
Nzc4MzliYmNmN2ExZjViNmI1MjgzZTA3MDAuLmE0ZmQ1ZWRhZjA4NDQyYmZhOTkwZjZmN2Y1NDJk
ZjQ3ZmY5Mzk0MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDItMDEgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVp
cmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBBdm9pZCBjcmVhdGluZyBOYW1lZE5vZGVNYXAg
dW5uZWNlc3NhcmlseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzc1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyk6IHVzZSB1cGRhdGVkQXR0cmli
dXRlcygpLgorCiAyMDEyLTAyLTAxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbQ2hyb21pdW1dIERpc2FibGUgV2ViRnJhbWVUZXN0LkZpbmRJblBhZ2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cKaW5kZXggY2NkOWY2YTkzYjkzNGJjN2ViZTZhN2YxMmZlZTk2ODgzODcwOTE5MS4u
YmQ5NjMwZjVjMDg2OWQwNmVhNmM2NmVhNjE5Njg5YTk0ZjBkNjI0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMi0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZp
bGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIEF2b2lkIGNyZWF0
aW5nIE5hbWVkTm9kZU1hcCB1bm5lY2Vzc2FyaWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJlbGVtZW50LmNwcDoKKyAgICAgICAgKFFX
ZWJFbGVtZW50OjphdHRyaWJ1dGVOYW1lcyk6IHVzZSB1cGRhdGVBdHRyaWJ1dGVzKCkuCisKIDIw
MTItMDEtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFRy
eSB0byBmaXggUXQgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmlu
ZGV4IDgyMDVhZjAzOWNhOWM4M2JhOWM2YjQ3MDM5MWY5OTg1ZWNmYmVlYTQuLjM2NzdmY2Y3OWIw
MDJiNDRlN2UwMmQ3YWUwYzAzNWE3MjNiODVmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCkBAIC03MDcsNyArNzA3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQK
ICAgICBpZiAoc2VsLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKICAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7CiAKLSAgICAgICAgTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVzID0gZS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVzID0gZS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICAgICAgaWYgKCFh
dHRyaWJ1dGVzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKaW5kZXggZTBkODc1ZGNiYjBkN2JlNjA0N2YxN2Yz
YTExMWVmNTkxMWYwZThiNS4uZGZmMGFkNzUwNzIwNjdlNTU2Y2UxZTI4NjE0NTEyNDI3ZTEzMGMw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcApAQCAtMTQy
LDcgKzE0Miw3IEBAIHZvaWQgRGF0YXNldERPTVN0cmluZ01hcDo6ZGVyZWYoKQogCiB2b2lkIERh
dGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKIHsKLSAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+YXR0cmlidXRlcyh0cnVl
KTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+dXBkYXRlZEF0
dHJpYnV0ZXMoKTsKICAgICBpZiAoYXR0cmlidXRlTWFwKSB7CiAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGF0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgRGF0YXNldERP
TVN0cmluZ01hcDo6Z2V0TmFtZXMoVmVjdG9yPFN0cmluZz4mIG5hbWVzKQogCiBTdHJpbmcgRGF0
YXNldERPTVN0cmluZ01hcDo6aXRlbShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBtX2VsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVz
KCk7CiAgICAgaWYgKGF0dHJpYnV0ZU1hcCkgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
dHRyaWJ1dGVNYXAtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKQEAgLTE3MCw3ICsxNzAsNyBAQCBTdHJpbmcgRGF0YXNldERPTVN0cmlu
Z01hcDo6aXRlbShjb25zdCBTdHJpbmcmIG5hbWUpCiAKIGJvb2wgRGF0YXNldERPTVN0cmluZ01h
cDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlTWFwID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1h
cCogYXR0cmlidXRlTWFwID0gbV9lbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlm
IChhdHRyaWJ1dGVNYXApIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlTWFw
LT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwOTZhMzhlZThiNWI1NjMyNjVjZTMzOWUx
ZmMyZTYyMTk4OWJmNjE0Li4xM2Q0NTAxMGMwNDkxMTE0ZjAxMDg4MmE0MzE5MjY1MTFhNWM4OGJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg0MSw3ICs4NDEsNyBAQCBQYXNzUmVmUHRy
PE5vZGU+IERvY3VtZW50OjppbXBvcnROb2RlKE5vZGUqIGltcG9ydGVkTm9kZSwgYm9vbCBkZWVw
LCBFeGNlcHRpb25DbwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gb2xkRWxlbWVudC0+YXR0cmlidXRlcyh0cnVl
KTsKKyAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IG9sZEVsZW1lbnQtPnVwZGF0ZWRBdHRy
aWJ1dGVzKCk7CiAgICAgICAgIGlmIChhdHRycykgewogICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXR0cnMtPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggOTFkODY2M2FjMDU4
Y2E5MDI0NGUzYmFkOWQ1NDUwZDAxZTZiNTMwMS4uNWEyMjAyMTI2ZmYxNDU0NjBjYzY5NDQzMmRi
MTNiYjBhMjA1NjRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjE2LDE0ICs2MTYsMTQg
QEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDog
bmFtZTsKIAotICAgIHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRyaWJ1
dGVJdGVtSW5kZXgobG9jYWxOYW1lLCBmYWxzZSk7CisgICAgc2l6ZV90IGluZGV4ID0gZW5zdXJl
VXBkYXRlZEF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFs
c2UpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0gbm90Rm91bmQg
PyBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6IFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOwogICAgIHNldEF0dHJpYnV0ZUlu
dGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQogewotICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlKTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRl
cm5hbChlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFt
ZSksIG5hbWUsIHZhbHVlKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRl
SW50ZXJuYWwoc2l6ZV90IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQpAQCAtNzc1LDE0ICs3NzUsNyBAQCB2b2lkIEVsZW1lbnQ6OnBh
cnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gbGlzdCwgRnJhZ21l
bnRTY3JpcAogCiBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogewotICAgIGlm
ICghaXNTdHlsZUF0dHJpYnV0ZVZhbGlkKCkpCi0gICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRl
KCk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghYXJlU1ZHQXR0cmlidXRlc1ZhbGlkKCkp
Ci0gICAgICAgIHVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1lKCkpOwotI2VuZGlm
Ci0KKyAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwogICAgIHJldHVybiBtX2F0dHJpYnV0
ZU1hcCAmJiBtX2F0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CiB9CiAKQEAgLTE0MjIsNyArMTQxNSw3
IEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZShBdHRyKiBhdHRy
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEF0
dHI+KGF0dHJpYnV0ZXMoZmFsc2UpLT5zZXROYW1lZEl0ZW0oYXR0ciwgZWMpKTsKKyAgICByZXR1
cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5z
ZXROYW1lZEl0ZW0oYXR0ciwgZWMpKTsKIH0KIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNDMx
LDcgKzE0MjQsNyBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGVO
UyhBdHRyKiBhdHRyLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBUWVBFX01JU01B
VENIX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBzdGF0aWNfcG9p
bnRlcl9jYXN0PEF0dHI+KGF0dHJpYnV0ZXMoZmFsc2UpLT5zZXROYW1lZEl0ZW0oYXR0ciwgZWMp
KTsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihlbnN1cmVVcGRhdGVkQXR0
cmlidXRlcygpLT5zZXROYW1lZEl0ZW0oYXR0ciwgZWMpKTsKIH0KIAogUGFzc1JlZlB0cjxBdHRy
PiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTQ0Nyw3ICsxNDQwLDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpyZW1v
dmVBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgQVNT
RVJUKGRvY3VtZW50KCkgPT0gYXR0ci0+ZG9jdW1lbnQoKSk7CiAKLSAgICBOYW1lZE5vZGVNYXAq
IGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBk
YXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKIApA
QCAtMTQ5Myw3ICsxNDg2LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25z
dCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE4KIAogUGFzc1JlZlB0
cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CkBAIC0xNTAyLDcgKzE0OTUsNyBA
QCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGUoY29uc3QgU3RyaW5n
JiBuYW1lKQogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyhj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCiB7Ci0g
ICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CisgICAgTmFtZWROb2Rl
TWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRycykKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oYXR0cnMt
PmdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSkpKTsKQEAgLTE1MTAsNyArMTUwMyw3IEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6
Z2V0QXR0cmlidXRlTm9kZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTCiAK
IGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsK
LSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJzKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1MjIsNyArMTUxNSw3IEBAIGJvb2wgRWxlbWVudDo6
aGFzQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIAogYm9vbCBFbGVtZW50Ojpo
YXNBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBs
b2NhbE5hbWUpIGNvbnN0CiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGF0dHJpYnV0ZXMo
dHJ1ZSk7CisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAg
ICAgaWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBhdHRycy0+
Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVz
cGFjZVVSSSkpOwpAQCAtMTcxMiw4ICsxNzA1LDcgQEAgdm9pZCBFbGVtZW50OjpjYW5jZWxGb2N1
c0FwcGVhcmFuY2VVcGRhdGUoKQogCiB2b2lkIEVsZW1lbnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMo
KQogewotICAgIC8vIE5vcm1hbGl6ZSBhdHRyaWJ1dGVzLgotICAgIE5hbWVkTm9kZU1hcCogYXR0
cnMgPSBhdHRyaWJ1dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSB1cGRhdGVk
QXR0cmlidXRlcygpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKaW5kZXggNTRlMTcxNjJlYjAxYmJjNjJmN2I4ZWQyZTQ4YWU2OWJiMzAzMTZkMi4u
MWQzN2VhZWMwZDgzNTlhNzhiYmNlNTM1OGM2YjdjYjgzZjdjNjc2YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCkBAIC0yMTQsNyArMjE0LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Qm9vbGVhbkF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sKTsKIAotICAgIE5hbWVkTm9k
ZU1hcCogYXR0cmlidXRlcyhib29sIHJlYWRvbmx5ID0gZmFsc2UpIGNvbnN0OworICAgIC8vIEZv
ciBleHBvc2luZyB0byBET00gb25seS4KKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoKSBj
b25zdCB7IHJldHVybiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOyB9CisKKyAgICBOYW1lZE5v
ZGVNYXAqIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgTmFtZWROb2RlTWFw
KiB1cGRhdGVkQXR0cmlidXRlcygpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHdoZW5ldmVyIGFuIGF0dHJpYnV0ZSBpcyBhZGRlZCwgY2hhbmdlZCBvciByZW1vdmVkLgog
ICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2Vy
dmVEZWNscyA9IGZhbHNlKTsKQEAgLTIyMywxMCArMjI3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHBhcnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4sIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CiAKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTWFwLmdldCgpOyB9Ci0gICAgTmFtZWROb2RlTWFw
KiBlbnN1cmVBdHRyaWJ1dGVNYXAoKTsKKyAgICBOYW1lZE5vZGVNYXAqIGVuc3VyZUF0dHJpYnV0
ZU1hcCgpIGNvbnN0OwogCiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEo
KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcCA/IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1
dGVEYXRhKCkgOiAwOyB9Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGVuc3VyZUF0dHJpYnV0
ZURhdGEoKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZURhdGEoKTsgfQor
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKS0+YXR0cmlidXRlRGF0YSgpOyB9CiAKICAg
ICB2b2lkIHNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50Jik7CiAKQEAgLTQw
OSw2ICs0MTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgSFRNTENvbGxlY3Rpb24qIGVuc3VyZUNhY2hl
ZEhUTUxDb2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHVw
ZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCkgY29uc3Q7CisKICAgICB2b2lkIHNjcm9sbEJ5VW5pdHMo
aW50IHVuaXRzLCBTY3JvbGxHcmFudWxhcml0eSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJl
Zml4KGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTUwMCwyNSArNTA2
LDIyIEBAIGlubGluZSBFbGVtZW50KiBOb2RlOjpwYXJlbnRFbGVtZW50KCkgY29uc3QKICAgICBy
ZXR1cm4gcGFyZW50ICYmIHBhcmVudC0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KHBhcmVu
dCkgOiAwOwogfQogCi1pbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKGJv
b2wgcmVhZG9ubHkpIGNvbnN0CitpbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50OjplbnN1cmVV
cGRhdGVkQXR0cmlidXRlcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1N0eWxlQXR0cmlidXRlVmFs
aWQoKSkKLSAgICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKLQotI2lmIEVOQUJMRShTVkcp
Ci0gICAgaWYgKCFhcmVTVkdBdHRyaWJ1dGVzVmFsaWQoKSkKLSAgICAgICAgdXBkYXRlQW5pbWF0
ZWRTVkdBdHRyaWJ1dGUoYW55UU5hbWUoKSk7Ci0jZW5kaWYKKyAgICB1cGRhdGVJbnZhbGlkQXR0
cmlidXRlcygpOworICAgIHJldHVybiBlbnN1cmVBdHRyaWJ1dGVNYXAoKTsKK30KIAotICAgIGlm
ICghcmVhZG9ubHkgJiYgIW1fYXR0cmlidXRlTWFwKQotICAgICAgICBjcmVhdGVBdHRyaWJ1dGVN
YXAoKTsKK2lubGluZSBOYW1lZE5vZGVNYXAqIEVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVzKCkg
Y29uc3QKK3sKKyAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwogICAgIHJldHVybiBtX2F0
dHJpYnV0ZU1hcC5nZXQoKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRl
c0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIG90aGVyKQogewotICAgIGlmIChOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZU1hcCA9IG90aGVyLmF0dHJpYnV0ZXModHJ1ZSkpCi0gICAgICAgIGF0dHJp
YnV0ZXMoZmFsc2UpLT5zZXRBdHRyaWJ1dGVzKCphdHRyaWJ1dGVNYXApOworICAgIGlmIChOYW1l
ZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG90aGVyLnVwZGF0ZWRBdHRyaWJ1dGVzKCkpCisgICAg
ICAgIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZU1h
cCk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUoY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpCkBAIC01OTgsMTMgKzYw
MSwyNCBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQogICAgIHNldEF0dHJpYnV0ZShkb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5h
bWUoKSwgdmFsdWUpOwogfQogCi1pbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50OjplbnN1cmVB
dHRyaWJ1dGVNYXAoKQoraW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6ZW5zdXJlQXR0cmli
dXRlTWFwKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYXR0cmlidXRlTWFwKQogICAgICAgICBjcmVh
dGVBdHRyaWJ1dGVNYXAoKTsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAuZ2V0KCk7CiB9CiAK
K2lubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCkgY29uc3QKK3sK
KyAgICBpZiAoIWlzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpKQorICAgICAgICB1cGRhdGVTdHlsZUF0
dHJpYnV0ZSgpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoIWFyZVNWR0F0dHJpYnV0ZXNW
YWxpZCgpKQorICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgpKTsK
KyNlbmRpZgorfQorCiBpbmxpbmUgRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGQoY29uc3QgQ29u
dGFpbmVyTm9kZSogY29udGFpbmVyKQogewogICAgIEFTU0VSVF9BUkcoY29udGFpbmVyLCBjb250
YWluZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCAwMTM0NDQxNGUzNWQ0
NmU3MDExZDBlNzBkMjY4YTJiMjBlZDEyMTMwLi43ZjYyMjk3NzUzNmE3ODUzOGNkNGJlNWExMzM4
OTFlMjhlZjAzYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApAQCAtMzA1LDcg
KzMwNSw3IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpyZXBsYWNlQXR0cmlidXRlKHNpemVfdCBpbmRl
eCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IHBycEF0dHJpCiBib29sIE5hbWVkTm9kZU1hcDo6bWFw
c0VxdWl2YWxlbnQoY29uc3QgTmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29uc3QKIHsKICAgICBp
ZiAoIW90aGVyTWFwKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBpc0Vt
cHR5KCk7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CiAgICAgaWYgKGxlbiAh
PSBvdGhlck1hcC0+bGVuZ3RoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggY2Q3NzA3NDE2M2RlZjg1
NTMxNGY2YmZhYmU2MTUwNGJiNDdjM2ZhNi4uNzM4MDAwZmVjZDMxNGFlMGRjYmVmN2EyYTljZDgx
MWY1ODI1MzUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTc2NCwxNCArMTc2NCwxNiBAQCBib29s
IE5vZGU6OmlzRXF1YWxOb2RlKE5vZGUqIG90aGVyKSBjb25zdAogICAgIGlmIChub2RlVmFsdWUo
KSAhPSBvdGhlci0+bm9kZVZhbHVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0aGlzLT5hdHRyaWJ1dGVzKCk7Ci0gICAgTmFt
ZWROb2RlTWFwKiBvdGhlckF0dHJpYnV0ZXMgPSBvdGhlci0+YXR0cmlidXRlcygpOwotICAgIAot
ICAgIGlmICghYXR0cmlidXRlcyAmJiBvdGhlckF0dHJpYnV0ZXMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBpZiAoYXR0cmlidXRlcyAmJiAhYXR0cmlidXRlcy0+bWFwc0VxdWl2
YWxlbnQob3RoZXJBdHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChp
c0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9F
bGVtZW50KHRoaXMpLT51cGRhdGVkQXR0cmlidXRlcygpOworICAgICAgICBOYW1lZE5vZGVNYXAq
IG90aGVyQXR0cmlidXRlcyA9IHRvRWxlbWVudChvdGhlciktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7
CisKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWF0dHJpYnV0ZXMtPm1hcHNFcXVpdmFsZW50
KG90aGVyQXR0cmlidXRlcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKG90aGVyQXR0cmlidXRlcyAmJiAhb3RoZXJBdHRyaWJ1dGVzLT5tYXBzRXF1aXZhbGVudChh
dHRyaWJ1dGVzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAg
Tm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7CiAgICAgTm9kZSogb3RoZXJDaGlsZCA9IG90aGVy
LT5maXJzdENoaWxkKCk7CkBAIC0xODI5LDkgKzE4MzEsNyBAQCBib29sIE5vZGU6OmlzRGVmYXVs
dE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSU1heWJlRW1wdHkpIGNv
bnN0CiAgICAgICAgICAgICBpZiAoZWxlbS0+cHJlZml4KCkuaXNOdWxsKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0tPm5hbWVzcGFjZVVSSSgpID09IG5hbWVzcGFjZVVSSTsKIAotICAg
ICAgICAgICAgaWYgKGVsZW0tPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIE5h
bWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtLT5hdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW0tPnVwZGF0ZWRBdHRy
aWJ1dGVzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0
cnMtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRy
ID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTkx
Nyw5ICsxOTE3LDcgQEAgU3RyaW5nIE5vZGU6Omxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJp
bmcgJnByZWZpeCkgY29uc3QKICAgICAgICAgICAgIGlmICghZWxlbS0+bmFtZXNwYWNlVVJJKCku
aXNOdWxsKCkgJiYgZWxlbS0+cHJlZml4KCkgPT0gcHJlZml4KQogICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLT5uYW1lc3BhY2VVUkkoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGVsZW0tPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCAq
YXR0cnMgPSBlbGVtLT5hdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW0tPnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgp
OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cnMtPmF0
dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTk3MywxNSArMTk3MSwx
MiBAQCBTdHJpbmcgTm9kZTo6bG9va3VwTmFtZXNwYWNlUHJlZml4KGNvbnN0IEF0b21pY1N0cmlu
ZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRWxlbQogICAgIGlmIChvcmlnaW5hbEVsZW1lbnQtPmxv
b2t1cE5hbWVzcGFjZVVSSShwcmVmaXgoKSkgPT0gX25hbWVzcGFjZVVSSSkKICAgICAgICAgcmV0
dXJuIHByZWZpeCgpOwogICAgIAotICAgIGlmIChoYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAg
TmFtZWROb2RlTWFwICphdHRycyA9IGF0dHJpYnV0ZXMoKTsKLSAgICAgICAgCisgICAgaWYgKE5h
bWVkTm9kZU1hcCogYXR0cnMgPSB0b0VsZW1lbnQodGhpcyktPnVwZGF0ZWRBdHRyaWJ1dGVzKCkp
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsr
KSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUgKmF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShp
KTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXR0ci0+cHJlZml4KCkgPT0geG1sbnNB
dG9tICYmCi0gICAgICAgICAgICAgICAgYXR0ci0+dmFsdWUoKSA9PSBfbmFtZXNwYWNlVVJJICYm
Ci0gICAgICAgICAgICAgICAgb3JpZ2luYWxFbGVtZW50LT5sb29rdXBOYW1lc3BhY2VVUkkoYXR0
ci0+bG9jYWxOYW1lKCkpID09IF9uYW1lc3BhY2VVUkkpCisgICAgICAgICAgICBpZiAoYXR0ci0+
cHJlZml4KCkgPT0geG1sbnNBdG9tICYmIGF0dHItPnZhbHVlKCkgPT0gX25hbWVzcGFjZVVSSQor
ICAgICAgICAgICAgICAgICAgICAmJiBvcmlnaW5hbEVsZW1lbnQtPmxvb2t1cE5hbWVzcGFjZVVS
SShhdHRyLT5sb2NhbE5hbWUoKSkgPT0gX25hbWVzcGFjZVVSSSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gYXR0ci0+bG9jYWxOYW1lKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTIxLDcgKzIx
MTYsNyBAQCB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2Rl
KiBvdGhlck5vZGUpCiAgICAgaWYgKGF0dHIxICYmIGF0dHIyICYmIHN0YXJ0MSA9PSBzdGFydDIg
JiYgc3RhcnQxKSB7CiAgICAgICAgIC8vIFdlIGFyZSBjb21wYXJpbmcgdHdvIGF0dHJpYnV0ZXMg
b24gdGhlIHNhbWUgbm9kZS4gIENyYXdsIG91ciBhdHRyaWJ1dGUgbWFwCiAgICAgICAgIC8vIGFu
ZCBzZWUgd2hpY2ggb25lIHdlIGhpdCBmaXJzdC4KLSAgICAgICAgTmFtZWROb2RlTWFwKiBtYXAg
PSBhdHRyMS0+b3duZXJFbGVtZW50KCktPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgIE5hbWVk
Tm9kZU1hcCogbWFwID0gYXR0cjEtPm93bmVyRWxlbWVudCgpLT51cGRhdGVkQXR0cmlidXRlcygp
OwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtYXAtPmxlbmd0aCgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIC8vIElmIG5l
aXRoZXIgb2YgdGhlIHR3byBkZXRlcm1pbmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUgYW5kIG5v
ZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBib3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVuIGFuIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA0MTcz
NWM1NTgyNDk3NzI5N2Y0NTA2Y2JkMDgyNzI4OGY1MmM5NjJmLi40MzgyMGM0YzJkOWU4NTQ0OGM1
ZDdlNDYyOTNmMGMxOWJiY2IyNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcApAQCAtNzMsOCArNzMsNyBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHls
ZVNwYW4oY29uc3QgTm9kZSAqbm9kZSkKIGVudW0gU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5
IHsgQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlLCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1w
dHkgfTsKIHN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29u
c3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNo
b3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKIHsKLSAgICBjb25zdCBib29sIHJlYWRvbmx5ID0g
dHJ1ZTsKLSAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMocmVhZG9u
bHkpOworICAgIE5hbWVkTm9kZU1hcCogbWFwID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMo
KTsKICAgICBpZiAoIW1hcCB8fCBtYXAtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTEwOSw3ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBO
b2RlICpub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBFbGVtZW50ICpl
bGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCAqPihub2RlKTsKLSAgICBOYW1lZE5vZGVN
YXAgKm1hcCA9IGVsZW0tPmF0dHJpYnV0ZXModHJ1ZSk7IC8vIHRydWUgZm9yIHJlYWQtb25seQor
ICAgIE5hbWVkTm9kZU1hcCogbWFwID0gZWxlbS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICBp
ZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIG1hcC0+aXNFbXB0eSgp
IHx8IChtYXAtPmxlbmd0aCgpID09IDEgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikg
PT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGJlNWRiYWM4MDI0YWQ0NWNlMWZmMmQ3OTBi
ZWFlNWFhYzhhMzk5ZTguLjJhNjI5YzNhMGMzZjZjOWMxZTAyMzZmOTZiYjEyY2RiNWU0OWRhOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CkBAIC0zMDgsMTAgKzMwOCw5IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVtb3Zh
YmxlQmxvY2soY29uc3QgTm9kZSogbm9kZSkKICAgICBpZiAoKHBhcmVudE5vZGUgJiYgcGFyZW50
Tm9kZS0+Zmlyc3RDaGlsZCgpICE9IHBhcmVudE5vZGUtPmxhc3RDaGlsZCgpKSB8fCAhbm9kZS0+
aGFzVGFnTmFtZShkaXZUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBO
YW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKLSAgICBpZiAo
IWF0dHJpYnV0ZU1hcCB8fCBhdHRyaWJ1dGVNYXAtPmlzRW1wdHkoKSkKKyAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSB8fCAhdG9FbGVtZW50KG5vZGUpLT5oYXNBdHRyaWJ1dGVzKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAppbmRleCBmNDBjMTVjYjRiN2EyNmMyMGU3ZjI5MjY2MWI5YmVkNGRiNTA0
MTMzLi5lNjQ2YjUxZjIyYWFlYTgxZDdjZjA3ZDM3M2U5ODhiZDY5MTM1NjY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIEVsZW1lbnQqIGhpZ2hlc3RWaXN1
YWxseUVxdWl2YWxlbnREaXZCZWxvd1Jvb3QoRWxlbWVudCogc3RhcnRCbG9jaykKICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIHJldHVybiBhIHJvb3Qgbm9kZSAoaWYgaXQgaGFwcGVucyB0byBiZSBh
IGRpdiwgZS5nLiwgaW4gYSBkb2N1bWVudCBmcmFnbWVudCkgYmVjYXVzZSB0aGVyZSBhcmUgbm8K
ICAgICAvLyBzaWJsaW5ncyBmb3IgdXMgdG8gYXBwZW5kIHRvLgogICAgIHdoaWxlICghY3VyQmxv
Y2stPm5leHRTaWJsaW5nKCkgJiYgY3VyQmxvY2stPnBhcmVudEVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShkaXZUYWcpICYmIGN1ckJsb2NrLT5wYXJlbnRFbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkg
ewotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBjdXJCbG9jay0+cGFyZW50RWxl
bWVudCgpLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZXMgPSBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpLT51cGRhdGVkQXR0cmlidXRlcygpOwogICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmJiAhYXR0cmlidXRlcy0+aXNFbXB0eSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGN1ckJsb2NrID0gY3VyQmxvY2stPnBhcmVudEVsZW1lbnQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggYzdk
MjcwZmM3MjYwMjdjYjUzNTM1MmZjMjNhYjk3OTZhYzU1ZTUzNy4uNTIyNmIyMTRjMjU4MTE3NjA5
MzVjNTY2OTY0ZTc2MzBmMDJmOWQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5jcHAKQEAgLTM0OSwxMCArMzQ5LDEyIEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBOYW1lCiB7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwog
Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIGFwcGVuZEF0dHJpYnV0
ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2Vz
KTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmli
dXRlcygpOworICAgIGlmIChhdHRyaWJ1dGVzKSB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVu
dCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOworICAgIH0KIAog
ICAgIC8vIEdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3du
IGF0dHJpYnV0ZXMuCiAgICAgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5h
bWVzcGFjZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCA0ZTZk
NTI4MTQ0YmMyZDk4ZmNhYTExYmYzNWRjYTU0YjRkZGU0ZmUyLi4yOGNjMDI5ZDAxYjA1OTkwMjQ4
NWYxMDZhOTQwNTIyZDBlMmI0NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcApAQCAtMTE1NywyMCArMTE1NywxMyBAQCBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNv
bnN0IE5vZGUqIGZpcnN0LCBjb25zdCBOb2RlKiBzZWNvbmQpCiAgICAgaWYgKCF0b0VsZW1lbnQo
Zmlyc3QpLT50YWdRTmFtZSgpLm1hdGNoZXModG9FbGVtZW50KHNlY29uZCktPnRhZ1FOYW1lKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOYW1lZE5vZGVNYXAqIGZpcnN0TWFwID0g
dG9FbGVtZW50KGZpcnN0KS0+YXR0cmlidXRlcygpOwotICAgIE5hbWVkTm9kZU1hcCogc2Vjb25k
TWFwID0gdG9FbGVtZW50KHNlY29uZCktPmF0dHJpYnV0ZXMoKTsKLSAgICB1bnNpZ25lZCBmaXJz
dExlbmd0aCA9IGZpcnN0TWFwLT5sZW5ndGgoKTsKLQotICAgIGlmIChmaXJzdExlbmd0aCAhPSBz
ZWNvbmRNYXAtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZmlyc3RMZW5ndGg7IGkrKykgewotICAgICAgICBBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSA9IGZpcnN0TWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICBBdHRyaWJ1
dGUqIHNlY29uZEF0dHJpYnV0ZSA9IHNlY29uZE1hcC0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1
dGUtPm5hbWUoKSk7Ci0gICAgICAgIGlmICghc2Vjb25kQXR0cmlidXRlIHx8IGF0dHJpYnV0ZS0+
dmFsdWUoKSAhPSBzZWNvbmRBdHRyaWJ1dGUtPnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIE5hbWVkTm9kZU1hcCogZmlyc3RNYXAgPSB0b0VsZW1lbnQoZmly
c3QpLT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIE5hbWVkTm9kZU1hcCogc2Vjb25kTWFwID0g
dG9FbGVtZW50KHNlY29uZCktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAKKyAgICBpZiAoZmlyc3RN
YXApCisgICAgICAgIHJldHVybiBmaXJzdE1hcC0+bWFwc0VxdWl2YWxlbnQoc2Vjb25kTWFwKTsK
KyAgICBpZiAoc2Vjb25kTWFwKQorICAgICAgICByZXR1cm4gc2Vjb25kTWFwLT5tYXBzRXF1aXZh
bGVudChmaXJzdE1hcCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAppbmRleCBjNjQ0MWU2MzAwZTllNWYzZTgzN2RhMTBkZmQxMDI1Y2Q0YTFjNmNkLi5h
NTQ4MmFmMjM0YjY0YmYzMDJkZGE5YzFiMjcxOTg5NTRjOTA3YjFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCkBAIC0xMDQsNyArMTA0LDkgQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxz
KE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCkKICAgICBmb3IgKE5vZGUqIG4gPSBu
b2RlOyBuICE9IGVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICBpZiAo
bi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0g
ZS0+YXR0cmlidXRlcygpOworICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0g
ZS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIGlmICghYXR0cmlidXRlcykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0
dHJpYnV0ZXMtPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBh
dHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwpAQCAtMjg3LDggKzI4OSw4IEBAIHZvaWQgU3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiBlbGVtZW50CiAgICAgY29uc3QgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQt
PmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCk7CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVs
ZW1lbnQsIDApOwogCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0
cmlidXRlcygpOwotICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0
aCgpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRy
aWJ1dGVzKCk7CisgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlcyA/IGF0dHJp
YnV0ZXMtPmxlbmd0aCgpIDogMDsKICAgICBjb25zdCBib29sIHNob3VsZEFubm90YXRlT3JGb3Jj
ZUlubGluZSA9IGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8
fCBhZGREaXNwbGF5SW5saW5lKTsKICAgICBjb25zdCBib29sIHNob3VsZE92ZXJyaWRlU3R5bGVB
dHRyID0gc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lIHx8IHNob3VsZEFwcGx5V3JhcHBpbmdT
dHlsZShlbGVtZW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CkBAIC04MjIsNyArODI0LDcgQEAgc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZyb21T
dHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmkKIAogYm9v
bCBpc1BsYWluVGV4dE1hcmt1cChOb2RlICpub2RlKQogewotICAgIGlmICghbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpIHx8ICFub2RlLT5oYXNUYWdOYW1lKGRpdlRhZykgfHwgc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpLT5hdHRyaWJ1dGVzKCktPmxlbmd0aCgpKQorICAgIGlmICghbm9kZS0+aXNF
bGVtZW50Tm9kZSgpIHx8ICFub2RlLT5oYXNUYWdOYW1lKGRpdlRhZykgfHwgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSA9PSAxICYmIChub2RlLT5maXJz
dENoaWxkKCktPmlzVGV4dE5vZGUoKSB8fCAobm9kZS0+Zmlyc3RDaGlsZCgpLT5maXJzdENoaWxk
KCkpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDA4YzE1
ZTkyNTA2NmQyZjllMGNlYTQ4ZmI4N2IyODdiM2EyNTg3MmIuLjMwOWFhZmUwNTVhM2ExYmY0ZjQ1
YjE1ZWY5MmIxMjc0NTE4OGYwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogCiB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6
OnBhcmFtZXRlcnNGb3JQbHVnaW4oVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcykKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0
aGlzLT5hdHRyaWJ1dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHVw
ZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKaW5kZXggOTI1Mjc1
ZjY3MWQ0NzE2NTk4YWUyOWI0MGU2MDIxNmJlODEzY2U0Yi4uNTkwZDY5Yjk4YjI0Yzk2YjcwNzQx
MWNiNWQ4NzAyM2EzZTk4OWMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5jcHAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpwYXJh
bWV0ZXJzRm9yUGx1Z2luKFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBWZWN0b3I8UwogICAg
IH0KICAgICAKICAgICAvLyBUdXJuIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSA8b2JqZWN0PiBlbGVt
ZW50IGludG8gYXJyYXlzLCBidXQgZG9uJ3Qgb3ZlcnJpZGUgPHBhcmFtPiB2YWx1ZXMuCi0gICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdGhpcy0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBO
YW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB1cGRhdGVkQXR0cmlidXRlcygpOwogICAgIGlmIChh
dHRyaWJ1dGVzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVz
LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gYXR0cmlidXRl
cy0+YXR0cmlidXRlSXRlbShpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFBhcmFtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQu
Y3BwCmluZGV4IGQxZjUzYTE0ZGI3NDFiNjE5ODg1OTVlMDczMjQ1ODUzNGM3M2ZhYzIuLmFhMjI4
YmMzMTY2M2FiMDgyYTMyMDIyYjg0ZTFjZTNlYjA5YmZhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGFyYW1FbGVtZW50LmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgSFRNTFBhcmFt
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogCiBib29sIEhU
TUxQYXJhbUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewotICAgICAgICBBdHRyaWJ1dGUq
IGF0dHIgPSBhdHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZUF0dHIpOwotICAgICAg
ICBpZiAoYXR0cikgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0
dHItPnZhbHVlKCk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIgJiYgaGFzQXR0
cmlidXRlcygpKSB7CisgICAgICAgIEF0dHJpYnV0ZSogbmFtZUF0dHJpYnV0ZSA9IGF0dHJpYnV0
ZU1hcCgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWVBdHRyKTsKKyAgICAgICAgaWYgKG5hbWVBdHRy
aWJ1dGUpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBuYW1lQXR0
cmlidXRlLT52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKGlzVVJMUGFyYW1ldGVyKHZhbHVlKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmluZGV4IDRjZjc5
OGM2OTBjZmJmYjFjYmE4ZGU2MDA5YzllNTYzNGEwYzRiOTQuLjBlZTg5ZjE1MjUwMzI4MTIzYzdm
MDQxODY1MmMxOGUzNDk4MzIwMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mCiAgICAgaWYgKCF0b2tlbi5hdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0
ZXMoZmFsc2UpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPmVuc3Vy
ZVVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2Vu
LmF0dHJpYnV0ZXMoKS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYg
KCFhdHRyaWJ1dGVzLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZS0+bmFtZSgpKSkKQEAgLTQy
NSw3ICs0MjUsNyBAQCBuYW1lc3BhY2UgewogLy8gRklYTUU6IE1vdmUgdGhpcyBmdW5jdGlvbiB0
byB0aGUgdG9wIG9mIHRoZSBmaWxlLgogaW5saW5lIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBj
bG9uZUF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0
dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOworICAgIE5hbWVkTm9kZU1hcCog
YXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFhdHRy
aWJ1dGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggYjFhNTlhMzk0YjQ3ZGI1MzYzMjg4
MjU1OTFhNDZhMTMxN2MyNDUwYy4uMDY2MzVmNTIzMzZjOWZkNDA0YjM0MThlODI5NGY1YmI3NWQ5
ZDNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
Y3BwCkBAIC03MTcsNyArNzE3LDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqCiBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckF0dHJp
YnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gYXR0clN0eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWF0
dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBhdHRyU3R5bGVzLnJlbGVhc2UoKTsKKwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgp
OyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRy
aWJ1dGVJdGVtKGkpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+ZGVjbCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggMjhjMGYzYjdk
MDE5OTc5N2YxMTYxOTI1NTBmNGRjYjc3MGNjYTUzMS4uYjUwMDI1YmIwMDk3N2E1NmJmYmNiNmUy
YzNmYTAxNjJjOTI2ZTQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVt
ZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0
ck1hcCA9IHRvSFRNTEVsZW1lbnQoY2hpbGQpLT5hdHRyaWJ1dGVzKHRydWUpOworICAgIGNvbnN0
IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IHRvSFRNTEVsZW1lbnQoY2hpbGQpLT51cGRhdGVkQXR0
cmlidXRlcygpOwogICAgIGlmICghYXR0ck1hcCAmJiBuYW1lKSB7CiAgICAgICAgIGVsZW1lbnQt
PnJlbW92ZUF0dHJpYnV0ZSgqbmFtZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTc4MSw3ICs3ODEs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0
cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCi0gICAgICAgICAgICAgICAgY29uc3QgTmFtZWRO
b2RlTWFwKiBhdHRyTWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5hdHRyaWJ1dGVz
KHRydWUpOworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWF0dHJNYXApCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0x
MTU5LDcgKzExNTksNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZQogewogICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXR0cmlidXRlc1ZhbHVlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwogICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtLgot
ICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyTWFwID0gZWxlbWVudC0+dXBkYXRlZEF0
dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJNYXApCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVz
VmFsdWUucmVsZWFzZSgpOwogICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3Ro
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDk5YWIyZWZlNDJk
MDhjYWEwNWNmMDk0NmI1OTRmOWY2NjRhMjQyMjEuLjJjMzc3OGI0NjAzMjBiY2RjZWJhZjA3Yzll
ODUzMDc1Y2JlMjBkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBA
IC02OSwxMSArNjksMTIgQEAgc3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoTm9k
ZSogbm9kZSkKICAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhVGFn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6QXR0
cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0cmlidXRl
c01hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXModHJ1ZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGF0dHJpYnV0ZXNNYXAtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgQXR0cmlidXRl
KiBpdGVtID0gYXR0cmlidXRlc01hcC0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBkZWFsIGFwcHJvcHJpYXRlbHkgd2l0aCB0aGUgYXR0cmlidXRlIGlmIHRo
ZXkgaGF2ZSBhIG5hbWVzcGFjZS4KLSAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQobWFrZV9wYWly
KGl0ZW0tPm5hbWUoKS50b1N0cmluZygpLCBpdGVtLT52YWx1ZSgpLnN0cmluZygpKSk7CisgICAg
aWYgKGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlc01hcCA9IGVsZW1lbnQtPnVwZGF0ZWRB
dHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0
ZXNNYXAtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogaXRlbSA9IGF0
dHJpYnV0ZXNNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUgaWYgdGhleSBoYXZl
IGEgbmFtZXNwYWNlLgorICAgICAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQobWFrZV9wYWlyKGl0
ZW0tPm5hbWUoKS50b1N0cmluZygpLCBpdGVtLT52YWx1ZSgpLnN0cmluZygpKSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNl
dFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgcmV0
dXJuIHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmgK
aW5kZXggY2I3ODlmM2YxODFlMTZjNmE4MzRlYzk5NTc2ZGJhZWYzOTg3YjE1OC4uZTZiZDAxM2Vi
ZjhmZTA2ZGUyNGRmOGE2NjhjZTExM2YyYmVjYTkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJv
bml6ZXIuaApAQCAtMzcsNyArMzcsNyBAQCBzdHJ1Y3QgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNo
cm9uaXplcjx0cnVlPiB7CiAgICAgICAgIC8vIEF0dHJpYnV0ZSBkaXJlY3RseSB0byBhdm9pZCBh
IGNhbGwgdG8gRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZAogICAgICAgICAvLyB0aGF0IGNvdWxk
IGNhdXNlIHRoZSBTVkdFbGVtZW50IHRvIGVycm9uZW91c2x5IHJlc2V0IGl0cyBwcm9wZXJ0aWVz
LgogICAgICAgICAvLyBzdmcvZG9tL1NWR1N0cmluZ0xpc3QtYmFzaWNzLnhodG1sIGV4ZXJjaXNl
cyB0aGlzIGJlaGF2aW9yLgotICAgICAgICBOYW1lZE5vZGVNYXAqIG5hbWVkQXR0ck1hcCA9IG93
bmVyRWxlbWVudC0+YXR0cmlidXRlcyhmYWxzZSk7CisgICAgICAgIE5hbWVkTm9kZU1hcCogbmFt
ZWRBdHRyTWFwID0gb3duZXJFbGVtZW50LT5lbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOwogICAg
ICAgICBBdHRyaWJ1dGUqIG9sZCA9IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShhdHRy
TmFtZSk7CiAgICAgICAgIGlmIChvbGQgJiYgdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICBu
YW1lZEF0dHJNYXAtPnJlbW92ZUF0dHJpYnV0ZShvbGQtPm5hbWUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCA3YjNmNThmM2I1NjYyMjEwN2JkNmI4OWJhMmYzZTcx
MmU4YmJkZTI2Li4yODM1ODNkNzgzYWZhNmVmMTBlYTc3OTJjYjIwOWNkNTEzNDMzNWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTU5MSw5ICs1OTEsMTAgQEAgVmFs
dWUgRnVuTGFuZzo6ZXZhbHVhdGUoKSBjb25zdAogICAgIEF0dHJpYnV0ZSogbGFuZ3VhZ2VBdHRy
aWJ1dGUgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0
KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IG5v
ZGUtPmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgaWYgKGF0dHJzKQotICAgICAgICAgICAgbGFuZ3Vh
Z2VBdHRyaWJ1dGUgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShYTUxOYW1lczo6bGFuZ0F0dHIp
OworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9FbGVtZW50KG5vZGUpLT51cGRhdGVkQXR0cmli
dXRlcygpKQorICAgICAgICAgICAgICAgIGxhbmd1YWdlQXR0cmlidXRlID0gYXR0cmlidXRlcy0+
Z2V0QXR0cmlidXRlSXRlbShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICB9CiAgICAgICAg
IGlmIChsYW5ndWFnZUF0dHJpYnV0ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAppbmRl
eCBlZGI3N2ViZDUxNjI0MjllYjU4MWU4M2MyOGNlYzliNDYyMTAwNDdhLi44ZWVmYzU3M2ZmNDQ3
OTQyNTIxZmJkMDc3YWRmMTUyMWQyYTM5YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0
LmNwcApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgTm9kZVNldDo6dHJhdmVyc2FsU29ydCgpIGNv
bnN0CiAgICAgICAgIGlmICghY29udGFpbnNBdHRyaWJ1dGVOb2RlcyB8fCAhbi0+aXNFbGVtZW50
Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzID0gdG9FbGVtZW50KG4pLT5hdHRyaWJ1dGVzKHRydWUgLyogcmVhZC1vbmx5ICov
KTsKKyAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9FbGVtZW50KG4pLT51cGRh
dGVkQXR0cmlidXRlcygpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgICAgICBj
b250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAppbmRleCAyODY2YWI2YTFhOWFhNjhl
MDBjMjRhMWQ3NzRiZmZiMDBjODJhMDNlLi4xMmYzOTRmMmNhMGI0NDU2YTgxZDEwODk4M2I3OTI0
ZDVjNGQ4NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcApAQCAtMzI4LDEyICszMjgsMTQg
QEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBOb2RlU2V0JiBub2Rlcykg
Y29uc3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEF0dHJp
YnV0ZUF4aXM6IHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6
OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgRWxlbWVudCogY29udGV4
dEVsZW1lbnQgPSB0b0VsZW1lbnQoY29udGV4dCk7CisKICAgICAgICAgICAgIC8vIEF2b2lkIGxh
emlseSBjcmVhdGluZyBhdHRyaWJ1dGUgbm9kZXMgZm9yIGF0dHJpYnV0ZXMgdGhhdCB3ZSBkbyBu
b3QgbmVlZCBhbnl3YXkuCiAgICAgICAgICAgICBpZiAobV9ub2RlVGVzdC5raW5kKCkgPT0gTm9k
ZVRlc3Q6Ok5hbWVUZXN0ICYmIG1fbm9kZVRlc3QuZGF0YSgpICE9IHN0YXJBdG9tKSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG4gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY29udGV4
dCktPmdldEF0dHJpYnV0ZU5vZGVOUyhtX25vZGVUZXN0Lm5hbWVzcGFjZVVSSSgpLCBtX25vZGVU
ZXN0LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG4gPSBjb250ZXh0RWxl
bWVudC0+Z2V0QXR0cmlidXRlTm9kZU5TKG1fbm9kZVRlc3QubmFtZXNwYWNlVVJJKCksIG1fbm9k
ZVRlc3QuZGF0YSgpKTsKICAgICAgICAgICAgICAgICBpZiAobiAmJiBuLT5uYW1lc3BhY2VVUkko
KSAhPSBYTUxOU05hbWVzOjp4bWxuc05hbWVzcGFjZVVSSSkgeyAvLyBJbiBYUGF0aCBsYW5kLCBu
YW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBhY2Nlc3NpYmxlIG9uIHRoZSBhdHRyaWJ1dGUgYXhpcy4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4uZ2V0KCksIEF0dHJpYnV0ZUF4
aXMsIG1fbm9kZVRlc3QpKSAvLyBTdGlsbCBuZWVkIHRvIGNoZWNrIG1lcmdlZCBwcmVkaWNhdGVz
LgogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4ucmVsZWFzZSgpKTsKQEAg
LTM0MSw3ICszNDMsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5v
ZGVTZXQmIG5vZGVzKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGNvbnRl
eHQtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBjb250
ZXh0RWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIGlmICghYXR0cnMp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggMGZkZDIyNzA4MTVl
NGQyZjAzOGVkYjM1NjEyZGEwYTZmMzQ2MGQ2ZC4uNGUxZDQ5ZWVmZDA0YmZlZjY4NmUwYTJjNWNl
MmI2MGMxZDhkODdjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAtNTk5LDcgKzU5OSw3IEBAIFhNTERvY3Vt
ZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwg
RWxlbWVudCogcGFyZW50CiAKICAgICBmb3IgKDsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1T
dGFjay5yZW1vdmVMYXN0KCkpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFj
ay5sYXN0KCk7Ci0gICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0
cmlidXRlcygpKSB7CisgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+
dXBkYXRlZEF0dHJpYnV0ZXMoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBh
dHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgaWYgKGF0dHIt
PmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmluZGV4IDBlYmZhYTk5MDk4ZTAyNDMwODVhNmI5
ZTgzYzU0ODE0YzNiOWExOGMuLmNkNmVhMTQ5NGY1MTI2MTAyNThjNjgyMzkyYjFhNTRmOGFiNDM5
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
clF0LmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVu
dFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAKICAg
ICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIG5hbWVzcGFjZXM7CiAgICAgZm9yIChF
bGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7
IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKLSAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0
cnMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCog
YXR0cnMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAg
ICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAg
ICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0gInhtbG5zIikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggNjQ3NmExZDU3ZDY2ZTBiZWFh
ZmU1MjE2YTE1YzBkYzU0N2MwY2I4Yy4uOGRlMWEwODE3YTRlNGRmMWJhOGE4MDhhYzkzOTY3NWE3
YWVhMDMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVp
bGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5j
cHAKQEAgLTgwLDcgKzgwLDcgQEAgWE1MVHJlZUJ1aWxkZXI6OlhNTFRyZWVCdWlsZGVyKE5ld1hN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKIAogICAgIGZvciAo
RWxlbWVudCogZWxlbWVudDsgIW5vZGVTdGFjay5pc0VtcHR5KCk7IG5vZGVTdGFjay5yZW1vdmVM
YXN0KCkpIHsKICAgICAgICAgZWxlbWVudCA9IG5vZGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIGlm
IChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpKSB7CisgICAgICAg
IGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkg
ewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJ
dGVtKGkpOwogICAgICAgICAgICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSB4bWxuc0F0
b20pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsLmNwcAppbmRleCAzNzQ4OWM2ZGQ2NzEzZjRiNTgzZWJkY2I2MjA3YzA3MTkwZTM5MTRj
Li5kYTBlMzI1NTVlYzdjYjg0MzhhYjgwMjNhOThiYjYyY2VlZWI1M2I1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKQEAg
LTMwNyw3ICszMDcsNyBAQCB2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3Ry
aW5nKEVsZW1lbnQqIGVsZW1lbnQsCiAgICAgLy8gQWRkIG9wZW4gdGFnCiAgICAgcmVzdWx0ICs9
ICI8IiArIGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKTsKICAgICAvLyBHbyB0aHJvdWdoIGFs
bCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KLSAgICBjb25zdCBOYW1lZE5vZGVNYXAg
KmF0dHJNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOworICAgIGNvbnN0IE5hbWVkTm9k
ZU1hcCAqYXR0ck1hcCA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKGF0
dHJNYXApIHsKICAgICAgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJzOyBpKyspIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAppbmRleCA2YjE4OTk0NjY2MzEyZGIwZGMzYTBjYjE2
MGEwZTA2YTkwYzVjMTA0Li4yZGRkYThiMDQ5ZmVjOTA2ZjM1ZGU5YjZiYWYyNTM5NWJmODRiMDQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCkBAIC01MDMsNyArNTAzLDcgQEAg
UVN0cmluZ0xpc3QgUVdlYkVsZW1lbnQ6OmF0dHJpYnV0ZU5hbWVzKGNvbnN0IFFTdHJpbmcmIG5h
bWVzcGFjZVVyaSkgY29uc3QKICAgICAgICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7CiAKICAgICBR
U3RyaW5nTGlzdCBhdHRyaWJ1dGVOYW1lTGlzdDsKLSAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGNv
bnN0IGF0dHJzID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKC8qIHJlYWQgb25seSA9ICovIHRydWUp
OworICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogY29uc3QgYXR0cnMgPSBtX2VsZW1lbnQtPnVwZGF0
ZWRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyBu
YW1lc3BhY2VVcmlTdHJpbmcobmFtZXNwYWNlVXJpKTsgLy8gY29udmVydCBRU3RyaW5nIC0+IFN0
cmluZyBvbmNlCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGF0dHJzQ291bnQgPSBhdHRycy0+bGVu
Z3RoKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>