<?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>77674</bug_id>
          
          <creation_ts>2012-02-02 13:02:04 -0800</creation_ts>
          <short_desc>Move attribute storage from NamedNodeMap to ElementAttributeData</short_desc>
          <delta_ts>2012-02-13 07:04:15 -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>
          <dependson>77800</dependson>
          <blocked>75069</blocked>
          <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>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>548093</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-02 13:02:04 -0800</bug_when>
    <thetext>Move attribute storage from NamedNodeMap to ElementAttributeData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548097</commentid>
    <comment_count>1</comment_count>
      <attachid>125170</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-02 13:04:11 -0800</bug_when>
    <thetext>Created attachment 125170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548155</commentid>
    <comment_count>2</comment_count>
      <attachid>125170</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 14:03:34 -0800</bug_when>
    <thetext>Comment on attachment 125170
Patch

Attachment 125170 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11389972</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548670</commentid>
    <comment_count>3</comment_count>
      <attachid>125316</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-03 06:34:41 -0800</bug_when>
    <thetext>Created attachment 125316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549035</commentid>
    <comment_count>4</comment_count>
      <attachid>125316</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-03 13:48:16 -0800</bug_when>
    <thetext>Comment on attachment 125316
Patch

After talking with rniwa and kling on IRC, we concluded this patch is too big.

So the plan is to first remove the noise from it by making many of the clients of NamedNodeMap to interact with Element itself. IOW, expose a way to get Attribute* from Element. Then this patch for moving attribute storage will be smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554005</commentid>
    <comment_count>5</comment_count>
      <attachid>126495</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-10 03:58:17 -0800</bug_when>
    <thetext>Created attachment 126495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554007</commentid>
    <comment_count>6</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-10 04:03:01 -0800</bug_when>
    <thetext>rniwa, as discussed I made this patch smaller by taking care of the noise in another patch. Compared to the previous one, I let two more things for separate changes: implementation of DOM methods (because I think they can move to Element itself, even make the code less redundant in some cases) and the parsing code that interacts with NamedNodeMap.

Note that the first of those separate changes will &quot;resolve&quot; kling&apos;s issues with ExceptionCode appearing in ElementAttributeData in the previous patch.

Could you take a look when you have time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555153</commentid>
    <comment_count>7</comment_count>
      <attachid>126495</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-13 03:30:25 -0800</bug_when>
    <thetext>Comment on attachment 126495
Patch

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

r=me

As suggested by Darin, we should rename ElementAttributeData to ElementAttributes at some point.

&gt; Source/WebCore/dom/Attr.h:43
&gt;      friend class NamedNodeMap;
&gt; +    friend class ElementAttributeData;

Nit: Alphabetical order.

&gt; Source/WebCore/dom/Element.h:242
&gt; +    ElementAttributeData* ensureAttributeData() const;
&gt; +    ElementAttributeData* updatedAttributeData() const;
&gt; +    ElementAttributeData* ensureUpdatedAttributeData() const;

As discussed on IRC, we have way too many of these.
It should be relatively easy to remove the need for ensureUpdatedAttributeData(), though not in the scope of this patch.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:170
&gt; +void ElementAttributeData::clearAttributes()
&gt; +{
&gt; +    clearClass();
&gt; +    detachAttributesFromElement();
&gt; +    m_attributes.clear();
&gt; +}

This method doesn&apos;t clear idForStyleResolution!
I know you are just moving code around, so it&apos;s fine for this patch, but we need to fix this.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:172
&gt; +void ElementAttributeData::replaceAttribute(size_t index, PassRefPtr&lt;Attribute&gt; prpAttribute, WebCore::Element* element)

No need for the WebCore:: prefix.

&gt; Source/WebCore/dom/ElementAttributeData.h:57
&gt; +    bool isEmpty() const { return !length(); }

return m_attributes.isEmpty(); seems more straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555155</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-13 03:38:17 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 126495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126495&amp;action=review
&gt; 
&gt; As suggested by Darin, we should rename ElementAttributeData to ElementAttributes at some point.

Actually, let&apos;s hold off on that as it clashes with the NamedNodeMap* Node::attributes() we expose to the web.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555240</commentid>
    <comment_count>9</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-13 07:04:15 -0800</bug_when>
    <thetext>Committed r107570: &lt;http://trac.webkit.org/changeset/107570&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125170</attachid>
            <date>2012-02-02 13:04:11 -0800</date>
            <delta_ts>2012-02-03 06:34:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77674-20120202180414.patch</filename>
            <type>text/plain</type>
            <size>122139</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkNzlmMDA2ZjRlZjI1
ZGZlY2JiZTE4NDIwMmU2MzA1Mjg1MTNhYS4uNWU5ZDc5Mjc2NTU0ZTE4MjlmNjkyZGUwZGExMmFh
ODYzMWQzYzhkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwOCBAQAorMjAxMi0wMi0wMiAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIE1vdmUgYXR0cmlidXRlIHN0b3JhZ2UgZnJvbSBOYW1lZE5vZGVNYXAgdG8g
RWxlbWVudEF0dHJpYnV0ZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc3Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZXMgbV9hdHRyaWJ1dGVzIHZlY3RvciBmcm9tIE5hbWVkTm9kZU1hcCB0
byBFbGVtZW50QXR0cmlidXRlRGF0YSwgYW5kIG1ha2UKKyAgICAgICAgY2FsbHNpdGVzIGludGVy
YWN0IGRpcmVjdGx5IHdpdGggRWxlbWVudEF0dHJpYnV0ZURhdGEuIFRoZSBwYXJzZXIgY29kZSB3
YXMgYWxzbworICAgICAgICBjaGFuZ2VkIHRvIGNyZWF0ZSBFbGVtZW50QXR0cmlidXRlRGF0YSBp
bnN0ZWFkIG9mIE5hbWVkTm9kZU1hcCwgc2luY2UgaXQgb25seQorICAgICAgICB1c2VzIGl0IGFz
IGF0dHJpYnV0ZSBzdG9yYWdlLgorCisgICAgICAgIFRvIHVuaWZ5IHRoZSBhdHRyaWJ1dGUgc3Rv
cmFnZSBnZXR0ZXIgZnVuY3Rpb25zLCB0aGlzIGNvbW1pdCBhbHNvIG1vdmVzIHRoZQorICAgICAg
ICBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24gZnVuY3Rpb25zIHRvIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhICh0aGUgZGF0YSB3YXMgdGhlcmUKKyAgICAgICAgYWxyZWFkeSkuCisKKyAgICAgICAgVGhp
cyBpcyBhbm90aGVyIHN0ZXAgdG93YXJkcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzUwNjkuIFRoZQorICAgICAgICBuZXh0IHN0ZXAgd2lsbCBiZSBkZWNvdXBsZSBF
bGVtZW50QXR0cmlidXRlRGF0YSdzIGxpZmV0aW1lIGZyb20gTmFtZWROb2RlTWFwLgorCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjptYXBwZWRBdHRy
aWJ1dGVzRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YW55QXR0cmlidXRlTWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOgorICAgICAgICAqIGNz
cy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tFeGFjdEF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL0F0dHIuaDoKKyAgICAgICAgKEF0
dHIpOgorICAgICAgICAqIGRvbS9BdHRyaWJ1dGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIGRvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRE
T01TdHJpbmdNYXA6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01h
cDo6Y29udGFpbnMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRl
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0
cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzQXR0cmlidXRlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bm9y
bWFsaXplQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRVUkxBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1
dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmZhc3RHZXRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6On5F
bGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRl
RGF0YTo6ZW5zdXJlSW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXROYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZU5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjplcXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjphZGRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJp
YnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y29weUF0dHJpYnV0ZXNUb1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50QXR0cmlidXRlRGF0YTo6ZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhT
bG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0QXR0
cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Y2xlYXJB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZXBs
YWNlQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUpOgorICAgICAgICAo
RWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OmlubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmli
dXRlRGF0YTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRh
Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppbnNl
cnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0
dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6Om1hcHBlZEF0dHJpYnV0ZUNv
dW50KToKKyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hbWVkTm9kZU1hcDo6ZGV0YWNoRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGRvbS9OYW1lZE5v
ZGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6
Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50
KToKKyAgICAgICAgKE5hbWVkTm9kZU1hcCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNFcXVhbE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6aXNEZWZhdWx0TmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxvb2t1cE5h
bWVzcGFjZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1lc3BhY2VQcmVm
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
U3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpjbGFz
c0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjptYXBwZWRBdHRyaWJ1dGVDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZURlY2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6ZW5zdXJlSW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2wpOgorICAgICAg
ICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Tm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0Vt
cHR5Rm9udFRhZyk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZh
bGVudCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RWaXN1YWxseUVxdWl2YWxlbnREaXZCZWxv
d1Jvb3QpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAq
IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlSWRlbnRpY2Fs
RWxlbWVudHMpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6IE1ha2UgdXNlIG9mIGNvbnRpbnVlIHRvIGF2b2lkIGluZGVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAg
KiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cGFyYW1ldGVyc0ZvclBs
dWdpbik6CisgICAgICAgICogaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21U
b2tlbkludG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OmVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6QXRv
bWljSFRNTFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFn
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5k
ZXhJbnB1dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJl
RWxlbWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTUVkaXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01FZGl0b3I6OmlubmVyUGF0Y2hOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUVkaXRvcjo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NRWRpdG9yLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JBdHRyaWJ1dGVTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRl
c0FzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNl
YXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckVsZW1lbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKToKKyAgICAgICAgKiBz
dmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUpOgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIu
aDoKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OkZ1bkxhbmc6OmV2YWx1YXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAg
ICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
Ojpub2Rlc0luQXhpcyk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9r
ZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6YXR0cmli
dXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OnRha2VBdHRy
aWJ1dGVzKToKKyAgICAgICAgKEF0b21pY01hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjo6OmluaXRpYWxpemVBdHRyaWJ1dGVzKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1M
RG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MVG9rZW4uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY1hNTFRva2VuOjpBdG9taWNYTUxUb2tlbik6CisgICAgICAgICog
eG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVl
QnVpbGRlcjo6WE1MVHJlZUJ1aWxkZXIpOgorCiAyMDEyLTAyLTAyICBSYXVsIEh1ZGVhICA8cmh1
ZGVhQGFkb2JlLmNvbT4KIAogICAgICAgICBSZWdpb25zIHNob3VsZCBpZ25vcmUgdGhlIHNhdmVk
IGN1cnJlbnRSZW5kZXJGbG93VGhyZWFkIGR1cmluZyByZXBhaW50aW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDMyM2M0Mjk5YWY3ODJkYmZkNGU1YTQ2YWY4YzYxYzdjNzljYzlhMTEu
LmQ5OTQ3Mzc1NWRlOTQyODEwMGRkNDJlNDE3Y2YzZDk5YWE5NzJjNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMDIgIENhaW8gTWFyY2VsbyBk
ZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBNb3ZlIGF0dHJpYnV0ZSBzdG9yYWdlIGZyb20gTmFtZWROb2RlTWFwIHRvIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NzY3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5nKTogdXNlIHVwZGF0ZWRBdHRyaWJ1dGVE
YXRhKCkuCisKIDIwMTItMDItMDIgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIENsZWFudXA6IE1vdmUgY2hyb21lLXNwZWNpZmljIGZpbGVzeXN0ZW0gdHlw
ZSBoYW5kbGluZyBjb2RlIChmb3IgRmlsZVN5c3RlbSBBUEkpIHVuZGVyIGNocm9taXVtIGRpcmVj
dG9yeSAocmUtbGFuZGluZyByMTA1Mzk1KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAwYjg1NGY5NTJhNmI4
MzA3ODc2NjBlZTdhZGIxZWI0YjczOGY0NGE1Li41MDI2ZDA0ZWI4MWUzOGM2MzJhZjViOTRmYzkx
OWYxMmY1NjNlYWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAyLTAy
ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CisKKyAgICAgICAgTW92ZSBhdHRyaWJ1dGUgc3RvcmFnZSBmcm9tIE5hbWVkTm9kZU1h
cCB0byBFbGVtZW50QXR0cmlidXRlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5jcHA6CisgICAgICAgIChRV2ViRWxl
bWVudDo6YXR0cmlidXRlTmFtZXMpOiB1c2UgdXBkYXRlZEF0dHJpYnV0ZURhdGEoKS4KKwogMjAx
Mi0wMi0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBv
cGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEF2b2lkIGNyZWF0aW5nIE5hbWVkTm9kZU1hcCB1bm5l
Y2Vzc2FyaWx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggYWJh
YzM5ODg1ZWU0MmNjMjU2ZTJkOWQ1NDU2M2Q2NTZkZjI1MGY0My4uMmYzOTk1ZmI5ZTRkMGEyNjEy
M2M5ODIyNDZlOTU5N2ZhM2QwZmYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcApAQCAtOTk2LDEwICs5OTYsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVj
ayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJp
YnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KICAgICBpZiAobV9zdHlsZWRFbGVtZW50KSB7Ci0gICAg
ICAgIGlmIChjb25zdCBOYW1lZE5vZGVNYXAqIG1hcCA9IG1fc3R5bGVkRWxlbWVudC0+YXR0cmli
dXRlTWFwKCkpIHsKLSAgICAgICAgICAgIC8vIFdhbGsgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGUg
bWFwIGFuZCBhZGQgYWxsIG1hcHBlZCBhdHRyaWJ1dGUgZGVjbGFyYXRpb25zLgotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwor
ICAgICAgICBpZiAoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBt
X3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkgeworICAgICAgICAgICAgLy8gV2FsayB0
aGUgZWxlbWVudCdzIGF0dHJpYnV0ZSBkYXRhIGFuZCBhZGQgYWxsIG1hcHBlZCBhdHRyaWJ1dGUg
ZGVjbGFyYXRpb25zLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJp
YnV0ZURhdGEtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGUtPmRlY2woKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZS0+aXNNYXBwZWRBdHRyaWJ1dGUoKSk7
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWFwcGVkQXR0cmlidXRlc0VxdWl2YWxlbnQo
TmFtZWROb2RlTWFwKiBhLCBOYW1lZE5vZGVNYXAqIGIpCitzdGF0aWMgaW5saW5lIGJvb2wgbWFw
cGVkQXR0cmlidXRlc0VxdWl2YWxlbnQoRWxlbWVudEF0dHJpYnV0ZURhdGEqIGEsIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhKiBiKQogewogICAgIEFTU0VSVChhLT5tYXBwZWRBdHRyaWJ1dGVDb3VudCgp
ID09IGItPm1hcHBlZEF0dHJpYnV0ZUNvdW50KCkpOwogCkBAIC0xMjk1LDcgKzEyOTUsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIG1fZWxl
bWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNs
YXNzQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtYXBwZWRBdHRyaWJ1
dGVDb3VudCAmJiAhbWFwcGVkQXR0cmlidXRlc0VxdWl2YWxlbnQoZWxlbWVudC0+YXR0cmlidXRl
TWFwKCksIG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlTWFwKCkpKQorICAgIGlmIChtYXBwZWRB
dHRyaWJ1dGVDb3VudCAmJiAhbWFwcGVkQXR0cmlidXRlc0VxdWl2YWxlbnQoZWxlbWVudC0+YXR0
cmlidXRlRGF0YSgpLCBtX3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBtX2VsZW1lbnRM
aW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKaW5kZXggMzY3N2ZjZjc5YjAwMmI0NGU3ZTAyZDdhZTBjMDM1YTcyM2I4NWYz
Yi4uNWQ3NTU1MzMzYzMyYzI1MGVjOTMyMDY3MzQ3NWMyZmVjOGU1Y2M2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTY3Nyw3ICs2NzcsNyBAQCBzdGF0aWMgYm9v
bCBhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtLCBDU1NTZWxl
Y3Rvcjo6TWF0Y2ggbQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBhbnlBdHRy
aWJ1dGVNYXRjaGVzKE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcywgQ1NTU2VsZWN0b3I6Ok1hdGNo
IG1hdGNoLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIsIGNvbnN0IEF0b21pY1N0
cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQorc3RhdGljIGJvb2wgYW55
QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcywgQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3RvckF0dHIsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewog
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0gPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJ
dGVtKGkpOwpAQCAtNzA3LDcgKzcwNyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAg
aWYgKHNlbC0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOwogCi0gICAgICAgIE5hbWVkTm9kZU1hcCog
YXR0cmlidXRlcyA9IGUtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggM2Y5NDY5ZTVkNzliMDljOWFiODQyZTc0MmQ4
NWZhZDcxN2I5NDcxZi4uM2Y5MTZkMjBhNmEzOWU3ODVmYTUyMTgzZWQxNDVhYzg3MTcyODZiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtMTg1LDEyICsxODUsMTIgQEAg
aW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjphdHRyaWJ1dGVOYW1lTWF0Y2hlcyhjb25zdCBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSwgY28KIAogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja0V4YWN0QXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHNlbGVjdG9yQXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nSW1wbCogdmFs
dWUpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBlbGVtZW50LT5hdHRyaWJ1
dGVNYXAoKTsKLSAgICBpZiAoIWF0dHJpYnV0ZU1hcCkKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0
YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0
dHJpYnV0ZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBzaXplID0g
YXR0cmlidXRlTWFwLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBzaXplID0gYXR0cmlidXRlRGF0
YS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRl
bShpKTsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5hdHRy
aWJ1dGVJdGVtKGkpOwogICAgICAgICBpZiAoYXR0cmlidXRlTmFtZU1hdGNoZXMoYXR0cmlidXRl
LCBzZWxlY3RvckF0dHJpYnV0ZU5hbWUpICYmICghdmFsdWUgfHwgYXR0cmlidXRlLT52YWx1ZSgp
LmltcGwoKSA9PSB2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0
dHIuaAppbmRleCA3YjZlMzMyZWVhYWI4MjYzZDg2OTM5ZTllY2ViMmJjYTA3M2E1NzY5Li4wOWFj
Nzk2YTFlOTQ4ZjA4N2Y2MDBiMDUxZmU1MDNiYjdmMzM3Mzg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQXR0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmgKQEAgLTM3
LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gZGVzdHJ1Y3Rpb24uIGhvd2V2ZXIs
IHRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KIAogY2xhc3MgQXR0ciA6IHB1YmxpYyBDb250
YWluZXJOb2RlIHsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWROb2RlTWFwOworICAgIGZyaWVuZCBj
bGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBdHRyPiBjcmVhdGUoRWxlbWVudCosIERvY3VtZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+
KTsKICAgICB2aXJ0dWFsIH5BdHRyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
QXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKaW5kZXggOTM4ZTE5
MjJkY2ZmZDI4MzM3MWI4MjRkNjE3MDg2ODgyMjBkMDJjOC4uMGMzZTE3NGQ3M2E3NjE3ZWIyZTQ4
MDQ3MTBhZTIzMDIzYjhjYTFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaApAQCAtMzMsNyArMzMs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdHRyOwogY2xhc3MgQ1NTU3R5bGVEZWNs
YXJhdGlvbjsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBOYW1lZE5vZGVNYXA7CiAKIC8vIFRoaXMg
aGFzIG5vIGNvdW50ZXJwYXJ0IGluIERPTS4KIC8vIEl0IGlzIGFuIGludGVybmFsIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSBub2RlIHZhbHVlIG9mIGFuIEF0dHIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RGF0YXNldERPTVN0cmluZ01hcC5jcHAKaW5kZXggZGZmMGFkNzUwNzIwNjdlNTU2Y2UxZTI4NjE0
NTEyNDI3ZTEzMGMwMy4uMmY1NGU0OGU1MTQ3MjZlMjk5Y2VjODE4MjNkZTlmMWViN2ZkY2VhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKQEAgLTE0MiwxMSArMTQxLDExIEBAIHZvaWQgRGF0YXNldERPTVN0cmluZ01hcDo6ZGVy
ZWYoKQogCiB2b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBuYW1lcykKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG1fZWxlbWVudC0+
dXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoYXR0cmlidXRlTWFwKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CisgICAgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtX2VsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRh
KCk7CisgICAgaWYgKGF0dHJpYnV0ZURhdGEpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
YXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRy
aWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICBpZiAo
aXNWYWxpZEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkpCiAgICAgICAgICAg
ICAgICAgbmFtZXMuYXBwZW5kKGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0eU5hbWUoYXR0
cmlidXRlLT5sb2NhbE5hbWUoKSkpOwogICAgICAgICB9CkBAIC0xNTUsMTEgKzE1NCwxMSBAQCB2
b2lkIERhdGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKFZlY3RvcjxTdHJpbmc+JiBuYW1lcykK
IAogU3RyaW5nIERhdGFzZXRET01TdHJpbmdNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKQog
ewotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbV9lbGVtZW50LT51cGRhdGVkQXR0
cmlidXRlcygpOwotICAgIGlmIChhdHRyaWJ1dGVNYXApIHsKLSAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXR0cmlidXRlTWFwLT5sZW5ndGgoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cmlidXRlRGF0YSA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICBp
ZiAoYXR0cmlidXRlRGF0YSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVE
YXRhLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU1hcC0+
YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0
cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5h
bWVNYXRjaGVzQXR0cmlidXRlTmFtZShuYW1lLCBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgICAgICB9CkBAIC0x
NzAsMTEgKzE2OSwxMSBAQCBTdHJpbmcgRGF0YXNldERPTVN0cmluZ01hcDo6aXRlbShjb25zdCBT
dHJpbmcmIG5hbWUpCiAKIGJvb2wgRGF0YXNldERPTVN0cmluZ01hcDo6Y29udGFpbnMoY29uc3Qg
U3RyaW5nJiBuYW1lKQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbV9lbGVt
ZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgIGlmIChhdHRyaWJ1dGVNYXApIHsKLSAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlTWFwLT5sZW5ndGgoKTsKKyAgICBFbGVtZW50
QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0
ZURhdGEoKTsKKyAgICBpZiAoYXR0cmlidXRlRGF0YSkgeworICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWVNYXRjaGVzQXR0cmlidXRlTmFtZShuYW1lLCBhdHRyaWJ1dGUtPmxv
Y2FsTmFtZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzEwMWUwNGUxMjE5NzhhYjdiMGI4NmZmOTM4MGNjZDM2
NzgxZGMxYy4uZTQ3ZGNkZmRmYTY3YWZkM2Q2YTQzZDVmMzA5YWM0OTY5ZTUxY2UyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04NTAsNyArODUwLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBE
b2N1bWVudDo6aW1wb3J0Tm9kZShOb2RlKiBpbXBvcnRlZE5vZGUsIGJvb2wgZGVlcCwgRXhjZXB0
aW9uQ28KICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
TmFtZWROb2RlTWFwKiBhdHRycyA9IG9sZEVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Cisg
ICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9IG9sZEVsZW1lbnQtPnVwZGF0ZWRB
dHRyaWJ1dGVEYXRhKCk7CiAgICAgICAgIGlmIChhdHRycykgewogICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXR0cnMtPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNWEyMjAy
MTI2ZmYxNDU0NjBjYzY5NDQzMmRiMTNiYjBhMjA1NjRmZC4uYjNjZDAxMDQxMjA0OWVhNWQ0MmYx
OTc3NTkwNTZkMTMxOWIxZDFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTgzLDEwICsx
ODMsMTAgQEAgdm9pZCBFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhjb25zdCBF
bGVtZW50KikKIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkKIHsKLSAgICBpZiAoIW1fYXR0cmlidXRlTWFwKQorICAgIGlmICghYXR0cmli
dXRlRGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZU1hcC0+cmVtb3Zl
QXR0cmlidXRlKG5hbWUpOworICAgIGF0dHJpYnV0ZURhdGEoKS0+cmVtb3ZlQXR0cmlidXRlKG5h
bWUsIHRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEJvb2xlYW5BdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgYm9vbCB2YWx1ZSkKQEAgLTIxNyw4ICsyMTcsOCBAQCBjb25z
dCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShuYW1lKTsK
ICNlbmRpZgogCi0gICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7Ci0gICAgICAgIGlmIChBdHRyaWJ1
dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQor
ICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmli
dXRlID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxBdG9t
OwpAQCAtNTk0LDggKzU5NCw4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0
cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICB9CiAjZW5kaWYKIAotICAgIGlm
IChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBt
X2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBpZ25vcmVDYXNlKSkKKyAgICBp
ZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBpZ25vcmVDYXNlKSkKICAg
ICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQogCkBAIC02MTYsMjcg
KzYxNiwyNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxv
d2VyKCkgOiBuYW1lOwogCi0gICAgc2l6ZV90IGluZGV4ID0gZW5zdXJlVXBkYXRlZEF0dHJpYnV0
ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFsc2UpOwotICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0gbm90Rm91bmQgPyBtX2F0dHJpYnV0ZU1h
cC0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6IFF1YWxpZmllZE5hbWUobnVsbEF0b20s
IGxvY2FsTmFtZSwgbnVsbEF0b20pOworICAgIHNpemVfdCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRB
dHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsK
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0
cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+bmFtZSgpIDogUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgbG9jYWxOYW1lLCBudWxsQXRvbSk7CiAgICAgc2V0QXR0cmlidXRlSW50ZXJu
YWwoaW5kZXgsIHFOYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7
Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKS0+Z2V0
QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1ZSk7CisgICAgc2V0QXR0cmlidXRl
SW50ZXJuYWwoZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUlu
ZGV4KG5hbWUpLCBuYW1lLCB2YWx1ZSk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldEF0
dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4
ICE9IG5vdEZvdW5kID8gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsK
KyAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlRGF0YSgp
LT5hdHRyaWJ1dGVJdGVtKGluZGV4KSA6IDA7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChvbGQpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+cmVtb3ZlQXR0cmli
dXRlKGluZGV4KTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+cmVtb3ZlQXR0cmlidXRl
KGluZGV4LCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghb2xkKSB7
Ci0gICAgICAgIG1fYXR0cmlidXRlTWFwLT5hZGRBdHRyaWJ1dGUoY3JlYXRlQXR0cmlidXRlKG5h
bWUsIHZhbHVlKSk7CisgICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+YWRkQXR0cmlidXRlKGNyZWF0
ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSksIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC03MzYsNyArNzM2LDcgQEAgc3RhdGljIGJvb2wgaXNBdHRyaWJ1dGVUb1JlbW92ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYKICAgICByZXR1cm4g
KG5hbWUubG9jYWxOYW1lKCkuZW5kc1dpdGgoaHJlZkF0dHIubG9jYWxOYW1lKCkpIHx8IG5hbWUg
PT0gc3JjQXR0ciB8fCBuYW1lID09IGFjdGlvbkF0dHIpICYmIHByb3RvY29sSXNKYXZhU2NyaXB0
KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh2YWx1ZSkpOyAgICAgICAKIH0KIAot
dm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxOYW1lZE5vZGVN
YXA+IGxpc3QsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQordm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVEYXRhKFBhc3NPd25QdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZURhdGEsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewogICAgIEFTU0VSVCghaW5Eb2N1bWVudCgpKTsKICAg
ICBBU1NFUlQoIXBhcmVudE5vZGUoKSk7CkBAIC03NDQsMzkgKzc0NCw0NSBAQCB2b2lkIEVsZW1l
bnQ6OnBhcnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gbGlzdCwg
RnJhZ21lbnRTY3JpcAogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKICAg
ICBBU1NFUlQoIW1fYXR0cmlidXRlTWFwKTsKLSAgICBtX2F0dHJpYnV0ZU1hcCA9IGxpc3Q7Ci0K
LSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKLSAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPm1fZWxl
bWVudCA9IHRoaXM7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYXMgcmVz
dWx0IG9mIGEgcGFzdGUgb3IgZHJhZy1uLWRyb3Agb3BlcmF0aW9uCi0gICAgICAgIC8vIHdlIHdh
bnQgdG8gcmVtb3ZlIGFsbCB0aGUgc2NyaXB0IGFuZCBldmVudCBoYW5kbGVycy4KLSAgICAgICAg
aWYgKHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChpIDwgbV9h
dHRyaWJ1dGVNYXAtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSA9IG1fYXR0cmlidXRlTWFwLT5tX2F0dHJpYnV0ZXNbaV0tPm5h
bWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNFdmVudEhhbmRsZXJBdHRyaWJ1dGUoYXR0cmli
dXRlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPm1fYXR0cmli
dXRlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZVRvUmVtb3ZlKGF0dHJp
YnV0ZU5hbWUsIG1fYXR0cmlidXRlTWFwLT5tX2F0dHJpYnV0ZXNbaV0tPnZhbHVlKCkpKQotICAg
ICAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+bV9hdHRyaWJ1dGVzW2ldLT5zZXRWYWx1
ZShudWxsQXRvbSk7Ci0gICAgICAgICAgICAgICAgaSsrOworCisgICAgaWYgKCFhdHRyaWJ1dGVE
YXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVBdHRyaWJ1dGVNYXAoKTsKKworICAg
IC8vIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYXMgcmVzdWx0IG9mIGEgcGFzdGUgb3IgZHJh
Zy1uLWRyb3Agb3BlcmF0aW9uCisgICAgLy8gd2Ugd2FudCB0byByZW1vdmUgYWxsIHRoZSBzY3Jp
cHQgYW5kIGV2ZW50IGhhbmRsZXJzLgorICAgIGlmIChzY3JpcHRpbmdQZXJtaXNzaW9uID09IEZy
YWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkgeworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgd2hpbGUgKGkgPCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKSkgeworICAgICAgICAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZURhdGEtPm1fYXR0
cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICAgICAgaWYgKGlzRXZlbnRIYW5kbGVyQXR0cmli
dXRlKGF0dHJpYnV0ZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlRGF0YS0+bV9h
dHRyaWJ1dGVzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQXR0cmlidXRlVG9SZW1vdmUoYXR0cmlidXRlTmFt
ZSwgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ldLT52YWx1ZSgpKSkKKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnNldFZhbHVlKG51bGxBdG9tKTsK
KyAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQotICAgICAgICAvLyBTdG9yZSB0aGUgc2V0IG9m
IGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFjayBpbiBjYXNlCi0gICAgICAgIC8v
IGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2F0dHJpYnV0ZU1hcC4KLSAgICAgICAgVmVjdG9y
PFJlZlB0cjxBdHRyaWJ1dGU+ID4gYXR0cmlidXRlczsKLSAgICAgICAgbV9hdHRyaWJ1dGVNYXAt
PmNvcHlBdHRyaWJ1dGVzVG9WZWN0b3IoYXR0cmlidXRlcyk7Ci0gICAgICAgIGZvciAoVmVjdG9y
PFJlZlB0cjxBdHRyaWJ1dGU+ID46Oml0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7
IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgYXR0cmlidXRl
Q2hhbmdlZChpdGVyLT5nZXQoKSk7CiAgICAgfQorCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxk
bid0IGJlIGEgY29weSwgd2Ugc2hvdWxkIGdldCBvd25lcnNoaXAgb2YgYXR0cmlidXRlRGF0YS4g
VGhpcyB3aWxsIGJlCisgICAgLy8gZml4ZWQgd2hlbiB3ZSBtb3ZlIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhIG91dCBmcm9tIE5hbWVkTm9kZU1hcC4KKyAgICBtX2F0dHJpYnV0ZU1hcC0+bV9hdHRyaWJ1
dGVEYXRhID0gKmF0dHJpYnV0ZURhdGE7CisKKyAgICAvLyBTdG9yZSB0aGUgc2V0IG9mIGF0dHJp
YnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFjayBpbiBjYXNlCisgICAgLy8gYXR0cmlidXRl
Q2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlTWFwLgorICAgIFZlY3RvcjxSZWZQdHI8QXR0cmli
dXRlPiA+IGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlRGF0YS0+Y29weUF0dHJpYnV0ZXNUb1Zl
Y3RvcihhdHRyaWJ1dGVzKTsKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+Ojpp
dGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9IGF0dHJpYnV0ZXMuZW5k
KCk7ICsraXRlcikKKyAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChpdGVyLT5nZXQoKSk7CiB9CiAK
IGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgdXBkYXRlSW52YWxp
ZEF0dHJpYnV0ZXMoKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAgJiYgbV9hdHRyaWJ1dGVN
YXAtPmxlbmd0aCgpOworICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCkgJiYgYXR0cmlidXRlRGF0
YSgpLT5sZW5ndGgoKTsKIH0KIAogU3RyaW5nIEVsZW1lbnQ6Om5vZGVOYW1lKCkgY29uc3QKQEAg
LTg3MCwxNCArODc2LDE0IEBAIHZvaWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQog
ICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBzaGFkb3dSb290KCkpCiAgICAgICAgIHNoYWRv
dy0+aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewor
ICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAgICAgaWYgKGhhc0lEKCkpIHsKLSAgICAg
ICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0
ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICAgICAgQXR0cmlidXRl
KiBpZEl0ZW0gPSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+
aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5p
c051bGwoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVJZChudWxsQXRvbSwgaWRJdGVtLT52YWx1
ZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaGFzTmFtZSgpKSB7Ci0gICAgICAgICAgICBB
dHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oSFRN
TE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gYXR0
cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOwogICAg
ICAgICAgICAgaWYgKG5hbWVJdGVtICYmICFuYW1lSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAg
ICAgICAgdXBkYXRlTmFtZShudWxsQXRvbSwgbmFtZUl0ZW0tPnZhbHVlKCkpOwogICAgICAgICB9
CkBAIC04ODYsMTQgKzg5MiwxNCBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKIAogdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBpZiAobV9h
dHRyaWJ1dGVNYXApIHsKKyAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CiAgICAgICAgIGlmICho
YXNJRCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IG1fYXR0cmlidXRlTWFw
LT5nZXRBdHRyaWJ1dGVJdGVtKGRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKKyAgICAg
ICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJ
dGVtKGRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0
ZW0gJiYgIWlkSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQoaWRJdGVt
LT52YWx1ZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc05hbWUoKSkg
ewotICAgICAgICAgICAgQXR0cmlidXRlKiBuYW1lSXRlbSA9IG1fYXR0cmlidXRlTWFwLT5nZXRB
dHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOworICAgICAgICAgICAgQXR0cmlidXRl
KiBuYW1lSXRlbSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6
Om5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmIChuYW1lSXRlbSAmJiAhbmFtZUl0ZW0tPmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZU5hbWUobmFtZUl0ZW0tPnZhbHVlKCksIG51bGxB
dG9tKTsKICAgICAgICAgfQpAQCAtMTQxNSw3ICsxNDIxLDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBF
bGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oZW5zdXJlVXBkYXRlZEF0dHJp
YnV0ZXMoKS0+c2V0TmFtZWRJdGVtKGF0dHIsIGVjKSk7CisgICAgcmV0dXJuIHN0YXRpY19wb2lu
dGVyX2Nhc3Q8QXR0cj4oZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEoKS0+c2V0TmFtZWRJdGVt
KGF0dHIsIGVjLCB0aGlzKSk7CiB9CiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0
cmlidXRlTm9kZU5TKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQyNCw3ICsx
NDMwLDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0
ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJf
Y2FzdDxBdHRyPihlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5zZXROYW1lZEl0ZW0oYXR0ciwg
ZWMpKTsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihlbnN1cmVVcGRhdGVk
QXR0cmlidXRlRGF0YSgpLT5zZXROYW1lZEl0ZW0oYXR0ciwgZWMsIHRoaXMpKTsKIH0KIAogUGFz
c1JlZlB0cjxBdHRyPiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQ0MCwxMSArMTQ0NiwxMSBAQCBQYXNzUmVmUHRyPEF0dHI+
IEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAKICAgICBBU1NFUlQoZG9jdW1lbnQoKSA9PSBhdHRyLT5kb2N1bWVudCgpKTsKIAotICAg
IE5hbWVkTm9kZU1hcCogYXR0cnMgPSB1cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgaWYgKCFh
dHRycykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxBdHRyPihhdHRycy0+cmVtb3ZlTmFtZWRJdGVtKGF0dHItPnF1YWxpZmllZE5hbWUoKSwgZWMp
KTsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihhdHRycy0+cmVtb3ZlTmFt
ZWRJdGVtKGF0dHItPnF1YWxpZmllZE5hbWUoKSwgZWMsIHRoaXMpKTsKIH0KIAogdm9pZCBFbGVt
ZW50OjpzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24pCkBAIC0xNDY4LDE1ICsxNDc0LDE1IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluCiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKLSAgICBpZiAoIW1fYXR0cmlidXRlTWFwKQorICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7Ci0gICAgc2l6ZV90IGluZGV4
ID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNl
KTsKKyAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1J
bmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlTWFwLT5yZW1vdmVBdHRyaWJ1dGUoaW5kZXgp
OworICAgIGF0dHJpYnV0ZURhdGEoKS0+cmVtb3ZlQXR0cmlidXRlKGluZGV4LCB0aGlzKTsKIH0K
IAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCkBAIC0xNDg2LDI0ICsxNDkyLDI0IEBAIHZv
aWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkks
IGNvbnN0IFN0cmluZyYgbG9jYWxOCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0
cmlidXRlTm9kZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRy
cyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJz
ID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1
cm4gMDsKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0
aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nh
c3Q8QXR0cj4oYXR0cnMtPmdldE5hbWVkSXRlbShsb2NhbE5hbWUpKTsKKyAgICByZXR1cm4gc3Rh
dGljX3BvaW50ZXJfY2FzdDxBdHRyPihhdHRycy0+Z2V0TmFtZWRJdGVtKGxvY2FsTmFtZSwgdGhp
cykpOwogfQogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyhj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCiB7Ci0g
ICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVu
dEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAo
IWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxBdHRyPihhdHRycy0+Z2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZSwgbmFtZXNwYWNlVVJJKSkpOworICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEF0
dHI+KGF0dHJzLT5nZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1l
LCBuYW1lc3BhY2VVUkkpLCB0aGlzKSk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRl
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0g
dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cnMgPSB1
cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMTUxNSw3ICsxNTIxLDcgQEAgYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGUo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogCiBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5T
KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29u
c3QKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cnMgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwog
ICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYXR0cnMt
PmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1l
c3BhY2VVUkkpKTsKQEAgLTE3MDUsNyArMTcxMSw3IEBAIHZvaWQgRWxlbWVudDo6Y2FuY2VsRm9j
dXNBcHBlYXJhbmNlVXBkYXRlKCkKIAogdm9pZCBFbGVtZW50Ojpub3JtYWxpemVBdHRyaWJ1dGVz
KCkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cnMgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwog
ICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg0NSw4ICsxODUxLDggQEAg
RE9NU3RyaW5nTWFwKiBFbGVtZW50OjpkYXRhc2V0KCkKIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRl
KiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKKyAg
ICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAg
IEFTU0VSVChpc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICB9CiAjZW5kaWYKQEAgLTE4
NTYsOCArMTg2Miw4IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0CiBLVVJMIEVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKKyAgICBp
ZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIEFT
U0VSVChpc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCmluZGV4IDFkMzdlYWVjMGQ4MzU5YTc4YmJjZTUzNThjNmI3Y2I4M2Y3YzY3NmIuLjZh
YWYyYzFlY2YzZTRiMTNiZGU2YmNiNDgzNjFjNzViMWJkM2Y3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aApAQCAtMjE1LDIyICsyMTUsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm9vbGVhbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sKTsKIAogICAgIC8vIEZvciBleHBv
c2luZyB0byBET00gb25seS4KLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOyB9Ci0KLSAgICBOYW1lZE5vZGVNYXAq
IGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCkgY29uc3Q7Ci0gICAgTmFtZWROb2RlTWFwKiB1cGRh
dGVkQXR0cmlidXRlcygpIGNvbnN0OworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcygpIGNv
bnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGFuIGF0dHJpYnV0
ZSBpcyBhZGRlZCwgY2hhbmdlZCBvciByZW1vdmVkLgogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNlKTsKIAogICAg
IC8vIE9ubHkgY2FsbGVkIGJ5IHRoZSBwYXJzZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgZWxlbWVudCBj
b25zdHJ1Y3Rpb24uCi0gICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxO
YW1lZE5vZGVNYXA+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwotCi0gICAgTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVNYXAoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcC5nZXQo
KTsgfQotICAgIE5hbWVkTm9kZU1hcCogZW5zdXJlQXR0cmlidXRlTWFwKCkgY29uc3Q7CisgICAg
dm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVEYXRhKFBhc3NPd25QdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAgICAgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcCA/IG1f
YXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCkgOiAwOyB9Ci0gICAgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIGVuc3VyZUF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBlbnN1cmVVcGRhdGVk
QXR0cmlidXRlcygpLT5hdHRyaWJ1dGVEYXRhKCk7IH0KKyAgICBFbGVtZW50QXR0cmlidXRlRGF0
YSogZW5zdXJlQXR0cmlidXRlRGF0YSgpIGNvbnN0OworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiB1cGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0OworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRBdHRy
aWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYpOwogCkBAIC01MDYsMjIgKzUwMiwzNyBA
QCBpbmxpbmUgRWxlbWVudCogTm9kZTo6cGFyZW50RWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJu
IHBhcmVudCAmJiBwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChwYXJlbnQpIDog
MDsKIH0KIAotaW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6ZW5zdXJlVXBkYXRlZEF0dHJp
YnV0ZXMoKSBjb25zdAoraW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6YXR0cmlidXRlcygp
IGNvbnN0CiB7CiAgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKLSAgICByZXR1cm4gZW5z
dXJlQXR0cmlidXRlTWFwKCk7CisgICAgaWYgKCFtX2F0dHJpYnV0ZU1hcCkKKyAgICAgICAgY3Jl
YXRlQXR0cmlidXRlTWFwKCk7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLmdldCgpOwogfQog
Ci1pbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50Ojp1cGRhdGVkQXR0cmlidXRlcygpIGNvbnN0
CitpbmxpbmUgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OmVuc3VyZUF0dHJpYnV0ZURh
dGEoKSBjb25zdAoreworICAgIGlmICghbV9hdHRyaWJ1dGVNYXApCisgICAgICAgIGNyZWF0ZUF0
dHJpYnV0ZU1hcCgpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgp
OworfQorCitpbmxpbmUgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OnVwZGF0ZWRBdHRy
aWJ1dGVEYXRhKCkgY29uc3QKIHsKICAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAg
IHJldHVybiBtX2F0dHJpYnV0ZU1hcC5nZXQoKTsKKyAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgp
OworfQorCitpbmxpbmUgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OmVuc3VyZVVwZGF0
ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3QKK3sKKyAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygp
OworICAgIHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCk7CiB9CiAKIGlubGluZSB2b2lkIEVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKIHsK
LSAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBvdGhlci51cGRhdGVkQXR0cmli
dXRlcygpKQotICAgICAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5zZXRBdHRyaWJ1dGVz
KCphdHRyaWJ1dGVNYXApOworICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXJBdHRy
aWJ1dGVzID0gb3RoZXIudXBkYXRlZEF0dHJpYnV0ZURhdGEoKSkKKyAgICAgICAgZW5zdXJlVXBk
YXRlZEF0dHJpYnV0ZURhdGEoKS0+c2V0QXR0cmlidXRlcygqb3RoZXJBdHRyaWJ1dGVzLCB0aGlz
KTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSkKQEAgLTU2MywxNCArNTc0
LDE2IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OndpbGxSZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0
SGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKLSAgICByZXR1cm4gbV9hdHRy
aWJ1dGVNYXAgJiYgbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAg
RWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVEYXRhKCk7CisgICAg
cmV0dXJuIGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsK
IH0KIAogaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIEFTU0VSVChmYXN0QXR0
cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7Ci0gICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7Ci0g
ICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRy
aWJ1dGVJdGVtKG5hbWUpKQorICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0g
YXR0cmlidXRlRGF0YSgpOworICAgIGlmIChhdHRyaWJ1dGVzKSB7CisgICAgICAgIGlmIChBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAg
ICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4g
bnVsbEF0b207CkBAIC02MDEsMTMgKzYxNCw2IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldElk
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiAgICAgc2V0QXR0cmlidXRlKGRv
Y3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBOYW1lZE5v
ZGVNYXAqIEVsZW1lbnQ6OmVuc3VyZUF0dHJpYnV0ZU1hcCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2F0dHJpYnV0ZU1hcCkKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7Ci0gICAgcmV0dXJu
IG1fYXR0cmlidXRlTWFwLmdldCgpOwotfQotCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJ
bnZhbGlkQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N0eWxlQXR0cmlidXRlVmFs
aWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4
IDEyODMzMDRiZGMwNzVjYTQxNDZhNTY1YmMxNjdiNjEzZDUyODA2YTUuLjI5NGUxZGU1ZTY1NzZk
ZjE3MTU1NDFhYThiMDNmMzUxOGFmYzQzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRBdHRyaWJ1dGVEYXRhLmNwcApAQCAtMjYsMTEgKzI2LDI3OCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCiAKKyNpbmNsdWRlICJBdHRy
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZShjb25zdCBFbGVtZW50KiBlKQoreworICAgIHJldHVybiBlICYmIGUtPmRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkgJiYgZS0+aXNIVE1MRWxlbWVudCgpOworfQorCitFbGVtZW50QXR0
cmlidXRlRGF0YTo6fkVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKK3sKKyAgICBkZXRhY2hBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKTsKK30KKworQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjplbnN1cmVJbmxpbmVTdHlsZURlY2woRWxlbWVudCogZWxlbWVudCkK
K3sKKyAgICBpZiAoIW1faW5saW5lU3R5bGVEZWNsKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50
LT5pc1N0eWxlZEVsZW1lbnQoKSk7CisgICAgICAgIG1faW5saW5lU3R5bGVEZWNsID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZUlubGluZShzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4oZWxlbWVudCkpOworICAgICAgICBtX2lubGluZVN0eWxlRGVjbC0+c2V0U3RyaWN0UGFy
c2luZyhlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmlu
UXVpcmtzTW9kZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgp
OworfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5lU3R5bGVEZWNs
KCkKK3sKKyAgICBpZiAoIW1faW5saW5lU3R5bGVEZWNsKQorICAgICAgICByZXR1cm47CisgICAg
bV9pbmxpbmVTdHlsZURlY2wtPmNsZWFyUGFyZW50RWxlbWVudCgpOworICAgIG1faW5saW5lU3R5
bGVEZWNsID0gMDsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6
Z2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3sKKyAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UoZWxlbWVudCkpOworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChlbGVtZW50KTsKK30KKworUGFzc1Jl
ZlB0cjxOb2RlPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
QXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKGVsZW1lbnQpKTsKKyAgICBpZiAoIWEpIHsKKyAgICAgICAgZWMgPSBOT1RfRk9VTkRf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRl
bShhLT5uYW1lKCksIGVjLCBlbGVtZW50KTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRl
SXRlbShuYW1lKTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBh
LT5jcmVhdGVBdHRySWZOZWVkZWQoZWxlbWVudCk7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gRWxl
bWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYywgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQo
ZWxlbWVudCk7CisKKyAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFt
ZSk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIGVjID0gTk9UX0ZPVU5E
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPEF0dHI+IGF0dHIg
PSBhdHRyaWJ1dGVJdGVtKGluZGV4KS0+Y3JlYXRlQXR0cklmTmVlZGVkKGVsZW1lbnQpOworCisg
ICAgcmVtb3ZlQXR0cmlidXRlKGluZGV4LCBlbGVtZW50KTsKKworICAgIHJldHVybiBhdHRyLnJl
bGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0
TmFtZWRJdGVtKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBFbGVtZW50KiBlbGVtZW50
KQoreworICAgIGlmICghZWxlbWVudCB8fCAhbm9kZSkgeworICAgICAgICBlYyA9IE5PVF9GT1VO
RF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIE5vdCBtZW50aW9uZWQg
aW4gc3BlYzogdGhyb3cgYSBISUVSQVJDSFlfUkVRVUVTVF9FUlJPUiBpZiB0aGUgdXNlciBwYXNz
ZXMgaW4gYSBub24tYXR0cmlidXRlIG5vZGUuCisgICAgaWYgKCFub2RlLT5pc0F0dHJpYnV0ZU5v
ZGUoKSkgeworICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIEF0dHIqIGF0dHIgPSBzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSk7
CisKKyAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHItPmF0dHIoKTsKKyAgICBzaXplX3Qg
aW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0cmlidXRlLT5uYW1lKCkpOworICAgIEF0
dHJpYnV0ZSogb2xkQXR0cmlidXRlID0gaW5kZXggIT0gbm90Rm91bmQgPyBhdHRyaWJ1dGVJdGVt
KGluZGV4KSA6IDA7CisgICAgaWYgKG9sZEF0dHJpYnV0ZSA9PSBhdHRyaWJ1dGUpCisgICAgICAg
IHJldHVybiBub2RlOyAvLyB3ZSBrbm93IGFib3V0IGl0IGFscmVhZHkKKworICAgIC8vIElOVVNF
X0FUVFJJQlVURV9FUlI6IFJhaXNlZCBpZiBub2RlIGlzIGFuIEF0dHIgdGhhdCBpcyBhbHJlYWR5
IGFuIGF0dHJpYnV0ZSBvZiBhbm90aGVyIEVsZW1lbnQgb2JqZWN0LgorICAgIC8vIFRoZSBET00g
dXNlciBtdXN0IGV4cGxpY2l0bHkgY2xvbmUgQXR0ciBub2RlcyB0byByZS11c2UgdGhlbSBpbiBv
dGhlciBlbGVtZW50cy4KKyAgICBpZiAoYXR0ci0+b3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAg
ZWMgPSBJTlVTRV9BVFRSSUJVVEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBSZWZQdHI8QXR0cj4gb2xkQXR0cjsKKyAgICBpZiAob2xkQXR0cmlidXRlKSB7CisgICAgICAg
IG9sZEF0dHIgPSBvbGRBdHRyaWJ1dGUtPmNyZWF0ZUF0dHJJZk5lZWRlZChlbGVtZW50KTsKKyAg
ICAgICAgcmVwbGFjZUF0dHJpYnV0ZShpbmRleCwgYXR0cmlidXRlLCBlbGVtZW50KTsKKyAgICB9
IGVsc2UKKyAgICAgICAgYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSwgZWxlbWVudCk7CisKKyAgICBy
ZXR1cm4gb2xkQXR0ci5yZWxlYXNlKCk7Cit9CisKIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6
OnNldENsYXNzKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lLCBib29sIHNob3VsZEZvbGRDYXNlKQog
ewogICAgIG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NOYW1lLCBzaG91bGRGb2xkQ2FzZSk7CiB9CiAK
K1Bhc3NSZWZQdHI8Tm9kZT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6Oml0ZW0odW5zaWduZWQgaW5k
ZXgsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYXR0cmlidXRlSXRlbShpbmRleCktPmNy
ZWF0ZUF0dHJJZk5lZWRlZChlbGVtZW50KTsKK30KKworYm9vbCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6ZXF1aXZhbGVudChjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKCFvdGhlcikKKyAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKKworICAgIHVuc2ln
bmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGlmIChsZW4gIT0gb3RoZXItPmxlbmd0aCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cmlidXRlSXRlbShpKTsKKyAgICAg
ICAgQXR0cmlidXRlKiBvdGhlckF0dHIgPSBvdGhlci0+Z2V0QXR0cmlidXRlSXRlbShhdHRyLT5u
YW1lKCkpOworICAgICAgICBpZiAoIW90aGVyQXR0ciB8fCBhdHRyLT52YWx1ZSgpICE9IG90aGVy
QXR0ci0+dmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6YWRkQXR0cmlidXRl
KFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUsIEVsZW1lbnQqIGVsZW1lbnQpCit7
CisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gcHJwQXR0cmlidXRlOworCisgICAg
aWYgKGVsZW1lbnQpCisgICAgICAgIGVsZW1lbnQtPndpbGxNb2RpZnlBdHRyaWJ1dGUoYXR0cmli
dXRlLT5uYW1lKCksIG51bGxBdG9tLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOworCisgICAgbV9hdHRy
aWJ1dGVzLmFwcGVuZChhdHRyaWJ1dGUpOworICAgIGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRl
LT5hdHRyKCkpCisgICAgICAgIGF0dHItPm1fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICBpZiAo
ZWxlbWVudCkKKyAgICAgICAgZWxlbWVudC0+ZGlkTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS5n
ZXQoKSk7Cit9CisKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShz
aXplX3QgaW5kZXgsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbGVu
Z3RoKCkpOworCisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVz
W2luZGV4XTsKKworICAgIGlmIChlbGVtZW50KQorICAgICAgICBlbGVtZW50LT53aWxsUmVtb3Zl
QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOworCisgICAg
aWYgKEF0dHIqIGF0dHIgPSBhdHRyaWJ1dGUtPmF0dHIoKSkKKyAgICAgICAgYXR0ci0+bV9lbGVt
ZW50ID0gMDsKKyAgICBtX2F0dHJpYnV0ZXMucmVtb3ZlKGluZGV4KTsKKworICAgIGlmIChlbGVt
ZW50KQorICAgICAgICBlbGVtZW50LT5kaWRSZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLmdldCgp
KTsKK30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y29weUF0dHJpYnV0ZXNUb1ZlY3Rv
cihWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiYgY29weSkKK3sKKyAgICBjb3B5ID0gbV9hdHRy
aWJ1dGVzOworfQorCitpbmxpbmUgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGV0YWNoQXR0
cmlidXRlc0Zyb21FbGVtZW50KCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fYXR0cmlidXRlcy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAg
aWYgKEF0dHIqIGF0dHIgPSBtX2F0dHJpYnV0ZXNbaV0tPmF0dHIoKSkKKyAgICAgICAgICAgIGF0
dHItPm1fZWxlbWVudCA9IDA7CisgICAgfQorfQorCitzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAoreworICAgIHVuc2lnbmVkIGxlbiA9
IGxlbmd0aCgpOworCisgICAgLy8gQ29udGludWUgdG8gY2hlY2tpbmcgY2FzZS1pbnNlbnNpdGl2
ZWx5IGFuZC9vciBmdWxsIG5hbWVzcGFjZWQgbmFtZXMgaWYgbmVjZXNzYXJ5OgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICBpZiAoIWF0
dHJOYW1lLmhhc1ByZWZpeCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBhdHRyTmFtZS5sb2NhbE5hbWUoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogV291bGQgYmUgZmFzdGVyIHRvIGRvIHRoaXMgY29tcGFyaXNvbiB3aXRob3V0
IGNhbGxpbmcgdG9TdHJpbmcsIHdoaWNoCisgICAgICAgICAgICAvLyBnZW5lcmF0ZXMgYSB0ZW1w
b3Jhcnkgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpb24uIEJ1dCB0aGlzIGJyYW5jaCBpcyBvbmx5IHJl
YWNoZWQKKyAgICAgICAgICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBoYXMgYSBwcmVmaXgs
IHdoaWNoIGlzIHJhcmUgaW4gSFRNTC4KKyAgICAgICAgICAgIGlmIChlcXVhbFBvc3NpYmx5SWdu
b3JpbmdDYXNlKG5hbWUsIGF0dHJOYW1lLnRvU3RyaW5nKCksIHNob3VsZElnbm9yZUF0dHJpYnV0
ZUNhc2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBub3RGb3VuZDsKK30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0QXR0
cmlidXRlcyhjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIsIEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgLy8gQ2xvbmUgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlIG90aGVyIG1hcCwgYnV0
IGF0dGFjaCB0byBvdXIgZWxlbWVudC4KKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElmIGFzc2lnbmluZyB0aGUgbWFwIGNoYW5nZXMgdGhlIGlkIGF0dHJpYnV0
ZSwgd2UgbmVlZCB0byBjYWxsIHVwZGF0ZUlkLgorICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBnZXRB
dHRyaWJ1dGVJdGVtKGVsZW1lbnQtPmRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKKyAg
ICBBdHRyaWJ1dGUqIG5ld0lkID0gb3RoZXIuZ2V0QXR0cmlidXRlSXRlbShlbGVtZW50LT5kb2N1
bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisKKyAgICBpZiAob2xkSWQgfHwgbmV3SWQpCisg
ICAgICAgIGVsZW1lbnQtPnVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRv
bSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKKworICAgIEF0dHJpYnV0ZSog
b2xkTmFtZSA9IGdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgQXR0
cmlidXRlKiBuZXdOYW1lID0gb3RoZXIuZ2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVB
dHRyKTsKKworICAgIGlmIChvbGROYW1lIHx8IG5ld05hbWUpCisgICAgICAgIGVsZW1lbnQtPnVw
ZGF0ZU5hbWUob2xkTmFtZSA/IG9sZE5hbWUtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3TmFtZSA/
IG5ld05hbWUtPnZhbHVlKCkgOiBudWxsQXRvbSk7CisKKyAgICBjbGVhckF0dHJpYnV0ZXMoKTsK
KyAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBvdGhlci5sZW5ndGgoKTsKKyAgICBtX2F0dHJpYnV0
ZXMucmVzaXplKG5ld0xlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xl
bmd0aDsgaSsrKQorICAgICAgICBtX2F0dHJpYnV0ZXNbaV0gPSBvdGhlci5tX2F0dHJpYnV0ZXNb
aV0tPmNsb25lKCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3YXN0ZWZ1bC4gVGhlIGNsYXNz
IGxpc3QgY291bGQgYmUgcHJlc2VydmVkIG9uIGEgY29weSwgYW5kIHdlCisgICAgLy8gd291bGRu
J3QgaGF2ZSB0byB3YXN0ZSB0aW1lIHJlcGFyc2luZyB0aGUgYXR0cmlidXRlLgorICAgIC8vIFRo
ZSBkZXJpdmVkIGNsYXNzLCBIVE1MTmFtZWROb2RlTWFwLCB3aGljaCBtYW5hZ2VzIGEgcGFyc2Vk
IGNsYXNzIGxpc3QgZm9yIHRoZSBDTEFTUyBhdHRyaWJ1dGUsCisgICAgLy8gd2lsbCB1cGRhdGUg
aXRzIG1lbWJlciB2YXJpYWJsZSB3aGVuIHBhcnNlIGF0dHJpYnV0ZSBpcyBjYWxsZWQuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgaSsrKQorICAgICAgICBlbGVtZW50
LT5hdHRyaWJ1dGVDaGFuZ2VkKG1fYXR0cmlidXRlc1tpXS5nZXQoKSwgdHJ1ZSk7Cit9CisKK3Zv
aWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNsZWFyQXR0cmlidXRlcygpCit7CisgICAgY2xlYXJD
bGFzcygpOworICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOworICAgIG1fYXR0cmli
dXRlcy5jbGVhcigpOworfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZXBsYWNlQXR0
cmlidXRlKHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IHBycEF0dHJpYnV0ZSwg
RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7CisKKyAg
ICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBwcnBBdHRyaWJ1dGU7CisgICAgQXR0cmli
dXRlKiBvbGQgPSBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOworCisgICAgaWYgKGVsZW1lbnQp
CisgICAgICAgIGVsZW1lbnQtPndpbGxNb2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKCks
IG9sZC0+dmFsdWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKKworICAgIGlmIChBdHRyKiBhdHRy
ID0gb2xkLT5hdHRyKCkpCisgICAgICAgIGF0dHItPm1fZWxlbWVudCA9IDA7CisgICAgbV9hdHRy
aWJ1dGVzW2luZGV4XSA9IGF0dHJpYnV0ZTsKKyAgICBpZiAoQXR0ciogYXR0ciA9IGF0dHJpYnV0
ZS0+YXR0cigpKQorICAgICAgICBhdHRyLT5tX2VsZW1lbnQgPSBlbGVtZW50OworCisgICAgaWYg
KGVsZW1lbnQpCisgICAgICAgIGVsZW1lbnQtPmRpZE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUu
Z2V0KCkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5o
CmluZGV4IDIwMTE2YzYyZjBjOWZhNjkwYWNmYmNjZWQ3MmNjZWRhNmI1Mzg5MDkuLmI5ZWQyNGJk
MGMxZGQzOWRiZWYwZjc0Y2YyNzgxZjdiNDhkYzEyOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50QXR0cmlidXRlRGF0YS5oCkBAIC0yNiw4ICsyNiwxMCBAQAogI2lmbmRlZiBFbGVtZW50
QXR0cmlidXRlRGF0YV9oCiAjZGVmaW5lIEVsZW1lbnRBdHRyaWJ1dGVEYXRhX2gKIAorI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDYgKzM3LDE3IEBAIGNsYXNzIEVsZW1l
bnQ7CiAKIGNsYXNzIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRWxlbWVudEF0dHJpYnV0ZURhdGEoKSk7CisgICAgfQorCisg
ICAgfkVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogaW5saW5lU3R5bGVEZWNsKCkgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7
IH0KKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lU3R5bGVEZWNs
KEVsZW1lbnQqKTsKKyAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKKwogICAgIHZv
aWQgY2xlYXJDbGFzcygpIHsgbV9jbGFzc05hbWVzLmNsZWFyKCk7IH0KICAgICB2b2lkIHNldENs
YXNzKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lLCBib29sIHNob3VsZEZvbGRDYXNlKTsKICAgICBj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGFz
c05hbWVzOyB9CkBAIC00MiwxOCArNTUsMTMwIEBAIHB1YmxpYzoKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pZEZvclN0eWxl
UmVzb2x1dGlvbjsgfQogICAgIHZvaWQgc2V0SWRGb3JTdHlsZVJlc29sdXRpb24oY29uc3QgQXRv
bWljU3RyaW5nJiBuZXdJZCkgeyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uID0gbmV3SWQ7IH0KIAor
ICAgIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgRWxl
bWVudCopIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYsIEVsZW1lbnQqKTsKKworICAgIFBhc3NSZWZQ
dHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50KikgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVk
TmFtZSYsIEV4Y2VwdGlvbkNvZGUmLCBFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxOb2RlPiBz
ZXROYW1lZEl0ZW0oTm9kZSosIEV4Y2VwdGlvbkNvZGUmLCBFbGVtZW50Kik7CisKKyAgICBQYXNz
UmVmUHRyPE5vZGU+IGl0ZW0odW5zaWduZWQgaW5kZXgsIEVsZW1lbnQqKSBjb25zdDsKKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLnNpemUoKTsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorCisgICAgLy8gVXNl
ZCBkdXJpbmcgcGFyc2luZzogb25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJlLiBObyBl
cnJvciBjaGVja2luZyEKKyAgICB2b2lkIGluc2VydEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJp
YnV0ZT4gbmV3QXR0cmlidXRlLCBib29sIGFsbG93RHVwbGljYXRlcykKKyAgICB7CisgICAgICAg
IGlmIChhbGxvd0R1cGxpY2F0ZXMgfHwgIWdldEF0dHJpYnV0ZUl0ZW0obmV3QXR0cmlidXRlLT5u
YW1lKCkpKQorICAgICAgICAgICAgYWRkQXR0cmlidXRlKG5ld0F0dHJpYnV0ZSwgMCk7CisgICAg
fQorCisgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgQXR0cmlidXRlKiBnZXRB
dHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0
QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKworICAgIHZv
aWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkgeyBtX2F0dHJpYnV0
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYXBhY2l0eSk7IH0KKworICAgIGJvb2wgZXF1aXZh
bGVudChjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0OworCisgICAgLy8g
VGhlc2UgZnVuY3Rpb25zIGRvIG5vIGVycm9yIGNoZWNraW5nLgorICAgIHZvaWQgYWRkQXR0cmli
dXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiwgRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVB
dHRyaWJ1dGUoc2l6ZV90IGluZGV4LCBFbGVtZW50Kik7CisKKyAgICBzaXplX3QgbWFwcGVkQXR0
cmlidXRlQ291bnQoKSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRWxlbWVu
dDsKICAgICBmcmllbmQgY2xhc3MgTmFtZWROb2RlTWFwOwogCiAgICAgRWxlbWVudEF0dHJpYnV0
ZURhdGEoKQogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIGNvcHlBdHRyaWJ1dGVzVG9WZWN0b3Io
VmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4mKTsKKworICAgIHZvaWQgZGV0YWNoQXR0cmlidXRl
c0Zyb21FbGVtZW50KCk7CisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKKyAgICBz
aXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRl
bUluZGV4U2xvd0Nhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UpIGNvbnN0OworICAgIHZvaWQgc2V0QXR0cmlidXRlcyhjb25zdCBFbGVtZW50QXR0
cmlidXRlRGF0YSYsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGNsZWFyQXR0cmlidXRlcygpOworICAg
IHZvaWQgcmVwbGFjZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRl
PiwgRWxlbWVudCopOworCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBt
X2lubGluZVN0eWxlRGVjbDsKICAgICBTcGFjZVNwbGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKICAg
ICBBdG9taWNTdHJpbmcgbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsKKyAgICBWZWN0b3I8UmVmUHRy
PEF0dHJpYnV0ZT4sIDQ+IG1fYXR0cmlidXRlczsKIH07CiAKK2lubGluZSB2b2lkIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXgobmFtZSk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47
CisKKyAgICByZW1vdmVBdHRyaWJ1dGUoaW5kZXgsIGVsZW1lbnQpOworfQorCitpbmxpbmUgQXR0
cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKSBjb25zdAoreworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0
ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgIHJl
dHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOworICAgIHJldHVybiAwOworfQorCitpbmxp
bmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBzaXplX3QgbGVuID0gbGVuZ3Ro
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlm
IChtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQorICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKK30KKworaW5saW5lIHNpemVfdCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6bWFwcGVkQXR0cmlidXRlQ291bnQoKSBjb25zdAoreworICAg
IHNpemVfdCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2F0dHJpYnV0
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlc1tpXS0+ZGVjbCgpKQor
ICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCitpbmxp
bmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK3sK
KyAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwgc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworLy8g
V2UgdXNlIGEgYm9vbGVhbiBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5nIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2Ugc28gdGhhdCB0aGUgY2FsbGVyCisvLyBjYW4gdHVuZSB0aGUgYmVoYXZp
b3IgKGhhc0F0dHJpYnV0ZSBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVyZWFzIGdldEF0dHJpYnV0ZSBp
cyBub3QpLgoraW5saW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRl
SXRlbUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKSBjb25zdAoreworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGJvb2wgZG9T
bG93Q2hlY2sgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlOworCisgICAgLy8gT3B0aW1pemUg
Zm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgZXhpc3RzIGFuZCBpdHMgbmFtZSBleGFj
dGx5IG1hdGNoZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gbV9hdHRyaWJ1dGVzW2ldLT5u
YW1lKCk7CisgICAgICAgIGlmICghYXR0ck5hbWUuaGFzUHJlZml4KCkpIHsKKyAgICAgICAgICAg
IGlmIChuYW1lID09IGF0dHJOYW1lLmxvY2FsTmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRvU2xvd0NoZWNrID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAoZG9TbG93Q2hlY2spCisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGVJ
dGVtSW5kZXhTbG93Q2FzZShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKKyAgICBy
ZXR1cm4gbm90Rm91bmQ7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggN2Y2MjI5Nzc1MzZhNzg1Mzhj
ZDRiZTVhMTMzODkxZTI4ZWYwM2MzMy4uYmMwMjNlMmU0ODdmZDk2ZGIzZjQ4ZTgxNDlkYTEwODM5
NmRkOTgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAgLTI1LDMxICsyNSwx
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogCi0j
aW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
LSNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UoY29uc3QgRWxlbWVudCogZSkKLXsKLSAgICByZXR1cm4gZSAmJiBlLT5k
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIGUtPmlzSFRNTEVsZW1lbnQoKTsKLX0KLQot
aW5saW5lIHZvaWQgTmFtZWROb2RlTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKQot
ewotICAgIHNpemVfdCBzaXplID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0
cmlidXRlc1tpXS0+YXR0cigpKQotICAgICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKLSAg
ICB9Ci19Ci0KIHZvaWQgTmFtZWROb2RlTWFwOjpyZWYoKQogewogICAgIEFTU0VSVChtX2VsZW1l
bnQpOwpAQCAtNjIsMTUwICs0MiwyMSBAQCB2b2lkIE5hbWVkTm9kZU1hcDo6ZGVyZWYoKQogICAg
IG1fZWxlbWVudC0+ZGVyZWYoKTsKIH0KIAotTmFtZWROb2RlTWFwOjp+TmFtZWROb2RlTWFwKCkK
LXsKLSAgICBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKLX0KLQotUGFzc1JlZlB0cjxO
b2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
Ci17Ci0gICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOwotICAgIGlmICghYSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgcmV0dXJuIGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwot
fQotCiBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtTlMoY29uc3Qg
U3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewog
ICAgIHJldHVybiBnZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1l
LCBuYW1lc3BhY2VVUkkpKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJl
bW92ZU5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIEF0dHJpYnV0ZSogYSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZShtX2VsZW1lbnQpKTsKLSAgICBpZiAoIWEpIHsKLSAgICAgICAgZWMgPSBOT1Rf
Rk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJl
bW92ZU5hbWVkSXRlbShhLT5uYW1lKCksIGVjKTsKLX0KLQogUGFzc1JlZlB0cjxOb2RlPiBOYW1l
ZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBj
b25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgcmV0dXJu
IHJlbW92ZU5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVz
cGFjZVVSSSksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OmdldE5h
bWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAotewotICAgIEF0dHJpYnV0
ZSogYSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7Ci0gICAgaWYgKCFhKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBhLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKLX0K
LQotUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShOb2RlKiBub2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhbm9kZSkgewot
ICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vIE5vdCBtZW50aW9uZWQgaW4gc3BlYzogdGhyb3cgYSBISUVSQVJDSFlfUkVRVUVTVF9F
UlJPUiBpZiB0aGUgdXNlciBwYXNzZXMgaW4gYSBub24tYXR0cmlidXRlIG5vZGUKLSAgICBpZiAo
IW5vZGUtPmlzQXR0cmlidXRlTm9kZSgpKSB7Ci0gICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVF
U1RfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgQXR0ciogYXR0ciA9IHN0YXRp
Y19jYXN0PEF0dHIqPihub2RlKTsKLQotICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0ci0+
YXR0cigpOwotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChhdHRyaWJ1
dGUtPm5hbWUoKSk7Ci0gICAgQXR0cmlidXRlKiBvbGRBdHRyaWJ1dGUgPSBpbmRleCAhPSBub3RG
b3VuZCA/IGF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKLSAgICBpZiAob2xkQXR0cmlidXRlID09
IGF0dHJpYnV0ZSkKLSAgICAgICAgcmV0dXJuIG5vZGU7IC8vIHdlIGtub3cgYWJvdXQgaXQgYWxy
ZWFkeQotCi0gICAgLy8gSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIG5vZGUgaXMgYW4g
QXR0ciB0aGF0IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmpl
Y3QuCi0gICAgLy8gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9uZSBBdHRyIG5vZGVz
IHRvIHJlLXVzZSB0aGVtIGluIG90aGVyIGVsZW1lbnRzLgotICAgIGlmIChhdHRyLT5vd25lckVs
ZW1lbnQoKSkgewotICAgICAgICBlYyA9IElOVVNFX0FUVFJJQlVURV9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRyOwotICAgIGlmIChvbGRB
dHRyaWJ1dGUpIHsKLSAgICAgICAgb2xkQXR0ciA9IG9sZEF0dHJpYnV0ZS0+Y3JlYXRlQXR0cklm
TmVlZGVkKG1fZWxlbWVudCk7Ci0gICAgICAgIHJlcGxhY2VBdHRyaWJ1dGUoaW5kZXgsIGF0dHJp
YnV0ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwotCi0g
ICAgcmV0dXJuIG9sZEF0dHIucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPE5vZGU+IE5hbWVk
Tm9kZU1hcDo6c2V0TmFtZWRJdGVtTlMoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgcmV0dXJuIHNldE5hbWVkSXRlbShub2RlLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9k
ZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0KLSAgICBz
aXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7Ci0gICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPEF0dHI+IGF0dHIgPSBtX2F0dHJpYnV0ZXNbaW5k
ZXhdLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKLQotICAgIHJlbW92ZUF0dHJpYnV0
ZShpbmRleCk7Ci0KLSAgICByZXR1cm4gYXR0ci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
Tm9kZT4gTmFtZWROb2RlTWFwOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAotewotICAgIGlm
IChpbmRleCA+PSBsZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9h
dHRyaWJ1dGVzW2luZGV4XS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7Ci19Ci0KLXZv
aWQgTmFtZWROb2RlTWFwOjpjb3B5QXR0cmlidXRlc1RvVmVjdG9yKFZlY3RvcjxSZWZQdHI8QXR0
cmlidXRlPiA+JiBjb3B5KQotewotICAgIGNvcHkgPSBtX2F0dHJpYnV0ZXM7Ci19Ci0KLXNpemVf
dCBOYW1lZE5vZGVNYXA6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAotewotICAgIHVu
c2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotCi0gICAgLy8gQ29udGludWUgdG8gY2hlY2tpbmcgY2Fz
ZS1pbnNlbnNpdGl2ZWx5IGFuZC9vciBmdWxsIG5hbWVzcGFjZWQgbmFtZXMgaWYgbmVjZXNzYXJ5
OgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOwotICAg
ICAgICBpZiAoIWF0dHJOYW1lLmhhc1ByZWZpeCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBhdHRyTmFtZS5s
b2NhbE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgZmFzdGVyIHRvIGRvIHRoaXMgY29tcGFy
aXNvbiB3aXRob3V0IGNhbGxpbmcgdG9TdHJpbmcsIHdoaWNoCi0gICAgICAgICAgICAvLyBnZW5l
cmF0ZXMgYSB0ZW1wb3Jhcnkgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpb24uIEJ1dCB0aGlzIGJyYW5j
aCBpcyBvbmx5IHJlYWNoZWQKLSAgICAgICAgICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBo
YXMgYSBwcmVmaXgsIHdoaWNoIGlzIHJhcmUgaW4gSFRNTC4KLSAgICAgICAgICAgIGlmIChlcXVh
bFBvc3NpYmx5SWdub3JpbmdDYXNlKG5hbWUsIGF0dHJOYW1lLnRvU3RyaW5nKCksIHNob3VsZEln
bm9yZUF0dHJpYnV0ZUNhc2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6OmNs
ZWFyQXR0cmlidXRlcygpCi17Ci0gICAgYXR0cmlidXRlRGF0YSgpLT5jbGVhckNsYXNzKCk7Ci0g
ICAgZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KCk7Ci0gICAgbV9hdHRyaWJ1dGVzLmNsZWFy
KCk7Ci19Ci0KIHZvaWQgTmFtZWROb2RlTWFwOjpkZXRhY2hGcm9tRWxlbWVudCgpCiB7CiAgICAg
Ly8gVGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIGhvbGRlciBvZiB0aGUgbWFwIGlzIEphdmFTY3Jp
cHQsIGJlY2F1c2Ugd2UgbWFyayB0aGUKQEAgLTIxMywxMzAgKzY0LDcgQEAgdm9pZCBOYW1lZE5v
ZGVNYXA6OmRldGFjaEZyb21FbGVtZW50KCkKICAgICAvLyBvZiB0aGF0LCB3ZSBjYW4gc2ltcGx5
IGNsZWFyIGFsbCB0aGUgYXR0cmlidXRlcyB0byBhdm9pZCBhY2Nlc3Npbmcgc3RhbGUKICAgICAv
LyBwb2ludGVycyB0byBkbyB0aGluZ3MgbGlrZSBjcmVhdGUgQXR0ciBvYmplY3RzLgogICAgIG1f
ZWxlbWVudCA9IDA7Ci0gICAgY2xlYXJBdHRyaWJ1dGVzKCk7Ci19Ci0KLXZvaWQgTmFtZWROb2Rl
TWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE5hbWVkTm9kZU1hcCYgb3RoZXIpCi17Ci0gICAgLy8g
Y2xvbmUgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlIG90aGVyIG1hcCwgYnV0IGF0dGFjaCB0byBvdXIg
ZWxlbWVudAotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJ
ZiBhc3NpZ25pbmcgdGhlIG1hcCBjaGFuZ2VzIHRoZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8g
Y2FsbAotICAgIC8vIHVwZGF0ZUlkLgotICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBnZXRBdHRyaWJ1
dGVJdGVtKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwotICAgIEF0
dHJpYnV0ZSogbmV3SWQgPSBvdGhlci5nZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgaWYgKG9sZElkIHx8IG5ld0lkKQotICAg
ICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlkKG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRv
bSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUoKSA6IG51bGxBdG9tKTsKLQotICAgIEF0dHJpYnV0ZSog
b2xkTmFtZSA9IGdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7Ci0gICAgQXR0
cmlidXRlKiBuZXdOYW1lID0gb3RoZXIuZ2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVB
dHRyKTsKLQotICAgIGlmIChvbGROYW1lIHx8IG5ld05hbWUpCi0gICAgICAgIG1fZWxlbWVudC0+
dXBkYXRlTmFtZShvbGROYW1lID8gb2xkTmFtZS0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdOYW1l
ID8gbmV3TmFtZS0+dmFsdWUoKSA6IG51bGxBdG9tKTsKLQotICAgIGNsZWFyQXR0cmlidXRlcygp
OwotICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG90aGVyLmxlbmd0aCgpOwotICAgIG1fYXR0cmli
dXRlcy5yZXNpemUobmV3TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3
TGVuZ3RoOyBpKyspCi0gICAgICAgIG1fYXR0cmlidXRlc1tpXSA9IG90aGVyLm1fYXR0cmlidXRl
c1tpXS0+Y2xvbmUoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdhc3RlZnVsLiAgVGhlIGNs
YXNzIGxpc3QgY291bGQgYmUgcHJlc2VydmVkIG9uIGEgY29weSwgYW5kIHdlCi0gICAgLy8gd291
bGRuJ3QgaGF2ZSB0byB3YXN0ZSB0aW1lIHJlcGFyc2luZyB0aGUgYXR0cmlidXRlLgotICAgIC8v
IFRoZSBkZXJpdmVkIGNsYXNzLCBIVE1MTmFtZWROb2RlTWFwLCB3aGljaCBtYW5hZ2VzIGEgcGFy
c2VkIGNsYXNzIGxpc3QgZm9yIHRoZSBDTEFTUyBhdHRyaWJ1dGUsCi0gICAgLy8gd2lsbCB1cGRh
dGUgaXRzIG1lbWJlciB2YXJpYWJsZSB3aGVuIHBhcnNlIGF0dHJpYnV0ZSBpcyBjYWxsZWQuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgaSsrKQotICAgICAgICBtX2Vs
ZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGVzW2ldLmdldCgpLCB0cnVlKTsKLX0K
LQotdm9pZCBOYW1lZE5vZGVNYXA6OmFkZEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4g
cHJwQXR0cmlidXRlKQotewotICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IHBycEF0
dHJpYnV0ZTsKLQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+d2lsbE1v
ZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgbnVsbEF0b20sIGF0dHJpYnV0ZS0+dmFs
dWUoKSk7Ci0KLSAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKGF0dHJpYnV0ZSk7Ci0gICAgaWYgKEF0
dHIqIGF0dHIgPSBhdHRyaWJ1dGUtPmF0dHIoKSkKLSAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0g
bV9lbGVtZW50OwotCi0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT5kaWRN
b2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlLmdldCgpKTsKLX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6
OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbGVu
Z3RoKCkpOwotCi0gICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVz
W2luZGV4XTsKLQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+d2lsbFJl
bW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKLQot
ICAgIGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCi0gICAgICAgIGF0dHItPm1f
ZWxlbWVudCA9IDA7Ci0gICAgbV9hdHRyaWJ1dGVzLnJlbW92ZShpbmRleCk7Ci0KLSAgICBpZiAo
bV9lbGVtZW50KQotICAgICAgICBtX2VsZW1lbnQtPmRpZFJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1
dGUuZ2V0KCkpOwotfQotCi12b2lkIE5hbWVkTm9kZU1hcDo6cmVwbGFjZUF0dHJpYnV0ZShzaXpl
X3QgaW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUpCi17Ci0gICAgQVNT
RVJUKGluZGV4IDwgbGVuZ3RoKCkpOwotCi0gICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRl
ID0gcHJwQXR0cmlidXRlOwotICAgIEF0dHJpYnV0ZSogb2xkID0gbV9hdHRyaWJ1dGVzW2luZGV4
XS5nZXQoKTsKLQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+d2lsbE1v
ZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgb2xkLT52YWx1ZSgpLCBhdHRyaWJ1dGUt
PnZhbHVlKCkpOwotCi0gICAgaWYgKEF0dHIqIGF0dHIgPSBvbGQtPmF0dHIoKSkKLSAgICAgICAg
YXR0ci0+bV9lbGVtZW50ID0gMDsKLSAgICBtX2F0dHJpYnV0ZXNbaW5kZXhdID0gYXR0cmlidXRl
OwotICAgIGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCi0gICAgICAgIGF0dHIt
Pm1fZWxlbWVudCA9IG1fZWxlbWVudDsKLQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1f
ZWxlbWVudC0+ZGlkTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS5nZXQoKSk7Ci19Ci0KLWJvb2wg
TmFtZWROb2RlTWFwOjptYXBzRXF1aXZhbGVudChjb25zdCBOYW1lZE5vZGVNYXAqIG90aGVyTWFw
KSBjb25zdAotewotICAgIGlmICghb3RoZXJNYXApCi0gICAgICAgIHJldHVybiBpc0VtcHR5KCk7
Ci0gICAgCi0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7Ci0gICAgaWYgKGxlbiAhPSBvdGhl
ck1hcC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgQXR0cmlidXRlKiBhdHRyID0g
YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgQXR0cmlidXRlKiBvdGhlckF0dHIgPSBvdGhlck1h
cC0+Z2V0QXR0cmlidXRlSXRlbShhdHRyLT5uYW1lKCkpOwotICAgICAgICBpZiAoIW90aGVyQXR0
ciB8fCBhdHRyLT52YWx1ZSgpICE9IG90aGVyQXR0ci0+dmFsdWUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBOYW1lZE5vZGVNYXA6OmVuc3VyZUlubGluZVN0eWxlRGVjbCgp
Ci17Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5bGVEZWNsKSB7Ci0gICAg
ICAgIEFTU0VSVChtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKLSAgICAgICAgYXR0cmli
dXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbCA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGVJbmxpbmUoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkpOwot
ICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJz
aW5nKG1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICFtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+bV9p
bmxpbmVTdHlsZURlY2wuZ2V0KCk7Ci19Ci0KLXZvaWQgTmFtZWROb2RlTWFwOjpkZXN0cm95SW5s
aW5lU3R5bGVEZWNsKCkKLXsKLSAgICBpZiAoIWF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHls
ZURlY2wpCi0gICAgICAgIHJldHVybjsKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5
bGVEZWNsLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1faW5s
aW5lU3R5bGVEZWNsID0gMDsKKyAgICBhdHRyaWJ1dGVEYXRhKCktPmNsZWFyQXR0cmlidXRlcygp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTmFtZWROb2RlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmgK
aW5kZXggZjUzMDQ3YzMwMDE1NmQyNmE1NjlkMjMwN2Q0MWRmZjM1NDE1ZmM5Zi4uNmE2MTc2NTI3
ZmE3YTA5ZWM5N2MxYWFhNzFlODkzMTE4ODljNmE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05hbWVkTm9kZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVN
YXAuaApAQCAtMjUsMTAgKzI1LDcgQEAKICNpZm5kZWYgTmFtZWROb2RlTWFwX2gKICNkZWZpbmUg
TmFtZWROb2RlTWFwX2gKIAotI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkVsZW1l
bnRBdHRyaWJ1dGVEYXRhLmgiCi0jaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgotI2luY2x1
ZGUgPHd0Zi9Ob3RGb3VuZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDc5ICs0
MSwzNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTmFtZWROb2RlTWFw
KGVsZW1lbnQpKTsKICAgICB9CiAKLSAgICB+TmFtZWROb2RlTWFwKCk7Ci0KICAgICB2b2lkIHJl
ZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIAotICAgIC8vIFB1YmxpYyBET00gaW50ZXJmYWNlLgot
Ci0gICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBj
b25zdDsKLSAgICBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5hbWVkSXRl
bShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+Z2V0
TmFtZWRJdGVtKG5hbWUsIG1fZWxlbWVudCk7IH0KKyAgICBQYXNzUmVmUHRyPE5vZGU+IHJlbW92
ZU5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBhdHRyaWJ1dGVEYXRhKCktPnJlbW92ZU5hbWVkSXRlbShuYW1lLCBlYywgbV9lbGVtZW50KTsg
fQogCiAgICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IFN0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVmUHRy
PE5vZGU+IGdldE5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdDsKLSAg
ICBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxOb2RlPiBzZXROYW1lZEl0ZW0o
Tm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5hbWVkSXRl
bShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRh
KCktPmdldE5hbWVkSXRlbShuYW1lLCBtX2VsZW1lbnQpOyB9CisgICAgUGFzc1JlZlB0cjxOb2Rl
PiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+cmVtb3ZlTmFtZWRJdGVtKG5hbWUsIGVj
LCBtX2VsZW1lbnQpOyB9CisgICAgUGFzc1JlZlB0cjxOb2RlPiBzZXROYW1lZEl0ZW0oTm9kZSog
bm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+c2V0TmFt
ZWRJdGVtKG5vZGUsIGVjLCBtX2VsZW1lbnQpOyB9CiAgICAgUGFzc1JlZlB0cjxOb2RlPiBzZXRO
YW1lZEl0ZW1OUyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxOb2Rl
PiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLnNpemUoKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFsZW5ndGgoKTsgfQotCi0gICAgLy8gSW50ZXJuYWwgaW50ZXJmYWNlLgotCi0g
ICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOyB9Ci0gICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1
dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBzaXplX3QgZ2V0QXR0cmli
dXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLQotICAgIHZvaWQgY29w
eUF0dHJpYnV0ZXNUb1ZlY3RvcihWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiYpOwotCi0gICAg
dm9pZCBzaHJpbmtUb0xlbmd0aCgpIHsgbV9hdHRyaWJ1dGVzLnNocmlua0NhcGFjaXR5KGxlbmd0
aCgpKTsgfQotICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0
eSkgeyBtX2F0dHJpYnV0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYXBhY2l0eSk7IH0KLQot
ICAgIC8vIFVzZWQgZHVyaW5nIHBhcnNpbmc6IG9ubHkgaW5zZXJ0cyBpZiBub3QgYWxyZWFkeSB0
aGVyZS4gTm8gZXJyb3IgY2hlY2tpbmchCi0gICAgdm9pZCBpbnNlcnRBdHRyaWJ1dGUoUGFzc1Jl
ZlB0cjxBdHRyaWJ1dGU+IG5ld0F0dHJpYnV0ZSwgYm9vbCBhbGxvd0R1cGxpY2F0ZXMpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIW1fZWxlbWVudCk7Ci0gICAgICAgIGlmIChhbGxvd0R1cGxpY2F0
ZXMgfHwgIWdldEF0dHJpYnV0ZUl0ZW0obmV3QXR0cmlidXRlLT5uYW1lKCkpKQotICAgICAgICAg
ICAgYWRkQXR0cmlidXRlKG5ld0F0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBtYXBzRXF1
aXZhbGVudChjb25zdCBOYW1lZE5vZGVNYXAqIG90aGVyTWFwKSBjb25zdDsKLQotICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBkbyBubyBlcnJvciBjaGVja2luZy4KLSAgICB2b2lkIGFkZEF0dHJpYnV0
ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4pOwotICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgp
OworICAgIFBhc3NSZWZQdHI8Tm9kZT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXR0cmlidXRlRGF0YSgpLT5pdGVtKGluZGV4LCBtX2VsZW1lbnQpOyB9CisgICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+bGVuZ3RoKCk7IH0KIAog
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KIAotICAg
IHNpemVfdCBtYXBwZWRBdHRyaWJ1dGVDb3VudCgpIGNvbnN0OworICAgIGJvb2wgbWFwc0VxdWl2
YWxlbnQoY29uc3QgTmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29uc3QgeyByZXR1cm4gYXR0cmli
dXRlRGF0YSgpLT5lcXVpdmFsZW50KG90aGVyTWFwLT5hdHRyaWJ1dGVEYXRhKCkpOyB9CiAKICAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSgpIHsgcmV0dXJuICZtX2F0dHJp
YnV0ZURhdGE7IH0KICAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0
YSgpIGNvbnN0IHsgcmV0dXJuICZtX2F0dHJpYnV0ZURhdGE7IH0KIAotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBhdHRyaWJ1dGVEYXRh
KCktPm1faW5saW5lU3R5bGVEZWNsLmdldCgpOyB9Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHZvaWQgZGVzdHJveUlubGluZVN0
eWxlRGVjbCgpOwotCiBwcml2YXRlOgogICAgIE5hbWVkTm9kZU1hcChFbGVtZW50KiBlbGVtZW50
KQogICAgICAgICA6IG1fZWxlbWVudChlbGVtZW50KQogICAgIHsKICAgICB9CiAKLSAgICB2b2lk
IGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogICAgIHZvaWQgZGV0YWNoRnJvbUVsZW1l
bnQoKTsKLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OwotICAgIHNpemVfdCBnZXRB
dHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UpIGNvbnN0OwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93
Q2FzZShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGVzKGNvbnN0IE5hbWVkTm9kZU1hcCYpOwotICAg
IHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7Ci0gICAgdm9pZCByZXBsYWNlQXR0cmlidXRlKHNpemVf
dCBpbmRleCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKIAogICAgIC8vIEZJWE1FOiBOYW1lZE5v
ZGVNYXAgaXMgYmVpbmcgYnJva2VuIHVwIGludG8gdHdvIGNsYXNzZXMsIG9uZSBjb250YWluaW5n
IGRhdGEKICAgICAvLyAgICAgICAgZm9yIGVsZW1lbnRzIHdpdGggYXR0cmlidXRlcywgYW5kIG9u
ZSBmb3IgZXhwb3N1cmUgdG8gdGhlIERPTS4KQEAgLTEyNCw3NiArNzksOCBAQCBwcml2YXRlOgog
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIG1fYXR0cmlidXRlRGF0YTsKIAogICAgIEVsZW1lbnQq
IG1fZWxlbWVudDsKLSAgICBWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4sIDQ+IG1fYXR0cmlidXRl
czsKIH07CiAKLWlubGluZSBBdHRyaWJ1dGUqIE5hbWVkTm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRl
bShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9
IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQp
Ci0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOwotICAgIHJldHVybiAw
OwotfQotCi1pbmxpbmUgc2l6ZV90IE5hbWVkTm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRlbUluZGV4
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGxlbiA9IGxl
bmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAg
ICBpZiAobV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKLSAgICAgICAgICAg
IHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLWlubGluZSBBdHRy
aWJ1dGUqIE5hbWVkTm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKLXsKLSAgICBzaXplX3QgaW5k
ZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2Fz
ZSk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gbV9hdHRyaWJ1
dGVzW2luZGV4XS5nZXQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gV2UgdXNlIGEgYm9vbGVh
biBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5nIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Ug
c28gdGhhdCB0aGUgY2FsbGVyCi0vLyBjYW4gdHVuZSB0aGUgYmVoYXZpb3IgKGhhc0F0dHJpYnV0
ZSBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVyZWFzIGdldEF0dHJpYnV0ZSBpcyBub3QpLgotaW5saW5l
IHNpemVfdCBOYW1lZE5vZGVNYXA6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKLXsKLSAgICB1bnNp
Z25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBib29sIGRvU2xvd0NoZWNrID0gc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZTsKLQotICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUg
YXR0cmlidXRlIGV4aXN0cyBhbmQgaXRzIG5hbWUgZXhhY3RseSBtYXRjaGVzLgotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOwotICAgICAgICBpZiAoIWF0
dHJOYW1lLmhhc1ByZWZpeCgpKSB7Ci0gICAgICAgICAgICBpZiAobmFtZSA9PSBhdHRyTmFtZS5s
b2NhbE5hbWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBkb1Nsb3dDaGVjayA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGRvU2xvd0No
ZWNrKQotICAgICAgICByZXR1cm4gZ2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2UobmFtZSwg
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi1p
bmxpbmUgdm9pZCBOYW1lZE5vZGVNYXA6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKQotewotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChu
YW1lKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHJlbW92ZUF0dHJpYnV0ZShpbmRleCk7Ci19Ci0KLWlubGluZSBzaXplX3QgTmFtZWROb2RlTWFw
OjptYXBwZWRBdHRyaWJ1dGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXR0cmlidXRlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAobV9hdHRyaWJ1dGVzW2ldLT5kZWNsKCkpCi0gICAgICAgICAgICArK2NvdW50
OwotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIE5hbWVkTm9kZU1hcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNzM4MDAwZmVj
ZDMxNGFlMGRjYmVmN2EyYTljZDgxMWY1ODI1MzUzZi4uMjJhZjgzMWNmOTAwOGY1YzM4MjcyYWRm
YWIyOTI1MTZmNDgwZmEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTc2NSwxMyArMTc2NSwxMyBA
QCBib29sIE5vZGU6OmlzRXF1YWxOb2RlKE5vZGUqIG90aGVyKSBjb25zdAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBOYW1l
ZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQodGhpcyktPnVwZGF0ZWRBdHRyaWJ1dGVz
KCk7Ci0gICAgICAgIE5hbWVkTm9kZU1hcCogb3RoZXJBdHRyaWJ1dGVzID0gdG9FbGVtZW50KG90
aGVyKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQodGhpcyktPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Cisg
ICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlckF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQo
b3RoZXIpLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogCi0gICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYmICFhdHRyaWJ1dGVzLT5tYXBzRXF1aXZhbGVudChvdGhlckF0dHJpYnV0ZXMpKQorICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmJiAhYXR0cmlidXRlcy0+ZXF1aXZhbGVudChvdGhlckF0dHJpYnV0
ZXMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChvdGhlckF0dHJp
YnV0ZXMgJiYgIW90aGVyQXR0cmlidXRlcy0+bWFwc0VxdWl2YWxlbnQoYXR0cmlidXRlcykpCisg
ICAgICAgIGlmIChvdGhlckF0dHJpYnV0ZXMgJiYgIW90aGVyQXR0cmlidXRlcy0+ZXF1aXZhbGVu
dChhdHRyaWJ1dGVzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBA
IC0xODMxLDcgKzE4MzEsNyBAQCBib29sIE5vZGU6OmlzRGVmYXVsdE5hbWVzcGFjZShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSU1heWJlRW1wdHkpIGNvbnN0CiAgICAgICAgICAgICBp
ZiAoZWxlbS0+cHJlZml4KCkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0t
Pm5hbWVzcGFjZVVSSSgpID09IG5hbWVzcGFjZVVSSTsKIAotICAgICAgICAgICAgaWYgKE5hbWVk
Tm9kZU1hcCogYXR0cnMgPSBlbGVtLT51cGRhdGVkQXR0cmlidXRlcygpKSB7CisgICAgICAgICAg
ICBpZiAoRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gZWxlbS0+dXBkYXRlZEF0dHJpYnV0
ZURhdGEoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRy
cy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIg
PSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xOTE3
LDcgKzE5MTcsNyBAQCBTdHJpbmcgTm9kZTo6bG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmlu
ZyAmcHJlZml4KSBjb25zdAogICAgICAgICAgICAgaWYgKCFlbGVtLT5uYW1lc3BhY2VVUkkoKS5p
c051bGwoKSAmJiBlbGVtLT5wcmVmaXgoKSA9PSBwcmVmaXgpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW0tPm5hbWVzcGFjZVVSSSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW0tPnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cnMgPSBlbGVtLT51cGRhdGVkQXR0
cmlidXRlRGF0YSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAq
YXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAgICAgICAKQEAg
LTE5NzEsNyArMTk3MSw3IEBAIFN0cmluZyBOb2RlOjpsb29rdXBOYW1lc3BhY2VQcmVmaXgoY29u
c3QgQXRvbWljU3RyaW5nICZfbmFtZXNwYWNlVVJJLCBjb25zdCBFbGVtCiAgICAgaWYgKG9yaWdp
bmFsRWxlbWVudC0+bG9va3VwTmFtZXNwYWNlVVJJKHByZWZpeCgpKSA9PSBfbmFtZXNwYWNlVVJJ
KQogICAgICAgICByZXR1cm4gcHJlZml4KCk7CiAgICAgCi0gICAgaWYgKE5hbWVkTm9kZU1hcCog
YXR0cnMgPSB0b0VsZW1lbnQodGhpcyktPnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsKKyAgICBpZiAo
RWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gdG9FbGVtZW50KHRoaXMpLT51cGRhdGVkQXR0
cmlidXRlRGF0YSgpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+
bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0
dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAKQEAgLTIxMTQsMTcgKzIxMTQsMTcgQEAgdW5z
aWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSogb3RoZXJOb2Rl
KQogICAgICAgICBjaGFpbjIuYXBwZW5kKGF0dHIyKTsKICAgICAKICAgICBpZiAoYXR0cjEgJiYg
YXR0cjIgJiYgc3RhcnQxID09IHN0YXJ0MiAmJiBzdGFydDEpIHsKLSAgICAgICAgLy8gV2UgYXJl
IGNvbXBhcmluZyB0d28gYXR0cmlidXRlcyBvbiB0aGUgc2FtZSBub2RlLiAgQ3Jhd2wgb3VyIGF0
dHJpYnV0ZSBtYXAKKyAgICAgICAgLy8gV2UgYXJlIGNvbXBhcmluZyB0d28gYXR0cmlidXRlcyBv
biB0aGUgc2FtZSBub2RlLiBDcmF3bCBvdXIgYXR0cmlidXRlIGRhdGEKICAgICAgICAgLy8gYW5k
IHNlZSB3aGljaCBvbmUgd2UgaGl0IGZpcnN0LgotICAgICAgICBOYW1lZE5vZGVNYXAqIG1hcCA9
IGF0dHIxLT5vd25lckVsZW1lbnQoKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbWFwLT5sZW5ndGgoKTsKKyAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURh
dGEqIGF0dHJpYnV0ZURhdGEgPSBhdHRyMS0+b3duZXJFbGVtZW50KCktPnVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZURhdGEtPmxlbmd0
aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRlcm1pbmluZyBub2RlcyBpcyBh
IGNoaWxkIG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBib3RoIGRldGVybWluaW5n
IG5vZGVzLCB0aGVuIGFuIAogICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50
IG9yZGVyIGJldHdlZW4gdGhlIGRldGVybWluaW5nIG5vZGVzIGlzIHJldHVybmVkLiBUaGlzIG9y
ZGVyIGlzIHN0YWJsZSBhcyBsb25nIGFzIG5vIG5vZGVzIG9mCiAgICAgICAgICAgICAvLyB0aGUg
c2FtZSBub2RlVHlwZSBhcmUgaW5zZXJ0ZWQgaW50byBvciByZW1vdmVkIGZyb20gdGhlIGRpcmVj
dCBjb250YWluZXIuIFRoaXMgd291bGQgYmUgdGhlIGNhc2UsIGZvciBleGFtcGxlLCAKICAgICAg
ICAgICAgIC8vIHdoZW4gY29tcGFyaW5nIHR3byBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIGVsZW1l
bnQsIGFuZCBpbnNlcnRpbmcgb3IgcmVtb3ZpbmcgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIG1pZ2h0
IGNoYW5nZSAKICAgICAgICAgICAgIC8vIHRoZSBvcmRlciBiZXR3ZWVuIGV4aXN0aW5nIGF0dHJp
YnV0ZXMuCi0gICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0o
aSk7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1
dGVJdGVtKGkpOwogICAgICAgICAgICAgaWYgKGF0dHIxLT5hdHRyKCkgPT0gYXR0cikKICAgICAg
ICAgICAgICAgICByZXR1cm4gRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lG
SUMgfCBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7CiAgICAgICAgICAgICBpZiAoYXR0cjIt
PmF0dHIoKSA9PSBhdHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggMzExYmQ0MTE3Y2ZmOWU3NDBhZjYwYmZm
Y2I3OTZiZjAwYzM4OTA2MC4uNDJhNTcwNDU2ZGY0MGU3NDE1MTkzM2FhYzlhNTExZjYxOTVhOGQy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCkBAIC01Myw2ICs1Myw3IEBAIGNsYXNzIERPTVNldHRhYmxlVG9rZW5M
aXN0OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEeW5hbWljU3VidHJlZU5vZGVMaXN0OwogY2xh
c3MgRWxlbWVudDsKK2NsYXNzIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOwogY2xhc3MgRXZlbnQ7CiBj
bGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudERpc3BhdGNoTWVkaWF0b3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggMjVmMmNkODA3ZGIwZDEwZjI2MDgzNzg2NDk2
MDY0OTdiYTBiM2U5Ny4uZDc1ZmJmNzhjOTRiNTQxYWVhYjNhNWFjODM3NDYxOTA5OWEzYzhmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3Q2xhc3NTdHJpbmcpCiAgICAgc2V0SGFzQ2xhc3MoaGFzQ2xhc3MpOwogICAgIGlmICho
YXNDbGFzcykgewogICAgICAgICBjb25zdCBib29sIHNob3VsZEZvbGRDYXNlID0gZG9jdW1lbnQo
KS0+aW5RdWlya3NNb2RlKCk7Ci0gICAgICAgIGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+c2V0Q2xh
c3MobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKKyAgICAgICAgZW5zdXJlVXBkYXRl
ZEF0dHJpYnV0ZURhdGEoKS0+c2V0Q2xhc3MobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNl
KTsKICAgICAgICAgaWYgKERPTVRva2VuTGlzdCogY2xhc3NMaXN0ID0gb3B0aW9uYWxDbGFzc0xp
c3QoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PENsYXNzTGlzdCo+KGNsYXNzTGlzdCktPnJl
c2V0KG5ld0NsYXNzU3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZURhdGEoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU3R5bGVkRWxlbWVudC5oCmluZGV4IGQ2MWYwYWZhZjRlYjJiZjgxMDRkMzAyOTY3
YjBmZDQ2NjVkYmRiMDEuLmNlNmEzY2FmY2U3NzU5Y2IyOTA3Y2ZkMzdkMjcwZjBjNDI1NjYwMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBT
dHlsZWRFbGVtZW50IDogcHVibGljIEVsZW1lbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflN0
eWxlZEVsZW1lbnQoKTsKIAotICAgIHNpemVfdCBtYXBwZWRBdHRyaWJ1dGVDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIGF0dHJpYnV0ZU1hcCgpID8gYXR0cmlidXRlTWFwKCktPm1hcHBlZEF0dHJpYnV0
ZUNvdW50KCkgOiAwOyB9CisgICAgc2l6ZV90IG1hcHBlZEF0dHJpYnV0ZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5tYXBwZWRBdHRyaWJ1
dGVDb3VudCgpIDogMDsgfQogICAgIGJvb2wgaXNNYXBwZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkgY29uc3QgeyBNYXBwZWRBdHRyaWJ1dGVFbnRyeSByZXMgPSBlTm9uZTsg
bWFwVG9FbnRyeShuYW1lLCByZXMpOyByZXR1cm4gcmVzICE9IGVOb25lOyB9CiAKICAgICB2b2lk
IGFkZENTU0xlbmd0aChBdHRyaWJ1dGUqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpA
QCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGUoKSB7IHJldHVybiAw
OyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKIAotICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2woKSBjb25zdCB7IHJldHVybiBhdHRy
aWJ1dGVNYXAoKSA/IGF0dHJpYnV0ZU1hcCgpLT5pbmxpbmVTdHlsZURlY2woKSA6IDA7IH0KLSAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkgeyBy
ZXR1cm4gZW5zdXJlQXR0cmlidXRlTWFwKCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpOyB9Cisg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlRGVjbCgpIGNvbnN0IHsg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+aW5saW5lU3R5bGVEZWNs
KCkgOiAwOyB9CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGVuc3VyZUlubGluZVN0
eWxlRGVjbCgpIHsgcmV0dXJuIGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKHRoaXMpOyB9CiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgp
IE9WRVJSSURFIHsgcmV0dXJuIGVuc3VyZUlubGluZVN0eWxlRGVjbCgpOyB9CiAKICAgICBjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzKCkgY29uc3Q7CkBAIC05Miw4ICs5Miw4IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQogICAgIHsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZU1hcCgpKQotICAgICAgICAgICAgYXR0cmlidXRlTWFwKCktPmRl
c3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkKKyAg
ICAgICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+ZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOwogICAg
IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
aW5kZXggNDM4MjBjNGMyZDllODU0NDhjNWQ3ZTQ2MjkzZjBjMTliYmNiMjc5Yy4uMzUyYjQ1MmNm
MTk5OTZiN2VlMTlmYjU1NTNhNzg0NDlmMzYxYTJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTczLDggKzczLDggQEAgYm9vbCBpc0xlZ2Fj
eUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUgKm5vZGUpCiBlbnVtIFNob3VsZFN0eWxlQXR0cmli
dXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1dGVT
aG91bGRCZUVtcHR5IH07CiBzdGF0aWMgYm9vbCBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0
cmlidXRlKGNvbnN0IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFNob3VsZFN0eWxlQXR0cmlidXRl
QmVFbXB0eSBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpCiB7Ci0gICAgTmFtZWROb2RlTWFw
KiBtYXAgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgIGlmICghbWFwIHx8IG1h
cC0+aXNFbXB0eSgpKQorICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxl
bWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZXMgfHwgYXR0
cmlidXRlcy0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHVuc2lnbmVk
IG1hdGNoZWRBdHRyaWJ1dGVzID0gMDsKQEAgLTg0LDggKzg0LDggQEAgc3RhdGljIGJvb2wgaGFz
Tm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShjb25zdCBTdHlsZWRFbGVtZW50KiBlbGVt
ZW50LCBTaG8KICAgICAgICAgfHwgIWVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpIHx8IGVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpLT5pc0VtcHR5KCkpKQogICAgICAgICBtYXRjaGVkQXR0cmli
dXRlcysrOwogCi0gICAgQVNTRVJUKG1hdGNoZWRBdHRyaWJ1dGVzIDw9IG1hcC0+bGVuZ3RoKCkp
OwotICAgIHJldHVybiBtYXRjaGVkQXR0cmlidXRlcyA9PSBtYXAtPmxlbmd0aCgpOworICAgIEFT
U0VSVChtYXRjaGVkQXR0cmlidXRlcyA8PSBhdHRyaWJ1dGVzLT5sZW5ndGgoKSk7CisgICAgcmV0
dXJuIG1hdGNoZWRBdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwogfQogCiBib29s
IGlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZShjb25zdCBFbGVtZW50KiBl
bGVtZW50KQpAQCAtMTA4LDEwICsxMDgsMTAgQEAgc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWco
Y29uc3QgTm9kZSAqbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgRWxl
bWVudCAqZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSk7Ci0gICAgTmFt
ZWROb2RlTWFwKiBtYXAgPSBlbGVtLT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgIGlmICghbWFw
KQorICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbS0+dXBkYXRlZEF0
dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBtYXAtPmlzRW1wdHkoKSB8fCAobWFwLT5sZW5ndGgoKSA9PSAxICYmIGVs
ZW0tPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwor
ICAgIHJldHVybiBhdHRyaWJ1dGVzLT5pc0VtcHR5KCkgfHwgKGF0dHJpYnV0ZXMtPmxlbmd0aCgp
ID09IDEgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NT
dHJpbmcoKSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUZvbnRFbGVt
ZW50KERvY3VtZW50KiBkb2N1bWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcAppbmRleCA3ZTU0NDFkM2I1OGIwNzhmZTU2MjFjOWNhM2Y1MmQyNjNjNWRiY2QyLi5lM2Nl
NDdmM2I3MjQyYzczZWRkNTVhYTBkZDFjMTMxYzZmNjdmOTdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC04MTcsOCArODE3LDggQEAgYm9vbCBFZGl0aW5nU3R5
bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KGNvbnN0IEhUTUxFbGVtZW50
KiBlbGVtZW4KICAgICAgICAgfQogICAgIH0KIAotICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlTWFwID0gZWxlbWVudC0+YXR0cmlidXRlTWFwKCk7Ci0gICAgaWYgKCFhdHRyaWJ1dGVN
YXAgfHwgYXR0cmlidXRlTWFwLT5pc0VtcHR5KCkpCisgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCk7CisgICAgaWYgKCFh
dHRyaWJ1dGVzIHx8IGF0dHJpYnV0ZXMtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGVsZW1l
bnRJc1NwYW5PckVsZW1lbnRFcXVpdmFsZW50OyAvLyBzcGFuLCBiLCBldGMuLi4gd2l0aG91dCBh
bnkgYXR0cmlidXRlcwogCiAgICAgdW5zaWduZWQgbWF0Y2hlZEF0dHJpYnV0ZXMgPSAwOwpAQCAt
ODQ2LDggKzg0Niw4IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JI
VE1MRXF1aXZhbGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVuCiAgICAgfQogCiAgICAgLy8g
Zm9udCB3aXRoIGNvbG9yIGF0dHJpYnV0ZSwgc3BhbiB3aXRoIHN0eWxlIGF0dHJpYnV0ZSwgZXRj
Li4uCi0gICAgQVNTRVJUKG1hdGNoZWRBdHRyaWJ1dGVzIDw9IGF0dHJpYnV0ZU1hcC0+bGVuZ3Ro
KCkpOwotICAgIHJldHVybiBtYXRjaGVkQXR0cmlidXRlcyA+PSBhdHRyaWJ1dGVNYXAtPmxlbmd0
aCgpOworICAgIEFTU0VSVChtYXRjaGVkQXR0cmlidXRlcyA8PSBhdHRyaWJ1dGVzLT5sZW5ndGgo
KSk7CisgICAgcmV0dXJuIG1hdGNoZWRBdHRyaWJ1dGVzID49IGF0dHJpYnV0ZXMtPmxlbmd0aCgp
OwogfQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdChjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24sIFNob3VsZFByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiBzaG91bGRQcmVzZXJ2
ZVdyaXRpbmdEaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCBlNjQ2YjUxZjIyYWFl
YTgxZDdjZjA3ZDM3M2U5ODhiZDY5MTM1NjY5Li4yMTkzODFhMjQ3Mzg1MTljZGQ5ZGJiOWMyYjE5
NWZmNzNjYjM2MDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgc3Rh
dGljIEVsZW1lbnQqIGhpZ2hlc3RWaXN1YWxseUVxdWl2YWxlbnREaXZCZWxvd1Jvb3QoRWxlbWVu
dCogc3RhcnRCbG9jaykKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJldHVybiBhIHJvb3Qgbm9k
ZSAoaWYgaXQgaGFwcGVucyB0byBiZSBhIGRpdiwgZS5nLiwgaW4gYSBkb2N1bWVudCBmcmFnbWVu
dCkgYmVjYXVzZSB0aGVyZSBhcmUgbm8KICAgICAvLyBzaWJsaW5ncyBmb3IgdXMgdG8gYXBwZW5k
IHRvLgogICAgIHdoaWxlICghY3VyQmxvY2stPm5leHRTaWJsaW5nKCkgJiYgY3VyQmxvY2stPnBh
cmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShkaXZUYWcpICYmIGN1ckJsb2NrLT5wYXJlbnRFbGVt
ZW50KCktPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZXMgPSBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpLT51cGRhdGVkQXR0cmlidXRlcygpOworICAg
ICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGN1ckJsb2NrLT5wYXJlbnRF
bGVtZW50KCktPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYmICFhdHRyaWJ1dGVzLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y3VyQmxvY2sgPSBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCA1MjI2YjIxNGMyNTgxMTc2MDkzNWM1
NjY5NjRlNzYzMGYwMmY5ZDE4Li42NDVhZDdkYTkwMDdiNWY0NTQ2NTg2OTU5MGQyMjRkYTdiN2U2
ZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApA
QCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQo
U3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiB7CiAgICAgYXBwZW5k
T3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCi0gICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0
cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7
CiAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmli
dXRlcy0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDI4Y2Mw
MjlkMDFiMDU5OTAyNDg1ZjEwNmE5NDA1MjJkMGUyYjQ3MTguLjI0ZWNjNmMzMGM0MjZiZjdmMDRj
MzI1NjMxM2RlZGE5NGZkOWJhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCkBAIC0xMTQ5LDIxICsxMTQ5LDE5IEBAIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFi
bGVJbWFnZU9ySFIoY29uc3QgTm9kZSogbm9kZSkKIAogYm9vbCBhcmVJZGVudGljYWxFbGVtZW50
cyhjb25zdCBOb2RlKiBmaXJzdCwgY29uc3QgTm9kZSogc2Vjb25kKQogewotICAgIC8vIGNoZWNr
IHRoYXQgdGFnIG5hbWUgYW5kIGFsbCBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcyBhcmUgaWRl
bnRpY2FsCi0KICAgICBpZiAoIWZpcnN0LT5pc0VsZW1lbnROb2RlKCkgfHwgIXNlY29uZC0+aXNF
bGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRvRWxlbWVu
dChmaXJzdCktPnRhZ1FOYW1lKCkubWF0Y2hlcyh0b0VsZW1lbnQoc2Vjb25kKS0+dGFnUU5hbWUo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5hbWVkTm9kZU1hcCogZmlyc3RNYXAg
PSB0b0VsZW1lbnQoZmlyc3QpLT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgIE5hbWVkTm9kZU1h
cCogc2Vjb25kTWFwID0gdG9FbGVtZW50KHNlY29uZCktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Cisg
ICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGZpcnN0QXR0cmlidXRlcyA9IHRvRWxlbWVudChmaXJz
dCktPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIHNl
Y29uZEF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQoc2Vjb25kKS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEo
KTsKIAotICAgIGlmIChmaXJzdE1hcCkKLSAgICAgICAgcmV0dXJuIGZpcnN0TWFwLT5tYXBzRXF1
aXZhbGVudChzZWNvbmRNYXApOwotICAgIGlmIChzZWNvbmRNYXApCi0gICAgICAgIHJldHVybiBz
ZWNvbmRNYXAtPm1hcHNFcXVpdmFsZW50KGZpcnN0TWFwKTsKKyAgICBpZiAoZmlyc3RBdHRyaWJ1
dGVzKQorICAgICAgICByZXR1cm4gZmlyc3RBdHRyaWJ1dGVzLT5lcXVpdmFsZW50KHNlY29uZEF0
dHJpYnV0ZXMpOworICAgIGlmIChzZWNvbmRBdHRyaWJ1dGVzKQorICAgICAgICByZXR1cm4gc2Vj
b25kQXR0cmlidXRlcy0+ZXF1aXZhbGVudChmaXJzdEF0dHJpYnV0ZXMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggYTU0ODJhZjIzNGI2NGJm
MzAyZGRhOWMxYjI3MTk4OTU0YzkwN2IxZS4uM2FkOWY2ZmRlNTEwYzMwMDhkMWMxZDNkYWNhMGNk
Njc3OGNmZTQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTAyLDE3ICsxMDIs
MTcgQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCkKIAogICAgIE5vZGUqIGVuZCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsK
ICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICE9IGVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBF
bGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVzID0gZS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAg
IGlmICghYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQXR0
cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAg
ICAgICAgICAgIGlmIChlLT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKQotICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZSwgYXR0cmlidXRlLT5uYW1l
KCksIEtVUkwocGFyc2VkQmFzZVVSTCwgYXR0cmlidXRlLT52YWx1ZSgpKS5zdHJpbmcoKSkpOwot
ICAgICAgICAgICAgfQorICAgICAgICBpZiAoIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pOworICAgICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGUtPnVwZGF0
ZWRBdHRyaWJ1dGVEYXRhKCk7CisgICAgICAgIGlmICghYXR0cmlidXRlcykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVzLT5sZW5ndGgo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0o
aSk7CisgICAgICAgICAgICBpZiAoZS0+aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSkKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChBdHRyaWJ1dGVDaGFuZ2UoZSwgYXR0cmlidXRlLT5u
YW1lKCksIEtVUkwocGFyc2VkQmFzZVVSTCwgYXR0cmlidXRlLT52YWx1ZSgpKS5zdHJpbmcoKSkp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQKICAgICBjb25zdCBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKICAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwg
MCk7CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0
cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbWVu
dC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBh
dHRyaWJ1dGVzID8gYXR0cmlidXRlcy0+bGVuZ3RoKCkgOiAwOwogICAgIGNvbnN0IGJvb2wgc2hv
dWxkQW5ub3RhdGVPckZvcmNlSW5saW5lID0gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChz
aG91bGRBbm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOwogICAgIGNvbnN0IGJvb2wgc2hv
dWxkT3ZlcnJpZGVTdHlsZUF0dHIgPSBzaG91bGRBbm5vdGF0ZU9yRm9yY2VJbmxpbmUgfHwgc2hv
dWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVt
YmVkRWxlbWVudC5jcHAKaW5kZXggMzA5YWFmZTA1NWEzYTFiZjRmNDViMTVlZjkyYjEyNzQ1MTg4
ZjA0ZS4uMzNlZGY2MDQzNjRlNGIyMTA5YzE3NjMxMTIxMWJiMzJlZDk5YmJjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9p
ZCBIVE1MRW1iZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiAKIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6cGFyYW1ldGVyc0ZvclBsdWdpbihWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewotICAgIE5h
bWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVu
dEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAg
IGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA0MTNjMTI3N2NjMTEzODkzNDQyYWRhNWI2Yzk4MTE2
Y2YxODBmZTdkLi4zYTFmYmZlNzgxMzQxODdhYjg3NjdiN2E1YTNkOTk3NTFmYTkyNWM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTU0NSwxMyArNTQ1LDEz
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgpCiAgICAgICAgIHJlZ2lzdGVy
Rm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKTsKIAogICAgIGlmIChkaWRSZXNwZWN0SGVp
Z2h0QW5kV2lkdGggIT0gbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0
dHJpYnV0ZXMoKSkgewotICAgICAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGF0dHJpYnV0ZU1hcCgp
OwotICAgICAgICBBU1NFUlQobWFwKTsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogaGVpZ2h0ID0g
bWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGhlaWdodEF0dHIpKQorICAgICAgICBFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZURhdGEoKTsKKyAgICAgICAgQVNTRVJUKGF0
dHJpYnV0ZXMpOworICAgICAgICBpZiAoQXR0cmlidXRlKiBoZWlnaHQgPSBhdHRyaWJ1dGVzLT5n
ZXRBdHRyaWJ1dGVJdGVtKGhlaWdodEF0dHIpKQogICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdl
ZChoZWlnaHQsIGZhbHNlKTsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogd2lkdGggPSBtYXAtPmdl
dEF0dHJpYnV0ZUl0ZW0od2lkdGhBdHRyKSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogd2lkdGgg
PSBhdHRyaWJ1dGVzLT5nZXRBdHRyaWJ1dGVJdGVtKHdpZHRoQXR0cikpCiAgICAgICAgICAgICBh
dHRyaWJ1dGVDaGFuZ2VkKHdpZHRoLCBmYWxzZSk7Ci0gICAgICAgIGlmIChBdHRyaWJ1dGUqIGFs
aWduID0gbWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGFsaWduQXR0cikpCisgICAgICAgIGlmIChBdHRy
aWJ1dGUqIGFsaWduID0gYXR0cmlidXRlcy0+Z2V0QXR0cmlidXRlSXRlbShhbGlnbkF0dHIpKQog
ICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChhbGlnbiwgZmFsc2UpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCA1OTBkNjliOThiMjRj
OTZiNzA3NDExY2I1ZDg3MDIzYTNlOTg5YzIzLi43ZTBiZDBiOTRkOTIzN2I2ODZlZjYyZTRiODFk
NDU0NTgzZDYyZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcmFtZXRlcnNG
b3JQbHVnaW4oVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIFZlY3RvcjxTCiAgICAgfQogICAg
IAogICAgIC8vIFR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIDxvYmplY3Q+IGVsZW1lbnQgaW50
byBhcnJheXMsIGJ1dCBkb24ndCBvdmVycmlkZSA8cGFyYW0+IHZhbHVlcy4KLSAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJpYnV0ZXMgPSB1cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAo
YXR0cmlidXRlcykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRl
cy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IGF0dHJpYnV0
ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQYXJhbUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50
LmNwcAppbmRleCBhYTIyOGJjMzE2NjNhYjA4MmEzMjAyMmI4NGUxY2UzZWIwOWJmYWMxLi4zMGE5
NzljMmM2YmVkYmNlNWJhOGJhNmVhZDI3ZDQ2ZTFlNDVjMjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBIVE1MUGFyYW1F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiBib29sIEhUTUxQ
YXJhbUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0ciAmJiBoYXNBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgQXR0cmlidXRlKiBuYW1lQXR0cmlidXRlID0gYXR0cmlidXRlTWFwKCktPmdldEF0dHJp
YnV0ZUl0ZW0obmFtZUF0dHIpOworICAgICAgICBBdHRyaWJ1dGUqIG5hbWVBdHRyaWJ1dGUgPSBh
dHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZUF0dHIpOwogICAgICAgICBpZiAo
bmFtZUF0dHJpYnV0ZSkgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IG5hbWVBdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoaXNVUkxQYXJhbWV0ZXIo
dmFsdWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuY3BwCmluZGV4IDBlZTg5ZjE1MjUwMzI4MTIzYzdmMDQxODY1MmMxOGUzNDk4MzIw
MzEuLjQ4YzU4NGI2YWQ0MDFmN2YzOWVlYTEwMzczODFjMDVhYmUzZWQwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAg
LTE5NCw3ICsxOTQsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3Vt
ZW50RWxlbWVudEF2YWlsYWJsZUlmTmVlZGVkKCkKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7CiAgICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gZWxlbWVudCA9IEhUTUxIdG1sRWxlbWVu
dDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwotICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZU1h
cCh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7
CisgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlRGF0YSh0b2tlbi50YWtlQXR0cmlidXRl
cygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNoTGF0ZXIobV9h
dHRhY2htZW50Um9vdCwgZWxlbWVudCk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1s
RWxlbWVudChlbGVtZW50KTsKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxU
b2tlbiYKICAgICBpZiAoIXRva2VuLmF0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0dHJp
YnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVsZW1lbnQt
PmVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRva2VuLmF0dHJpYnV0ZXMoKS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1
dGUqIGF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS0+YXR0cmlidXRlSXRlbShpKTsKICAg
ICAgICAgaWYgKCFhdHRyaWJ1dGVzLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZS0+bmFtZSgp
KSkKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRT
Y3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgUmVmUHRyPEhUTUxT
Y3JpcHRFbGVtZW50PiBlbGVtZW50ID0gSFRNTFNjcmlwdEVsZW1lbnQ6OmNyZWF0ZShzY3JpcHRU
YWcsIGN1cnJlbnROb2RlKCktPmRvY3VtZW50KCksIHRydWUpOwogICAgIGlmIChtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi0gICAgICAg
IGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBt
X2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgICAgIGVsZW1lbnQtPnBhcnNlclNl
dEF0dHJpYnV0ZURhdGEodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwog
ICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOwogfQpAQCAtMzk5LDcg
KzM5OSw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0
ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwKIHsKICAgICBRdWFsaWZpZWROYW1lIHRh
Z05hbWUobnVsbEF0b20sIHRva2VuLm5hbWUoKSwgbmFtZXNwYWNlVVJJKTsKICAgICBSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCA9IGN1cnJlbnROb2RlKCktPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1l
bnQodGFnTmFtZSwgdHJ1ZSk7Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlTWFwKHRv
a2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAg
ICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVEYXRhKHRva2VuLnRha2VBdHRyaWJ1dGVzKCks
IG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICByZXR1cm4gZWxlbWVudC5yZWxl
YXNlKCk7CiB9CiAKQEAgLTQxMCw3ICs0MTAsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRvawog
ICAgIC8vIGhhdmUgdG8gcGFzcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQuICBXZSBzaG91bGQg
cmV3b3JrIGZvcm0gYXNzb2NpYXRpb24KICAgICAvLyB0byBvY2N1ciBhZnRlciBjb25zdHJ1Y3Rp
b24gdG8gYWxsb3cgYmV0dGVyIGNvZGUgc2hhcmluZyBoZXJlLgogICAgIFJlZlB0cjxFbGVtZW50
PiBlbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudCh0YWdOYW1l
LCBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLCBmb3JtKCksIHRydWUpOwotICAgIGVsZW1lbnQt
PnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlRGF0
YSh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7
CiAgICAgQVNTRVJUKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIGVsZW1l
bnQucmVsZWFzZSgpOwogfQpAQCAtNDIzLDE3ICs0MjMsMTcgQEAgUGFzc1JlZlB0cjxFbGVtZW50
PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29y
ZChIVE0KIG5hbWVzcGFjZSB7CiAKIC8vIEZJWE1FOiBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gdGhl
IHRvcCBvZiB0aGUgZmlsZS4KLWlubGluZSBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gY2xvbmVB
dHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUgUGFzc093blB0cjxFbGVtZW50QXR0
cmlidXRlRGF0YT4gY2xvbmVBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgTmFt
ZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRy
aWJ1dGVEYXRhKCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIE93blB0cjxOYW1lZE5vZGVNYXA+IG5ld0F0dHJpYnV0ZXMgPSBOYW1lZE5vZGVN
YXA6OmNyZWF0ZSgpOworICAgIE93blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbmV3QXR0cmli
dXRlcyA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRl
KiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBSZWZQ
dHI8QXR0cmlidXRlPiBjbG9uZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKGF0dHJpYnV0ZS0+
bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwotICAgICAgICBuZXdBdHRyaWJ1dGVzLT5hZGRB
dHRyaWJ1dGUoY2xvbmUpOworICAgICAgICBuZXdBdHRyaWJ1dGVzLT5hZGRBdHRyaWJ1dGUoY2xv
bmUsIDApOwogICAgIH0KICAgICByZXR1cm4gbmV3QXR0cmlidXRlcy5yZWxlYXNlKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3QuY3BwCmluZGV4IGYzMzFhZjdlNzBiNmI1ZGM1ZDE5YTgxNDdiZTdhMjg0YjNlNjI5
ZGUuLjIxZTJiMzQ3NzQzMTQwMTAzMzBlMjVjN2MxYjk0Y2VmOTY0ZTVjMDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3QuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qga05vYWhzQXJrQ2Fw
YWNpdHkgPSAzOwogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBhdHRyaWJ1dGVDb3VudChFbGVtZW50
KiBlbGVtZW50KQogewotICAgIHJldHVybiBlbGVtZW50LT5hdHRyaWJ1dGVNYXAoKSA/IGVsZW1l
bnQtPmF0dHJpYnV0ZU1hcCgpLT5sZW5ndGgoKSA6IDA7CisgICAgcmV0dXJuIGVsZW1lbnQtPmF0
dHJpYnV0ZURhdGEoKSA/IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKS0+bGVuZ3RoKCkgOiAwOwog
fQogCiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
KCkKQEAgLTE3OCwxOCArMTc4LDE4IEBAIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6
ZW5zdXJlTm9haHNBcmtDb25kaXRpb24oRWxlbWVudCogbmV3RWxlbWVudCkKICAgICBWZWN0b3I8
RWxlbWVudCo+IHJlbWFpbmluZ0NhbmRpZGF0ZXM7CiAgICAgcmVtYWluaW5nQ2FuZGlkYXRlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbmRpZGF0ZXMuc2l6ZSgpKTsKIAotICAgIE5hbWVkTm9k
ZU1hcCogYXR0cmlidXRlTWFwID0gbmV3RWxlbWVudC0+YXR0cmlidXRlTWFwKCk7CisgICAgRWxl
bWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBuZXdFbGVtZW50LT5hdHRyaWJ1dGVEYXRh
KCk7CiAgICAgc2l6ZV90IG5ld0VsZW1lbnRBdHRyaWJ1dGVDb3VudCA9IGF0dHJpYnV0ZUNvdW50
KG5ld0VsZW1lbnQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdFbGVtZW50QXR0
cmlidXRlQ291bnQ7ICsraSkgewotICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUg
PSBhdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKTsKKyAgICAgICAgUXVhbGlm
aWVkTmFtZSBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKS0+bmFt
ZSgpOwogICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBuZXdFbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgY2FuZGlkYXRlcy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgRWxlbWVudCog
Y2FuZGlkYXRlID0gY2FuZGlkYXRlc1tqXTsKIAogICAgICAgICAgICAgLy8gVGhlc2UgcHJvcGVy
dGllcyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gY2hlY2tlZCBieSB0cnlUb0Vuc3VyZU5vYWhz
QXJrQ29uZGl0aW9uUXVpY2tseS4KLSAgICAgICAgICAgIEFTU0VSVChuZXdFbGVtZW50LT5hdHRy
aWJ1dGVNYXAoKS0+bGVuZ3RoKCkgPT0gY2FuZGlkYXRlLT5hdHRyaWJ1dGVNYXAoKS0+bGVuZ3Ro
KCkpOworICAgICAgICAgICAgQVNTRVJUKG5ld0VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKS0+bGVu
Z3RoKCkgPT0gY2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCktPmxlbmd0aCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVChuZXdFbGVtZW50LT50YWdRTmFtZSgpID09IGNhbmRpZGF0ZS0+dGFnUU5hbWUo
KSk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWNobmljYWxseSB3ZSBzaG91bGRuJ3QgcmVh
ZCB0aGlzIGluZm9ybWF0aW9uIGJhY2sgZnJvbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VG9rZW4uaAppbmRleCBjMTc4Mjg0MzQ2MGM2YzA3OTg5ZmJiYmQ2N2NiMjA0NjI4NjhkNTdkLi5l
OGZkZDEyNWY4NDliZGI3ZTVlYzFkMWZiYmQ4NjUxM2M4NzAwMDMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVG9rZW4uaApAQCAtODYsNyArODYsNyBAQCBjbGFzcyBBdG9taWNIVE1M
VG9rZW4gOiBwdWJsaWMgQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4gewogcHVibGlj
OgogICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKSA6IEF0b21pY01hcmt1cFRv
a2VuQmFzZTxIVE1MVG9rZW4+KCZ0b2tlbikgeyB9CiAKLSAgICBBdG9taWNIVE1MVG9rZW4oSFRN
TFRva2VuVHlwZXM6OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8TmFt
ZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKKyAgICBBdG9taWNIVE1MVG9rZW4oSFRN
TFRva2VuVHlwZXM6OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8RWxl
bWVudEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZXMgPSBudWxscHRyKQogICAgICAgICA6IEF0b21p
Y01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCiAgICAg
ewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwCmluZGV4IDA5ZTBhOGUxMGVkNzlmZDgyOWQyNjVkMGIwYWQ5YWIxZDIyZGY2YjIuLjVmYzNk
ZjQ5ZjdlMWUyYzM3MTc2YWQxMmRkY2I0ZTc3ZmQ1MDk1ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNTMxLDcgKzUzMSw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgcGFyc2VFcnJvcih0b2tlbik7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIFBhc3NP
d25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgUGFzc093blB0
cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRlcykKIHsKICAgICAvLyBGSVhNRTogV2Un
bGwgbmVlZCBhIGZhbmNpZXIgY29udmVyc2lvbiB0aGFuIGp1c3QgImxvY2FsTmFtZSIgZm9yIFNW
Ry9NYXRoTUwgdGFncy4KICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcyk7CkBAIC01NjAs
MTUgKzU2MCwxNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VQRW5kVGFnSWZQ
SW5CdXR0b25TY29wZSgpCiAgICAgcHJvY2Vzc0VuZFRhZyhlbmRQKTsKIH0KIAotUGFzc093blB0
cjxOYW1lZE5vZGVNYXA+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1
dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQorUGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0
YT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiB7Ci0gICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IHRv
a2VuLnRha2VBdHRyaWJ1dGVzKCk7CisgICAgT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBh
dHRyaWJ1dGVzID0gdG9rZW4udGFrZUF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJpYnV0ZXMp
Ci0gICAgICAgIGF0dHJpYnV0ZXMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOworICAgICAgICBh
dHRyaWJ1dGVzID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpOwogICAgIGVsc2Ugewot
ICAgICAgICBhdHRyaWJ1dGVzLT5yZW1vdmVBdHRyaWJ1dGUobmFtZUF0dHIpOwotICAgICAgICBh
dHRyaWJ1dGVzLT5yZW1vdmVBdHRyaWJ1dGUoYWN0aW9uQXR0cik7Ci0gICAgICAgIGF0dHJpYnV0
ZXMtPnJlbW92ZUF0dHJpYnV0ZShwcm9tcHRBdHRyKTsKKyAgICAgICAgYXR0cmlidXRlcy0+cmVt
b3ZlQXR0cmlidXRlKG5hbWVBdHRyLCAwKTsKKyAgICAgICAgYXR0cmlidXRlcy0+cmVtb3ZlQXR0
cmlidXRlKGFjdGlvbkF0dHIsIDApOworICAgICAgICBhdHRyaWJ1dGVzLT5yZW1vdmVBdHRyaWJ1
dGUocHJvbXB0QXR0ciwgMCk7CiAgICAgfQogCiAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gbWFwcGVk
QXR0cmlidXRlID0gQXR0cmlidXRlOjpjcmVhdGVNYXBwZWQobmFtZUF0dHIsIGlzaW5kZXhUYWcu
bG9jYWxOYW1lKCkpOwpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgYWRqdXN0QXR0cmlidXRlcyhB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXBMb3dlcmVkTG9jYWxOYW1lVG9OYW1l
KGNhc2VNYXAsIGF0dHJzLCBsZW5ndGgpOwogICAgIH0KIAotICAgIE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNzMwLDcgKzczMCw3IEBAIHZvaWQgYWRqdXN0Rm9yZWlnbkF0
dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbWFwLT5hZGQoInhtbG5z
OnhsaW5rIiwgUXVhbGlmaWVkTmFtZSgieG1sbnMiLCAieGxpbmsiLCBYTUxOU05hbWVzOjp4bWxu
c05hbWVzcGFjZVVSSSkpOwogICAgIH0KIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9
IHRva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRl
cyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApp
bmRleCAwMTgzZDIwY2FlMWNlYTI3OWRmYTlmZjQ3MzRlODhiYzRmNmQ2NWJiLi5mMTNiYTdhMDFl
ZDYxOWFkNDRiZmNiZTdmNDIzYjM0MTkwZTFiOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZm
ZXImKTsKICAgICBpbmxpbmUgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyRm9ySW5Cb2R5KEV4
dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXImKTsKIAotICAgIHZvaWQgcHJvY2Vzc0Zha2VTdGFy
dFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0dHJp
YnV0ZXMgPSBudWxscHRyKTsKKyAgICB2b2lkIHByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIFBhc3NPd25QdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZXMg
PSBudWxscHRyKTsKICAgICB2b2lkIHByb2Nlc3NGYWtlRW5kVGFnKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKICAgICB2b2lkIHByb2Nlc3NGYWtlQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKQEAgLTE3Miw3ICsx
NzIsNyBAQCBwcml2YXRlOgogICAgIGlubGluZSBib29sIHNob3VsZFByb2Nlc3NUb2tlbkluRm9y
ZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBwcm9jZXNzVG9rZW5JbkZv
cmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYpOwogCi0gICAgUGFzc093blB0cjxOYW1lZE5v
ZGVNYXA+IGF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJik7CisgICAg
UGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1
dChBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNv
cmQqIGZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9p
ZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAxYzU1ZmMy
NTQ2ZTRiNmM1YTI0MTYxNTg2ZTRlN2UwZjFmZjcwYTQyLi4xOTA0NzJjNDMwZWJiMjBmMzlkNGQ5
NjdiNTNjMGU4ZmMxN2RjZTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBUZXh0RG9jdW1l
bnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50KCkKICAgICAvLyBkaXN0cnViaW5nIHRoZSBs
aW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRpb25zLgogCiAgICAgUmVmUHRyPEF0dHJpYnV0ZT4g
c3R5bGVBdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNyZWF0ZU1hcHBlZCgic3R5bGUiLCAid29yZC13
cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iik7Ci0gICAgT3duUHRyPE5h
bWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7CisgICAgT3du
UHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBhdHRyaWJ1dGVzID0gRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmNyZWF0ZSgpOwogICAgIGF0dHJpYnV0ZXMtPmluc2VydEF0dHJpYnV0ZShzdHlsZUF0dHJp
YnV0ZS5yZWxlYXNlKCksIGZhbHNlKTsKICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVByZShIVE1M
VG9rZW5UeXBlczo6U3RhcnRUYWcsIHByZVRhZy5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcy5yZWxl
YXNlKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwCmluZGV4IDNjOWQ4
OWI1ZGQxY2ZiYTNhYjQyZTAyNTk0YzE1YjQ3MDI0MDNmNTQuLjFjOGMwZDlhYjFmMDE5MWJkMmI1
OTE1YWMwZTUyMGZkZTYzMzIyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3Iu
Y3BwCkBAIC0xNjAsMTYgKzE2MCwxNiBAQCB2b2lkIERPTUVkaXRvcjo6aW5uZXJQYXRjaE5vZGUo
RGlnZXN0KiBvbGREaWdlc3QsIERpZ2VzdCogbmV3RGlnZXN0LCBFeGNlcHRpb25DbwogICAgIEVs
ZW1lbnQqIG9sZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2xkTm9kZSk7CiAgICAg
RWxlbWVudCogbmV3RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuZXdOb2RlKTsKICAg
ICBpZiAob2xkRGlnZXN0LT5tX2F0dHJzU0hBMSAhPSBuZXdEaWdlc3QtPm1fYXR0cnNTSEExKSB7
Ci0gICAgICAgIE5hbWVkTm9kZU1hcCogb2xkQXR0cmlidXRlTWFwID0gb2xkRWxlbWVudC0+YXR0
cmlidXRlTWFwKCk7CisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvbGRBdHRyaWJ1dGVz
ID0gb2xkRWxlbWVudC0+YXR0cmlidXRlRGF0YSgpOwogCi0gICAgICAgIHdoaWxlIChvbGRBdHRy
aWJ1dGVNYXAgJiYgb2xkQXR0cmlidXRlTWFwLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG9sZEF0
dHJpYnV0ZU1hcC0+cmVtb3ZlQXR0cmlidXRlKDApOworICAgICAgICB3aGlsZSAob2xkQXR0cmli
dXRlcyAmJiBvbGRBdHRyaWJ1dGVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG9sZEF0dHJpYnV0
ZXMtPnJlbW92ZUF0dHJpYnV0ZSgwLCBvbGRFbGVtZW50KTsKIAotICAgICAgICBOYW1lZE5vZGVN
YXAqIG5ld0F0dHJpYnV0ZU1hcCA9IG5ld0VsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpOwotICAgICAg
ICBpZiAobmV3QXR0cmlidXRlTWFwKSB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtQXR0cnMgPSBu
ZXdBdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOworICAgICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSog
bmV3QXR0cmlidXRlcyA9IG5ld0VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKTsKKyAgICAgICAgaWYg
KG5ld0F0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHNpemVfdCBudW1BdHRycyA9IG5ld0F0dHJp
YnV0ZXMtPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1B
dHRyczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUg
PSBuZXdBdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICAgICAgY29u
c3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBuZXdBdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkp
OwogICAgICAgICAgICAgICAgIG9sZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5h
bWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
Mzg0LDEyICszODQsMTIgQEAgUGFzc093blB0cjxET01FZGl0b3I6OkRpZ2VzdD4gRE9NRWRpdG9y
OjpjcmVhdGVEaWdlc3QoTm9kZSogbm9kZSwgVW51c2VkTm9kZXNNYXAKICAgICAgICAgfQogICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwogCi0g
ICAgICAgIE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpOwot
ICAgICAgICBpZiAoYXR0ck1hcCAmJiBhdHRyTWFwLT5sZW5ndGgoKSkgewotICAgICAgICAgICAg
c2l6ZV90IG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3RoKCk7CisgICAgICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpOworICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLT5sZW5ndGgoKSkgeworICAgICAgICAgICAg
c2l6ZV90IG51bUF0dHJzID0gYXR0cmlidXRlcy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBTSEEx
IGF0dHJzU0hBMTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQXR0cnM7
ICsraSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0
ck1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAg
ICAgYWRkU3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0dHJzU0hBMSwgYXR0cmlidXRl
LT52YWx1ZSgpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3Iu
aAppbmRleCA0YWZmYjAwYjFhNjk5MTA1NDZlOWRkNDU2NmExMjQ5OWQ0NzU4YzkwLi5mNTZhMzA2
Y2JjOTNhODdmNGRmYzY3NDNmOTY4ZWFlMzVmNzIxNDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTUVkaXRvci5oCkBAIC00Myw3ICs0Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgTmFtZWROb2RlTWFwOwog
Y2xhc3MgTm9kZTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCAwNjYzNWY1MjMzNmM5ZmQ0MDRi
MzQxOGU4Mjk0ZjViYjc1ZDlkM2NhLi4yNGNmMGVlYzRiYjkzMWUzYzFhYTkxN2U1OTgyMzk1YzZm
ZDcyNWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKQEAgLTcxNyw3ICs3MTcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KgogUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JBdHRy
aWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGF0dHJTdHlsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVE
YXRhKCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm4gYXR0clN0eWxlcy5y
ZWxlYXNlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IGI1MDAyNWJiMDA5NzdhNTZiZmJjYjZlMmMzZmEwMTYyYzkyNmU0NTMuLmIx
NzYzOWQwZDI0NmUxYmU2MDAwOWRjMDhiNGNiNDc2ODNhYmE1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNTMwLDE3ICs1MzAsMTcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IHRvSFRNTEVsZW1lbnQoY2hpbGQpLT51cGRh
dGVkQXR0cmlidXRlcygpOwotICAgIGlmICghYXR0ck1hcCAmJiBuYW1lKSB7CisgICAgY29uc3Qg
RWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSB0b0hUTUxFbGVtZW50KGNoaWxkKS0+
dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZXMgJiYgbmFtZSkgewog
ICAgICAgICBlbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUoKm5hbWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7Ci0gICAg
dW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBudW1B
dHRycyA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1BdHRyczsgKytpKSB7CiAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgotICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7
CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmli
dXRlSXRlbShpKTsKICAgICAgICAgZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSA9IGZvdW5kT3JpZ2lu
YWxBdHRyaWJ1dGUgfHwgKG5hbWUgJiYgYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKSA9PSAq
bmFtZSk7CiAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwg
YXR0cmlidXRlLT52YWx1ZSgpKTsKICAgICB9CkBAIC03ODEsMTQgKzc4MSwxNCBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiB3aGl0ZXNwYWNlVHJpbQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQg
c2VyaWFsaXplIHRoZW0uCi0gICAgICAgICAgICAgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRy
TWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT51cGRhdGVkQXR0cmlidXRlcygpOwot
ICAgICAgICAgICAgICAgIGlmICghYXR0ck1hcCkKKyAgICAgICAgICAgICAgICBjb25zdCBFbGVt
ZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0
ZXMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1BdHRycyA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgotICAgICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1
dGUqIGF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRl
SXRlbShpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCku
ZmluZCh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KSAhPSBub3RGb3VuZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Q29sbGVjdG9yLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTE1OSwxMyArMTE1OSwxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVz
KEVsZQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXR0cmlidXRlc1ZhbHVlID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgIC8vIEdvIHRocm91Z2ggYWxsIGF0dHJpYnV0ZXMg
YW5kIHNlcmlhbGl6ZSB0aGVtLgotICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0ck1hcCA9IGVs
ZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKCFhdHRyTWFwKQorICAgIGNvbnN0
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJp
YnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGVzVmFsdWUucmVsZWFzZSgpOwotICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0ck1hcC0+bGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7ICsraSkgewogICAgICAgICAvLyBB
ZGQgYXR0cmlidXRlIHBhaXIKLSAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBh
dHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGF0dHJpYnV0ZXNW
YWx1ZS0+cHVzaFN0cmluZyhhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpKTsKICAgICAgICAg
YXR0cmlidXRlc1ZhbHVlLT5wdXNoU3RyaW5nKGF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCAyYzM3NzhiNDYwMzIwYmNk
Y2ViYWYwN2M5ZTg1MzA3NWNiZTIwZDQ4Li4xOGU5ZThmYzBiODM3OTA2ZjQ2Y2ZiNTU2ZWQyMWM1
NDY0ZDU1NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtNjks
OSArNjksOSBAQCBzdGF0aWMgYm9vbCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShOb2RlKiBub2Rl
KQogICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpBdHRyaWJ1dGVM
aXN0IGF0dHJpYnV0ZXM7Ci0gICAgaWYgKGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlc01h
cCA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXNNYXAtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAg
IEF0dHJpYnV0ZSogaXRlbSA9IGF0dHJpYnV0ZXNNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAg
aWYgKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+
dXBkYXRlZEF0dHJpYnV0ZURhdGEoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgQXR0cmlidXRl
KiBpdGVtID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgZGVhbCBhcHByb3ByaWF0ZWx5IHdpdGggdGhlIGF0dHJpYnV0ZSBp
ZiB0aGV5IGhhdmUgYSBuYW1lc3BhY2UuCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZCht
YWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3RyaW5nKCkp
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDZlMTYwZjA3NjNm
Njc3MDE4ODA5NGU0NThiNWExODQ0NWI0N2QyYzcuLjE4MGNlZDA5OThlZDViZDViMGY2ZmJlOTIx
MmZmZjAwZWUyODU4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTM2OSw3ICsz
NjksNyBAQCB2b2lkIFNWR0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRy
LCBib29sIHByZXNlcnZlRGVjbHMpCiAKICAgICAvLyBXaGVuIGFuIGFuaW1hdGVkIFNWRyBwcm9w
ZXJ0eSBjaGFuZ2VzIHRocm91Z2ggU1ZHIERPTSwgc3ZnQXR0cmlidXRlQ2hhbmdlZCgpIGlzIGNh
bGxlZCwgbm90IGF0dHJpYnV0ZUNoYW5nZWQoKS4KICAgICAvLyBOZXh0IHRpbWUgc29tZW9uZSB0
cmllcyB0byBhY2Nlc3MgdGhlIFhNTCBhdHRyaWJ1dGVzLCB0aGUgc3luY2hyb25pemF0aW9uIGNv
ZGUgc3RhcnRzLiBEdXJpbmcgdGhhdCBzeW5jaHJvbml6YXRpb24KLSAgICAvLyBTVkdBbmltYXRl
ZFByb3BlcnR5U3luY2hyb25pemVyIG1heSBjYWxsIE5hbWVkTm9kZU1hcDo6cmVtb3ZlQXR0cmli
dXRlKCksIHdoaWNoIGluIHR1cm4gY2FsbHMgYXR0cmlidXRlQ2hhbmdlZCgpLgorICAgIC8vIFNW
R0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIgbWF5IGNhbGwgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OnJlbW92ZUF0dHJpYnV0ZSgpLCB3aGljaCBpbiB0dXJuIGNhbGxzIGF0dHJpYnV0ZUNoYW5n
ZWQoKS4KICAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGNhbGwgc3Zn
QXR0cmlidXRlQ2hhbmdlZCgpIGFnYWluIC0gaXQgbWF5IGxlYWQgdG8gZXh0cmEgd29yayBiZWlu
ZyBkb25lLCBvciBjcmFzaGVzCiAgICAgLy8gc2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDA5OTQuCiAgICAgaWYgKGlzU3luY2hyb25pemluZ1NWR0F0dHJp
YnV0ZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAppbmRleCA2MjY2
OWM4YmExOThiYmZhNTRlNTQzMDQxZWYyZTM5MzExM2EyM2Q1Li42MTNkMTJiNDVmODdmMjAwY2Rh
Njg5MGNmNmY5OTlhMjY4YWEzNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuY3BwCkBAIC00MTcsMTEgKzQxNywxMSBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OmNoaWxk
cmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLAogCiBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBTVkdTdHlsZWRFbGVtZW50OjpnZXRQcmVzZW50YXRpb25BdHRy
aWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmICghYXR0cmlidXRlTWFwKCkpCisg
ICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUXVhbGlm
aWVkTmFtZSBhdHRyaWJ1dGVOYW1lKG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSk7Ci0gICAgQXR0
cmlidXRlKiBhdHRyID0gYXR0cmlidXRlTWFwKCktPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmlidXRl
TmFtZSk7CisgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1
dGVJdGVtKGF0dHJpYnV0ZU5hbWUpOwogICAgIGlmICghYXR0ciB8fCAhYXR0ci0+aXNNYXBwZWRB
dHRyaWJ1dGUoKSB8fCAhYXR0ci0+bWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24oKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIuaAppbmRleCBlNmJkMDEz
ZWJmOGZlMDZkZTI0ZGY4YTY2OGNlMTEzZjJiZWNhOTM4Li5kNmU1NzEwODVlNWYzYzk0OTNhNzg1
YzhiYTEwYzUwYzgzNzU1Yjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplci5oCkBAIC0z
NywxNSArMzcsMTQgQEAgc3RydWN0IFNWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXI8dHJ1
ZT4gewogICAgICAgICAvLyBBdHRyaWJ1dGUgZGlyZWN0bHkgdG8gYXZvaWQgYSBjYWxsIHRvIEVs
ZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQKICAgICAgICAgLy8gdGhhdCBjb3VsZCBjYXVzZSB0aGUg
U1ZHRWxlbWVudCB0byBlcnJvbmVvdXNseSByZXNldCBpdHMgcHJvcGVydGllcy4KICAgICAgICAg
Ly8gc3ZnL2RvbS9TVkdTdHJpbmdMaXN0LWJhc2ljcy54aHRtbCBleGVyY2lzZXMgdGhpcyBiZWhh
dmlvci4KLSAgICAgICAgTmFtZWROb2RlTWFwKiBuYW1lZEF0dHJNYXAgPSBvd25lckVsZW1lbnQt
PmVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIEF0dHJpYnV0ZSogb2xkID0gbmFt
ZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJOYW1lKTsKKyAgICAgICAgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBvd25lckVsZW1lbnQtPmVuc3VyZVVwZGF0ZWRB
dHRyaWJ1dGVEYXRhKCk7CisgICAgICAgIEF0dHJpYnV0ZSogb2xkID0gYXR0cmlidXRlRGF0YS0+
Z2V0QXR0cmlidXRlSXRlbShhdHRyTmFtZSk7CiAgICAgICAgIGlmIChvbGQgJiYgdmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnJlbW92ZUF0dHJpYnV0ZShvbGQtPm5h
bWUoKSk7CisgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUob2xkLT5u
YW1lKCksIG93bmVyRWxlbWVudCk7CiAgICAgICAgIGVsc2UgaWYgKCFvbGQgJiYgIXZhbHVlLmlz
TnVsbCgpKQotICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5hZGRBdHRyaWJ1dGUob3duZXJFbGVt
ZW50LT5jcmVhdGVBdHRyaWJ1dGUoYXR0ck5hbWUsIHZhbHVlKSk7CisgICAgICAgICAgICBhdHRy
aWJ1dGVEYXRhLT5hZGRBdHRyaWJ1dGUob3duZXJFbGVtZW50LT5jcmVhdGVBdHRyaWJ1dGUoYXR0
ck5hbWUsIHZhbHVlKSwgb3duZXJFbGVtZW50KTsKICAgICAgICAgZWxzZSBpZiAob2xkICYmICF2
YWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgIG9sZC0+c2V0VmFsdWUodmFsdWUpOwotCiAgICAg
fQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKaW5kZXggMjgzNTgzZDc4
M2FmYTZlZjEwZWE3NzkyY2IyMDljZDUxMzQzMzVjZi4uMWRjM2FmMzMxZGQ3Yzg4YTdlN2MyZGFk
YWMzNWYzNmQ5OWRmNzRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCkBA
IC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiWFBhdGhGdW5jdGlvbnMuaCIKIAogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKLSNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJUcmVlU2NvcGUuaCIKICNpbmNsdWRlICJYTUxO
YW1lcy5oIgpAQCAtNTkyLDcgKzU5MSw3IEBAIFZhbHVlIEZ1bkxhbmc6OmV2YWx1YXRlKCkgY29u
c3QKICAgICBOb2RlKiBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLmdldCgpOwogICAg
IHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQobm9kZSkt
PnVwZGF0ZWRBdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICBpZiAoRWxlbWVudEF0dHJpYnV0ZURh
dGEqIGF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQobm9kZSktPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkp
CiAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5nZXRBdHRy
aWJ1dGVJdGVtKFhNTE5hbWVzOjpsYW5nQXR0cik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxh
bmd1YWdlQXR0cmlidXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9k
ZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAppbmRleCA4ZWVm
YzU3M2ZmNDQ3OTQyNTIxZmJkMDc3YWRmMTUyMWQyYTM5YWY3Li5kNzVhODQ3YjQ3MTEwOTU5ZmI4
MTEwOTExYWEyN2RiZWJlZWVmYjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcApA
QCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgTm9kZVNldDo6dHJhdmVyc2FsU29ydCgpIGNvbnN0CiAg
ICAgICAgIGlmICghY29udGFpbnNBdHRyaWJ1dGVOb2RlcyB8fCAhbi0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1
dGVzID0gdG9FbGVtZW50KG4pLT51cGRhdGVkQXR0cmlidXRlcygpOworICAgICAgICBFbGVtZW50
QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IHRvRWxlbWVudChuKS0+dXBkYXRlZEF0dHJpYnV0
ZURhdGEoKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICAgICAgY29udGludWU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwIGIvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKaW5kZXggMTJmMzk0ZjJjYTBiNDQ1NmE4MWQxMDg5
ODNiNzkyNGQ1YzRkODc1ZC4uYjQ1NTNlZDgzNWI2M2JiNjZmMmFmODQ4NDQ2MDg3Y2FhNmFkN2U0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1
ZGUgIlhQYXRoUGFyc2VyLmgiCiAjaW5jbHVkZSAiWFBhdGhVdGlsLmgiCkBAIC0zNDMsNyArMzQy
LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBOb2RlU2V0JiBub2Rl
cykgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSBjb250ZXh0RWxlbWVudC0+
dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBh
dHRycyA9IGNvbnRleHRFbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAgICAgICAg
ICAgaWYgKCFhdHRycykKICAgICAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCmluZGV4IDBlOTE5MTNhNjA0YzAwYmYxMTVl
OThmZjMxNTY2ZjFhZGY4OWY0MzYuLjhlM2EwZWQ4OGFkNjIyYjlmNjcyZmI1MjU1MzQ5N2FjMWRh
ZWY4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5C
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaApA
QCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBNYXJrdXBUb2tlbkJhc2VfaAogI2RlZmluZSBNYXJr
dXBUb2tlbkJhc2VfaAogCi0jaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCisjaW5jbHVkZSAiRWxl
bWVudEF0dHJpYnV0ZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDEwLDcgKzQxMCw3IEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAotICAgIEF0b21pY01hcmt1cFRva2VuQmFzZSh0eXBlbmFtZSBUb2tlbjo6VHlw
ZTo6VHlwZSB0eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+
IGF0dHJpYnV0ZXMgPSBudWxscHRyKQorICAgIEF0b21pY01hcmt1cFRva2VuQmFzZSh0eXBlbmFt
ZSBUb2tlbjo6VHlwZTo6VHlwZSB0eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxF
bGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRlcyA9IG51bGxwdHIpCiAgICAgICAgIDogbV90
eXBlKHR5cGUpCiAgICAgICAgICwgbV9uYW1lKG5hbWUpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpCkBAIC00NDYsMTMgKzQ0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX2F0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmlidXRlTmFtZSk7CiAgICAgfQog
Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzKCkgY29uc3QKKyAgICBFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlcygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQodXNlc0F0
dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMuZ2V0KCk7CiAgICAgfQog
Ci0gICAgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IHRha2VBdHRyaWJ1dGVzKCkKKyAgICBQYXNz
T3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiB0YWtlQXR0cmlidXRlcygpCiAgICAgewogICAg
ICAgICBBU1NFUlQodXNlc0F0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0
ZXMucmVsZWFzZSgpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBGb3Ig
U3RhcnRUYWcgYW5kIEVuZFRhZwogICAgIGJvb2wgbV9zZWxmQ2xvc2luZzsKIAotICAgIE93blB0
cjxOYW1lZE5vZGVNYXA+IG1fYXR0cmlidXRlczsKKyAgICBPd25QdHI8RWxlbWVudEF0dHJpYnV0
ZURhdGE+IG1fYXR0cmlidXRlczsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRva2VuPgpAQCAt
NTI2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEF0b21pY01hcmt1cFRva2VuQmFzZTxUb2tlbj46
OmluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0IHR5cGVuYW1lIFRvCiAgICAgaWYgKCFzaXplKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZXMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0
ZSgpOworICAgIG1fYXR0cmlidXRlcyA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUoKTsK
ICAgICBtX2F0dHJpYnV0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgY29uc3QgdHlwZW5hbWUg
VG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApp
bmRleCA0ZTFkNDllZWZkMDRiZmVmNjg2ZTBhMmM1Y2UyYjYwYzFkOGQ4N2MwLi41Yzg5Zjg4YmZi
ZGEwZGFlMmJjZjRlOGE2MzVmMTI5MmE2NzNiNTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01OTksNyAr
NTk5LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKIAogICAgIGZvciAoOyAhZWxlbVN0YWNr
LmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3QoKSkgewogICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsKLSAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0
cnMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpKSB7CisgICAgICAgIGlmIChFbGVtZW50
QXR0cmlidXRlRGF0YSogYXR0cnMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgpKSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBp
KyspIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRl
SXRlbShpKTsKICAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0geG1sbnNB
dG9tKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHAKaW5kZXggY2Q2ZWExNDk0ZjUxMjYxMDI1OGM2ODIzOTJiMWE1NGY4YWI0MzkyYy4uNzVi
MzE5ZmZlZWFiNjJmNzZhMDQ3NmZhMjI5ZjUwNWQ1ODg2M2I2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMzgsNyArMTM4
LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKIAogICAgIFFYbWxTdHJlYW1OYW1lc3BhY2VE
ZWNsYXJhdGlvbnMgbmFtZXNwYWNlczsKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
U3RhY2subGFzdCgpOyAhZWxlbVN0YWNrLmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3Qo
KSkgewotICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0ZWRB
dHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9
IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAg
IEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAg
ICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSAieG1sbnMiKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxUb2tlbi5oCmluZGV4IGQxYmRjMGU2Yjk5MTNjY2U4M2RkMWVlNGRlZWY3ZjczYTRkMmM0
NDcuLjAwMjU4MmQ5ZWQ0YmQ5YzJmOTU1NWUyYmVjODNhMzE1YzJhZTFhMTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTFRva2VuLmgKQEAgLTQzMSw3ICs0MzEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBBdG9taWNYTUxUb2tlbihYTUxUb2tlblR5cGVzOjpUeXBlIHR5
cGUsIEF0b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRl
cyA9IG51bGxwdHIpCisgICAgQXRvbWljWE1MVG9rZW4oWE1MVG9rZW5UeXBlczo6VHlwZSB0eXBl
LCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0
cmlidXRlcyA9IG51bGxwdHIpCiAgICAgICAgIDogQXRvbWljTWFya3VwVG9rZW5CYXNlPFhNTFRv
a2VuPih0eXBlLCBuYW1lLCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDhkZTFhMDgxN2E0ZTRkZjFi
YThhODA4YWM5Mzk2NzVhN2FlYTAzMzUuLmE3NTUxY2U2ZTNlOTUwNjJlYTE4OTgyZGUwNThmM2I2
YzU1YTUyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIu
Y3BwCkBAIC04MCw3ICs4MCw3IEBAIFhNTFRyZWVCdWlsZGVyOjpYTUxUcmVlQnVpbGRlcihOZXdY
TUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmCiAKICAgICBmb3Ig
KEVsZW1lbnQqIGVsZW1lbnQ7ICFub2RlU3RhY2suaXNFbXB0eSgpOyBub2RlU3RhY2sucmVtb3Zl
TGFzdCgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBub2RlU3RhY2subGFzdCgpOwotICAgICAgICBp
ZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsK
KyAgICAgICAgaWYgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0
ZWRBdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXR0cnMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIg
PSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9j
YWxOYW1lKCkgPT0geG1sbnNBdG9tKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKaW5kZXggZGEwZTMyNTU1ZWM3Y2I4NDM4YWI4
MDIzYTk4YmI2MmNlZWViNTNiNS4uZDA3MTQxM2U2NGRiZTRlMzg1MGRlM2E3YjUzNmI0OTU4ODlh
NDMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlh
bGl6ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2Vy
aWFsaXplckltcGwuY3BwCkBAIC0zMDcsMTMgKzMwNywxMyBAQCB2b2lkIFdlYlBhZ2VTZXJpYWxp
emVySW1wbDo6b3BlblRhZ1RvU3RyaW5nKEVsZW1lbnQqIGVsZW1lbnQsCiAgICAgLy8gQWRkIG9w
ZW4gdGFnCiAgICAgcmVzdWx0ICs9ICI8IiArIGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKTsK
ICAgICAvLyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KLSAg
ICBjb25zdCBOYW1lZE5vZGVNYXAgKmF0dHJNYXAgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRl
cygpOwotICAgIGlmIChhdHRyTWFwKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0
ck1hcC0+bGVuZ3RoKCk7CisgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEgKmF0dHJEYXRh
ID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoYXR0ckRhdGEpIHsK
KyAgICAgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyRGF0YS0+bGVuZ3RoKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgaSsrKSB7CiAgICAgICAgICAgICBy
ZXN1bHQgKz0gIiAiOwogICAgICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAgICAg
ICAgICBjb25zdCBBdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0o
aSk7CisgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IGF0dHJEYXRhLT5h
dHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgcmVzdWx0ICs9IGF0dHJpYnV0ZS0+bmFtZSgp
LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICByZXN1bHQgKz0gIj1cIiI7CiAgICAgICAgICAgICBp
ZiAoIWF0dHJpYnV0ZS0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJl
bGVtZW50LmNwcAppbmRleCA3NzFhZDU2ZmIxYjU2NzE4ZjNiNWVlMzA5NjU2NzkzYzZlYTc0MjZh
Li5lZmFjNmQ0MzZmZDA5NTYyMmU5YjFjNWZkNzhjY2NlY2EwNDFmMGM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmVsZW1lbnQuY3BwCkBAIC01MDMsNyArNTAzLDcgQEAgUVN0cmluZ0xpc3QgUVdl
YkVsZW1lbnQ6OmF0dHJpYnV0ZU5hbWVzKGNvbnN0IFFTdHJpbmcmIG5hbWVzcGFjZVVyaSkgY29u
c3QKICAgICAgICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7CiAKICAgICBRU3RyaW5nTGlzdCBhdHRy
aWJ1dGVOYW1lTGlzdDsKLSAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGNvbnN0IGF0dHJzID0gbV9l
bGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVE
YXRhKiBjb25zdCBhdHRycyA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAg
ICBpZiAoYXR0cnMpIHsKICAgICAgICAgY29uc3QgU3RyaW5nIG5hbWVzcGFjZVVyaVN0cmluZyhu
YW1lc3BhY2VVcmkpOyAvLyBjb252ZXJ0IFFTdHJpbmcgLT4gU3RyaW5nIG9uY2UKICAgICAgICAg
Y29uc3QgdW5zaWduZWQgYXR0cnNDb3VudCA9IGF0dHJzLT5sZW5ndGgoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125316</attachid>
            <date>2012-02-03 06:34:41 -0800</date>
            <delta_ts>2012-02-10 03:58:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77674-20120203113444.patch</filename>
            <type>text/plain</type>
            <size>123349</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiOTRiYWVjZGViOTY5
ZjhiY2IxMGJjODcwYTYyOWUxMGQ3NDVhYS4uMzM4MmJhYjAwYjRlMTMwZmM2YTZlNWQ1ZWJmMmRh
MzQ2ZDVkZTFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwOCBAQAorMjAxMi0wMi0wMyAgQ2Fp
byBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3Jn
PgorCisgICAgICAgIE1vdmUgYXR0cmlidXRlIHN0b3JhZ2UgZnJvbSBOYW1lZE5vZGVNYXAgdG8g
RWxlbWVudEF0dHJpYnV0ZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc3Njc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZXMgbV9hdHRyaWJ1dGVzIHZlY3RvciBmcm9tIE5hbWVkTm9kZU1hcCB0
byBFbGVtZW50QXR0cmlidXRlRGF0YSwgYW5kIG1ha2UKKyAgICAgICAgY2FsbHNpdGVzIGludGVy
YWN0IGRpcmVjdGx5IHdpdGggRWxlbWVudEF0dHJpYnV0ZURhdGEuIFRoZSBwYXJzZXIgY29kZSB3
YXMgYWxzbworICAgICAgICBjaGFuZ2VkIHRvIGNyZWF0ZSBFbGVtZW50QXR0cmlidXRlRGF0YSBp
bnN0ZWFkIG9mIE5hbWVkTm9kZU1hcCwgc2luY2UgaXQgb25seQorICAgICAgICB1c2VzIGl0IGFz
IGF0dHJpYnV0ZSBzdG9yYWdlLgorCisgICAgICAgIFRvIHVuaWZ5IHRoZSBhdHRyaWJ1dGUgc3Rv
cmFnZSBnZXR0ZXIgZnVuY3Rpb25zLCB0aGlzIGNvbW1pdCBhbHNvIG1vdmVzIHRoZQorICAgICAg
ICBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24gZnVuY3Rpb25zIHRvIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhICh0aGUgZGF0YSB3YXMgdGhlcmUKKyAgICAgICAgYWxyZWFkeSkuCisKKyAgICAgICAgVGhp
cyBpcyBhbm90aGVyIHN0ZXAgdG93YXJkcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzUwNjkuIFRoZQorICAgICAgICBuZXh0IHN0ZXAgd2lsbCBiZSBkZWNvdXBsZSBF
bGVtZW50QXR0cmlidXRlRGF0YSdzIGxpZmV0aW1lIGZyb20gTmFtZWROb2RlTWFwLgorCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjptYXBwZWRBdHRy
aWJ1dGVzRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YW55QXR0cmlidXRlTWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOgorICAgICAgICAqIGNz
cy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tFeGFjdEF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL0F0dHIuaDoKKyAgICAgICAgKEF0
dHIpOgorICAgICAgICAqIGRvbS9BdHRyaWJ1dGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIGRvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFzZXRET01TdHJpbmdNYXA6OmdldE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRE
T01TdHJpbmdNYXA6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01h
cDo6Y29udGFpbnMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6aW1wb3J0Tm9kZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRl
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0
cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzQXR0cmlidXRlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bm9y
bWFsaXplQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRVUkxBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1
dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZXNGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmZhc3RHZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSk6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+RWxlbWVudEF0dHJpYnV0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRl
RGF0YTo6ZW5zdXJlSW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpkZXN0cm95SW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXROYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZU5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjplcXVpdmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjphZGRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJp
YnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y29weUF0dHJpYnV0ZXNUb1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50QXR0cmlidXRlRGF0YTo6ZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhT
bG93Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0QXR0
cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Y2xlYXJB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZXBs
YWNlQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUpOgorICAgICAgICAo
RWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OmlubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmli
dXRlRGF0YTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRh
Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppbnNl
cnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0
dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6Om1hcHBlZEF0dHJpYnV0ZUNv
dW50KToKKyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hbWVkTm9kZU1hcDo6ZGV0YWNoRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGRvbS9OYW1lZE5v
ZGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6
Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50
KToKKyAgICAgICAgKE5hbWVkTm9kZU1hcCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNFcXVhbE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6aXNEZWZhdWx0TmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omxvb2t1cE5h
bWVzcGFjZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29rdXBOYW1lc3BhY2VQcmVm
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24pOgor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20v
U3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpjbGFz
c0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjptYXBwZWRBdHRyaWJ1dGVDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZURlY2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6ZW5zdXJlSW5saW5lU3R5bGVEZWNsKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2wpOgorICAgICAg
ICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Tm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0Vt
cHR5Rm9udFRhZyk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZh
bGVudCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RWaXN1YWxseUVxdWl2YWxlbnREaXZCZWxv
d1Jvb3QpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAq
IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlSWRlbnRpY2Fs
RWxlbWVudHMpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6IE1ha2UgdXNlIG9mIGNvbnRpbnVlIHRvIGF2b2lkIGluZGVudGF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAg
KiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cGFyYW1ldGVyc0ZvclBs
dWdpbik6CisgICAgICAgICogaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21U
b2tlbkludG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OmVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6QXRv
bWljSFRNTFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFn
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5k
ZXhJbnB1dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJl
RWxlbWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTUVkaXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01FZGl0b3I6OmlubmVyUGF0Y2hOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUVkaXRvcjo6Y3JlYXRlRGlnZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvRE9NRWRpdG9yLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JBdHRyaWJ1dGVTdHlsZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRl
c0FzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNl
YXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckVsZW1lbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKToKKyAgICAgICAgKiBz
dmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUpOgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIu
aDoKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WFBhdGg6OkZ1bkxhbmc6OmV2YWx1YXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAg
ICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
Ojpub2Rlc0luQXhpcyk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9r
ZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6YXR0cmli
dXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OnRha2VBdHRy
aWJ1dGVzKToKKyAgICAgICAgKEF0b21pY01hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjo6OmluaXRpYWxpemVBdHRyaWJ1dGVzKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1M
RG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MVG9rZW4uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY1hNTFRva2VuOjpBdG9taWNYTUxUb2tlbik6CisgICAgICAgICog
eG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVl
QnVpbGRlcjo6WE1MVHJlZUJ1aWxkZXIpOgorCiAyMDEyLTAyLTAzICBSb2IgQnVpcyAgPHJidWlz
QHJpbS5jb20+CiAKICAgICAgICAgVXBzdHJlYW0gdGFyZ2V0VHlwZSB1c2FnZSBvbiBSZXNvdXJj
ZVJlcXVlc3QgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBiZmYzYWRmNDliNWMzMmYyNjdlNTE5ZjMyOWYxYzcwNmYzYzkzNmIxLi43ZDA1NWE5YTExMTlj
M2E2YjY0Y2JjZTA4YTIwMmE2Y2M4MGNkOGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDEyLTAyLTAzICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgTW92ZSBhdHRyaWJ1
dGUgc3RvcmFnZSBmcm9tIE5hbWVkTm9kZU1hcCB0byBFbGVtZW50QXR0cmlidXRlRGF0YQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2NzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJOYW1l
ZE5vZGVNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOYW1lZE5vZGVNYXA6OmF0dHJpYnV0
ZUl0ZW0pOiBhdHRyaWJ1dGVJdGVtKCkgaXMgbm93IGEgbWV0aG9kIG9mCisgICAgICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhLgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmlu
Zyk6IHVzZSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpLgorCiAyMDEyLTAyLTAzICBZdXJ5IFNlbWlr
aGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0
ZSBDaHJvbWl1bSBkZXBzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAxYTA0NmRmNDYyZTk1MmM0NmFkYjc5
NTliOTllYTNjNmJhMGJkOGJiLi5jYTRjYTBhYmExMzRlOGZjZGFjMzA4ZTg4NzUyZTJkOWIzYmNk
MTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAyLTAzICBDYWlvIE1h
cmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgTW92ZSBhdHRyaWJ1dGUgc3RvcmFnZSBmcm9tIE5hbWVkTm9kZU1hcCB0byBFbGVt
ZW50QXR0cmlidXRlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzc2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5jcHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6YXR0
cmlidXRlTmFtZXMpOiB1c2UgdXBkYXRlZEF0dHJpYnV0ZURhdGEoKS4KKwogMjAxMi0wMi0wMiAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNjYyMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAppbmRleCA4NGMzMDJhYzBiNzM4MDllYjI4NzlkZDlhOTc2YzNhODUzNmY4NjIy
Li45OGJiMjkwZDQ2NDNkNmYzYmY3YmNjZTJmNzRmZDcyN2E2YzBlYThlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC05OTYsMTAgKzk5NiwxMCBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAg
ICAgCiAgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGgg
cHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgogICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgaWYgKGNvbnN0IE5hbWVkTm9kZU1hcCogbWFwID0gbV9z
dHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVNYXAoKSkgewotICAgICAgICAgICAgLy8gV2FsayB0aGUg
ZWxlbWVudCdzIGF0dHJpYnV0ZSBtYXAgYW5kIGFkZCBhbGwgbWFwcGVkIGF0dHJpYnV0ZSBkZWNs
YXJhdGlvbnMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLT5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtYXAt
PmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgIGlmIChjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0
YSogYXR0cmlidXRlRGF0YSA9IG1fc3R5bGVkRWxlbWVudC0+YXR0cmlidXRlRGF0YSgpKSB7Cisg
ICAgICAgICAgICAvLyBXYWxrIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlIGRhdGEgYW5kIGFkZCBh
bGwgbWFwcGVkIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMuCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRl
bShpKTsKICAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+ZGVjbCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBBU1NFUlQoYXR0cmlidXRlLT5p
c01hcHBlZEF0dHJpYnV0ZSgpKTsKQEAgLTExOTgsNyArMTE5OCw3IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwZWRB
dHRyaWJ1dGVzRXF1aXZhbGVudChOYW1lZE5vZGVNYXAqIGEsIE5hbWVkTm9kZU1hcCogYikKK3N0
YXRpYyBpbmxpbmUgYm9vbCBtYXBwZWRBdHRyaWJ1dGVzRXF1aXZhbGVudChFbGVtZW50QXR0cmli
dXRlRGF0YSogYSwgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGIpCiB7CiAgICAgQVNTRVJUKGEtPm1h
cHBlZEF0dHJpYnV0ZUNvdW50KCkgPT0gYi0+bWFwcGVkQXR0cmlidXRlQ291bnQoKSk7CiAKQEAg
LTEyOTUsNyArMTI5NSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQt
Pmhhc0NsYXNzKCkgJiYgbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBlbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKG1hcHBlZEF0dHJpYnV0ZUNvdW50ICYmICFtYXBwZWRBdHRyaWJ1dGVzRXF1aXZhbGVu
dChlbGVtZW50LT5hdHRyaWJ1dGVNYXAoKSwgbV9zdHlsZWRFbGVtZW50LT5hdHRyaWJ1dGVNYXAo
KSkpCisgICAgaWYgKG1hcHBlZEF0dHJpYnV0ZUNvdW50ICYmICFtYXBwZWRBdHRyaWJ1dGVzRXF1
aXZhbGVudChlbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCksIG1fc3R5bGVkRWxlbWVudC0+YXR0cmli
dXRlRGF0YSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGVsZW1lbnQtPmlz
TGluaygpICYmIG1fZWxlbWVudExpbmtTdGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCA1ODY3NzQ2NDdhMDg3ZDNhMGMy
ZDdmMjgyY2IzYmIwMzM2Zjk0NDA1Li40ZGU2NjMxOWE5NTAyNDY3MGE1YmI4YjliMmYwNmM5YWQw
YTU5Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjcxLDcg
KzY3MSw3IEBAIHN0YXRpYyBib29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0
dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9yOjpNYXRjaCBtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVz
LCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9y
QXR0ciwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRp
dmUpCitzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVzLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHNlbGVjdG9yQXR0ciwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29s
IGNhc2VTZW5zaXRpdmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVz
LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSA9IGF0
dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CkBAIC03MDEsNyArNzAxLDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgUHNldWRvSWQmIGQKICAgICBpZiAoc2VsLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7CiAKLSAg
ICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsK
KyAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBlLT51cGRhdGVkQXR0
cmlidXRlRGF0YSgpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAzZjk0Njll
NWQ3OWIwOWM5YWI4NDJlNzQyZDg1ZmFkNzE3Yjk0NzFmLi4zZjkxNmQyMGE2YTM5ZTc4NWZhNTIx
ODNlZDE0NWFjODcxNzI4NmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBA
IC0xODUsMTIgKzE4NSwxMiBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmF0dHJpYnV0
ZU5hbWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlLCBjbwogCiBpbmxpbmUgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25zdCBB
dG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1h
cCA9IGVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpOwotICAgIGlmICghYXR0cmlidXRlTWFwKQorICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+YXR0cmlidXRl
RGF0YSgpOworICAgIGlmICghYXR0cmlidXRlRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHVuc2lnbmVkIHNpemUgPSBhdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOworICAgIHVuc2lnbmVk
IHNpemUgPSBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmli
dXRlTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVO
YW1lTWF0Y2hlcyhhdHRyaWJ1dGUsIHNlbGVjdG9yQXR0cmlidXRlTmFtZSkgJiYgKCF2YWx1ZSB8
fCBhdHRyaWJ1dGUtPnZhbHVlKCkuaW1wbCgpID09IHZhbHVlKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCmluZGV4IDdiNmUzMzJlZWFhYjgyNjNkODY5MzllOWVj
ZWIyYmNhMDczYTU3NjkuLjA5YWM3OTZhMWU5NDhmMDg3ZjYwMGIwNTFmZTUwM2JiN2YzMzczODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0F0dHIuaApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBk
ZXN0cnVjdGlvbi4gaG93ZXZlciwgdGhpcyBpcyBub3QgeWV0IGltcGxlbWVudGVkLgogCiBjbGFz
cyBBdHRyIDogcHVibGljIENvbnRhaW5lck5vZGUgewotICAgIGZyaWVuZCBjbGFzcyBOYW1lZE5v
ZGVNYXA7CisgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOwogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0dHI+IGNyZWF0ZShFbGVtZW50KiwgRG9jdW1lbnQqLCBQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4pOwogICAgIHZpcnR1YWwgfkF0dHIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRy
aWJ1dGUuaAppbmRleCA5MzhlMTkyMmRjZmZkMjgzMzcxYjgyNGQ2MTcwODY4ODIyMGQwMmM4Li4w
YzNlMTc0ZDczYTc2MTdlYjJlNDgwNDcxMGFlMjMwMjNiOGNhMWVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oCkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0dHI7
CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIE5hbWVk
Tm9kZU1hcDsKIAogLy8gVGhpcyBoYXMgbm8gY291bnRlcnBhcnQgaW4gRE9NLgogLy8gSXQgaXMg
YW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUgdmFsdWUgb2YgYW4gQXR0ci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAppbmRleCBkZmYwYWQ3
NTA3MjA2N2U1NTZjZTFlMjg2MTQ1MTI0MjdlMTMwYzAzLi4yZjU0ZTQ4ZTUxNDcyNmUyOTljZWM4
MTgyM2RlOWYxZWI3ZmRjZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNl
dERPTVN0cmluZ01hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01TdHJp
bmdNYXAuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJO
YW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMTQyLDExICsxNDEsMTEgQEAgdm9pZCBEYXRh
c2V0RE9NU3RyaW5nTWFwOjpkZXJlZigpCiAKIHZvaWQgRGF0YXNldERPTVN0cmluZ01hcDo6Z2V0
TmFtZXMoVmVjdG9yPFN0cmluZz4mIG5hbWVzKQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlTWFwID0gbV9lbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgIGlmIChhdHRyaWJ1
dGVNYXApIHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlTWFwLT5sZW5ndGgo
KTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IG1fZWxlbWVudC0+
dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoYXR0cmlidXRlRGF0YSkgeworICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1
dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAg
ICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShp
KTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUtPmxvY2Fs
TmFtZSgpKSkKICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoY29udmVydEF0dHJpYnV0ZU5h
bWVUb1Byb3BlcnR5TmFtZShhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKSk7CiAgICAgICAgIH0KQEAg
LTE1NSwxMSArMTU0LDExIEBAIHZvaWQgRGF0YXNldERPTVN0cmluZ01hcDo6Z2V0TmFtZXMoVmVj
dG9yPFN0cmluZz4mIG5hbWVzKQogCiBTdHJpbmcgRGF0YXNldERPTVN0cmluZ01hcDo6aXRlbShj
b25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBt
X2VsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGF0dHJpYnV0ZU1hcCkgewot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOworICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gbV9lbGVtZW50LT51cGRhdGVkQXR0
cmlidXRlRGF0YSgpOworICAgIGlmIChhdHRyaWJ1dGVEYXRhKSB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmli
dXRlID0gYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1dGVOYW1lKG5hbWUsIGF0dHJpYnV0
ZS0+bG9jYWxOYW1lKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVl
KCk7CiAgICAgICAgIH0KQEAgLTE3MCwxMSArMTY5LDExIEBAIFN0cmluZyBEYXRhc2V0RE9NU3Ry
aW5nTWFwOjppdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogYm9vbCBEYXRhc2V0RE9NU3RyaW5n
TWFwOjpjb250YWlucyhjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVNYXAgPSBtX2VsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGF0
dHJpYnV0ZU1hcCkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVNYXAtPmxl
bmd0aCgpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gbV9lbGVt
ZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIGlmIChhdHRyaWJ1dGVEYXRhKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEF0
dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAg
ICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJ
dGVtKGkpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1dGVOYW1l
KG5hbWUsIGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA2ZWY0YmM3NzA5NmMy
N2JkMWQ0YWY4MWFiM2E2YWJiYmRmZTQxMWE4Li44NDE2MGQyN2VkNzgxMmI5N2I2NTcyNWRmZGM1
NTk3YzBkOWU4NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg1MCw3ICs4NTAsNyBA
QCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBvcnROb2RlKE5vZGUqIGltcG9ydGVkTm9k
ZSwgYm9vbCBkZWVwLCBFeGNlcHRpb25DbwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKIAotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gb2xkRWxlbWVudC0+dXBk
YXRlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJzID0g
b2xkRWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICAgICAgaWYgKGF0dHJzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVuZ3RoKCk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCA1N2NhYTRhMDBlMzhhN2FjYzA5OTNiMzEwZGNjOTIxMDE0YTU3YWMxLi42
MjgzMjhiOTE1NzQ4NjA5MWQ2YmNmMDZlYmZlYmM5Mzc1ODIxYzcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC0xODMsMTAgKzE4MywxMCBAQCB2b2lkIEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1
dGVQcm9wZXJ0aWVzKGNvbnN0IEVsZW1lbnQqKQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIGlmICghbV9hdHRyaWJ1dGVN
YXApCisgICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
YXR0cmlidXRlTWFwLT5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7CisgICAgYXR0cmlidXRlRGF0YSgp
LT5yZW1vdmVBdHRyaWJ1dGUobmFtZSwgdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0Qm9v
bGVhbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sIHZhbHVlKQpAQCAt
MjE3LDggKzIxNyw4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiAgICAgICAgIHVwZGF0ZUFuaW1hdGVk
U1ZHQXR0cmlidXRlKG5hbWUpOwogI2VuZGlmCiAKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsK
LSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0
dHJpYnV0ZUl0ZW0obmFtZSkpCisgICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkgeworICAgICAgICBp
ZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0
ZW0obmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgIH0K
ICAgICByZXR1cm4gbnVsbEF0b207CkBAIC01NzQsMTEgKzU3NCw2IEBAIExheW91dFJlY3QgRWxl
bWVudDo6c2NyZWVuUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnZpZXcoKS0+
ZnJhbWVWaWV3KCktPmNvbnRlbnRzVG9TY3JlZW4ocmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKGNvbnN0IEVsZW1lbnQqIGUpCi17Ci0gICAgcmV0dXJu
IGUgJiYgZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBlLT5pc0hUTUxFbGVtZW50
KCk7Ci19Ci0KIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBib29sIGlnbm9yZUNhc2UgPSBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKHRoaXMpOwpAQCAtNTk0LDggKzU4OSw4IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAg
ICB9CiAjZW5kaWYKIAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0
cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1l
LCBpZ25vcmVDYXNlKSkKKyAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlmIChB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShu
YW1lLCBpZ25vcmVDYXNlKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7
CiAgICAgfQogCkBAIC02MTYsMjcgKzYxMSwyNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAK
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0
ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCi0gICAgc2l6ZV90IGluZGV4ID0g
ZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFt
ZSwgZmFsc2UpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0gbm90
Rm91bmQgPyBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6IFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOworICAgIHNpemVfdCBp
bmRleCA9IGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChsb2NhbE5hbWUsIGZhbHNlKTsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSA9IGlu
ZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+
bmFtZSgpIDogUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBudWxsQXRvbSk7CiAg
ICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIHFOYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
RWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJlVXBk
YXRlZEF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1
ZSk7CisgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEo
KS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1ZSk7CiB9CiAKIGlubGlu
ZSB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRleCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBB
dHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZvdW5kID8gbV9hdHRyaWJ1dGVNYXAtPmF0dHJp
YnV0ZUl0ZW0oaW5kZXgpIDogMDsKKyAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZv
dW5kID8gYXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4KSA6IDA7CiAgICAgaWYg
KHZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChvbGQpCi0gICAgICAgICAgICBtX2F0dHJp
YnV0ZU1hcC0+cmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZURh
dGEoKS0+cmVtb3ZlQXR0cmlidXRlKGluZGV4LCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmICghb2xkKSB7Ci0gICAgICAgIG1fYXR0cmlidXRlTWFwLT5hZGRBdHRyaWJ1
dGUoY3JlYXRlQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7CisgICAgICAgIGF0dHJpYnV0ZURhdGEo
KS0+YWRkQXR0cmlidXRlKGNyZWF0ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSksIHRoaXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC03MzYsNyArNzMxLDcgQEAgc3RhdGljIGJvb2wgaXNB
dHRyaWJ1dGVUb1JlbW92ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHYKICAgICByZXR1cm4gKG5hbWUubG9jYWxOYW1lKCkuZW5kc1dpdGgoaHJlZkF0dHIu
bG9jYWxOYW1lKCkpIHx8IG5hbWUgPT0gc3JjQXR0ciB8fCBuYW1lID09IGFjdGlvbkF0dHIpICYm
IHByb3RvY29sSXNKYXZhU2NyaXB0KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh2
YWx1ZSkpOyAgICAgICAKIH0KIAotdm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVNYXAo
UGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGxpc3QsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uKQordm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVE
YXRhKFBhc3NPd25QdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZURhdGEsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogewogICAgIEFTU0VS
VCghaW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQoIXBhcmVudE5vZGUoKSk7CkBAIC03NDQsMzkg
KzczOSw0NSBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRy
PE5hbWVkTm9kZU1hcD4gbGlzdCwgRnJhZ21lbnRTY3JpcAogICAgIGRvY3VtZW50KCktPmluY0RP
TVRyZWVWZXJzaW9uKCk7CiAKICAgICBBU1NFUlQoIW1fYXR0cmlidXRlTWFwKTsKLSAgICBtX2F0
dHJpYnV0ZU1hcCA9IGxpc3Q7Ci0KLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKLSAgICAgICAg
bV9hdHRyaWJ1dGVNYXAtPm1fZWxlbWVudCA9IHRoaXM7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVt
ZW50IGlzIGNyZWF0ZWQgYXMgcmVzdWx0IG9mIGEgcGFzdGUgb3IgZHJhZy1uLWRyb3Agb3BlcmF0
aW9uCi0gICAgICAgIC8vIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCB0aGUgc2NyaXB0IGFuZCBldmVu
dCBoYW5kbGVycy4KLSAgICAgICAgaWYgKHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRT
Y3JpcHRpbmdOb3RBbGxvd2VkKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAg
ICAgICAgIHdoaWxlIChpIDwgbV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IG1fYXR0cmlidXRlTWFw
LT5tX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNFdmVudEhh
bmRsZXJBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9h
dHRyaWJ1dGVNYXAtPm1fYXR0cmlidXRlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpc0F0
dHJpYnV0ZVRvUmVtb3ZlKGF0dHJpYnV0ZU5hbWUsIG1fYXR0cmlidXRlTWFwLT5tX2F0dHJpYnV0
ZXNbaV0tPnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+bV9h
dHRyaWJ1dGVzW2ldLT5zZXRWYWx1ZShudWxsQXRvbSk7Ci0gICAgICAgICAgICAgICAgaSsrOwor
CisgICAgaWYgKCFhdHRyaWJ1dGVEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVB
dHRyaWJ1dGVNYXAoKTsKKworICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYXMgcmVz
dWx0IG9mIGEgcGFzdGUgb3IgZHJhZy1uLWRyb3Agb3BlcmF0aW9uCisgICAgLy8gd2Ugd2FudCB0
byByZW1vdmUgYWxsIHRoZSBzY3JpcHQgYW5kIGV2ZW50IGhhbmRsZXJzLgorICAgIGlmIChzY3Jp
cHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkgeworICAgICAg
ICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBhdHRyaWJ1dGVEYXRhLT5sZW5n
dGgoKSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9
IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICAgICAgaWYg
KGlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQXR0cmlidXRl
VG9SZW1vdmUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ldLT52
YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0t
PnNldFZhbHVlKG51bGxBdG9tKTsKKyAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQotICAgICAg
ICAvLyBTdG9yZSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFj
ayBpbiBjYXNlCi0gICAgICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2F0dHJpYnV0
ZU1hcC4KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gYXR0cmlidXRlczsKLSAg
ICAgICAgbV9hdHRyaWJ1dGVNYXAtPmNvcHlBdHRyaWJ1dGVzVG9WZWN0b3IoYXR0cmlidXRlcyk7
Ci0gICAgICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID46Oml0ZXJhdG9yIGl0ZXIg
PSBhdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKQot
ICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChpdGVyLT5nZXQoKSk7CiAgICAgfQorCisgICAg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkbid0IGJlIGEgY29weSwgd2Ugc2hvdWxkIGdldCBvd25lcnNo
aXAgb2YgYXR0cmlidXRlRGF0YS4gVGhpcyB3aWxsIGJlCisgICAgLy8gZml4ZWQgd2hlbiB3ZSBt
b3ZlIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIG91dCBmcm9tIE5hbWVkTm9kZU1hcC4KKyAgICBtX2F0
dHJpYnV0ZU1hcC0+bV9hdHRyaWJ1dGVEYXRhID0gKmF0dHJpYnV0ZURhdGE7CisKKyAgICAvLyBT
dG9yZSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFjayBpbiBj
YXNlCisgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlTWFwLgorICAg
IFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+IGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlRGF0
YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVzKTsKKyAgICBmb3IgKFZlY3RvcjxS
ZWZQdHI8QXR0cmlidXRlPiA+OjppdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOyBp
dGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgYXR0cmlidXRlQ2hhbmdl
ZChpdGVyLT5nZXQoKSk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlcygpIGNvbnN0
CiB7CiAgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1
dGVNYXAgJiYgbV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOworICAgIHJldHVybiBhdHRyaWJ1dGVE
YXRhKCkgJiYgYXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKTsKIH0KIAogU3RyaW5nIEVsZW1lbnQ6
Om5vZGVOYW1lKCkgY29uc3QKQEAgLTg3MCwxNCArODcxLDE0IEBAIHZvaWQgRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKQogICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBzaGFkb3dS
b290KCkpCiAgICAgICAgIHNoYWRvdy0+aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAotICAgIGlm
IChtX2F0dHJpYnV0ZU1hcCkgeworICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAgICAg
aWYgKGhhc0lEKCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gbV9hdHRyaWJ1
dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwor
ICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJp
YnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYg
KGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVJZChu
dWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaGFzTmFt
ZSgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAt
PmdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAgICAgICBBdHRy
aWJ1dGUqIG5hbWVJdGVtID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxO
YW1lczo6bmFtZUF0dHIpOwogICAgICAgICAgICAgaWYgKG5hbWVJdGVtICYmICFuYW1lSXRlbS0+
aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlTmFtZShudWxsQXRvbSwgbmFtZUl0ZW0t
PnZhbHVlKCkpOwogICAgICAgICB9CkBAIC04ODYsMTQgKzg4NywxNCBAQCB2b2lkIEVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3VtZW50KCkKIAogdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KCkKIHsKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAgICBpZiAoYXR0cmlidXRlRGF0
YSgpKSB7CiAgICAgICAgIGlmIChoYXNJRCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlk
SXRlbSA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGRvY3VtZW50KCktPmlkQXR0
cmlidXRlTmFtZSgpKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gYXR0cmlidXRl
RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKGRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsK
ICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlkSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAg
ICAgICAgdXBkYXRlSWQoaWRJdGVtLT52YWx1ZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGhhc05hbWUoKSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBuYW1lSXRlbSA9
IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOwor
ICAgICAgICAgICAgQXR0cmlidXRlKiBuYW1lSXRlbSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0
cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmIChuYW1lSXRl
bSAmJiAhbmFtZUl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZU5hbWUobmFt
ZUl0ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAgICAgfQpAQCAtMTQyMCw3ICsxNDIxLDcg
QEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0
cj4oZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKS0+c2V0TmFtZWRJdGVtKGF0dHIsIGVjKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oZW5zdXJlVXBkYXRlZEF0dHJpYnV0
ZURhdGEoKS0+c2V0TmFtZWRJdGVtKGF0dHIsIGVjLCB0aGlzKSk7CiB9CiAKIFBhc3NSZWZQdHI8
QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm9kZU5TKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTQyOSw3ICsxNDMwLDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAg
IGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBy
ZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygp
LT5zZXROYW1lZEl0ZW0oYXR0ciwgZWMpKTsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxBdHRyPihlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpLT5zZXROYW1lZEl0ZW0oYXR0ciwg
ZWMsIHRoaXMpKTsKIH0KIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1
dGVOb2RlKEF0dHIqIGF0dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTQ0NSwxMSArMTQ0Niwx
MSBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciog
YXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICBBU1NFUlQoZG9jdW1lbnQoKSA9PSBhdHRy
LT5kb2N1bWVudCgpKTsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSB1cGRhdGVkQXR0cmli
dXRlcygpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCk7CiAgICAgaWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1
cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihhdHRycy0+cmVtb3ZlTmFtZWRJdGVtKGF0dHIt
PnF1YWxpZmllZE5hbWUoKSwgZWMpKTsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxB
dHRyPihhdHRycy0+cmVtb3ZlTmFtZWRJdGVtKGF0dHItPnF1YWxpZmllZE5hbWUoKSwgZWMsIHRo
aXMpKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCkBAIC0xNDczLDE1ICsxNDc0LDE1IEBA
IHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluCiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRl
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIW1fYXR0cmlidXRlTWFwKQorICAgIGlm
ICghYXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbG9jYWxO
YW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5h
bWU7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW1J
bmRleChsb2NhbE5hbWUsIGZhbHNlKTsKKyAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1dGVEYXRh
KCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBpZiAoaW5k
ZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlTWFwLT5y
ZW1vdmVBdHRyaWJ1dGUoaW5kZXgpOworICAgIGF0dHJpYnV0ZURhdGEoKS0+cmVtb3ZlQXR0cmli
dXRlKGluZGV4LCB0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCkBAIC0x
NDkxLDI0ICsxNDkyLDI0IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3Qg
U3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOCiAKIFBhc3NSZWZQdHI8
QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0g
ICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVu
dEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAo
IWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7Ci0gICAgcmV0
dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8QXR0cj4oYXR0cnMtPmdldE5hbWVkSXRlbShsb2NhbE5h
bWUpKTsKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihhdHRycy0+Z2V0TmFt
ZWRJdGVtKGxvY2FsTmFtZSwgdGhpcykpOwogfQogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6
OmdldEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHVwZGF0ZWRBdHRy
aWJ1dGVzKCk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gdXBkYXRlZEF0dHJp
YnV0ZURhdGEoKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxBdHRyPihhdHRycy0+Z2V0TmFtZWRJdGVtKFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSkpOworICAgIHJldHVybiBz
dGF0aWNfcG9pbnRlcl9jYXN0PEF0dHI+KGF0dHJzLT5nZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpLCB0aGlzKSk7CiB9CiAKIGJvb2wg
RWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBO
YW1lZE5vZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0
cmlidXRlRGF0YSogYXR0cnMgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAgIGlmICghYXR0
cnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTUyMCw3ICsxNTIxLDcgQEAgYm9vbCBF
bGVtZW50OjpoYXNBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogCiBib29sIEVs
ZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSkgY29uc3QKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBk
YXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cnMgPSB1cGRh
dGVkQXR0cmlidXRlRGF0YSgpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKQEAgLTE3MTAsNyArMTcxMSw3IEBAIHZv
aWQgRWxlbWVudDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKIAogdm9pZCBFbGVtZW50
Ojpub3JtYWxpemVBdHRyaWJ1dGVzKCkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBk
YXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cnMgPSB1cGRh
dGVkQXR0cmlidXRlRGF0YSgpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTgzNCw4ICsxODM1LDggQEAgRE9NU3RyaW5nTWFwKiBFbGVtZW50OjpkYXRhc2V0KCkKIEtV
UkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNv
bnN0CiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewot
ICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0
cmlidXRlSXRlbShuYW1lKSkKKyAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlm
IChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRl
bShuYW1lKSkKICAgICAgICAgICAgIEFTU0VSVChpc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsK
ICAgICB9CiAjZW5kaWYKQEAgLTE4NDUsOCArMTg0Niw4IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJM
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiBLVVJMIEVsZW1lbnQ6
OmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
CiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAg
ICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmli
dXRlSXRlbShuYW1lKSkKKyAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlmIChB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShu
YW1lKSkKICAgICAgICAgICAgIEFTU0VSVChpc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDNjMjc2NTk2NWUyMmZlNjQ3ZWNlMWVi
ZmVlMWNjMzZhNjRmZGEwNjEuLjA5ZmVmY2IyMTU1ZjdjNWYxMjFhZDFjMTFlYzY0NDNlZjZjMTgz
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjE1LDIyICsyMTUsMTggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Qm9vbGVhbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29s
KTsKIAogICAgIC8vIEZvciBleHBvc2luZyB0byBET00gb25seS4KLSAgICBOYW1lZE5vZGVNYXAq
IGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOyB9
Ci0KLSAgICBOYW1lZE5vZGVNYXAqIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCkgY29uc3Q7Ci0g
ICAgTmFtZWROb2RlTWFwKiB1cGRhdGVkQXR0cmlidXRlcygpIGNvbnN0OworICAgIE5hbWVkTm9k
ZU1hcCogYXR0cmlidXRlcygpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IHdoZW5ldmVyIGFuIGF0dHJpYnV0ZSBpcyBhZGRlZCwgY2hhbmdlZCBvciByZW1vdmVkLgogICAg
IHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVE
ZWNscyA9IGZhbHNlKTsKIAogICAgIC8vIE9ubHkgY2FsbGVkIGJ5IHRoZSBwYXJzZXIgaW1tZWRp
YXRlbHkgYWZ0ZXIgZWxlbWVudCBjb25zdHJ1Y3Rpb24uCi0gICAgdm9pZCBwYXJzZXJTZXRBdHRy
aWJ1dGVNYXAoUGFzc093blB0cjxOYW1lZE5vZGVNYXA+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24pOwotCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZU1hcC5nZXQoKTsgfQotICAgIE5hbWVkTm9kZU1hcCogZW5zdXJlQXR0cmli
dXRlTWFwKCkgY29uc3Q7CisgICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVEYXRhKFBhc3NPd25Q
dHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwog
CiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZU1hcCA/IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCkgOiAwOyB9
Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGVuc3VyZUF0dHJpYnV0ZURhdGEoKSBjb25zdCB7
IHJldHVybiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5hdHRyaWJ1dGVEYXRhKCk7IH0KKyAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlQXR0cmlidXRlRGF0YSgpIGNvbnN0OworICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiB1cGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0OworICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYpOwog
CkBAIC01MjIsMjIgKzUxOCwzNyBAQCBpbmxpbmUgRWxlbWVudCogRWxlbWVudDo6bmV4dEVsZW1l
bnRTaWJsaW5nKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwog
fQogCi1pbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50OjplbnN1cmVVcGRhdGVkQXR0cmlidXRl
cygpIGNvbnN0CitpbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29u
c3QKIHsKICAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAgIHJldHVybiBlbnN1cmVB
dHRyaWJ1dGVNYXAoKTsKKyAgICBpZiAoIW1fYXR0cmlidXRlTWFwKQorICAgICAgICBjcmVhdGVB
dHRyaWJ1dGVNYXAoKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAuZ2V0KCk7Cit9CisKK2lu
bGluZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2F0dHJpYnV0ZU1hcCkKKyAgICAgICAgY3JlYXRlQXR0cmli
dXRlTWFwKCk7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCk7CiB9
CiAKLWlubGluZSBOYW1lZE5vZGVNYXAqIEVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVzKCkgY29u
c3QKK2lubGluZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6dXBkYXRlZEF0dHJpYnV0
ZURhdGEoKSBjb25zdAogewogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgcmV0
dXJuIG1fYXR0cmlidXRlTWFwLmdldCgpOworICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCk7Cit9
CisKK2lubGluZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6ZW5zdXJlVXBkYXRlZEF0
dHJpYnV0ZURhdGEoKSBjb25zdAoreworICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Cisg
ICAgcmV0dXJuIGVuc3VyZUF0dHJpYnV0ZURhdGEoKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVu
dDo6c2V0QXR0cmlidXRlc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIG90aGVyKQogewotICAg
IGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IG90aGVyLnVwZGF0ZWRBdHRyaWJ1dGVz
KCkpCi0gICAgICAgIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKmF0
dHJpYnV0ZU1hcCk7CisgICAgaWYgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlckF0dHJpYnV0
ZXMgPSBvdGhlci51cGRhdGVkQXR0cmlidXRlRGF0YSgpKQorICAgICAgICBlbnN1cmVVcGRhdGVk
QXR0cmlidXRlRGF0YSgpLT5zZXRBdHRyaWJ1dGVzKCpvdGhlckF0dHJpYnV0ZXMsIHRoaXMpOwog
fQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKQpAQCAtNTc5LDE0ICs1OTAsMTYg
QEAgaW5saW5lIHZvaWQgRWxlbWVudDo6d2lsbFJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWMKIGlubGluZSBib29sIEVsZW1lbnQ6OmZhc3RIYXNB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQo
ZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQobmFtZSkpOwotICAgIHJldHVybiBtX2F0dHJpYnV0
ZU1hcCAmJiBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZURhdGEoKTsKKyAgICByZXR1
cm4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQog
CiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZhc3RBdHRyaWJ1
dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKLSAgICAg
ICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0
ZUl0ZW0obmFtZSkpCisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBhdHRy
aWJ1dGVEYXRhKCk7CisgICAgaWYgKGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgaWYgKEF0dHJpYnV0
ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQogICAgIHJldHVybiBudWxs
QXRvbTsKQEAgLTYxNywxMyArNjMwLDYgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SWRBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRBdHRyaWJ1dGUoZG9jdW1l
bnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCksIHZhbHVlKTsKIH0KIAotaW5saW5lIE5hbWVkTm9kZU1h
cCogRWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlTWFwKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYXR0
cmlidXRlTWFwKQotICAgICAgICBjcmVhdGVBdHRyaWJ1dGVNYXAoKTsKLSAgICByZXR1cm4gbV9h
dHRyaWJ1dGVNYXAuZ2V0KCk7Ci19Ci0KIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUludmFs
aWRBdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICBpZiAoIWlzU3R5bGVBdHRyaWJ1dGVWYWxpZCgp
KQpAQCAtNjQ0LDYgKzY1MCwxMSBAQCBpbmxpbmUgRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGQo
Y29uc3QgQ29udGFpbmVyTm9kZSogY29udGFpbmVyKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oY2hpbGQpOwogfQogCitpbmxpbmUgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKGNvbnN0IEVsZW1lbnQqIGUpCit7CisgICAgcmV0dXJuIGUgJiYgZS0+ZG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSAmJiBlLT5pc0hUTUxFbGVtZW50KCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHAKaW5kZXggMTI4MzMwNGJkYzA3NWNhNDE0NmE1NjViYzE2N2I2MTNkNTI4MDZhNS4uN2NmYTk4
ZDQ2ODIxMjE3NDlhZGU1Mzk0Y2ZlZGZkZWRmNjdiMmMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCkBAIC0yNiwxMSArMjYsMjczIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRWxlbWVudEF0dHJpYnV0ZURhdGEuaCIKIAorI2luY2x1
ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0VsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+RWxlbWVudEF0
dHJpYnV0ZURhdGEoKQoreworICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOworfQor
CitDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3Vy
ZUlubGluZVN0eWxlRGVjbChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghbV9pbmxpbmVT
dHlsZURlY2wpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsK
KyAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlSW5saW5lKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KSk7CisgICAg
ICAgIG1faW5saW5lU3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKGVsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOworICAgIH0K
KyAgICByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7Cit9CisKK3ZvaWQgRWxlbWVudEF0
dHJpYnV0ZURhdGE6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQoreworICAgIGlmICghbV9pbmxp
bmVTdHlsZURlY2wpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lubGluZVN0eWxlRGVjbC0+Y2xl
YXJQYXJlbnRFbGVtZW50KCk7CisgICAgbV9pbmxpbmVTdHlsZURlY2wgPSAwOworfQorCitQYXNz
UmVmUHRyPE5vZGU+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXROYW1lZEl0ZW0oY29uc3QgU3Ry
aW5nJiBuYW1lLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIEF0dHJpYnV0ZSogYSA9
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShlbGVtZW50
KSk7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYS0+Y3JlYXRl
QXR0cklmTmVlZGVkKGVsZW1lbnQpOworfQorCitQYXNzUmVmUHRyPE5vZGU+IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYywgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRy
aWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UoZWxlbWVudCkpOworICAg
IGlmICghYSkgeworICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKGEtPm5hbWUoKSwgZWMsIGVsZW1l
bnQpOworfQorCitQYXNzUmVmUHRyPE5vZGU+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXROYW1l
ZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3sKKyAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOworICAgIGlmICgh
YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGEtPmNyZWF0ZUF0dHJJZk5lZWRlZChl
bGVtZW50KTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVt
b3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKworICAgIHNpemVf
dCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpIHsKKyAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8QXR0cj4gYXR0ciA9IGF0dHJpYnV0ZUl0ZW0oaW5kZXgp
LT5jcmVhdGVBdHRySWZOZWVkZWQoZWxlbWVudCk7CisKKyAgICByZW1vdmVBdHRyaWJ1dGUoaW5k
ZXgsIGVsZW1lbnQpOworCisgICAgcmV0dXJuIGF0dHIucmVsZWFzZSgpOworfQorCitQYXNzUmVm
UHRyPE5vZGU+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpzZXROYW1lZEl0ZW0oTm9kZSogbm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50
IHx8ICFub2RlKSB7CisgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgLy8gTm90IG1lbnRpb25lZCBpbiBzcGVjOiB0aHJvdyBhIEhJRVJB
UkNIWV9SRVFVRVNUX0VSUk9SIGlmIHRoZSB1c2VyIHBhc3NlcyBpbiBhIG5vbi1hdHRyaWJ1dGUg
bm9kZS4KKyAgICBpZiAoIW5vZGUtPmlzQXR0cmlidXRlTm9kZSgpKSB7CisgICAgICAgIGVjID0g
SElFUkFSQ0hZX1JFUVVFU1RfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQXR0
ciogYXR0ciA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKTsKKworICAgIEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gYXR0ci0+YXR0cigpOworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0
ZW1JbmRleChhdHRyaWJ1dGUtPm5hbWUoKSk7CisgICAgQXR0cmlidXRlKiBvbGRBdHRyaWJ1dGUg
PSBpbmRleCAhPSBub3RGb3VuZCA/IGF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKKyAgICBpZiAo
b2xkQXR0cmlidXRlID09IGF0dHJpYnV0ZSkKKyAgICAgICAgcmV0dXJuIG5vZGU7IC8vIHdlIGtu
b3cgYWJvdXQgaXQgYWxyZWFkeQorCisgICAgLy8gSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2Vk
IGlmIG5vZGUgaXMgYW4gQXR0ciB0aGF0IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3Ro
ZXIgRWxlbWVudCBvYmplY3QuCisgICAgLy8gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBj
bG9uZSBBdHRyIG5vZGVzIHRvIHJlLXVzZSB0aGVtIGluIG90aGVyIGVsZW1lbnRzLgorICAgIGlm
IChhdHRyLT5vd25lckVsZW1lbnQoKSkgeworICAgICAgICBlYyA9IElOVVNFX0FUVFJJQlVURV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxBdHRyPiBvbGRBdHRy
OworICAgIGlmIChvbGRBdHRyaWJ1dGUpIHsKKyAgICAgICAgb2xkQXR0ciA9IG9sZEF0dHJpYnV0
ZS0+Y3JlYXRlQXR0cklmTmVlZGVkKGVsZW1lbnQpOworICAgICAgICByZXBsYWNlQXR0cmlidXRl
KGluZGV4LCBhdHRyaWJ1dGUsIGVsZW1lbnQpOworICAgIH0gZWxzZQorICAgICAgICBhZGRBdHRy
aWJ1dGUoYXR0cmlidXRlLCBlbGVtZW50KTsKKworICAgIHJldHVybiBvbGRBdHRyLnJlbGVhc2Uo
KTsKK30KKwogdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0Q2xhc3MoY29uc3QgU3RyaW5n
JiBjbGFzc05hbWUsIGJvb2wgc2hvdWxkRm9sZENhc2UpCiB7CiAgICAgbV9jbGFzc05hbWVzLnNl
dChjbGFzc05hbWUsIHNob3VsZEZvbGRDYXNlKTsKIH0KIAorUGFzc1JlZlB0cjxOb2RlPiBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6aXRlbSh1bnNpZ25lZCBpbmRleCwgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3sKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBhdHRyaWJ1dGVJdGVtKGluZGV4KS0+Y3JlYXRlQXR0cklmTmVlZGVkKGVsZW1l
bnQpOworfQorCitib29sIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjplcXVpdmFsZW50KGNvbnN0IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyKQorICAg
ICAgICByZXR1cm4gaXNFbXB0eSgpOworCisgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7Cisg
ICAgaWYgKGxlbiAhPSBvdGhlci0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBBdHRyaWJ1
dGUqIGF0dHIgPSBhdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBBdHRyaWJ1dGUqIG90aGVyQXR0
ciA9IG90aGVyLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHItPm5hbWUoKSk7CisgICAgICAgIGlmICgh
b3RoZXJBdHRyIHx8IGF0dHItPnZhbHVlKCkgIT0gb3RoZXJBdHRyLT52YWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphZGRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1dGU+
IHBycEF0dHJpYnV0ZSwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBSZWZQdHI8QXR0cmlidXRl
PiBhdHRyaWJ1dGUgPSBwcnBBdHRyaWJ1dGU7CisKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAg
ZWxlbWVudC0+d2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgbnVsbEF0b20s
IGF0dHJpYnV0ZS0+dmFsdWUoKSk7CisKKyAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKGF0dHJpYnV0
ZSk7CisgICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRyaWJ1dGUtPmF0dHIoKSkKKyAgICAgICAgYXR0
ci0+bV9lbGVtZW50ID0gZWxlbWVudDsKKworICAgIGlmIChlbGVtZW50KQorICAgICAgICBlbGVt
ZW50LT5kaWRNb2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlLmdldCgpKTsKK30KKwordm9pZCBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCwgRWxlbWVudCog
ZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7CisKKyAgICBSZWZQdHI8
QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZXNbaW5kZXhdOworCisgICAgaWYgKGVs
ZW1lbnQpCisgICAgICAgIGVsZW1lbnQtPndpbGxSZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLT5u
YW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7CisKKyAgICBpZiAoQXR0ciogYXR0ciA9IGF0dHJp
YnV0ZS0+YXR0cigpKQorICAgICAgICBhdHRyLT5tX2VsZW1lbnQgPSAwOworICAgIG1fYXR0cmli
dXRlcy5yZW1vdmUoaW5kZXgpOworCisgICAgaWYgKGVsZW1lbnQpCisgICAgICAgIGVsZW1lbnQt
PmRpZFJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUuZ2V0KCkpOworfQorCit2b2lkIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpjb3B5QXR0cmlidXRlc1RvVmVjdG9yKFZlY3RvcjxSZWZQdHI8QXR0cmli
dXRlPiA+JiBjb3B5KQoreworICAgIGNvcHkgPSBtX2F0dHJpYnV0ZXM7Cit9CisKK2lubGluZSB2
b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKQor
eworICAgIHNpemVfdCBzaXplID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0
cmlidXRlc1tpXS0+YXR0cigpKQorICAgICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKKyAg
ICB9Cit9CisKK3NpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbUlu
ZGV4U2xvd0Nhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0
ZUNhc2UpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisKKyAgICAvLyBD
b250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZlbHkgYW5kL29yIGZ1bGwgbmFtZXNw
YWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7CisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gbV9hdHRy
aWJ1dGVzW2ldLT5uYW1lKCk7CisgICAgICAgIGlmICghYXR0ck5hbWUuaGFzUHJlZml4KCkpIHsK
KyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlICYmIGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsIGF0dHJOYW1lLmxvY2FsTmFtZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBm
YXN0ZXIgdG8gZG8gdGhpcyBjb21wYXJpc29uIHdpdGhvdXQgY2FsbGluZyB0b1N0cmluZywgd2hp
Y2gKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIHRlbXBvcmFyeSBzdHJpbmcgYnkgY29uY2F0
ZW5hdGlvbi4gQnV0IHRoaXMgYnJhbmNoIGlzIG9ubHkgcmVhY2hlZAorICAgICAgICAgICAgLy8g
aWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGhhcyBhIHByZWZpeCwgd2hpY2ggaXMgcmFyZSBpbiBIVE1M
LgorICAgICAgICAgICAgaWYgKGVxdWFsUG9zc2libHlJZ25vcmluZ0Nhc2UobmFtZSwgYXR0ck5h
bWUudG9TdHJpbmcoKSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5vdEZvdW5kOworfQor
Cit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnRB
dHRyaWJ1dGVEYXRhJiBvdGhlciwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICAvLyBDbG9uZSBh
bGwgYXR0cmlidXRlcyBpbiB0aGUgb3RoZXIgbWFwLCBidXQgYXR0YWNoIHRvIG91ciBlbGVtZW50
LgorICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgYXNzaWdu
aW5nIHRoZSBtYXAgY2hhbmdlcyB0aGUgaWQgYXR0cmlidXRlLCB3ZSBuZWVkIHRvIGNhbGwgdXBk
YXRlSWQuCisgICAgQXR0cmlidXRlKiBvbGRJZCA9IGdldEF0dHJpYnV0ZUl0ZW0oZWxlbWVudC0+
ZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgIEF0dHJpYnV0ZSogbmV3SWQgPSBv
dGhlci5nZXRBdHRyaWJ1dGVJdGVtKGVsZW1lbnQtPmRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFt
ZSgpKTsKKworICAgIGlmIChvbGRJZCB8fCBuZXdJZCkKKyAgICAgICAgZWxlbWVudC0+dXBkYXRl
SWQob2xkSWQgPyBvbGRJZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdJZCA/IG5ld0lkLT52YWx1
ZSgpIDogbnVsbEF0b20pOworCisgICAgQXR0cmlidXRlKiBvbGROYW1lID0gZ2V0QXR0cmlidXRl
SXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKKyAgICBBdHRyaWJ1dGUqIG5ld05hbWUgPSBvdGhl
ci5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOworCisgICAgaWYgKG9sZE5h
bWUgfHwgbmV3TmFtZSkKKyAgICAgICAgZWxlbWVudC0+dXBkYXRlTmFtZShvbGROYW1lID8gb2xk
TmFtZS0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdOYW1lID8gbmV3TmFtZS0+dmFsdWUoKSA6IG51
bGxBdG9tKTsKKworICAgIGNsZWFyQXR0cmlidXRlcygpOworICAgIHVuc2lnbmVkIG5ld0xlbmd0
aCA9IG90aGVyLmxlbmd0aCgpOworICAgIG1fYXR0cmlidXRlcy5yZXNpemUobmV3TGVuZ3RoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspCisgICAgICAgIG1f
YXR0cmlidXRlc1tpXSA9IG90aGVyLm1fYXR0cmlidXRlc1tpXS0+Y2xvbmUoKTsKKworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdhc3RlZnVsLiBUaGUgY2xhc3MgbGlzdCBjb3VsZCBiZSBwcmVzZXJ2
ZWQgb24gYSBjb3B5LCBhbmQgd2UKKyAgICAvLyB3b3VsZG4ndCBoYXZlIHRvIHdhc3RlIHRpbWUg
cmVwYXJzaW5nIHRoZSBhdHRyaWJ1dGUuCisgICAgLy8gVGhlIGRlcml2ZWQgY2xhc3MsIEhUTUxO
YW1lZE5vZGVNYXAsIHdoaWNoIG1hbmFnZXMgYSBwYXJzZWQgY2xhc3MgbGlzdCBmb3IgdGhlIENM
QVNTIGF0dHJpYnV0ZSwKKyAgICAvLyB3aWxsIHVwZGF0ZSBpdHMgbWVtYmVyIHZhcmlhYmxlIHdo
ZW4gcGFyc2UgYXR0cmlidXRlIGlzIGNhbGxlZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbmV3TGVuZ3RoOyBpKyspCisgICAgICAgIGVsZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQobV9h
dHRyaWJ1dGVzW2ldLmdldCgpLCB0cnVlKTsKK30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6Y2xlYXJBdHRyaWJ1dGVzKCkKK3sKKyAgICBjbGVhckNsYXNzKCk7CisgICAgZGV0YWNoQXR0
cmlidXRlc0Zyb21FbGVtZW50KCk7CisgICAgbV9hdHRyaWJ1dGVzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcGxhY2VBdHRyaWJ1dGUoc2l6ZV90IGluZGV4LCBQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4gcHJwQXR0cmlidXRlLCBFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0
dHJpYnV0ZSA9IHBycEF0dHJpYnV0ZTsKKyAgICBBdHRyaWJ1dGUqIG9sZCA9IG1fYXR0cmlidXRl
c1tpbmRleF0uZ2V0KCk7CisKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgZWxlbWVudC0+d2ls
bE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgb2xkLT52YWx1ZSgpLCBhdHRyaWJ1
dGUtPnZhbHVlKCkpOworCisgICAgaWYgKEF0dHIqIGF0dHIgPSBvbGQtPmF0dHIoKSkKKyAgICAg
ICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKKyAgICBtX2F0dHJpYnV0ZXNbaW5kZXhdID0gYXR0cmli
dXRlOworICAgIGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCisgICAgICAgIGF0
dHItPm1fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgZWxl
bWVudC0+ZGlkTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS5nZXQoKSk7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKaW5kZXggMjAxMTZjNjJmMGM5ZmE2
OTBhY2ZiY2NlZDcyY2NlZGE2YjUzODkwOS4uYjllZDI0YmQwYzFkZDM5ZGJlZjBmNzRjZjI3ODFm
N2I0OGRjMTI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1
dGVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgK
QEAgLTI2LDggKzI2LDEwIEBACiAjaWZuZGVmIEVsZW1lbnRBdHRyaWJ1dGVEYXRhX2gKICNkZWZp
bmUgRWxlbWVudEF0dHJpYnV0ZURhdGFfaAogCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzUsNiArMzcsMTcgQEAgY2xhc3MgRWxlbWVudDsKIAogY2xhc3MgRWxlbWVudEF0
dHJpYnV0ZURhdGEgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEVsZW1lbnRBdHRy
aWJ1dGVEYXRhPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBF
bGVtZW50QXR0cmlidXRlRGF0YSgpKTsKKyAgICB9CisKKyAgICB+RWxlbWVudEF0dHJpYnV0ZURh
dGEoKTsKKworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2wo
KSB7IHJldHVybiBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsgfQorICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBlbnN1cmVJbmxpbmVTdHlsZURlY2woRWxlbWVudCopOworICAgIHZvaWQg
ZGVzdHJveUlubGluZVN0eWxlRGVjbCgpOworCiAgICAgdm9pZCBjbGVhckNsYXNzKCkgeyBtX2Ns
YXNzTmFtZXMuY2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Q2xhc3MoY29uc3QgU3RyaW5nJiBjbGFz
c05hbWUsIGJvb2wgc2hvdWxkRm9sZENhc2UpOwogICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IGNsYXNzTmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFtZXM7IH0KQEAgLTQyLDE4ICs1
NSwxMzAgQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRGb3JTdHlsZVJlc29s
dXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOyB9CiAgICAgdm9p
ZCBzZXRJZEZvclN0eWxlUmVzb2x1dGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKSB7IG1f
aWRGb3JTdHlsZVJlc29sdXRpb24gPSBuZXdJZDsgfQogCisgICAgUGFzc1JlZlB0cjxOb2RlPiBn
ZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBFbGVtZW50KikgY29uc3Q7CisgICAgUGFz
c1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiwgRWxlbWVudCopOworCisgICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW0o
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIEVsZW1lbnQqKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPE5v
ZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiwgRXhjZXB0aW9uQ29kZSYs
IEVsZW1lbnQqKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbShOb2RlKiwgRXhj
ZXB0aW9uQ29kZSYsIEVsZW1lbnQqKTsKKworICAgIFBhc3NSZWZQdHI8Tm9kZT4gaXRlbSh1bnNp
Z25lZCBpbmRleCwgRWxlbWVudCopIGNvbnN0OworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gIWxlbmd0aCgpOyB9CisKKyAgICAvLyBVc2VkIGR1cmluZyBwYXJzaW5nOiBvbmx5
IGluc2VydHMgaWYgbm90IGFscmVhZHkgdGhlcmUuIE5vIGVycm9yIGNoZWNraW5nIQorICAgIHZv
aWQgaW5zZXJ0QXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdBdHRyaWJ1dGUsIGJv
b2wgYWxsb3dEdXBsaWNhdGVzKQorICAgIHsKKyAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcyB8
fCAhZ2V0QXR0cmlidXRlSXRlbShuZXdBdHRyaWJ1dGUtPm5hbWUoKSkpCisgICAgICAgICAgICBh
ZGRBdHRyaWJ1dGUobmV3QXR0cmlidXRlLCAwKTsKKyAgICB9CisKKyAgICBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlc1tp
bmRleF0uZ2V0KCk7IH0KKyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OworICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgdm9pZCByZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0cmlidXRlcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGNhcGFjaXR5KTsgfQorCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBvdGhlcikgY29uc3Q7CisKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gbm8g
ZXJyb3IgY2hlY2tpbmcuCisgICAgdm9pZCBhZGRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1
dGU+LCBFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgs
IEVsZW1lbnQqKTsKKworICAgIHNpemVfdCBtYXBwZWRBdHRyaWJ1dGVDb3VudCgpIGNvbnN0Owor
CiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbGVtZW50OwogICAgIGZyaWVuZCBjbGFzcyBO
YW1lZE5vZGVNYXA7CiAKICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSgpCiAgICAgewogICAgIH0K
IAorICAgIHZvaWQgY29weUF0dHJpYnV0ZXNUb1ZlY3RvcihWZWN0b3I8UmVmUHRyPEF0dHJpYnV0
ZT4gPiYpOworCisgICAgdm9pZCBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKKyAgICBB
dHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3Vs
ZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OworICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
IGNvbnN0OworICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CisgICAg
dm9pZCBzZXRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiwgRWxlbWVudCop
OworICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CisgICAgdm9pZCByZXBsYWNlQXR0cmlidXRl
KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+LCBFbGVtZW50Kik7CisKICAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1faW5saW5lU3R5bGVEZWNsOwogICAg
IFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwogICAgIEF0b21pY1N0cmluZyBtX2lkRm9y
U3R5bGVSZXNvbHV0aW9uOworICAgIFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiwgND4gbV9hdHRy
aWJ1dGVzOwogfTsKIAoraW5saW5lIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBpZiAo
aW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUF0dHJpYnV0
ZShpbmRleCwgZWxlbWVudCk7Cit9CisKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
Cit7CisgICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAg
IGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRl
eF0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBzaXplX3QgRWxlbWVudEF0dHJp
YnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KSBjb25zdAoreworICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlc1tpXS0+bmFt
ZSgpLm1hdGNoZXMobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0
dXJuIG5vdEZvdW5kOworfQorCitpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpt
YXBwZWRBdHRyaWJ1dGVDb3VudCgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXR0cmlidXRlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV9hdHRyaWJ1dGVzW2ldLT5kZWNsKCkpCisgICAgICAgICAgICArK2NvdW50Owor
ICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAoreworICAgIHNpemVfdCBpbmRleCA9IGdl
dEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKKyAg
ICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaW5k
ZXhdLmdldCgpOworICAgIHJldHVybiAwOworfQorCisvLyBXZSB1c2UgYSBib29sZWFuIHBhcmFt
ZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSBzbyB0aGF0
IHRoZSBjYWxsZXIKKy8vIGNhbiB0dW5lIHRoZSBiZWhhdmlvciAoaGFzQXR0cmlidXRlIGlzIGNh
c2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmlidXRlIGlzIG5vdCkuCitpbmxpbmUgc2l6ZV90
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgYm9vbCBkb1Nsb3dDaGVjayA9IHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhl
IGF0dHJpYnV0ZSBleGlzdHMgYW5kIGl0cyBuYW1lIGV4YWN0bHkgbWF0Y2hlcy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUgPSBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKTsKKyAgICAgICAgaWYgKCFh
dHRyTmFtZS5oYXNQcmVmaXgoKSkgeworICAgICAgICAgICAgaWYgKG5hbWUgPT0gYXR0ck5hbWUu
bG9jYWxOYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgZG9TbG93Q2hlY2sgPSB0cnVlOworICAgIH0KKworICAgIGlmIChkb1Nsb3dD
aGVjaykKKyAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKG5hbWUs
IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOworICAgIHJldHVybiBub3RGb3VuZDsKK30KKwog
fQogCiAjZW5kaWYgLy8gRWxlbWVudEF0dHJpYnV0ZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRO
b2RlTWFwLmNwcAppbmRleCA3ZjYyMjk3NzUzNmE3ODUzOGNkNGJlNWExMzM4OTFlMjhlZjAzYzMz
Li5iYzAyM2UyZTQ4N2ZkOTZkYjNmNDhlODE0OWRhMTA4Mzk2ZGQ5ODBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTmFtZWROb2RlTWFwLmNwcApAQCAtMjUsMzEgKzI1LDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAKLSNpbmNsdWRlICJBdHRyLmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlN0eWxlZEVsZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShjb25zdCBF
bGVtZW50KiBlKQotewotICAgIHJldHVybiBlICYmIGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkgJiYgZS0+aXNIVE1MRWxlbWVudCgpOwotfQotCi1pbmxpbmUgdm9pZCBOYW1lZE5vZGVN
YXA6OmRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBt
X2F0dHJpYnV0ZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgIGlmIChBdHRyKiBhdHRyID0gbV9hdHRyaWJ1dGVzW2ldLT5hdHRyKCkpCi0g
ICAgICAgICAgICBhdHRyLT5tX2VsZW1lbnQgPSAwOwotICAgIH0KLX0KLQogdm9pZCBOYW1lZE5v
ZGVNYXA6OnJlZigpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CkBAIC02MiwxNTAgKzQyLDIx
IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpkZXJlZigpCiAgICAgbV9lbGVtZW50LT5kZXJlZigpOwog
fQogCi1OYW1lZE5vZGVNYXA6On5OYW1lZE5vZGVNYXAoKQotewotICAgIGRldGFjaEF0dHJpYnV0
ZXNGcm9tRWxlbWVudCgpOwotfQotCi1QYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6Z2V0
TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBBdHRyaWJ1dGUqIGEg
PSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVt
ZW50KSk7Ci0gICAgaWYgKCFhKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4g
YS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7Ci19Ci0KIFBhc3NSZWZQdHI8Tm9kZT4g
TmFtZWROb2RlTWFwOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldE5hbWVkSXRl
bShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQog
Ci1QYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQXR0cmlidXRlKiBhID0gZ2V0
QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkp
OwotICAgIGlmICghYSkgewotICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKGEtPm5hbWUo
KSwgZWMpOwotfQotCiBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJ
dGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSwgZWMpOwogfQogCi1Q
YXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpIGNvbnN0Ci17Ci0gICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRlSXRl
bShuYW1lKTsKLSAgICBpZiAoIWEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGEt
PmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwotfQotCi1QYXNzUmVmUHRyPE5vZGU+IE5h
bWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmICghbV9lbGVtZW50IHx8ICFub2RlKSB7Ci0gICAgICAgIGVjID0gTk9UX0ZPVU5E
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gTm90IG1lbnRpb25lZCBp
biBzcGVjOiB0aHJvdyBhIEhJRVJBUkNIWV9SRVFVRVNUX0VSUk9SIGlmIHRoZSB1c2VyIHBhc3Nl
cyBpbiBhIG5vbi1hdHRyaWJ1dGUgbm9kZQotICAgIGlmICghbm9kZS0+aXNBdHRyaWJ1dGVOb2Rl
KCkpIHsKLSAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICBBdHRyKiBhdHRyID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpOwot
Ci0gICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyLT5hdHRyKCk7Ci0gICAgc2l6ZV90IGlu
ZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KGF0dHJpYnV0ZS0+bmFtZSgpKTsKLSAgICBBdHRy
aWJ1dGUqIG9sZEF0dHJpYnV0ZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRlbShp
bmRleCkgOiAwOwotICAgIGlmIChvbGRBdHRyaWJ1dGUgPT0gYXR0cmlidXRlKQotICAgICAgICBy
ZXR1cm4gbm9kZTsgLy8gd2Uga25vdyBhYm91dCBpdCBhbHJlYWR5Ci0KLSAgICAvLyBJTlVTRV9B
VFRSSUJVVEVfRVJSOiBSYWlzZWQgaWYgbm9kZSBpcyBhbiBBdHRyIHRoYXQgaXMgYWxyZWFkeSBh
biBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9iamVjdC4KLSAgICAvLyBUaGUgRE9NIHVz
ZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIgbm9kZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3Ro
ZXIgZWxlbWVudHMuCi0gICAgaWYgKGF0dHItPm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIGVj
ID0gSU5VU0VfQVRUUklCVVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
UmVmUHRyPEF0dHI+IG9sZEF0dHI7Ci0gICAgaWYgKG9sZEF0dHJpYnV0ZSkgewotICAgICAgICBv
bGRBdHRyID0gb2xkQXR0cmlidXRlLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKLSAg
ICAgICAgcmVwbGFjZUF0dHJpYnV0ZShpbmRleCwgYXR0cmlidXRlKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0KLSAgICByZXR1cm4gb2xkQXR0ci5yZWxl
YXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW1O
UyhOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICByZXR1cm4gc2V0TmFtZWRJ
dGVtKG5vZGUsIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92
ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKLQotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJp
YnV0ZUl0ZW1JbmRleChuYW1lKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgZWMgPSBOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8QXR0cj4gYXR0ciA9IG1fYXR0cmlidXRlc1tpbmRleF0tPmNyZWF0ZUF0dHJJZk5lZWRl
ZChtX2VsZW1lbnQpOwotCi0gICAgcmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKLQotICAgIHJldHVy
biBhdHRyLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6Oml0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLT5jcmVh
dGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKLX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6OmNvcHlB
dHRyaWJ1dGVzVG9WZWN0b3IoVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4mIGNvcHkpCi17Ci0g
ICAgY29weSA9IG1fYXR0cmlidXRlczsKLX0KLQotc2l6ZV90IE5hbWVkTm9kZU1hcDo6Z2V0QXR0
cmlidXRlSXRlbUluZGV4U2xvd0Nhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZEln
bm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7
Ci0KLSAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZlbHkgYW5kL29y
IGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lID0gbV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCk7Ci0gICAgICAgIGlmICghYXR0ck5hbWUuaGFz
UHJlZml4KCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlICYm
IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsIGF0dHJOYW1lLmxvY2FsTmFtZSgpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXb3VsZCBiZSBmYXN0ZXIgdG8gZG8gdGhpcyBjb21wYXJpc29uIHdpdGhvdXQgY2FsbGluZyB0
b1N0cmluZywgd2hpY2gKLSAgICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIHRlbXBvcmFyeSBzdHJp
bmcgYnkgY29uY2F0ZW5hdGlvbi4gQnV0IHRoaXMgYnJhbmNoIGlzIG9ubHkgcmVhY2hlZAotICAg
ICAgICAgICAgLy8gaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGhhcyBhIHByZWZpeCwgd2hpY2ggaXMg
cmFyZSBpbiBIVE1MLgotICAgICAgICAgICAgaWYgKGVxdWFsUG9zc2libHlJZ25vcmluZ0Nhc2Uo
bmFtZSwgYXR0ck5hbWUudG9TdHJpbmcoKSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5v
dEZvdW5kOwotfQotCi12b2lkIE5hbWVkTm9kZU1hcDo6Y2xlYXJBdHRyaWJ1dGVzKCkKLXsKLSAg
ICBhdHRyaWJ1dGVEYXRhKCktPmNsZWFyQ2xhc3MoKTsKLSAgICBkZXRhY2hBdHRyaWJ1dGVzRnJv
bUVsZW1lbnQoKTsKLSAgICBtX2F0dHJpYnV0ZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBOYW1lZE5v
ZGVNYXA6OmRldGFjaEZyb21FbGVtZW50KCkKIHsKICAgICAvLyBUaGlzIGNhbid0IGhhcHBlbiBp
ZiB0aGUgaG9sZGVyIG9mIHRoZSBtYXAgaXMgSmF2YVNjcmlwdCwgYmVjYXVzZSB3ZSBtYXJrIHRo
ZQpAQCAtMjEzLDEzMCArNjQsNyBAQCB2b2lkIE5hbWVkTm9kZU1hcDo6ZGV0YWNoRnJvbUVsZW1l
bnQoKQogICAgIC8vIG9mIHRoYXQsIHdlIGNhbiBzaW1wbHkgY2xlYXIgYWxsIHRoZSBhdHRyaWJ1
dGVzIHRvIGF2b2lkIGFjY2Vzc2luZyBzdGFsZQogICAgIC8vIHBvaW50ZXJzIHRvIGRvIHRoaW5n
cyBsaWtlIGNyZWF0ZSBBdHRyIG9iamVjdHMuCiAgICAgbV9lbGVtZW50ID0gMDsKLSAgICBjbGVh
ckF0dHJpYnV0ZXMoKTsKLX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6OnNldEF0dHJpYnV0ZXMoY29u
c3QgTmFtZWROb2RlTWFwJiBvdGhlcikKLXsKLSAgICAvLyBjbG9uZSBhbGwgYXR0cmlidXRlcyBp
biB0aGUgb3RoZXIgbWFwLCBidXQgYXR0YWNoIHRvIG91ciBlbGVtZW50Ci0gICAgaWYgKCFtX2Vs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIGFzc2lnbmluZyB0aGUgbWFwIGNo
YW5nZXMgdGhlIGlkIGF0dHJpYnV0ZSwgd2UgbmVlZCB0byBjYWxsCi0gICAgLy8gdXBkYXRlSWQu
Ci0gICAgQXR0cmlidXRlKiBvbGRJZCA9IGdldEF0dHJpYnV0ZUl0ZW0obV9lbGVtZW50LT5kb2N1
bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgQXR0cmlidXRlKiBuZXdJZCA9IG90aGVy
LmdldEF0dHJpYnV0ZUl0ZW0obV9lbGVtZW50LT5kb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUo
KSk7Ci0KLSAgICBpZiAob2xkSWQgfHwgbmV3SWQpCi0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRl
SWQob2xkSWQgPyBvbGRJZC0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdJZCA/IG5ld0lkLT52YWx1
ZSgpIDogbnVsbEF0b20pOwotCi0gICAgQXR0cmlidXRlKiBvbGROYW1lID0gZ2V0QXR0cmlidXRl
SXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKLSAgICBBdHRyaWJ1dGUqIG5ld05hbWUgPSBvdGhl
ci5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOwotCi0gICAgaWYgKG9sZE5h
bWUgfHwgbmV3TmFtZSkKLSAgICAgICAgbV9lbGVtZW50LT51cGRhdGVOYW1lKG9sZE5hbWUgPyBv
bGROYW1lLT52YWx1ZSgpIDogbnVsbEF0b20sIG5ld05hbWUgPyBuZXdOYW1lLT52YWx1ZSgpIDog
bnVsbEF0b20pOwotCi0gICAgY2xlYXJBdHRyaWJ1dGVzKCk7Ci0gICAgdW5zaWduZWQgbmV3TGVu
Z3RoID0gb3RoZXIubGVuZ3RoKCk7Ci0gICAgbV9hdHRyaWJ1dGVzLnJlc2l6ZShuZXdMZW5ndGgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykKLSAgICAgICAg
bV9hdHRyaWJ1dGVzW2ldID0gb3RoZXIubV9hdHRyaWJ1dGVzW2ldLT5jbG9uZSgpOwotCi0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgd2FzdGVmdWwuICBUaGUgY2xhc3MgbGlzdCBjb3VsZCBiZSBwcmVz
ZXJ2ZWQgb24gYSBjb3B5LCBhbmQgd2UKLSAgICAvLyB3b3VsZG4ndCBoYXZlIHRvIHdhc3RlIHRp
bWUgcmVwYXJzaW5nIHRoZSBhdHRyaWJ1dGUuCi0gICAgLy8gVGhlIGRlcml2ZWQgY2xhc3MsIEhU
TUxOYW1lZE5vZGVNYXAsIHdoaWNoIG1hbmFnZXMgYSBwYXJzZWQgY2xhc3MgbGlzdCBmb3IgdGhl
IENMQVNTIGF0dHJpYnV0ZSwKLSAgICAvLyB3aWxsIHVwZGF0ZSBpdHMgbWVtYmVyIHZhcmlhYmxl
IHdoZW4gcGFyc2UgYXR0cmlidXRlIGlzIGNhbGxlZC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbmV3TGVuZ3RoOyBpKyspCi0gICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdl
ZChtX2F0dHJpYnV0ZXNbaV0uZ2V0KCksIHRydWUpOwotfQotCi12b2lkIE5hbWVkTm9kZU1hcDo6
YWRkQXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUpCi17Ci0gICAg
UmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gcHJwQXR0cmlidXRlOwotCi0gICAgaWYgKG1f
ZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT53aWxsTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0
ZS0+bmFtZSgpLCBudWxsQXRvbSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKLQotICAgIG1fYXR0cmli
dXRlcy5hcHBlbmQoYXR0cmlidXRlKTsKLSAgICBpZiAoQXR0ciogYXR0ciA9IGF0dHJpYnV0ZS0+
YXR0cigpKQotICAgICAgICBhdHRyLT5tX2VsZW1lbnQgPSBtX2VsZW1lbnQ7Ci0KLSAgICBpZiAo
bV9lbGVtZW50KQotICAgICAgICBtX2VsZW1lbnQtPmRpZE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1
dGUuZ2V0KCkpOwotfQotCi12b2lkIE5hbWVkTm9kZU1hcDo6cmVtb3ZlQXR0cmlidXRlKHNpemVf
dCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7Ci0KLSAgICBSZWZQdHI8
QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZXNbaW5kZXhdOwotCi0gICAgaWYgKG1f
ZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT53aWxsUmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0
ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwotCi0gICAgaWYgKEF0dHIqIGF0dHIgPSBh
dHRyaWJ1dGUtPmF0dHIoKSkKLSAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKLSAgICBtX2F0
dHJpYnV0ZXMucmVtb3ZlKGluZGV4KTsKLQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1f
ZWxlbWVudC0+ZGlkUmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS5nZXQoKSk7Ci19Ci0KLXZvaWQg
TmFtZWROb2RlTWFwOjpyZXBsYWNlQXR0cmlidXRlKHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxB
dHRyaWJ1dGU+IHBycEF0dHJpYnV0ZSkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7
Ci0KLSAgICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBwcnBBdHRyaWJ1dGU7Ci0gICAg
QXR0cmlidXRlKiBvbGQgPSBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOwotCi0gICAgaWYgKG1f
ZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT53aWxsTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0
ZS0+bmFtZSgpLCBvbGQtPnZhbHVlKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7Ci0KLSAgICBpZiAo
QXR0ciogYXR0ciA9IG9sZC0+YXR0cigpKQotICAgICAgICBhdHRyLT5tX2VsZW1lbnQgPSAwOwot
ICAgIG1fYXR0cmlidXRlc1tpbmRleF0gPSBhdHRyaWJ1dGU7Ci0gICAgaWYgKEF0dHIqIGF0dHIg
PSBhdHRyaWJ1dGUtPmF0dHIoKSkKLSAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gbV9lbGVtZW50
OwotCi0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT5kaWRNb2RpZnlBdHRy
aWJ1dGUoYXR0cmlidXRlLmdldCgpKTsKLX0KLQotYm9vbCBOYW1lZE5vZGVNYXA6Om1hcHNFcXVp
dmFsZW50KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXApIGNvbnN0Ci17Ci0gICAgaWYgKCFv
dGhlck1hcCkKLSAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBs
ZW4gPSBsZW5ndGgoKTsKLSAgICBpZiAobGVuICE9IG90aGVyTWFwLT5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47
IGkrKykgewotICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVJdGVtKGkpOwotICAg
ICAgICBBdHRyaWJ1dGUqIG90aGVyQXR0ciA9IG90aGVyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGF0
dHItPm5hbWUoKSk7Ci0gICAgICAgIGlmICghb3RoZXJBdHRyIHx8IGF0dHItPnZhbHVlKCkgIT0g
b3RoZXJBdHRyLT52YWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIE5h
bWVkTm9kZU1hcDo6ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkKLXsKLSAgICBpZiAoIWF0dHJpYnV0
ZURhdGEoKS0+bV9pbmxpbmVTdHlsZURlY2wpIHsKLSAgICAgICAgQVNTRVJUKG1fZWxlbWVudC0+
aXNTdHlsZWRFbGVtZW50KCkpOwotICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5
bGVEZWNsID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZUlubGluZShzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KSk7Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEo
KS0+bV9pbmxpbmVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNpbmcobV9lbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkgJiYgIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwotICAg
IH0KLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbC5nZXQoKTsK
LX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6OmRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKQotewotICAg
IGlmICghYXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlRGVjbCkKLSAgICAgICAgcmV0dXJu
OwotICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZURlY2wtPmNsZWFyUGFyZW50RWxl
bWVudCgpOwotICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZURlY2wgPSAwOworICAg
IGF0dHJpYnV0ZURhdGEoKS0+Y2xlYXJBdHRyaWJ1dGVzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAppbmRleCBmNTMwNDdjMzAwMTU2ZDI2
YTU2OWQyMzA3ZDQxZGZmMzU0MTVmYzlmLi42YTYxNzY1MjdmYTdhMDllYzk3YzFhYWE3MWU4OTMx
MTg4OWM2YTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCkBAIC0yNSwxMCArMjUsNyBA
QAogI2lmbmRlZiBOYW1lZE5vZGVNYXBfaAogI2RlZmluZSBOYW1lZE5vZGVNYXBfaAogCi0jaW5j
bHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRWxlbWVudEF0dHJpYnV0ZURhdGEuaCIKLSNp
bmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNzkgKzQxLDM3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOYW1lZE5vZGVNYXAoZWxlbWVudCkpOwogICAgIH0KIAot
ICAgIH5OYW1lZE5vZGVNYXAoKTsKLQogICAgIHZvaWQgcmVmKCk7CiAgICAgdm9pZCBkZXJlZigp
OwogCi0gICAgLy8gUHVibGljIERPTSBpbnRlcmZhY2UuCi0KLSAgICBQYXNzUmVmUHRyPE5vZGU+
IGdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5nZXROYW1lZEl0ZW0obmFtZSwgbV9lbGVt
ZW50KTsgfQorICAgIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+cmVt
b3ZlTmFtZWRJdGVtKG5hbWUsIGVjLCBtX2VsZW1lbnQpOyB9CiAKICAgICBQYXNzUmVmUHRyPE5v
ZGU+IGdldE5hbWVkSXRlbU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJp
bmcmIGxvY2FsTmFtZSkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0
ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Tm9kZT4gcmVt
b3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbShOb2RlKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+Z2V0TmFtZWRJdGVtKG5hbWUs
IG1fZWxlbWVudCk7IH0KKyAgICBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYXR0cmli
dXRlRGF0YSgpLT5yZW1vdmVOYW1lZEl0ZW0obmFtZSwgZWMsIG1fZWxlbWVudCk7IH0KKyAgICBQ
YXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbShOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5zZXROYW1lZEl0ZW0obm9kZSwgZWMsIG1fZWxl
bWVudCk7IH0KICAgICBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbU5TKE5vZGUqLCBFeGNl
cHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVmUHRyPE5vZGU+IGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
c2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9
Ci0KLSAgICAvLyBJbnRlcm5hbCBpbnRlcmZhY2UuCi0KLSAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0
ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0u
Z2V0KCk7IH0KLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OwotCi0gICAgdm9pZCBjb3B5QXR0cmlidXRlc1RvVmVjdG9yKFZl
Y3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+Jik7Ci0KLSAgICB2b2lkIHNocmlua1RvTGVuZ3RoKCkg
eyBtX2F0dHJpYnV0ZXMuc2hyaW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9Ci0gICAgdm9pZCByZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0cmlidXRlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGNhcGFjaXR5KTsgfQotCi0gICAgLy8gVXNlZCBkdXJpbmcgcGFy
c2luZzogb25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJlLiBObyBlcnJvciBjaGVja2lu
ZyEKLSAgICB2b2lkIGluc2VydEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0
cmlidXRlLCBib29sIGFsbG93RHVwbGljYXRlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9l
bGVtZW50KTsKLSAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcyB8fCAhZ2V0QXR0cmlidXRlSXRl
bShuZXdBdHRyaWJ1dGUtPm5hbWUoKSkpCi0gICAgICAgICAgICBhZGRBdHRyaWJ1dGUobmV3QXR0
cmlidXRlKTsKLSAgICB9Ci0KLSAgICBib29sIG1hcHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTm9k
ZU1hcCogb3RoZXJNYXApIGNvbnN0OwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvIG5vIGVy
cm9yIGNoZWNraW5nLgotICAgIHZvaWQgYWRkQXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRl
Pik7Ci0gICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAg
IHZvaWQgcmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCk7CisgICAgUGFzc1JlZlB0cjxOb2Rl
PiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPml0
ZW0oaW5kZXgsIG1fZWxlbWVudCk7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gYXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKTsgfQogCiAgICAgRWxlbWVudCogZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQogCi0gICAgc2l6ZV90IG1hcHBlZEF0dHJpYnV0
ZUNvdW50KCkgY29uc3Q7CisgICAgYm9vbCBtYXBzRXF1aXZhbGVudChjb25zdCBOYW1lZE5vZGVN
YXAqIG90aGVyTWFwKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmVxdWl2YWxlbnQo
b3RoZXJNYXAtPmF0dHJpYnV0ZURhdGEoKSk7IH0KIAogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVEYXRhKCkgeyByZXR1cm4gJm1fYXR0cmlidXRlRGF0YTsgfQogICAgIGNvbnN0
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gJm1f
YXR0cmlidXRlRGF0YTsgfQogCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGlu
ZVN0eWxlRGVjbCgpIHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZURlY2wu
Z2V0KCk7IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCk7Ci0gICAgdm9pZCBkZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7Ci0KIHByaXZhdGU6
CiAgICAgTmFtZWROb2RlTWFwKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIDogbV9lbGVtZW50
KGVsZW1lbnQpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZGV0YWNoQXR0cmlidXRlc0Zyb21F
bGVtZW50KCk7CiAgICAgdm9pZCBkZXRhY2hGcm9tRWxlbWVudCgpOwotICAgIEF0dHJpYnV0ZSog
Z2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSkgY29uc3Q7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7Ci0g
ICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKLSAgICB2b2lkIHNldEF0
dHJpYnV0ZXMoY29uc3QgTmFtZWROb2RlTWFwJik7Ci0gICAgdm9pZCBjbGVhckF0dHJpYnV0ZXMo
KTsKLSAgICB2b2lkIHJlcGxhY2VBdHRyaWJ1dGUoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEF0
dHJpYnV0ZT4pOwogCiAgICAgLy8gRklYTUU6IE5hbWVkTm9kZU1hcCBpcyBiZWluZyBicm9rZW4g
dXAgaW50byB0d28gY2xhc3Nlcywgb25lIGNvbnRhaW5pbmcgZGF0YQogICAgIC8vICAgICAgICBm
b3IgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVzLCBhbmQgb25lIGZvciBleHBvc3VyZSB0byB0aGUg
RE9NLgpAQCAtMTI0LDc2ICs3OSw4IEBAIHByaXZhdGU6CiAgICAgRWxlbWVudEF0dHJpYnV0ZURh
dGEgbV9hdHRyaWJ1dGVEYXRhOwogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwotICAgIFZlY3Rv
cjxSZWZQdHI8QXR0cmlidXRlPiwgND4gbV9hdHRyaWJ1dGVzOwogfTsKIAotaW5saW5lIEF0dHJp
YnV0ZSogTmFtZWROb2RlTWFwOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4
KG5hbWUpOwotICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIG1fYXR0
cmlidXRlc1tpbmRleF0uZ2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBzaXplX3Qg
TmFtZWROb2RlTWFwOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkgY29uc3QKLXsKLSAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChtX2F0dHJpYnV0ZXNbaV0t
Pm5hbWUoKS5tYXRjaGVzKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAg
IHJldHVybiBub3RGb3VuZDsKLX0KLQotaW5saW5lIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFwOjpn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRy
aWJ1dGVDYXNlKSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1J
bmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKLSAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpCi0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOwotICAg
IHJldHVybiAwOwotfQotCi0vLyBXZSB1c2UgYSBib29sZWFuIHBhcmFtZXRlciBpbnN0ZWFkIG9m
IGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSBzbyB0aGF0IHRoZSBjYWxsZXIKLS8v
IGNhbiB0dW5lIHRoZSBiZWhhdmlvciAoaGFzQXR0cmlidXRlIGlzIGNhc2Ugc2Vuc2l0aXZlIHdo
ZXJlYXMgZ2V0QXR0cmlidXRlIGlzIG5vdCkuCi1pbmxpbmUgc2l6ZV90IE5hbWVkTm9kZU1hcDo6
Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwot
ICAgIGJvb2wgZG9TbG93Q2hlY2sgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlOwotCi0gICAg
Ly8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgZXhpc3RzIGFuZCBp
dHMgbmFtZSBleGFjdGx5IG1hdGNoZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gbV9hdHRy
aWJ1dGVzW2ldLT5uYW1lKCk7Ci0gICAgICAgIGlmICghYXR0ck5hbWUuaGFzUHJlZml4KCkpIHsK
LSAgICAgICAgICAgIGlmIChuYW1lID09IGF0dHJOYW1lLmxvY2FsTmFtZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRvU2xvd0NoZWNr
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoZG9TbG93Q2hlY2spCi0gICAgICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKTsKLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLWlubGluZSB2b2lkIE5hbWVkTm9kZU1h
cDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCi17Ci0gICAgc2l6
ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwotICAgIGlmIChpbmRleCA9
PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQXR0cmlidXRlKGluZGV4
KTsKLX0KLQotaW5saW5lIHNpemVfdCBOYW1lZE5vZGVNYXA6Om1hcHBlZEF0dHJpYnV0ZUNvdW50
KCkgY29uc3QKLXsKLSAgICBzaXplX3QgY291bnQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hdHRyaWJ1dGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2F0dHJpYnV0
ZXNbaV0tPmRlY2woKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotICAgIHJldHVybiBj
b3VudDsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTmFtZWROb2Rl
TWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA3MzgwMDBmZWNkMzE0YWUwZGNiZWY3YTJhOWNkODEx
ZjU4MjUzNTNmLi4yMmFmODMxY2Y5MDA4ZjVjMzgyNzJhZGZhYjI5MjUxNmY0ODBmYTA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCkBAIC0xNzY1LDEzICsxNzY1LDEzIEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5v
ZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBp
ZiAoaXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9
IHRvRWxlbWVudCh0aGlzKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgTmFtZWROb2Rl
TWFwKiBvdGhlckF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQob3RoZXIpLT51cGRhdGVkQXR0cmlidXRl
cygpOworICAgICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IHRvRWxlbWVu
dCh0aGlzKS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICAgICAgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIG90aGVyQXR0cmlidXRlcyA9IHRvRWxlbWVudChvdGhlciktPnVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCk7CiAKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWF0dHJpYnV0ZXMtPm1hcHNF
cXVpdmFsZW50KG90aGVyQXR0cmlidXRlcykpCisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYmICFh
dHRyaWJ1dGVzLT5lcXVpdmFsZW50KG90aGVyQXR0cmlidXRlcykpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKG90aGVyQXR0cmlidXRlcyAmJiAhb3RoZXJBdHRyaWJ1
dGVzLT5tYXBzRXF1aXZhbGVudChhdHRyaWJ1dGVzKSkKKyAgICAgICAgaWYgKG90aGVyQXR0cmli
dXRlcyAmJiAhb3RoZXJBdHRyaWJ1dGVzLT5lcXVpdmFsZW50KGF0dHJpYnV0ZXMpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTE4MzEsNyArMTgzMSw3IEBAIGJv
b2wgTm9kZTo6aXNEZWZhdWx0TmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJTWF5YmVFbXB0eSkgY29uc3QKICAgICAgICAgICAgIGlmIChlbGVtLT5wcmVmaXgoKS5pc051
bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS0+bmFtZXNwYWNlVVJJKCkgPT0gbmFt
ZXNwYWNlVVJJOwogCi0gICAgICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW0t
PnVwZGF0ZWRBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRl
RGF0YSogYXR0cnMgPSBlbGVtLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpKSB7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVt
KGkpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTE5MTcsNyArMTkxNyw3IEBAIFN0cmluZyBO
b2RlOjpsb29rdXBOYW1lc3BhY2VVUkkoY29uc3QgU3RyaW5nICZwcmVmaXgpIGNvbnN0CiAgICAg
ICAgICAgICBpZiAoIWVsZW0tPm5hbWVzcGFjZVVSSSgpLmlzTnVsbCgpICYmIGVsZW0tPnByZWZp
eCgpID09IHByZWZpeCkKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS0+bmFtZXNwYWNlVVJJ
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0g
ZWxlbS0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgaWYgKEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRycyA9IGVsZW0tPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKysp
IHsKICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cnMtPmF0dHJpYnV0
ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTk3MSw3ICsxOTcxLDcgQEAgU3Ry
aW5nIE5vZGU6Omxvb2t1cE5hbWVzcGFjZVByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9uYW1l
c3BhY2VVUkksIGNvbnN0IEVsZW0KICAgICBpZiAob3JpZ2luYWxFbGVtZW50LT5sb29rdXBOYW1l
c3BhY2VVUkkocHJlZml4KCkpID09IF9uYW1lc3BhY2VVUkkpCiAgICAgICAgIHJldHVybiBwcmVm
aXgoKTsKICAgICAKLSAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IHRvRWxlbWVudCh0aGlz
KS0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgeworICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cnMgPSB0b0VsZW1lbnQodGhpcyktPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAg
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAg
ICAgICAgIApAQCAtMjExNCwxNyArMjExNCwxNyBAQCB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21w
YXJlRG9jdW1lbnRQb3NpdGlvbihOb2RlKiBvdGhlck5vZGUpCiAgICAgICAgIGNoYWluMi5hcHBl
bmQoYXR0cjIpOwogICAgIAogICAgIGlmIChhdHRyMSAmJiBhdHRyMiAmJiBzdGFydDEgPT0gc3Rh
cnQyICYmIHN0YXJ0MSkgewotICAgICAgICAvLyBXZSBhcmUgY29tcGFyaW5nIHR3byBhdHRyaWJ1
dGVzIG9uIHRoZSBzYW1lIG5vZGUuICBDcmF3bCBvdXIgYXR0cmlidXRlIG1hcAorICAgICAgICAv
LyBXZSBhcmUgY29tcGFyaW5nIHR3byBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIG5vZGUuIENyYXds
IG91ciBhdHRyaWJ1dGUgZGF0YQogICAgICAgICAvLyBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBoaXQg
Zmlyc3QuCi0gICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cjEtPm93bmVyRWxlbWVudCgp
LT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtYXAtPmxl
bmd0aCgpOworICAgICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGF0
dHIxLT5vd25lckVsZW1lbnQoKS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgLy8gSWYgbmVpdGhl
ciBvZiB0aGUgdHdvIGRldGVybWluaW5nIG5vZGVzIGlzIGEgY2hpbGQgbm9kZSBhbmQgbm9kZVR5
cGUgaXMgdGhlIHNhbWUgZm9yIGJvdGggZGV0ZXJtaW5pbmcgbm9kZXMsIHRoZW4gYW4gCiAgICAg
ICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgb3JkZXIgYmV0d2VlbiB0aGUgZGV0
ZXJtaW5pbmcgbm9kZXMgaXMgcmV0dXJuZWQuIFRoaXMgb3JkZXIgaXMgc3RhYmxlIGFzIGxvbmcg
YXMgbm8gbm9kZXMgb2YKICAgICAgICAgICAgIC8vIHRoZSBzYW1lIG5vZGVUeXBlIGFyZSBpbnNl
cnRlZCBpbnRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0IGNvbnRhaW5lci4gVGhpcyB3b3Vs
ZCBiZSB0aGUgY2FzZSwgZm9yIGV4YW1wbGUsIAogICAgICAgICAgICAgLy8gd2hlbiBjb21wYXJp
bmcgdHdvIGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgZWxlbWVudCwgYW5kIGluc2VydGluZyBvciBy
ZW1vdmluZyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgbWlnaHQgY2hhbmdlIAogICAgICAgICAgICAg
Ly8gdGhlIG9yZGVyIGJldHdlZW4gZXhpc3RpbmcgYXR0cmlidXRlcy4KLSAgICAgICAgICAgIEF0
dHJpYnV0ZSogYXR0ciA9IG1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgIEF0dHJp
YnV0ZSogYXR0ciA9IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAg
ICBpZiAoYXR0cjEtPmF0dHIoKSA9PSBhdHRyKQogICAgICAgICAgICAgICAgIHJldHVybiBET0NV
TUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQyB8IERPQ1VNRU5UX1BPU0lUSU9O
X0ZPTExPV0lORzsKICAgICAgICAgICAgIGlmIChhdHRyMi0+YXR0cigpID09IGF0dHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAppbmRleCAzMTFiZDQxMTdjZmY5ZTc0MGFmNjBiZmZjYjc5NmJmMDBjMzg5MDYwLi40MmE1
NzA0NTZkZjQwZTc0MTUxOTMzYWFjOWE1MTFmNjE5NWE4ZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTUz
LDYgKzUzLDcgQEAgY2xhc3MgRE9NU2V0dGFibGVUb2tlbkxpc3Q7CiBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q7CiBjbGFzcyBFbGVtZW50OworY2xhc3MgRWxl
bWVudEF0dHJpYnV0ZURhdGE7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50Q29udGV4dDsKIGNs
YXNzIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNw
cAppbmRleCAyNWYyY2Q4MDdkYjBkMTBmMjYwODM3ODY0OTYwNjQ5N2JhMGIzZTk3Li5kNzVmYmY3
OGM5NGI1NDFhZWFiM2E1YWM4Mzc0NjE5MDk5YTNjOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpjbGFz
c0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdDbGFzc1N0cmluZykKICAg
ICBzZXRIYXNDbGFzcyhoYXNDbGFzcyk7CiAgICAgaWYgKGhhc0NsYXNzKSB7CiAgICAgICAgIGNv
bnN0IGJvb2wgc2hvdWxkRm9sZENhc2UgPSBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKTsKLSAg
ICAgICAgZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5zZXRDbGFzcyhuZXdDbGFzc1N0cmluZywgc2hv
dWxkRm9sZENhc2UpOworICAgICAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpLT5zZXRD
bGFzcyhuZXdDbGFzc1N0cmluZywgc2hvdWxkRm9sZENhc2UpOwogICAgICAgICBpZiAoRE9NVG9r
ZW5MaXN0KiBjbGFzc0xpc3QgPSBvcHRpb25hbENsYXNzTGlzdCgpKQogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q2xhc3NMaXN0Kj4oY2xhc3NMaXN0KS0+cmVzZXQobmV3Q2xhc3NTdHJpbmcpOwog
ICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlRGF0YSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1N0eWxlZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50
LmgKaW5kZXggZDYxZjBhZmFmNGViMmJmODEwNGQzMDI5NjdiMGZkNDY2NWRiZGIwMS4uY2U2YTNj
YWZjZTc3NTljYjI5MDdjZmQzN2QyNzBmMGM0MjU2NjAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVk
RWxlbWVudC5oCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIFN0eWxlZEVsZW1lbnQgOiBwdWJsaWMg
RWxlbWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudCgpOwogCi0gICAg
c2l6ZV90IG1hcHBlZEF0dHJpYnV0ZUNvdW50KCkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlTWFw
KCkgPyBhdHRyaWJ1dGVNYXAoKS0+bWFwcGVkQXR0cmlidXRlQ291bnQoKSA6IDA7IH0KKyAgICBz
aXplX3QgbWFwcGVkQXR0cmlidXRlQ291bnQoKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRh
KCkgPyBhdHRyaWJ1dGVEYXRhKCktPm1hcHBlZEF0dHJpYnV0ZUNvdW50KCkgOiAwOyB9CiAgICAg
Ym9vbCBpc01hcHBlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5IHJlcyA9IGVOb25lOyBtYXBUb0VudHJ5KG5hbWUsIHJlcyk7
IHJldHVybiByZXMgIT0gZU5vbmU7IH0KIAogICAgIHZvaWQgYWRkQ1NTTGVuZ3RoKEF0dHJpYnV0
ZSosIGludCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CkBAIC01OCw4ICs1OCw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGFk
ZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2b2lkIGludmFsaWRh
dGVTdHlsZUF0dHJpYnV0ZSgpOwogCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlu
bGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZU1hcCgpID8gYXR0cmlidXRl
TWFwKCktPmlubGluZVN0eWxlRGVjbCgpIDogMDsgfQotICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVN
YXAoKS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7IH0KKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogaW5saW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgp
ID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZURlY2woKSA6IDA7IH0KKyAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkgeyByZXR1cm4gZW5z
dXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2wodGhpcyk7IH0KICAgICB2
aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgT1ZFUlJJREUgeyByZXR1cm4gZW5z
dXJlSW5saW5lU3R5bGVEZWNsKCk7IH0KIAogICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNs
YXNzTmFtZXMoKSBjb25zdDsKQEAgLTkyLDggKzkyLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
ZGVzdHJveUlubGluZVN0eWxlRGVjbCgpCiAgICAgewotICAgICAgICBpZiAoYXR0cmlidXRlTWFw
KCkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVNYXAoKS0+ZGVzdHJveUlubGluZVN0eWxlRGVjbCgp
OworICAgICAgICBpZiAoYXR0cmlidXRlRGF0YSgpKQorICAgICAgICAgICAgYXR0cmlidXRlRGF0
YSgpLT5kZXN0cm95SW5saW5lU3R5bGVEZWNsKCk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA0MzgyMGM0YzJkOWU4NTQ0
OGM1ZDdlNDYyOTNmMGMxOWJiY2IyNzljLi4zNTJiNDUyY2YxOTk5NmI3ZWUxOWZiNTU1M2E3ODQ0
OWYzNjFhMmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcApAQCAtNzMsOCArNzMsOCBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3Qg
Tm9kZSAqbm9kZSkKIGVudW0gU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHsgQWxsb3dOb25F
bXB0eVN0eWxlQXR0cmlidXRlLCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkgfTsKIHN0YXRp
YyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxl
bWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0
cmlidXRlQmVFbXB0eSkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGVsZW1lbnQtPnVwZGF0
ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKCFtYXAgfHwgbWFwLT5pc0VtcHR5KCkpCisgICAgRWxl
bWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRl
RGF0YSgpOworICAgIGlmICghYXR0cmlidXRlcyB8fCBhdHRyaWJ1dGVzLT5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgdW5zaWduZWQgbWF0Y2hlZEF0dHJpYnV0ZXMgPSAw
OwpAQCAtODQsOCArODQsOCBAQCBzdGF0aWMgYm9vbCBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxl
QXR0cmlidXRlKGNvbnN0IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFNobwogICAgICAgICB8fCAh
ZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgfHwgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkt
PmlzRW1wdHkoKSkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKLSAgICBBU1NFUlQo
bWF0Y2hlZEF0dHJpYnV0ZXMgPD0gbWFwLT5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1hdGNoZWRB
dHRyaWJ1dGVzID09IG1hcC0+bGVuZ3RoKCk7CisgICAgQVNTRVJUKG1hdGNoZWRBdHRyaWJ1dGVz
IDw9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWF0Y2hlZEF0dHJpYnV0ZXMg
PT0gYXR0cmlidXRlcy0+bGVuZ3RoKCk7CiB9CiAKIGJvb2wgaXNTdHlsZVNwYW5PclNwYW5XaXRo
T25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCkBAIC0xMDgsMTAgKzEw
OCwxMCBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBOb2RlICpub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBFbGVtZW50ICplbGVtID0gc3RhdGljX2Nh
c3Q8Y29uc3QgRWxlbWVudCAqPihub2RlKTsKLSAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IGVsZW0t
PnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKCFtYXApCisgICAgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIGF0dHJpYnV0ZXMgPSBlbGVtLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIGlm
ICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1hcC0+aXNF
bXB0eSgpIHx8IChtYXAtPmxlbmd0aCgpID09IDEgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNz
QXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMt
PmlzRW1wdHkoKSB8fCAoYXR0cmlidXRlcy0+bGVuZ3RoKCkgPT0gMSAmJiBlbGVtLT5nZXRBdHRy
aWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpKTsKIH0KIAogc3RhdGlj
IFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRm9udEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDdlNTQ0MWQzYjU4
YjA3OGZlNTYyMWM5Y2EzZjUyZDI2M2M1ZGJjZDIuLmUzY2U0N2YzYjcyNDJjNzNlZGQ1NWFhMGRk
MWMxMzFjNmY2N2Y5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAK
QEAgLTgxNyw4ICs4MTcsOCBAQCBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bh
bk9ySFRNTEVxdWl2YWxlbnQoY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1lbgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBlbGVtZW50LT5h
dHRyaWJ1dGVNYXAoKTsKLSAgICBpZiAoIWF0dHJpYnV0ZU1hcCB8fCBhdHRyaWJ1dGVNYXAtPmlz
RW1wdHkoKSkKKyAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVs
ZW1lbnQtPmF0dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZXMgfHwgYXR0cmlidXRl
cy0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZWxlbWVudElzU3Bhbk9yRWxlbWVudEVxdWl2
YWxlbnQ7IC8vIHNwYW4sIGIsIGV0Yy4uLiB3aXRob3V0IGFueSBhdHRyaWJ1dGVzCiAKICAgICB1
bnNpZ25lZCBtYXRjaGVkQXR0cmlidXRlcyA9IDA7CkBAIC04NDYsOCArODQ2LDggQEAgYm9vbCBF
ZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KGNvbnN0IEhU
TUxFbGVtZW50KiBlbGVtZW4KICAgICB9CiAKICAgICAvLyBmb250IHdpdGggY29sb3IgYXR0cmli
dXRlLCBzcGFuIHdpdGggc3R5bGUgYXR0cmlidXRlLCBldGMuLi4KLSAgICBBU1NFUlQobWF0Y2hl
ZEF0dHJpYnV0ZXMgPD0gYXR0cmlidXRlTWFwLT5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIG1hdGNo
ZWRBdHRyaWJ1dGVzID49IGF0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CisgICAgQVNTRVJUKG1hdGNo
ZWRBdHRyaWJ1dGVzIDw9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWF0Y2hl
ZEF0dHJpYnV0ZXMgPj0gYXR0cmlidXRlcy0+bGVuZ3RoKCk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0
eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgU2hvdWxkUHJl
c2VydmVXcml0aW5nRGlyZWN0aW9uIHNob3VsZFByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuY3BwCmluZGV4IGU2NDZiNTFmMjJhYWVhODFkN2NmMDdkMzczZTk4OGJkNjkx
MzU2NjkuLjIxOTM4MWEyNDczODUxOWNkZDlkYmI5YzJiMTk1ZmY3M2NiMzYwNzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcApAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgRWxlbWVudCogaGlnaGVzdFZp
c3VhbGx5RXF1aXZhbGVudERpdkJlbG93Um9vdChFbGVtZW50KiBzdGFydEJsb2NrKQogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIGEgcm9vdCBub2RlIChpZiBpdCBoYXBwZW5zIHRvIGJl
IGEgZGl2LCBlLmcuLCBpbiBhIGRvY3VtZW50IGZyYWdtZW50KSBiZWNhdXNlIHRoZXJlIGFyZSBu
bwogICAgIC8vIHNpYmxpbmdzIGZvciB1cyB0byBhcHBlbmQgdG8uCiAgICAgd2hpbGUgKCFjdXJC
bG9jay0+bmV4dFNpYmxpbmcoKSAmJiBjdXJCbG9jay0+cGFyZW50RWxlbWVudCgpLT5oYXNUYWdO
YW1lKGRpdlRhZykgJiYgY3VyQmxvY2stPnBhcmVudEVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGN1ckJsb2NrLT5wYXJlbnRF
bGVtZW50KCktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhKiBhdHRyaWJ1dGVzID0gY3VyQmxvY2stPnBhcmVudEVsZW1lbnQoKS0+dXBkYXRlZEF0dHJp
YnV0ZURhdGEoKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgIWF0dHJpYnV0ZXMtPmlzRW1w
dHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJCbG9jayA9IGN1ckJsb2NrLT5w
YXJlbnRFbGVtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1
cEFjY3VtdWxhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwCmluZGV4IDUyMjZiMjE0YzI1ODExNzYwOTM1YzU2Njk2NGU3NjMwZjAyZjlkMTguLjY0
NWFkN2RhOTAwN2I1ZjQ1NDY1ODY5NTkwZDIyNGRhN2I3ZTZlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVs
ZW1lbnQqIGVsZW1lbnQsIE5hbWUKIHsKICAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwg
bmFtZXNwYWNlcyk7CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51
cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVz
ID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAoYXR0cmlidXRlcykg
ewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggMjhjYzAyOWQwMWIwNTk5MDI0ODVmMTA2YTk0
MDUyMmQwZTJiNDcxOC4uMjRlY2M2YzMwYzQyNmJmN2YwNGMzMjU2MzEzZGVkYTk0ZmQ5YmEwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTExNDksMjEgKzExNDks
MTkgQEAgYm9vbCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2Rl
KiBub2RlKQogCiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUqIGZpcnN0LCBj
b25zdCBOb2RlKiBzZWNvbmQpCiB7Ci0gICAgLy8gY2hlY2sgdGhhdCB0YWcgbmFtZSBhbmQgYWxs
IGF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzIGFyZSBpZGVudGljYWwKLQogICAgIGlmICghZmly
c3QtPmlzRWxlbWVudE5vZGUoKSB8fCAhc2Vjb25kLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdG9FbGVtZW50KGZpcnN0KS0+dGFnUU5hbWUoKS5t
YXRjaGVzKHRvRWxlbWVudChzZWNvbmQpLT50YWdRTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgTmFtZWROb2RlTWFwKiBmaXJzdE1hcCA9IHRvRWxlbWVudChmaXJzdCktPnVw
ZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgTmFtZWROb2RlTWFwKiBzZWNvbmRNYXAgPSB0b0VsZW1l
bnQoc2Vjb25kKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0
YSogZmlyc3RBdHRyaWJ1dGVzID0gdG9FbGVtZW50KGZpcnN0KS0+dXBkYXRlZEF0dHJpYnV0ZURh
dGEoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogc2Vjb25kQXR0cmlidXRlcyA9IHRvRWxl
bWVudChzZWNvbmQpLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogCi0gICAgaWYgKGZpcnN0TWFw
KQotICAgICAgICByZXR1cm4gZmlyc3RNYXAtPm1hcHNFcXVpdmFsZW50KHNlY29uZE1hcCk7Ci0g
ICAgaWYgKHNlY29uZE1hcCkKLSAgICAgICAgcmV0dXJuIHNlY29uZE1hcC0+bWFwc0VxdWl2YWxl
bnQoZmlyc3RNYXApOworICAgIGlmIChmaXJzdEF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBm
aXJzdEF0dHJpYnV0ZXMtPmVxdWl2YWxlbnQoc2Vjb25kQXR0cmlidXRlcyk7CisgICAgaWYgKHNl
Y29uZEF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBzZWNvbmRBdHRyaWJ1dGVzLT5lcXVpdmFs
ZW50KGZpcnN0QXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAppbmRleCBhNTQ4MmFmMjM0YjY0YmYzMDJkZGE5YzFiMjcxOTg5NTRjOTA3
YjFlLi4zYWQ5ZjZmZGU1MTBjMzAwOGQxYzFkM2RhY2EwY2Q2Nzc4Y2ZlNDE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCkBAIC0xMDIsMTcgKzEwMiwxNyBAQCBzdGF0aWMgdm9pZCBjb21w
bGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKQogCiAgICAgTm9kZSog
ZW5kID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAgIGZvciAoTm9kZSogbiA9IG5v
ZGU7IG4gIT0gZW5kOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChu
LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBl
LT51cGRhdGVkQXR0cmlidXRlcygpOwotICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0
cmlidXRlcy0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0
dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmlzVVJM
QXR0cmlidXRlKGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5k
KEF0dHJpYnV0ZUNoYW5nZShlLCBhdHRyaWJ1dGUtPm5hbWUoKSwgS1VSTChwYXJzZWRCYXNlVVJM
LCBhdHRyaWJ1dGUtPnZhbHVlKCkpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAg
IGlmICghbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAg
ICAgICAgaWYgKCFhdHRyaWJ1dGVzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgIGlmIChl
LT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKQorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBw
ZW5kKEF0dHJpYnV0ZUNoYW5nZShlLCBhdHRyaWJ1dGUtPm5hbWUoKSwgS1VSTChwYXJzZWRCYXNl
VVJMLCBhdHRyaWJ1dGUtPnZhbHVlKCkpLnN0cmluZygpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudAogICAgIGNvbnN0IGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgp
OwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKIAotICAgIE5hbWVkTm9kZU1h
cCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVu
dEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0
YSgpOwogICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVz
LT5sZW5ndGgoKSA6IDA7CiAgICAgY29uc3QgYm9vbCBzaG91bGRBbm5vdGF0ZU9yRm9yY2VJbmxp
bmUgPSBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgKHNob3VsZEFubm90YXRlKCkgfHwgYWRk
RGlzcGxheUlubGluZSk7CiAgICAgY29uc3QgYm9vbCBzaG91bGRPdmVycmlkZVN0eWxlQXR0ciA9
IHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSB8fCBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUo
ZWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAppbmRleCAz
MDlhYWZlMDU1YTNhMWJmNGY0NWIxNWVmOTJiMTI3NDUxODhmMDRlLi4zM2VkZjYwNDM2NGU0YjIx
MDljMTc2MzExMjExYmIzMmVkOTliYmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIAogdm9pZCBIVE1MRW1iZWRFbGVt
ZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVz
ID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmli
dXRlcyA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmlu
ZGV4IDQxM2MxMjc3Y2MxMTM4OTM0NDJhZGE1YjZjOTgxMTZjZjE4MGZlN2QuLjNhMWZiZmU3ODEz
NDE4N2FiODc2N2I3YTVhM2Q5OTc1MWZhOTI1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcApAQCAtNTQ1LDEzICs1NDUsMTMgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50Ojp1cGRhdGVUeXBlKCkKICAgICAgICAgcmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJ
Zk5lZWRlZCgpOwogCiAgICAgaWYgKGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCAhPSBtX2lucHV0
VHlwZS0+c2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygpKSB7Ci0gICAgICAg
IE5hbWVkTm9kZU1hcCogbWFwID0gYXR0cmlidXRlTWFwKCk7Ci0gICAgICAgIEFTU0VSVChtYXAp
OwotICAgICAgICBpZiAoQXR0cmlidXRlKiBoZWlnaHQgPSBtYXAtPmdldEF0dHJpYnV0ZUl0ZW0o
aGVpZ2h0QXR0cikpCisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0g
YXR0cmlidXRlRGF0YSgpOworICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyk7CisgICAgICAgIGlm
IChBdHRyaWJ1dGUqIGhlaWdodCA9IGF0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0oaGVpZ2h0
QXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGhlaWdodCwgZmFsc2UpOwotICAg
ICAgICBpZiAoQXR0cmlidXRlKiB3aWR0aCA9IG1hcC0+Z2V0QXR0cmlidXRlSXRlbSh3aWR0aEF0
dHIpKQorICAgICAgICBpZiAoQXR0cmlidXRlKiB3aWR0aCA9IGF0dHJpYnV0ZXMtPmdldEF0dHJp
YnV0ZUl0ZW0od2lkdGhBdHRyKSkKICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQod2lkdGgs
IGZhbHNlKTsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYWxpZ24gPSBtYXAtPmdldEF0dHJpYnV0
ZUl0ZW0oYWxpZ25BdHRyKSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYWxpZ24gPSBhdHRyaWJ1
dGVzLT5nZXRBdHRyaWJ1dGVJdGVtKGFsaWduQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVD
aGFuZ2VkKGFsaWduLCBmYWxzZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwCmluZGV4IDU5MGQ2OWI5OGIyNGM5NmI3MDc0MTFjYjVkODcwMjNhM2U5
ODljMjMuLjdlMGJkMGI5NGQ5MjM3YjY4NmVmNjJlNGI4MWQ0NTQ1ODNkNjJmNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAg
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyYW1ldGVyc0ZvclBsdWdpbihWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgVmVjdG9yPFMKICAgICB9CiAgICAgCiAgICAgLy8gVHVybiB0aGUgYXR0
cmlidXRlcyBvZiB0aGUgPG9iamVjdD4gZWxlbWVudCBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92
ZXJyaWRlIDxwYXJhbT4gdmFsdWVzLgotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHVw
ZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMg
PSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAgIGlmIChhdHRyaWJ1dGVzKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CiAg
ICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCmluZGV4IGFhMjI4YmMzMTY2
M2FiMDgyYTMyMDIyYjg0ZTFjZTNlYjA5YmZhYzEuLjMwYTk3OWMyYzZiZWRiY2U1YmE4YmE2ZWFk
MjdkNDZlMWU0NWMyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBhcmFt
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNw
cApAQCAtNjYsNyArNjYsNyBAQCB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIGJvb2wgSFRNTFBhcmFtRWxlbWVudDo6aXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdAogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
dmFsdWVBdHRyICYmIGhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICBBdHRyaWJ1dGUqIG5hbWVB
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVNYXAoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lQXR0cik7Cisg
ICAgICAgIEF0dHJpYnV0ZSogbmFtZUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0
cmlidXRlSXRlbShuYW1lQXR0cik7CiAgICAgICAgIGlmIChuYW1lQXR0cmlidXRlKSB7CiAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gbmFtZUF0dHJpYnV0ZS0+dmFsdWUo
KTsKICAgICAgICAgICAgIGlmIChpc1VSTFBhcmFtZXRlcih2YWx1ZSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggMGVl
ODlmMTUyNTAzMjgxMjNjN2YwNDE4NjUyYzE4ZTM0OTgzMjAzMS4uNDhjNTg0YjZhZDQwMWY3ZjM5
ZWVhMTAzNzM4MWMwNWFiZTNlZDA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZO
ZWVkZWQoKQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRh
Z0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBSZWZQdHI8SFRNTEh0
bWxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7
Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VBdHRyaWJ1dGVz
KCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50LT5wYXJzZXJT
ZXRBdHRyaWJ1dGVEYXRhKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uKTsKICAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBlbGVtZW50
KTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0bWxFbGVtZW50KGVsZW1lbnQpOwogCkBA
IC0yMDgsNyArMjA4LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1
dGVzRnJvbVRva2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJgogICAgIGlmICghdG9rZW4u
YXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZXMgPSBlbGVtZW50LT5lbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0dHJpYnV0
ZURhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygp
LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gdG9rZW4u
YXR0cmlidXRlcygpLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMt
PmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmlidXRlLT5uYW1lKCkpKQpAQCAtMzM2LDcgKzMzNiw3IEBA
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKIHsKICAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IGVsZW1lbnQg
PSBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKHNjcmlwdFRhZywgY3VycmVudE5vZGUoKS0+ZG9j
dW1lbnQoKSwgdHJ1ZSk7CiAgICAgaWYgKG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID09
IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLSAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0
cmlidXRlTWFwKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKTsKKyAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlRGF0YSh0b2tlbi50
YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0
YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudCk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVz
aChlbGVtZW50LnJlbGVhc2UoKSk7CiB9CkBAIC0zOTksNyArMzk5LDcgQEAgUGFzc1JlZlB0cjxF
bGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9r
ZW4mIHRva2VuLAogewogICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4u
bmFtZSgpLCBuYW1lc3BhY2VVUkkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3Vy
cmVudE5vZGUoKS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCB0cnVlKTsKLSAg
ICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwg
bV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNldEF0
dHJpYnV0ZURhdGEodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24pOwogICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKIH0KIApAQCAtNDEwLDcg
KzQxMCw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0
ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rCiAgICAgLy8gaGF2ZSB0byBwYXNzIHRo
ZSBjdXJyZW50IGZvcm0gZWxlbWVudC4gIFdlIHNob3VsZCByZXdvcmsgZm9ybSBhc3NvY2lhdGlv
bgogICAgIC8vIHRvIG9jY3VyIGFmdGVyIGNvbnN0cnVjdGlvbiB0byBhbGxvdyBiZXR0ZXIgY29k
ZSBzaGFyaW5nIGhlcmUuCiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVu
dEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KHRhZ05hbWUsIGN1cnJlbnROb2RlKCktPmRvY3Vt
ZW50KCksIGZvcm0oKSwgdHJ1ZSk7Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlTWFw
KHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsK
KyAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVEYXRhKHRva2VuLnRha2VBdHRyaWJ1dGVz
KCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBBU1NFUlQoZWxlbWVudC0+
aXNIVE1MRWxlbWVudCgpKTsKICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CkBAIC00
MjMsMTcgKzQyMywxNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpjcmVhdGVIVE1MRWxlbWVudEZyb21FbGVtZW50UmVjb3JkKEhUTQogbmFtZXNwYWNlIHsKIAog
Ly8gRklYTUU6IE1vdmUgdGhpcyBmdW5jdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgotaW5s
aW5lIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBjbG9uZUF0dHJpYnV0ZXMoRWxlbWVudCogZWxl
bWVudCkKK2lubGluZSBQYXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjbG9uZUF0dHJp
YnV0ZXMoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMg
PSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAo
IWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgT3duUHRyPE5hbWVk
Tm9kZU1hcD4gbmV3QXR0cmlidXRlcyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7CisgICAgT3du
UHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBuZXdBdHRyaWJ1dGVzID0gRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+
bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0
ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGNsb25lID0g
QXR0cmlidXRlOjpjcmVhdGVNYXBwZWQoYXR0cmlidXRlLT5uYW1lKCksIGF0dHJpYnV0ZS0+dmFs
dWUoKSk7Ci0gICAgICAgIG5ld0F0dHJpYnV0ZXMtPmFkZEF0dHJpYnV0ZShjbG9uZSk7CisgICAg
ICAgIG5ld0F0dHJpYnV0ZXMtPmFkZEF0dHJpYnV0ZShjbG9uZSwgMCk7CiAgICAgfQogICAgIHJl
dHVybiBuZXdBdHRyaWJ1dGVzLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5kZXggZjMz
MWFmN2U3MGI2YjVkYzVkMTlhODE0N2JlN2EyODRiM2U2MjlkZS4uMjFlMmIzNDc3NDMxNDAxMDMz
MGUyNWM3YzFiOTRjZWY5NjRlNWMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKQEAgLTQyLDcgKzQyLDcg
QEAgc3RhdGljIGNvbnN0IHNpemVfdCBrTm9haHNBcmtDYXBhY2l0eSA9IDM7CiAKIHN0YXRpYyBp
bmxpbmUgc2l6ZV90IGF0dHJpYnV0ZUNvdW50KEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpID8gZWxlbWVudC0+YXR0cmlidXRlTWFwKCktPmxl
bmd0aCgpIDogMDsKKyAgICByZXR1cm4gZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID8gZWxlbWVu
dC0+YXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKSA6IDA7CiB9CiAKIEhUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3Q6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QoKQpAQCAtMTc4LDE4ICsxNzgsMTgg
QEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fya0NvbmRpdGlv
bihFbGVtZW50KiBuZXdFbGVtZW50KQogICAgIFZlY3RvcjxFbGVtZW50Kj4gcmVtYWluaW5nQ2Fu
ZGlkYXRlczsKICAgICByZW1haW5pbmdDYW5kaWRhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Y2FuZGlkYXRlcy5zaXplKCkpOwogCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBu
ZXdFbGVtZW50LT5hdHRyaWJ1dGVNYXAoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0
cmlidXRlcyA9IG5ld0VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKTsKICAgICBzaXplX3QgbmV3RWxl
bWVudEF0dHJpYnV0ZUNvdW50ID0gYXR0cmlidXRlQ291bnQobmV3RWxlbWVudCk7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0VsZW1lbnRBdHRyaWJ1dGVDb3VudDsgKytpKSB7Ci0g
ICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU1hcC0+YXR0cmli
dXRlSXRlbShpKS0+bmFtZSgpOworICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUg
PSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLT5uYW1lKCk7CiAgICAgICAgIEF0b21pY1N0
cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IG5ld0VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYXR0cmli
dXRlTmFtZSk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBjYW5kaWRhdGVzLnNp
emUoKTsgKytqKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBjYW5kaWRhdGUgPSBjYW5kaWRhdGVz
W2pdOwogCiAgICAgICAgICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBhbHJlYWR5IGhh
dmUgYmVlbiBjaGVja2VkIGJ5IHRyeVRvRW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5Lgot
ICAgICAgICAgICAgQVNTRVJUKG5ld0VsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpLT5sZW5ndGgoKSA9
PSBjYW5kaWRhdGUtPmF0dHJpYnV0ZU1hcCgpLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQobmV3RWxlbWVudC0+YXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKSA9PSBjYW5kaWRhdGUtPmF0
dHJpYnV0ZURhdGEoKS0+bGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJUKG5ld0VsZW1lbnQt
PnRhZ1FOYW1lKCkgPT0gY2FuZGlkYXRlLT50YWdRTmFtZSgpKTsKIAogICAgICAgICAgICAgLy8g
RklYTUU6IFRlY2huaWNhbGx5IHdlIHNob3VsZG4ndCByZWFkIHRoaXMgaW5mb3JtYXRpb24gYmFj
ayBmcm9tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4u
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbi5oCmluZGV4IGMxNzgyODQz
NDYwYzZjMDc5ODlmYmJiZDY3Y2IyMDQ2Mjg2OGQ1N2QuLmU4ZmRkMTI1Zjg0OWJkYjdlNWVjMWQx
ZmJiZDg2NTEzYzg3MDAwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbi5o
CkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIEF0b21pY0hUTUxUb2tlbiA6IHB1YmxpYyBBdG9taWNN
YXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuPiB7CiBwdWJsaWM6CiAgICAgQXRvbWljSFRNTFRva2Vu
KEhUTUxUb2tlbiYgdG9rZW4pIDogQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4oJnRv
a2VuKSB7IH0KIAotICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW5UeXBlczo6VHlwZSB0eXBl
LCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0dHJpYnV0ZXMg
PSBudWxscHRyKQorICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW5UeXBlczo6VHlwZSB0eXBl
LCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0
cmlidXRlcyA9IG51bGxwdHIpCiAgICAgICAgIDogQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxU
b2tlbj4odHlwZSwgbmFtZSwgYXR0cmlidXRlcykKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggMDllMGE4ZTEwZWQ3
OWZkODI5ZDI2NWQwYjBhZDlhYjFkMjJkZjZiMi4uNWZjM2RmNDlmN2UxZTJjMzcxNzZhZDEyZGRj
YjRlNzdmZDUwOTVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCkBAIC01MzEsNyArNTMxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBwYXJzZUVycm9y
KHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWco
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0
dHJpYnV0ZXMpCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBQYXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRh
PiBhdHRyaWJ1dGVzKQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBjb252
ZXJzaW9uIHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgogICAgIEF0
b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCB0YWdOYW1l
LmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKQEAgLTU2MCwxNSArNTYwLDE1IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCkKICAgICBw
cm9jZXNzRW5kVGFnKGVuZFApOwogfQogCi1QYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gSFRNTFRy
ZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCitQYXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBIVE1MVHJlZUJ1aWxkZXI6OmF0
dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBP
d25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gdG9rZW4udGFrZUF0dHJpYnV0ZXMoKTsK
KyAgICBPd25QdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGF0dHJpYnV0ZXMgPSB0b2tlbi50YWtl
QXR0cmlidXRlcygpOwogICAgIGlmICghYXR0cmlidXRlcykKLSAgICAgICAgYXR0cmlidXRlcyA9
IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7CisgICAgICAgIGF0dHJpYnV0ZXMgPSBFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y3JlYXRlKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGF0dHJpYnV0ZXMtPnJl
bW92ZUF0dHJpYnV0ZShuYW1lQXR0cik7Ci0gICAgICAgIGF0dHJpYnV0ZXMtPnJlbW92ZUF0dHJp
YnV0ZShhY3Rpb25BdHRyKTsKLSAgICAgICAgYXR0cmlidXRlcy0+cmVtb3ZlQXR0cmlidXRlKHBy
b21wdEF0dHIpOworICAgICAgICBhdHRyaWJ1dGVzLT5yZW1vdmVBdHRyaWJ1dGUobmFtZUF0dHIs
IDApOworICAgICAgICBhdHRyaWJ1dGVzLT5yZW1vdmVBdHRyaWJ1dGUoYWN0aW9uQXR0ciwgMCk7
CisgICAgICAgIGF0dHJpYnV0ZXMtPnJlbW92ZUF0dHJpYnV0ZShwcm9tcHRBdHRyLCAwKTsKICAg
ICB9CiAKICAgICBSZWZQdHI8QXR0cmlidXRlPiBtYXBwZWRBdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6
OmNyZWF0ZU1hcHBlZChuYW1lQXR0ciwgaXNpbmRleFRhZy5sb2NhbE5hbWUoKSk7CkBAIC02ODEs
NyArNjgxLDcgQEAgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIG1hcExvd2VyZWRMb2NhbE5hbWVUb05hbWUoY2FzZU1hcCwgYXR0cnMsIGxlbmd0
aCk7CiAgICAgfQogCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmli
dXRlcygpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0
cmlidXRlcygpOwogICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogCkBAIC03
MzAsNyArNzMwLDcgQEAgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBtYXAtPmFkZCgieG1sbnM6eGxpbmsiLCBRdWFsaWZpZWROYW1l
KCJ4bWxucyIsICJ4bGluayIsIFhNTE5TTmFtZXM6OnhtbG5zTmFtZXNwYWNlVVJJKSk7CiAgICAg
fQogCi0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOwor
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygp
OwogICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IDAxODNkMjBjYWUxY2VhMjc5
ZGZhOWZmNDczNGU4OGJjNGY2ZDY1YmIuLmYxM2JhN2EwMWVkNjE5YWQ0NGJmY2JlN2Y0MjNiMzQx
OTBlMWI5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oCkBAIC0xNTEsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NDaGFyYWN0
ZXJCdWZmZXIoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwogICAgIGlubGluZSB2b2lk
IHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1
ZmZlciYpOwogCi0gICAgdm9pZCBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IG51bGxwdHIpOworICAg
IHZvaWQgcHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiwgUGFzc093blB0
cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRlcyA9IG51bGxwdHIpOwogICAgIHZvaWQg
cHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgcHJvY2Vz
c0Zha2VDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VQRW5k
VGFnSWZQSW5CdXR0b25TY29wZSgpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAg
aW5saW5lIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1M
VG9rZW4mKTsKICAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRN
TFRva2VuJik7CiAKLSAgICBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlc0Zvcklz
aW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBQYXNzT3duUHRyPEVsZW1lbnRBdHRy
aWJ1dGVEYXRhPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYpOwog
CiAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9ja0ZvckZv
cm1hdHRpbmdFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIGNhbGxUaGVBZG9wdGlvbkFnZW5j
eShBdG9taWNIVE1MVG9rZW4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9U
ZXh0RG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDFjNTVmYzI1NDZlNGI2YzVhMjQxNjE1ODZlNGU3
ZTBmMWZmNzBhNDIuLjE5MDQ3MmM0MzBlYmIyMGYzOWQ0ZDk2N2I1M2MwZThmYzE3ZGNlNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQoKQogICAgIC8vIGRpc3RydWJpbmcgdGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxj
dWxhdGlvbnMuCiAKICAgICBSZWZQdHI8QXR0cmlidXRlPiBzdHlsZUF0dHJpYnV0ZSA9IEF0dHJp
YnV0ZTo6Y3JlYXRlTWFwcGVkKCJzdHlsZSIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRl
LXNwYWNlOiBwcmUtd3JhcDsiKTsKLSAgICBPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVz
ID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAgICBPd25QdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IGF0dHJpYnV0ZXMgPSBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlKCk7CiAgICAgYXR0
cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKHN0eWxlQXR0cmlidXRlLnJlbGVhc2UoKSwgZmFsc2Up
OwogICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlUHJlKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywg
cHJlVGFnLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzLnJlbGVhc2UoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKaW5kZXggM2M5ZDg5YjVkZDFjZmJhM2FiNDJlMDI1OTRj
MTViNDcwMjQwM2Y1NC4uMWM4YzBkOWFiMWYwMTkxYmQyYjU5MTVhYzBlNTIwZmRlNjMzMjJiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAKQEAgLTE2MCwxNiArMTYwLDE2
IEBAIHZvaWQgRE9NRWRpdG9yOjppbm5lclBhdGNoTm9kZShEaWdlc3QqIG9sZERpZ2VzdCwgRGln
ZXN0KiBuZXdEaWdlc3QsIEV4Y2VwdGlvbkNvCiAgICAgRWxlbWVudCogb2xkRWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihvbGROb2RlKTsKICAgICBFbGVtZW50KiBuZXdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5ld05vZGUpOwogICAgIGlmIChvbGREaWdlc3QtPm1fYXR0
cnNTSEExICE9IG5ld0RpZ2VzdC0+bV9hdHRyc1NIQTEpIHsKLSAgICAgICAgTmFtZWROb2RlTWFw
KiBvbGRBdHRyaWJ1dGVNYXAgPSBvbGRFbGVtZW50LT5hdHRyaWJ1dGVNYXAoKTsKKyAgICAgICAg
RWxlbWVudEF0dHJpYnV0ZURhdGEqIG9sZEF0dHJpYnV0ZXMgPSBvbGRFbGVtZW50LT5hdHRyaWJ1
dGVEYXRhKCk7CiAKLSAgICAgICAgd2hpbGUgKG9sZEF0dHJpYnV0ZU1hcCAmJiBvbGRBdHRyaWJ1
dGVNYXAtPmxlbmd0aCgpKQotICAgICAgICAgICAgb2xkQXR0cmlidXRlTWFwLT5yZW1vdmVBdHRy
aWJ1dGUoMCk7CisgICAgICAgIHdoaWxlIChvbGRBdHRyaWJ1dGVzICYmIG9sZEF0dHJpYnV0ZXMt
Pmxlbmd0aCgpKQorICAgICAgICAgICAgb2xkQXR0cmlidXRlcy0+cmVtb3ZlQXR0cmlidXRlKDAs
IG9sZEVsZW1lbnQpOwogCi0gICAgICAgIE5hbWVkTm9kZU1hcCogbmV3QXR0cmlidXRlTWFwID0g
bmV3RWxlbWVudC0+YXR0cmlidXRlTWFwKCk7Ci0gICAgICAgIGlmIChuZXdBdHRyaWJ1dGVNYXAp
IHsKLSAgICAgICAgICAgIHNpemVfdCBudW1BdHRycyA9IG5ld0F0dHJpYnV0ZU1hcC0+bGVuZ3Ro
KCk7CisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBuZXdBdHRyaWJ1dGVzID0gbmV3RWxl
bWVudC0+YXR0cmlidXRlRGF0YSgpOworICAgICAgICBpZiAobmV3QXR0cmlidXRlcykgeworICAg
ICAgICAgICAgc2l6ZV90IG51bUF0dHJzID0gbmV3QXR0cmlidXRlcy0+bGVuZ3RoKCk7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUF0dHJzOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG5ld0F0dHJpYnV0ZU1hcC0+YXR0
cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSA9IG5ld0F0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgb2xk
RWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVl
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBQYXNz
T3duUHRyPERPTUVkaXRvcjo6RGlnZXN0PiBET01FZGl0b3I6OmNyZWF0ZURpZ2VzdChOb2RlKiBu
b2RlLCBVbnVzZWROb2Rlc01hcAogICAgICAgICB9CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAKLSAgICAgICAgTmFtZWROb2RlTWFwKiBh
dHRyTWFwID0gZWxlbWVudC0+YXR0cmlidXRlTWFwKCk7Ci0gICAgICAgIGlmIChhdHRyTWFwICYm
IGF0dHJNYXAtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtQXR0cnMgPSBhdHRy
TWFwLT5sZW5ndGgoKTsKKyAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMg
PSBlbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0
dHJpYnV0ZXMtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBzaXplX3QgbnVtQXR0cnMgPSBhdHRy
aWJ1dGVzLT5sZW5ndGgoKTsKICAgICAgICAgICAgIFNIQTEgYXR0cnNTSEExOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BdHRyczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkp
OworICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRl
cy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgICBhZGRTdHJpbmdUb1NIQTEoYXR0
cnNTSEExLCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBh
ZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5oCmluZGV4IDRhZmZiMDBiMWE2OTkx
MDU0NmU5ZGQ0NTY2YTEyNDk5ZDQ3NThjOTAuLmY1NmEzMDZjYmM5M2E4N2Y0ZGZjNjc0M2Y5Njhl
YWUzNWY3MjE0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmgKQEAgLTQzLDcg
KzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xh
c3MgRG9jdW1lbnQ7Ci1jbGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFzcyBOb2RlOwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCmluZGV4IDA2NjM1ZjUyMzM2YzlmZDQwNGIzNDE4ZTgyOTRmNWJiNzVkOWQzY2Eu
LjI0Y2YwZWVjNGJiOTMxZTNjMWFhOTE3ZTU5ODIzOTVjNmZkNzI1YzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtNzE3LDcgKzcxNyw3
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFy
cmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqCiBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBl
bGVtZW50KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXR0clN0eWxlcyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVt
ZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRy
aWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAoIWF0dHJp
YnV0ZXMpCiAgICAgICAgIHJldHVybiBhdHRyU3R5bGVzLnJlbGVhc2UoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYjUwMDI1YmIw
MDk3N2E1NmJmYmNiNmUyYzNmYTAxNjJjOTI2ZTQ1My4uYjE3NjM5ZDBkMjQ2ZTFiZTYwMDA5ZGMw
OGI0Y2I0NzY4M2FiYTViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCkBAIC01MzAsMTcgKzUzMCwxNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGVs
ZW1lbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgTmFtZWROb2RlTWFwKiBh
dHRyTWFwID0gdG9IVE1MRWxlbWVudChjaGlsZCktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAg
aWYgKCFhdHRyTWFwICYmIG5hbWUpIHsKKyAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cmlidXRlcyA9IHRvSFRNTEVsZW1lbnQoY2hpbGQpLT51cGRhdGVkQXR0cmlidXRlRGF0YSgp
OworICAgIGlmICghYXR0cmlidXRlcyAmJiBuYW1lKSB7CiAgICAgICAgIGVsZW1lbnQtPnJlbW92
ZUF0dHJpYnV0ZSgqbmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBib29sIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBudW1BdHRycyA9IGF0
dHJNYXAtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0cmlidXRlcy0+bGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJzOyArK2kpIHsKICAg
ICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gYXR0ck1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgY29uc3QgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBm
b3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCAobmFtZSAm
JiBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpID09ICpuYW1lKTsKICAgICAgICAgZWxlbWVu
dC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwog
ICAgIH0KQEAgLTc4MSwxNCArNzgxLDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZv
cm1TZWFyY2goRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAvLyBHbyB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KLSAgICAg
ICAgICAgICAgICBjb25zdCBOYW1lZE5vZGVNYXAqIGF0dHJNYXAgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFh
dHRyTWFwKQorICAgICAgICAgICAgICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRy
aWJ1dGVzID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT51cGRhdGVkQXR0cmlidXRlRGF0
YSgpOworICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1BdHRycyA9IGF0dHJNYXAt
Pmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0cmlidXRl
cy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUF0dHJzOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWly
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0ck1h
cC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRl
KiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlLT5sb2NhbE5hbWUoKS5maW5kKHdoaXRlc3BhY2VUcmltbWVk
UXVlcnkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRDb2xs
ZWN0b3IuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTU5
LDEzICsxMTU5LDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlCiB7CiAgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhdHRyaWJ1dGVzVmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CiAgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCi0g
ICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyTWFwID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0
ZXMoKTsKLSAgICBpZiAoIWF0dHJNYXApCisgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIGlmICgh
YXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZS5yZWxlYXNlKCk7Ci0g
ICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBu
dW1BdHRycyA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1BdHRyczsgKytpKSB7CiAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgotICAg
ICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0o
aSk7CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0
cmlidXRlSXRlbShpKTsKICAgICAgICAgYXR0cmlidXRlc1ZhbHVlLT5wdXNoU3RyaW5nKGF0dHJp
YnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCkpOwogICAgICAgICBhdHRyaWJ1dGVzVmFsdWUtPnB1c2hT
dHJpbmcoYXR0cmlidXRlLT52YWx1ZSgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwCmluZGV4IDJlYTBmYmUyMTZhYmNiMDU1ZjU5MDQxMjkwZDczYWRhMjU2MDUx
NDQuLmI0MjliNjljYmQzMGIzNmQwYWYzNWI5NzMzNTUxMDRkNWQ2ZDdkN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC02OSw5ICs2OSw5IEBAIHN0YXRpYyBib29s
IGlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKCFlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OkF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBp
ZiAoY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+dXBkYXRlZEF0
dHJpYnV0ZXMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRl
c01hcC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBpdGVtID0gYXR0
cmlidXRlc01hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICBpZiAoY29uc3QgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgp
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVEYXRhLT5sZW5n
dGgoKTsgKytpKSB7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVEYXRh
LT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkZWFs
IGFwcHJvcHJpYXRlbHkgd2l0aCB0aGUgYXR0cmlidXRlIGlmIHRoZXkgaGF2ZSBhIG5hbWVzcGFj
ZS4KICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5kKG1ha2VfcGFpcihpdGVtLT5uYW1lKCku
dG9TdHJpbmcoKSwgaXRlbS0+dmFsdWUoKS5zdHJpbmcoKSkpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNmUxNjBmMDc2M2Y2NzcwMTg4MDk0ZTQ1OGI1YTE4NDQ1
YjQ3ZDJjNy4uMTgwY2VkMDk5OGVkNWJkNWIwZjZmYmU5MjEyZmZmMDBlZTI4NTgxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgU1ZHRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykK
IAogICAgIC8vIFdoZW4gYW4gYW5pbWF0ZWQgU1ZHIHByb3BlcnR5IGNoYW5nZXMgdGhyb3VnaCBT
VkcgRE9NLCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKCkgaXMgY2FsbGVkLCBub3QgYXR0cmlidXRlQ2hh
bmdlZCgpLgogICAgIC8vIE5leHQgdGltZSBzb21lb25lIHRyaWVzIHRvIGFjY2VzcyB0aGUgWE1M
IGF0dHJpYnV0ZXMsIHRoZSBzeW5jaHJvbml6YXRpb24gY29kZSBzdGFydHMuIER1cmluZyB0aGF0
IHN5bmNocm9uaXphdGlvbgotICAgIC8vIFNWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIg
bWF5IGNhbGwgTmFtZWROb2RlTWFwOjpyZW1vdmVBdHRyaWJ1dGUoKSwgd2hpY2ggaW4gdHVybiBj
YWxscyBhdHRyaWJ1dGVDaGFuZ2VkKCkuCisgICAgLy8gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNo
cm9uaXplciBtYXkgY2FsbCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKCks
IHdoaWNoIGluIHR1cm4gY2FsbHMgYXR0cmlidXRlQ2hhbmdlZCgpLgogICAgIC8vIEF0IHRoaXMg
cG9pbnQgd2UncmUgbm90IGFsbG93ZWQgdG8gY2FsbCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKCkgYWdh
aW4gLSBpdCBtYXkgbGVhZCB0byBleHRyYSB3b3JrIGJlaW5nIGRvbmUsIG9yIGNyYXNoZXMKICAg
ICAvLyBzZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk5
NC4KICAgICBpZiAoaXNTeW5jaHJvbml6aW5nU1ZHQXR0cmlidXRlcygpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IDYyNjY5YzhiYTE5OGJiZmE1NGU1NDMwNDFl
ZjJlMzkzMTEzYTIzZDUuLjYxM2QxMmI0NWY4N2YyMDBjZGE2ODkwY2Y2Zjk5OWEyNjhhYTM1OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKQEAgLTQxNywxMSArNDE3
LDExIEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdl
ZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFNW
R1N0eWxlZEVsZW1lbnQ6OmdldFByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVNYXAoKSkKKyAgICBpZiAoIWF0dHJpYnV0ZURhdGEo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBRdWFsaWZpZWROYW1lIGF0dHJpYnV0ZU5hbWUo
bnVsbEF0b20sIG5hbWUsIG51bGxBdG9tKTsKLSAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1
dGVNYXAoKS0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGVOYW1lKTsKKyAgICBBdHRyaWJ1dGUq
IGF0dHIgPSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmlidXRlTmFtZSk7
CiAgICAgaWYgKCFhdHRyIHx8ICFhdHRyLT5pc01hcHBlZEF0dHJpYnV0ZSgpIHx8ICFhdHRyLT5t
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5
bmNocm9uaXplci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVN5bmNocm9uaXplci5oCmluZGV4IGU2YmQwMTNlYmY4ZmUwNmRlMjRkZjhhNjY4Y2Ux
MTNmMmJlY2E5MzguLmQ2ZTU3MTA4NWU1ZjNjOTQ5M2E3ODVjOGJhMTBjNTBjODM3NTViNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHlTeW5jaHJvbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmgKQEAgLTM3LDE1ICszNywxNCBAQCBzdHJ1Y3Qg
U1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplcjx0cnVlPiB7CiAgICAgICAgIC8vIEF0dHJp
YnV0ZSBkaXJlY3RseSB0byBhdm9pZCBhIGNhbGwgdG8gRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZAogICAgICAgICAvLyB0aGF0IGNvdWxkIGNhdXNlIHRoZSBTVkdFbGVtZW50IHRvIGVycm9uZW91
c2x5IHJlc2V0IGl0cyBwcm9wZXJ0aWVzLgogICAgICAgICAvLyBzdmcvZG9tL1NWR1N0cmluZ0xp
c3QtYmFzaWNzLnhodG1sIGV4ZXJjaXNlcyB0aGlzIGJlaGF2aW9yLgotICAgICAgICBOYW1lZE5v
ZGVNYXAqIG5hbWVkQXR0ck1hcCA9IG93bmVyRWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0dHJpYnV0
ZXMoKTsKLSAgICAgICAgQXR0cmlidXRlKiBvbGQgPSBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0
ZUl0ZW0oYXR0ck5hbWUpOworICAgICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRl
RGF0YSA9IG93bmVyRWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICAg
ICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJO
YW1lKTsKICAgICAgICAgaWYgKG9sZCAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIG5h
bWVkQXR0ck1hcC0+cmVtb3ZlQXR0cmlidXRlKG9sZC0+bmFtZSgpKTsKKyAgICAgICAgICAgIGF0
dHJpYnV0ZURhdGEtPnJlbW92ZUF0dHJpYnV0ZShvbGQtPm5hbWUoKSwgb3duZXJFbGVtZW50KTsK
ICAgICAgICAgZWxzZSBpZiAoIW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBu
YW1lZEF0dHJNYXAtPmFkZEF0dHJpYnV0ZShvd25lckVsZW1lbnQtPmNyZWF0ZUF0dHJpYnV0ZShh
dHRyTmFtZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZURhdGEtPmFkZEF0dHJpYnV0
ZShvd25lckVsZW1lbnQtPmNyZWF0ZUF0dHJpYnV0ZShhdHRyTmFtZSwgdmFsdWUpLCBvd25lckVs
ZW1lbnQpOwogICAgICAgICBlbHNlIGlmIChvbGQgJiYgIXZhbHVlLmlzTnVsbCgpKQogICAgICAg
ICAgICAgb2xkLT5zZXRWYWx1ZSh2YWx1ZSk7Ci0KICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCAyODM1ODNkNzgzYWZhNmVmMTBlYTc3OTJjYjIwOWNk
NTEzNDMzNWNmLi4xZGMzYWYzMzFkZDdjODhhN2U3YzJkYWRhYzM1ZjM2ZDk5ZGY3NGZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNs
dWRlICJYUGF0aEZ1bmN0aW9ucy5oIgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
Ik5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlRyZWVTY29wZS5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCkBAIC01OTIsNyArNTkx
LDcgQEAgVmFsdWUgRnVuTGFuZzo6ZXZhbHVhdGUoKSBjb25zdAogICAgIE5vZGUqIG5vZGUgPSBl
dmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAg
ICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKE5hbWVkTm9k
ZU1hcCogYXR0cmlidXRlcyA9IHRvRWxlbWVudChub2RlKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkK
KyAgICAgICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IHRvRWxl
bWVudChub2RlKS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgICAgICAgICBsYW5n
dWFnZUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0oWE1MTmFtZXM6Omxh
bmdBdHRyKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGFuZ3VhZ2VBdHRyaWJ1dGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCmluZGV4IDhlZWZjNTczZmY0NDc5NDI1MjFmYmQwNzdh
ZGYxNTIxZDJhMzlhZjcuLmQ3NWE4NDdiNDcxMTA5NTlmYjgxMTA5MTFhYTI3ZGJlYmVlZWZiMmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9p
ZCBOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KCkgY29uc3QKICAgICAgICAgaWYgKCFjb250YWluc0F0
dHJpYnV0ZU5vZGVzIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0b0VsZW1lbnQobiktPnVw
ZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1
dGVzID0gdG9FbGVtZW50KG4pLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAgICAgICBpZiAo
IWF0dHJpYnV0ZXMpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVw
LmNwcAppbmRleCAxMmYzOTRmMmNhMGI0NDU2YTgxZDEwODk4M2I3OTI0ZDVjNGQ4NzVkLi5iNDU1
M2VkODM1YjYzYmI2NmYyYWY4NDg0NDYwODdjYWE2YWQ3ZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhT
dGVwLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJOYW1lZE5vZGVNYXAu
aCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWFBhdGhQYXJzZXIuaCIKICNp
bmNsdWRlICJYUGF0aFV0aWwuaCIKQEAgLTM0Myw3ICszNDIsNyBAQCB2b2lkIFN0ZXA6Om5vZGVz
SW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vZGVTZXQmIG5vZGVzKSBjb25zdAogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTmFt
ZWROb2RlTWFwKiBhdHRycyA9IGNvbnRleHRFbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwor
ICAgICAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gY29udGV4dEVsZW1lbnQt
PnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgICAgICAgICBpZiAoIWF0dHJzKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9NYXJrdXBUb2tlbkJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9r
ZW5CYXNlLmgKaW5kZXggMGU5MTkxM2E2MDRjMDBiZjExNWU5OGZmMzE1NjZmMWFkZjg5ZjQzNi4u
OGUzYTBlZDg4YWQ2MjJiOWY2NzJmYjUyNTUzNDk3YWMxZGFlZjgwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZu
ZGVmIE1hcmt1cFRva2VuQmFzZV9oCiAjZGVmaW5lIE1hcmt1cFRva2VuQmFzZV9oCiAKLSNpbmNs
dWRlICJOYW1lZE5vZGVNYXAuaCIKKyNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRlRGF0YS5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC00MTAsNyArNDEwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgQXRvbWlj
TWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpUeXBlIHR5cGUsIEF0b21pY1N0
cmluZyBuYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IG51bGxwdHIp
CisgICAgQXRvbWljTWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpUeXBlIHR5
cGUsIEF0b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBh
dHRyaWJ1dGVzID0gbnVsbHB0cikKICAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICAgICAgLCBt
X25hbWUobmFtZSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKQEAgLTQ0Niwx
MyArNDQ2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy0+Z2V0QXR0
cmlidXRlSXRlbShhdHRyaWJ1dGVOYW1lKTsKICAgICB9CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0
dHJpYnV0ZXMoKSBjb25zdAorICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygpKTsKICAgICAgICAg
cmV0dXJuIG1fYXR0cmlidXRlcy5nZXQoKTsKICAgICB9CiAKLSAgICBQYXNzT3duUHRyPE5hbWVk
Tm9kZU1hcD4gdGFrZUF0dHJpYnV0ZXMoKQorICAgIFBhc3NPd25QdHI8RWxlbWVudEF0dHJpYnV0
ZURhdGE+IHRha2VBdHRyaWJ1dGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2VzQXR0cmli
dXRlcygpKTsKICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy5yZWxlYXNlKCk7CkBAIC01MTYs
NyArNTE2LDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIEZvciBTdGFydFRhZyBhbmQgRW5kVGFnCiAg
ICAgYm9vbCBtX3NlbGZDbG9zaW5nOwogCi0gICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gbV9hdHRy
aWJ1dGVzOworICAgIE93blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbV9hdHRyaWJ1dGVzOwog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVG9rZW4+CkBAIC01MjYsNyArNTI2LDcgQEAgaW5saW5l
IHZvaWQgQXRvbWljTWFya3VwVG9rZW5CYXNlPFRva2VuPjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMo
Y29uc3QgdHlwZW5hbWUgVG8KICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fYXR0cmlidXRlcyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7CisgICAgbV9hdHRyaWJ1dGVz
ID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpOwogICAgIG1fYXR0cmlidXRlcy0+cmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewogICAgICAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6QXR0cmlidXRlJiBhdHRy
aWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IDRlMWQ0OWVlZmQwNGJmZWY2
ODZlMGEyYzVjZTJiNjBjMWQ4ZDg3YzAuLjVjODlmODhiZmJkYTBkYWUyYmNmNGU4YTYzNWYxMjky
YTY3M2I1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTU5OSw3ICs1OTksNyBAQCBYTUxEb2N1bWVudFBh
cnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1l
bnQqIHBhcmVudAogCiAgICAgZm9yICg7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2su
cmVtb3ZlTGFzdCgpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3RhY2subGFz
dCgpOwotICAgICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0ZWRB
dHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9
IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAg
IEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAg
ICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSB4bWxuc0F0b20pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRleCBjZDZlYTE0OTRm
NTEyNjEwMjU4YzY4MjM5MmIxYTU0ZjhhYjQzOTJjLi43NWIzMTlmZmVlYWI2MmY3NmEwNDc2ZmEy
MjlmNTA1ZDU4ODYzYjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCBYTUxEb2N1bWVudFBhcnNl
cjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQq
IHBhcmVudAogCiAgICAgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyBuYW1lc3BhY2Vz
OwogICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVsZW1TdGFjay5sYXN0KCk7ICFlbGVtU3Rh
Y2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFzdCgpKSB7Ci0gICAgICAgIGlmIChOYW1l
ZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgeworICAgICAg
ICBpZiAoRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJp
YnV0ZURhdGEoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJz
LT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0
cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFt
ZSgpID09ICJ4bWxucyIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuLmgKaW5kZXggZDFi
ZGMwZTZiOTkxM2NjZTgzZGQxZWU0ZGVlZjdmNzNhNGQyYzQ0Ny4uMDAyNTgyZDllZDRiZDljMmY5
NTU1ZTJiZWM4M2EzMTVjMmFlMWExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4u
aApAQCAtNDMxLDcgKzQzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIEF0
b21pY1hNTFRva2VuKFhNTFRva2VuVHlwZXM6OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUs
IFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKKyAgICBBdG9t
aWNYTUxUb2tlbihYTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIEF0b21pY1N0cmluZyBuYW1lLCBQ
YXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKICAg
ICAgICAgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8WE1MVG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJp
YnV0ZXMpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVl
QnVpbGRlci5jcHAKaW5kZXggOGRlMWEwODE3YTRlNGRmMWJhOGE4MDhhYzkzOTY3NWE3YWVhMDMz
NS4uYTc1NTFjZTZlM2U5NTA2MmVhMTg5ODJkZTA1OGYzYjZjNTVhNTJjYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAg
WE1MVHJlZUJ1aWxkZXI6OlhNTFRyZWVCdWlsZGVyKE5ld1hNTERvY3VtZW50UGFyc2VyKiBwYXJz
ZXIsIERvY3VtZW50RnJhZ21lbnQqIGYKIAogICAgIGZvciAoRWxlbWVudCogZWxlbWVudDsgIW5v
ZGVTdGFjay5pc0VtcHR5KCk7IG5vZGVTdGFjay5yZW1vdmVMYXN0KCkpIHsKICAgICAgICAgZWxl
bWVudCA9IG5vZGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJz
ID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKSkgeworICAgICAgICBpZiAoRWxlbWVudEF0
dHJpYnV0ZURhdGEqIGF0dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKSkgewog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkg
ewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVt
KGkpOwogICAgICAgICAgICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSB4bWxuc0F0b20p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOYW1lZE5vZGVNYXAu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTmFtZWROb2RlTWFwLmNwcAppbmRl
eCBlMjQ1NWU2YjlmN2UxMjc4OWNkYjBjMTdkZmU1MjhkZGNmZDUxYjVmLi4zMGYwYjY4NzBkZmY1
M2ZlYTYwOWFlYWViMDVkNGU2YjIxYTA3MjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJOYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk5hbWVkTm9kZU1hcC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdW5zaWduZWQgV2Vi
TmFtZWROb2RlTWFwOjpsZW5ndGgoKSBjb25zdAogCiBXZWJBdHRyaWJ1dGUgV2ViTmFtZWROb2Rl
TWFwOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIHJldHVybiBX
ZWJBdHRyaWJ1dGUobV9wcml2YXRlLT5hdHRyaWJ1dGVJdGVtKGluZGV4KSk7CisgICAgcmV0dXJu
IFdlYkF0dHJpYnV0ZShtX3ByaXZhdGUtPmF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShp
bmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCmluZGV4IGRhMGUzMjU1
NWVjN2NiODQzOGFiODAyM2E5OGJiNjJjZWVlYjUzYjUuLmQwNzE0MTNlNjRkYmU0ZTM4NTBkZTNh
N2I1MzZiNDk1ODg5YTQzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcApAQCAtMzA3LDEzICszMDcsMTMgQEAgdm9pZCBX
ZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyhFbGVtZW50KiBlbGVtZW50LAog
ICAgIC8vIEFkZCBvcGVuIHRhZwogICAgIHJlc3VsdCArPSAiPCIgKyBlbGVtZW50LT5ub2RlTmFt
ZSgpLmxvd2VyKCk7CiAgICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFs
aXplIHRoZW0uCi0gICAgY29uc3QgTmFtZWROb2RlTWFwICphdHRyTWFwID0gZWxlbWVudC0+dXBk
YXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoYXR0ck1hcCkgewotICAgICAgICB1bnNpZ25lZCBu
dW1BdHRycyA9IGF0dHJNYXAtPmxlbmd0aCgpOworICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVE
YXRhICphdHRyRGF0YSA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CisgICAgaWYg
KGF0dHJEYXRhKSB7CisgICAgICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0ckRhdGEtPmxlbmd0
aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgewog
ICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKICAgICAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUg
cGFpcgotICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5h
dHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlICphdHRyaWJ1dGUg
PSBhdHRyRGF0YS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgIHJlc3VsdCArPSBhdHRy
aWJ1dGUtPm5hbWUoKS50b1N0cmluZygpOwogICAgICAgICAgICAgcmVzdWx0ICs9ICI9XCIiOwog
ICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKaW5kZXggNzcxYWQ1NmZiMWI1NjcxOGYzYjVlZTMwOTY1
Njc5M2M2ZWE3NDI2YS4uZWZhYzZkNDM2ZmQwOTU2MjJlOWIxYzVmZDc4Y2NjZWNhMDQxZjBjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcApAQCAtNTAzLDcgKzUwMyw3IEBAIFFT
dHJpbmdMaXN0IFFXZWJFbGVtZW50OjphdHRyaWJ1dGVOYW1lcyhjb25zdCBRU3RyaW5nJiBuYW1l
c3BhY2VVcmkpIGNvbnN0CiAgICAgICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwogCiAgICAgUVN0
cmluZ0xpc3QgYXR0cmlidXRlTmFtZUxpc3Q7Ci0gICAgY29uc3QgTmFtZWROb2RlTWFwKiBjb25z
dCBhdHRycyA9IG1fZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBFbGVt
ZW50QXR0cmlidXRlRGF0YSogY29uc3QgYXR0cnMgPSBtX2VsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCk7CiAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyBuYW1lc3Bh
Y2VVcmlTdHJpbmcobmFtZXNwYWNlVXJpKTsgLy8gY29udmVydCBRU3RyaW5nIC0+IFN0cmluZyBv
bmNlCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGF0dHJzQ291bnQgPSBhdHRycy0+bGVuZ3RoKCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126495</attachid>
            <date>2012-02-10 03:58:17 -0800</date>
            <delta_ts>2012-02-13 03:30:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77674-20120210085814.patch</filename>
            <type>text/plain</type>
            <size>40857</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU3YmM4MGU5NjdjZTA2
NzI0NWYxODgwYzIxMDQwZDFhYWI4M2JmMS4uYzk1MGY2MWQ1NWQ2MDU0N2ZlNjE0YzcxOGJmYTFm
ZmU4YzM1YTFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTAyLTEwICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTW92ZSBhdHRyaWJ1dGUgc3RvcmFnZSBmcm9tIE5hbWVkTm9kZU1hcCB0byBF
bGVtZW50QXR0cmlidXRlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzc2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlIG1fYXR0cmlidXRlcyB2ZWN0b3IgZnJvbSBOYW1lZE5vZGVNYXAgdG8g
RWxlbWVudEF0dHJpYnV0ZURhdGEuIE1ha2UgdGhlCisgICAgICAgIHJlbWFpbmluZyBjYWxsc2l0
ZXMgaW50ZXJhY3Qgd2l0aCBFbGVtZW50QXR0cmlidXRlRGF0YSBpZiBwb3NzaWJsZS4gVGhlIHBh
cnNpbmcKKyAgICAgICAgY29kZSBpcyBzdGlsbCBpbnRlcmFjdGluZyB3aXRoIE5hbWVkTm9kZU1h
cCwgc28gc29tZSBmdW5jdGlvbnMgcmVtYWluZWQgYXMKKyAgICAgICAgd3JhcHBlcnMgdGhlcmUu
IEEgbmV4dCBjaGFuZ2Ugd2lsbCBpdCB1c2UgRWxlbWVudEF0dHJpYnV0ZURhdGEgaW5zdGVhZC4K
KworICAgICAgICBUaGUgY29kZSBmb3IgRE9NIGV4cG9ydGVkIGZ1bmN0aW9ucyByZW1haW5lZCBp
biBOYW1lZE5vZGVNYXAuIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgc2hvdWxkIG1vdmUg
dG8gRWxlbWVudCBpbiBhIG5leHQgY2hhbmdlLCB0b28uCisKKyAgICAgICAgKiBkb20vQXR0ci5o
OgorICAgICAgICAoQXR0cik6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBh
cnNlclNldEF0dHJpYnV0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3Vy
ZVVwZGF0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0
dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVkQXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpl
bnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSk6CisgICAgICAgIFRoZXNlICpBdHRyaWJ1dGVEYXRh
IGZ1bmN0aW9ucyBhcmUgdGhlIGNvcnJlY3QgY29ycmVjdCB3YXkgZm9yIGNhbGxlcnMgdG8gdG91
Y2gKKyAgICAgICAgdGhlIGRldGFpbHMgb2YgYXR0cmlidXRlIHN0b3JhZ2UuIFRoZSAidXBkYXRl
ZCIgdmFyaWFudHMgd2lsbCB1cGRhdGUgaW52YWxpZAorICAgICAgICBhdHRyaWJ1dGVzIGJlZm9y
ZSByZXR1cm4uCisKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZXNGcm9t
RWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+RWxlbWVudEF0dHJpYnV0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRl
RGF0YTo6YWRkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OmRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50QXR0cmlidXRlRGF0YTo6Y29weUF0dHJpYnV0ZXNUb1ZlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnNldEF0dHJpYnV0
ZXMpOiBNYWtlIHVzZSBvZiB0aGUgYXNzdW1wdGlvbiB0aGF0CisgICAgICAgIHRoaXMgd2lsbCBv
bmx5IGJlIGNhbGxlZCB3aXRoIGEgdmFsaWQgRWxlbWVudCwgc2luY2UgdGhlIG9ubHkgY2FsbCBz
aXRlIGlzIGFuCisgICAgICAgIEVsZW1lbnQgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudEF0dHJpYnV0ZURhdGE6OmNsZWFyQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50QXR0cmlidXRlRGF0YTo6cmVwbGFjZUF0dHJpYnV0ZSk6IE1ha2UgdXNlIG9mIHRoZSBh
c3N1bXB0aW9uCisgICAgICAgIHRoaXMgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgdmFsaWQg
RWxlbWVudCwgc2luY2UgdGhlIG9ubHkgY2FsbCBzaXRlIHJldHVybgorICAgICAgICBlYXJseSBp
ZiB0aGVyZSdzIG5vIEVsZW1lbnQuCisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRh
Lmg6CisgICAgICAgIChFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50QXR0cmlidXRlRGF0YTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjphdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KToK
KyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVk
Tm9kZU1hcDo6Z2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6
cmVtb3ZlTmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFt
ZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6aXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmRldGFjaEZyb21FbGVtZW50KToKKyAgICAgICAgKiBk
b20vTmFtZWROb2RlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Omxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmlzRW1wdHkpOgorICAgICAgICAo
V2ViQ29yZTo6TmFtZWROb2RlTWFwOjphdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5hbWVkTm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1l
ZE5vZGVNYXA6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1l
ZE5vZGVNYXA6OnNocmlua1RvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1h
cDo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVN
YXA6OmFkZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChOYW1lZE5vZGVNYXApOgorICAgICAgICAqIGRvbS9TdHls
ZWRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjplbnN1cmVJbmxp
bmVTdHlsZURlY2wpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6ZW5zdXJlQXR0
cmlidXRlU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmg6CisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisKIDIwMTItMDItMTAgIE5v
ZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
SW5jcmVhc2UgSlBFRyBkZWNvZGluZyBwZXJmb3JtYW5jZSBzb21lIG1vcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCmlu
ZGV4IDAyMDlmOTA0MTA2YzRmMGM4NmY0MmNjNTM0MTFlOGQxYWRhOTZjNmUuLjIwMjhhY2RhODli
NDM5MmY3NmQ3ZjNmZjI3MTMxYjg3ZjdjMTU0MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9BdHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuaApAQCAtNDAsNiArNDAs
NyBAQCBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogCiBjbGFzcyBBdHRyIDogcHVibGljIENv
bnRhaW5lck5vZGUgewogICAgIGZyaWVuZCBjbGFzcyBOYW1lZE5vZGVNYXA7CisgICAgZnJpZW5k
IGNsYXNzIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEF0dHI+IGNyZWF0ZShFbGVtZW50KiwgRG9jdW1lbnQqLCBQYXNzUmVmUHRyPEF0dHJpYnV0
ZT4pOwogICAgIHZpcnR1YWwgfkF0dHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAzNTVm
MzhhZGJlNGQyZGZhM2NjY2MyMDQ5YTRlYjYxZmY4NjZmNGJlLi41ZWRmZGU1NzhmMWVkZjhmYTMx
N2MyOTk1YTc2ZjY3NjlhNjBlYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC02MTYsMjcg
KzYxNiwyOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxv
d2VyKCkgOiBuYW1lOwogCi0gICAgc2l6ZV90IGluZGV4ID0gZW5zdXJlVXBkYXRlZEF0dHJpYnV0
ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFsc2UpOwotICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0gbm90Rm91bmQgPyBtX2F0dHJpYnV0ZU1h
cC0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6IFF1YWxpZmllZE5hbWUobnVsbEF0b20s
IGxvY2FsTmFtZSwgbnVsbEF0b20pOworICAgIHNpemVfdCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRB
dHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsK
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0
cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZSwgbnVsbEF0b20pOwogICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwg
dmFsdWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0
ZUludGVybmFsKGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChuYW1lKSwgbmFtZSwgdmFsdWUpOworICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGVuc3VyZVVw
ZGF0ZWRBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwg
dmFsdWUpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVJbnRlcm5hbChz
aXplX3QgaW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7Ci0gICAgQXR0cmlidXRlKiBvbGQgPSBpbmRleCAhPSBub3RGb3VuZCA/IG1f
YXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVJdGVtKGluZGV4KSA6IDA7CisgICAgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSAmbV9hdHRyaWJ1dGVNYXAtPm1fYXR0cmlidXRlRGF0
YTsKKyAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlRGF0
YS0+YXR0cmlidXRlSXRlbShpbmRleCkgOiAwOwogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewog
ICAgICAgICBpZiAob2xkKQotICAgICAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPnJlbW92ZUF0dHJp
YnV0ZShpbmRleCk7CisgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUo
aW5kZXgsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFvbGQpIHsK
LSAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPmFkZEF0dHJpYnV0ZShjcmVhdGVBdHRyaWJ1dGUobmFt
ZSwgdmFsdWUpKTsKKyAgICAgICAgYXR0cmlidXRlRGF0YS0+YWRkQXR0cmlidXRlKGNyZWF0ZUF0
dHJpYnV0ZShuYW1lLCB2YWx1ZSksIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC03NTAsMjcgKzc1MSwyOCBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZU1hcChQ
YXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gbGlzdCwgRnJhZ21lbnRTY3JpcAogICAgIG1fYXR0cmli
dXRlTWFwID0gbGlzdDsKIAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgeworICAgICAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9ICZtX2F0dHJpYnV0ZU1hcC0+bV9hdHRy
aWJ1dGVEYXRhOwogICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+bV9lbGVtZW50ID0gdGhpczsKICAg
ICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1bHQgb2YgYSBwYXN0ZSBv
ciBkcmFnLW4tZHJvcCBvcGVyYXRpb24KICAgICAgICAgLy8gd2Ugd2FudCB0byByZW1vdmUgYWxs
IHRoZSBzY3JpcHQgYW5kIGV2ZW50IGhhbmRsZXJzLgogICAgICAgICBpZiAoc2NyaXB0aW5nUGVy
bWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIGkgPSAwOwogICAgICAgICAgICAgd2hpbGUgKGkgPCBtX2F0dHJpYnV0ZU1hcC0+bGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lID0gbV9hdHRyaWJ1dGVNYXAtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVEYXRh
LT5tX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNFdmVudEhh
bmRsZXJBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9h
dHRyaWJ1dGVNYXAtPm1fYXR0cmlidXRlcy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChp
c0F0dHJpYnV0ZVRvUmVtb3ZlKGF0dHJpYnV0ZU5hbWUsIG1fYXR0cmlidXRlTWFwLT5tX2F0dHJp
YnV0ZXNbaV0tPnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+
bV9hdHRyaWJ1dGVzW2ldLT5zZXRWYWx1ZShudWxsQXRvbSk7CisgICAgICAgICAgICAgICAgaWYg
KGlzQXR0cmlidXRlVG9SZW1vdmUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlRGF0YS0+bV9hdHRy
aWJ1dGVzW2ldLT52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlRGF0YS0+
bV9hdHRyaWJ1dGVzW2ldLT5zZXRWYWx1ZShudWxsQXRvbSk7CiAgICAgICAgICAgICAgICAgaSsr
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIFN0b3JlIHRoZSBzZXQgb2Yg
YXR0cmlidXRlcyB0aGF0IGNoYW5nZWQgb24gdGhlIHN0YWNrIGluIGNhc2UKICAgICAgICAgLy8g
YXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlTWFwLgogICAgICAgICBWZWN0b3I8
UmVmUHRyPEF0dHJpYnV0ZT4gPiBhdHRyaWJ1dGVzOwotICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+
Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVzKTsKKyAgICAgICAgYXR0cmlidXRlRGF0
YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVzKTsKICAgICAgICAgZm9yIChWZWN0
b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPjo6aXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4o
KTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgICAgICBhdHRyaWJ1
dGVDaGFuZ2VkKGl0ZXItPmdldCgpKTsKICAgICB9CkBAIC0xNDczLDE1ICsxNDc1LDE2IEBAIHZv
aWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluCiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIW1fYXR0cmlidXRlTWFwKQorICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdGhpcy0+YXR0cmlidXRlRGF0YSgpOwor
ICAgIGlmICghYXR0cmlidXRlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGxv
Y2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkg
OiBuYW1lOwotICAgIHNpemVfdCBpbmRleCA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJ
dGVtSW5kZXgobG9jYWxOYW1lLCBmYWxzZSk7CisgICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRl
RGF0YS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFsc2UpOwogICAgIGlmIChp
bmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGVNYXAt
PnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7CisgICAgYXR0cmlidXRlRGF0YS0+cmVtb3ZlQXR0cmli
dXRlKGluZGV4LCB0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCkBAIC0x
NTA4LDIyICsxNTExLDIyIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRl
Tm9kZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTCiAKIGJvb2wgRWxlbWVu
dDo6aGFzQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoIWF0dHJzKQorICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIFRoaXMgY2FsbCB0byBTdHJpbmc6Omxvd2VyKCkgc2VlbXMgdG8gYmUgcmVxdWlyZWQg
YnV0CiAgICAgLy8gdGhlcmUgbWF5IGJlIGEgd2F5IHRvIHJlbW92ZSBpdC4KICAgICBTdHJpbmcg
bG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIo
KSA6IG5hbWU7Ci0gICAgcmV0dXJuIGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGxvY2FsTmFtZSwg
ZmFsc2UpOworICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKGxvY2Fs
TmFtZSwgZmFsc2UpOwogfQogCiBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IFN0
cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QKIHsKLSAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoIWF0
dHJzKQorICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0
dHJpYnV0ZURhdGEoKTsKKyAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKKyAgICByZXR1cm4gYXR0cmlidXRl
RGF0YS0+Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUs
IG5hbWVzcGFjZVVSSSkpOwogfQogCiBDU1NTdHlsZURlY2xhcmF0aW9uICpFbGVtZW50OjpzdHls
ZSgpCkBAIC0xNzEwLDE1ICsxNzEzLDEyIEBAIHZvaWQgRWxlbWVudDo6Y2FuY2VsRm9jdXNBcHBl
YXJhbmNlVXBkYXRlKCkKIAogdm9pZCBFbGVtZW50Ojpub3JtYWxpemVBdHRyaWJ1dGVzKCkKIHsK
LSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAo
IWF0dHJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXR0cnMtPmlzRW1wdHkoKSkKKyAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVE
YXRhKCk7CisgICAgaWYgKCFhdHRyaWJ1dGVEYXRhIHx8IGF0dHJpYnV0ZURhdGEtPmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gYXR0
cmlidXRlVmVjdG9yOwotICAgIGF0dHJzLT5jb3B5QXR0cmlidXRlc1RvVmVjdG9yKGF0dHJpYnV0
ZVZlY3Rvcik7CisgICAgYXR0cmlidXRlRGF0YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRy
aWJ1dGVWZWN0b3IpOwogICAgIHNpemVfdCBudW1BdHRycyA9IGF0dHJpYnV0ZVZlY3Rvci5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1BdHRyczsgKytpKSB7CiAgICAgICAg
IGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRlVmVjdG9yW2ldLT5hdHRyKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAppbmRleCA5MzgxZTJmNTgxNTg3ZDczMjU3MGE4MzE0OTQyODM0ODQxOTdmODI5Li4zYzYx
NzNiMWY0NzJkZTdkNzRiYjVhZjU3MmRmY2Y1YWQ0YjgwN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
QEAgLTIzNiwxNCArMjM2LDEwIEBAIHB1YmxpYzoKICAgICAvLyBPbmx5IGNhbGxlZCBieSB0aGUg
cGFyc2VyIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY29uc3RydWN0aW9uLgogICAgIHZvaWQg
cGFyc2VyU2V0QXR0cmlidXRlTWFwKFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVNYXAuZ2V0KCk7IH0KLSAgICBOYW1lZE5vZGVNYXAq
IGVuc3VyZUF0dHJpYnV0ZU1hcCgpIGNvbnN0OwotCiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcCA/IG1fYXR0cmli
dXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCkgOiAwOyB9Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGVuc3VyZUF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBlbnN1cmVVcGRhdGVkQXR0cmli
dXRlcygpLT5hdHRyaWJ1dGVEYXRhKCk7IH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBz
aG91bGQgYmUgcmVtb3ZlZCBvbmNlIEF0dHJpYnV0ZURhdGEgaXMgbW92ZWQgdG8gRWxlbWVudC4K
LSAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlQXR0cmlidXRlRGF0YVdpdGhvdXRVcGRh
dGUoKSBjb25zdCB7IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVNYXAoKS0+YXR0cmlidXRlRGF0YSgp
OyB9CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGVuc3VyZUF0dHJpYnV0ZURhdGEoKSBjb25z
dDsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogdXBkYXRlZEF0dHJpYnV0ZURhdGEoKSBjb25z
dDsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEo
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1l
bnQmKTsKIApAQCAtNTM5LDcgKzUzNSw5IEBAIGlubGluZSBFbGVtZW50KiBFbGVtZW50OjpuZXh0
RWxlbWVudFNpYmxpbmcoKSBjb25zdAogaW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6ZW5z
dXJlVXBkYXRlZEF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1
dGVzKCk7Ci0gICAgcmV0dXJuIGVuc3VyZUF0dHJpYnV0ZU1hcCgpOworICAgIGlmICghbV9hdHRy
aWJ1dGVNYXApCisgICAgICAgIGNyZWF0ZUF0dHJpYnV0ZU1hcCgpOworICAgIHJldHVybiBtX2F0
dHJpYnV0ZU1hcC5nZXQoKTsKIH0KIAogaW5saW5lIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6dXBk
YXRlZEF0dHJpYnV0ZXMoKSBjb25zdApAQCAtNTQ4LDEwICs1NDYsMjkgQEAgaW5saW5lIE5hbWVk
Tm9kZU1hcCogRWxlbWVudDo6dXBkYXRlZEF0dHJpYnV0ZXMoKSBjb25zdAogICAgIHJldHVybiBt
X2F0dHJpYnV0ZU1hcC5nZXQoKTsKIH0KIAoraW5saW5lIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBF
bGVtZW50OjplbnN1cmVBdHRyaWJ1dGVEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYXR0cmli
dXRlTWFwKQorICAgICAgICBjcmVhdGVBdHRyaWJ1dGVNYXAoKTsKKyAgICByZXR1cm4gbV9hdHRy
aWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKTsKK30KKworaW5saW5lIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhKiBFbGVtZW50Ojp1cGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0Cit7CisgICAgdXBkYXRl
SW52YWxpZEF0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpOworfQorCitp
bmxpbmUgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OmVuc3VyZVVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCkgY29uc3QKK3sKKyAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOworICAgIHJl
dHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCk7Cit9CisKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNl
dEF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKIHsKLSAgICBpZiAo
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBvdGhlci51cGRhdGVkQXR0cmlidXRlcygpKQot
ICAgICAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpLT5zZXRBdHRyaWJ1dGVzKCphdHRyaWJ1
dGVNYXApOworICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IG90
aGVyLnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpCisgICAgICAgIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCktPnNldEF0dHJpYnV0ZXMoKmF0dHJpYnV0ZURhdGEsIHRoaXMpOwogfQogCiBpbmxp
bmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKQpAQCAtNjYwLDEzICs2NzcsNiBAQCBpbmxpbmUg
dm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUodW5zaWduZWQgaW5kZXgpCiAgICAgbV9hdHRy
aWJ1dGVNYXAtPnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7CiB9CiAKLWlubGluZSBOYW1lZE5vZGVN
YXAqIEVsZW1lbnQ6OmVuc3VyZUF0dHJpYnV0ZU1hcCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2F0
dHJpYnV0ZU1hcCkKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7Ci0gICAgcmV0dXJuIG1f
YXR0cmlidXRlTWFwLmdldCgpOwotfQotCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJbnZh
bGlkQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N0eWxlQXR0cmlidXRlVmFsaWQo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IGNl
YTYyZjNjZjE5OGRkOTQwODFjNTNkYTkyNWI0ZmM3MGNmZGE0MGUuLmQyZTRmMGU4ZmJkZjk3OGEx
MWJmMjlkOTViMjFhNjU1YTliOWYxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRB
dHRyaWJ1dGVEYXRhLmNwcApAQCAtMjYsMTAgKzI2LDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRWxlbWVudEF0dHJpYnV0ZURhdGEuaCIKIAorI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorRWxl
bWVudEF0dHJpYnV0ZURhdGE6On5FbGVtZW50QXR0cmlidXRlRGF0YSgpCit7CisgICAgZGV0YWNo
QXR0cmlidXRlc0Zyb21FbGVtZW50KCk7Cit9CisKIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6
OnNldENsYXNzKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lLCBib29sIHNob3VsZEZvbGRDYXNlKQog
ewogICAgIG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NOYW1lLCBzaG91bGRGb2xkQ2FzZSk7CkBAIC02
MCw0ICs2NiwxMjYgQEAgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVu
c3VyZUF0dHJpYnV0ZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW0KICAgICByZXR1cm4gbV9hdHRy
aWJ1dGVTdHlsZS5nZXQoKTsKIH0KIAordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6YWRkQXR0
cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUsIEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gcHJwQXR0cmlidXRlOwor
CisgICAgaWYgKGVsZW1lbnQpCisgICAgICAgIGVsZW1lbnQtPndpbGxNb2RpZnlBdHRyaWJ1dGUo
YXR0cmlidXRlLT5uYW1lKCksIG51bGxBdG9tLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOworCisgICAg
bV9hdHRyaWJ1dGVzLmFwcGVuZChhdHRyaWJ1dGUpOworICAgIGlmIChBdHRyKiBhdHRyID0gYXR0
cmlidXRlLT5hdHRyKCkpCisgICAgICAgIGF0dHItPm1fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAg
ICBpZiAoZWxlbWVudCkKKyAgICAgICAgZWxlbWVudC0+ZGlkTW9kaWZ5QXR0cmlidXRlKGF0dHJp
YnV0ZS5nZXQoKSk7Cit9CisKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJp
YnV0ZShzaXplX3QgaW5kZXgsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKCkpOworCisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gbV9hdHRy
aWJ1dGVzW2luZGV4XTsKKworICAgIGlmIChlbGVtZW50KQorICAgICAgICBlbGVtZW50LT53aWxs
UmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwor
CisgICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRyaWJ1dGUtPmF0dHIoKSkKKyAgICAgICAgYXR0ci0+
bV9lbGVtZW50ID0gMDsKKyAgICBtX2F0dHJpYnV0ZXMucmVtb3ZlKGluZGV4KTsKKworICAgIGlm
IChlbGVtZW50KQorICAgICAgICBlbGVtZW50LT5kaWRSZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRl
LmdldCgpKTsKK30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGV0YWNoQXR0cmlidXRl
c0Zyb21FbGVtZW50KCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fYXR0cmlidXRlcy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKEF0
dHIqIGF0dHIgPSBtX2F0dHJpYnV0ZXNbaV0tPmF0dHIoKSkKKyAgICAgICAgICAgIGF0dHItPm1f
ZWxlbWVudCA9IDA7CisgICAgfQorfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjb3B5
QXR0cmlidXRlc1RvVmVjdG9yKFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+JiBjb3B5KQorewor
ICAgIGNvcHkgPSBtX2F0dHJpYnV0ZXM7Cit9CisKK3NpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbGVuID0g
bGVuZ3RoKCk7CisKKyAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZl
bHkgYW5kL29yIGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lID0gbV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCk7CisgICAgICAgIGlmICghYXR0
ck5hbWUuaGFzUHJlZml4KCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsIGF0dHJOYW1lLmxvY2FsTmFtZSgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBmYXN0ZXIgdG8gZG8gdGhpcyBjb21wYXJpc29uIHdpdGhvdXQg
Y2FsbGluZyB0b1N0cmluZywgd2hpY2gKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIHRlbXBv
cmFyeSBzdHJpbmcgYnkgY29uY2F0ZW5hdGlvbi4gQnV0IHRoaXMgYnJhbmNoIGlzIG9ubHkgcmVh
Y2hlZAorICAgICAgICAgICAgLy8gaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGhhcyBhIHByZWZpeCwg
d2hpY2ggaXMgcmFyZSBpbiBIVE1MLgorICAgICAgICAgICAgaWYgKGVxdWFsUG9zc2libHlJZ25v
cmluZ0Nhc2UobmFtZSwgYXR0ck5hbWUudG9TdHJpbmcoKSwgc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIG5vdEZvdW5kOworfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpzZXRBdHRy
aWJ1dGVzKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlciwgRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisKKyAgICAvLyBJZiBhc3NpZ25pbmcgdGhlIG1h
cCBjaGFuZ2VzIHRoZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8gY2FsbAorICAgIC8vIHVwZGF0
ZUlkLgorICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBnZXRBdHRyaWJ1dGVJdGVtKGVsZW1lbnQtPmRv
Y3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKKyAgICBBdHRyaWJ1dGUqIG5ld0lkID0gb3Ro
ZXIuZ2V0QXR0cmlidXRlSXRlbShlbGVtZW50LT5kb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUo
KSk7CisKKyAgICBpZiAob2xkSWQgfHwgbmV3SWQpCisgICAgICAgIGVsZW1lbnQtPnVwZGF0ZUlk
KG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUo
KSA6IG51bGxBdG9tKTsKKworICAgIEF0dHJpYnV0ZSogb2xkTmFtZSA9IGdldEF0dHJpYnV0ZUl0
ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgQXR0cmlidXRlKiBuZXdOYW1lID0gb3RoZXIu
Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKKworICAgIGlmIChvbGROYW1l
IHx8IG5ld05hbWUpCisgICAgICAgIGVsZW1lbnQtPnVwZGF0ZU5hbWUob2xkTmFtZSA/IG9sZE5h
bWUtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3TmFtZSA/IG5ld05hbWUtPnZhbHVlKCkgOiBudWxs
QXRvbSk7CisKKyAgICBjbGVhckF0dHJpYnV0ZXMoKTsKKyAgICB1bnNpZ25lZCBuZXdMZW5ndGgg
PSBvdGhlci5sZW5ndGgoKTsKKyAgICBtX2F0dHJpYnV0ZXMucmVzaXplKG5ld0xlbmd0aCk7CisK
KyAgICAvLyBGSVhNRTogVGhlc2UgbG9vcHMgY2FuIHByb2JhYmx5IGJlIGNvbWJpbmVkLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykKKyAgICAgICAgbV9hdHRy
aWJ1dGVzW2ldID0gb3RoZXIubV9hdHRyaWJ1dGVzW2ldLT5jbG9uZSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykKKyAgICAgICAgZWxlbWVudC0+YXR0cmli
dXRlQ2hhbmdlZChtX2F0dHJpYnV0ZXNbaV0uZ2V0KCkpOworfQorCit2b2lkIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpjbGVhckF0dHJpYnV0ZXMoKQoreworICAgIGNsZWFyQ2xhc3MoKTsKKyAgICBk
ZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKKyAgICBtX2F0dHJpYnV0ZXMuY2xlYXIoKTsK
K30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwbGFjZUF0dHJpYnV0ZShzaXplX3Qg
aW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUsIFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIEFTU0VSVChpbmRleCA8
IGxlbmd0aCgpKTsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IHBycEF0dHJp
YnV0ZTsKKyAgICBBdHRyaWJ1dGUqIG9sZCA9IG1fYXR0cmlidXRlc1tpbmRleF0uZ2V0KCk7CisK
KyAgICBlbGVtZW50LT53aWxsTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBvbGQt
PnZhbHVlKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7CisKKyAgICBpZiAoQXR0ciogYXR0ciA9IG9s
ZC0+YXR0cigpKQorICAgICAgICBhdHRyLT5tX2VsZW1lbnQgPSAwOworICAgIG1fYXR0cmlidXRl
c1tpbmRleF0gPSBhdHRyaWJ1dGU7CisgICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRyaWJ1dGUtPmF0
dHIoKSkKKyAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gZWxlbWVudDsKKworICAgIGVsZW1lbnQt
PmRpZE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUuZ2V0KCkpOworfQorCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCmluZGV4IDQwODA2NTk4MWY1NDFhYjRlNjhm
YTFjNmRlMTEwNjc3NDVlNGRlOWUuLmRjYmE2NGZiYmVjNzgwNzY2ZTA2MzNjYmNhODFhMGM1MDU5
YWFjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCkBAIC0y
Niw4ICsyNiwxMCBAQAogI2lmbmRlZiBFbGVtZW50QXR0cmlidXRlRGF0YV9oCiAjZGVmaW5lIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhX2gKIAorI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IlNwYWNlU3BsaXRTdHJpbmcuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5j
bHVkZSA8d3RmL05vdEZvdW5kLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsNiAr
MzcsOCBAQCBjbGFzcyBFbGVtZW50OwogCiBjbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YSB7CiBw
dWJsaWM6CisgICAgfkVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CisKICAgICB2b2lkIGNsZWFyQ2xh
c3MoKSB7IG1fY2xhc3NOYW1lcy5jbGVhcigpOyB9CiAgICAgdm9pZCBzZXRDbGFzcyhjb25zdCBT
dHJpbmcmIGNsYXNzTmFtZSwgYm9vbCBzaG91bGRGb2xkQ2FzZSk7CiAgICAgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgY2xhc3NOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NOYW1lczsgfQpA
QCAtNDksMTkgKzUzLDEwMCBAQCBwdWJsaWM6CiAgICAgU3R5bGVQcm9wZXJ0eVNldCogYXR0cmli
dXRlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZVN0eWxlLmdldCgpOyB9CiAgICAg
U3R5bGVQcm9wZXJ0eVNldCogZW5zdXJlQXR0cmlidXRlU3R5bGUoU3R5bGVkRWxlbWVudCopOwog
CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5zaXplKCk7
IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKworICAg
IC8vIEludGVybmFsIGludGVyZmFjZS4KKyAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0uZ2V0KCk7IH0K
KyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OworICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIGNvbnN0OworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGRvIG5vIGVycm9yIGNoZWNraW5n
LgorICAgIHZvaWQgYWRkQXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiwgRWxlbWVudCop
OworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBFbGVtZW50
Kik7CisgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGluZGV4LCBFbGVtZW50Kik7CisK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIE5h
bWVkTm9kZU1hcDsKIAogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKICAgICB7CiAgICAgfQog
CisgICAgdm9pZCBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKKyAgICB2b2lkIGNvcHlB
dHRyaWJ1dGVzVG9WZWN0b3IoVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4mKTsKKyAgICBBdHRy
aWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZEln
bm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OworICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNv
bnN0OworICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CisgICAgdm9p
ZCBzZXRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlciwgRWxlbWVu
dCopOworICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CisgICAgdm9pZCByZXBsYWNlQXR0cmli
dXRlKHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+LCBFbGVtZW50Kik7CisKICAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9pbmxpbmVTdHlsZURlY2w7CiAgICAgUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IG1fYXR0cmlidXRlU3R5bGU7CiAgICAgU3BhY2VTcGxpdFN0cmlu
ZyBtX2NsYXNzTmFtZXM7CiAgICAgQXRvbWljU3RyaW5nIG1faWRGb3JTdHlsZVJlc29sdXRpb247
CisgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+LCA0PiBtX2F0dHJpYnV0ZXM7CiB9OwogCitp
bmxpbmUgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgc2l6ZV90IGluZGV4
ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQXR0cmlidXRlKGluZGV4LCBlbGVtZW50
KTsKK30KKworaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJp
YnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UpIGNvbnN0Cit7CisgICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5h
bWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOworICAgIGlmIChpbmRleCAhPSBub3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0uZ2V0KCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRy
aWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgc2l6ZV90
IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAgIGlmIChpbmRleCAhPSBu
b3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0uZ2V0KCk7CisgICAg
cmV0dXJuIDA7Cit9CisKKy8vIFdlIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyIGluc3RlYWQgb2Yg
Y2FsbGluZyBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNvIHRoYXQgdGhlIGNhbGxlcgorLy8g
Y2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5zaXRpdmUgd2hl
cmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KK2lubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBj
b25zdAoreworICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlc1tpXS0+bmFtZSgp
Lm1hdGNoZXMobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJu
IG5vdEZvdW5kOworfQorCitpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRB
dHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAg
Ym9vbCBkb1Nsb3dDaGVjayA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2U7CisKKyAgICAvLyBP
cHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGF0dHJpYnV0ZSBleGlzdHMgYW5kIGl0cyBu
YW1lIGV4YWN0bHkgbWF0Y2hlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBtX2F0dHJpYnV0
ZXNbaV0tPm5hbWUoKTsKKyAgICAgICAgaWYgKCFhdHRyTmFtZS5oYXNQcmVmaXgoKSkgeworICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gYXR0ck5hbWUubG9jYWxOYW1lKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZG9TbG93Q2hlY2sgPSB0
cnVlOworICAgIH0KKworICAgIGlmIChkb1Nsb3dDaGVjaykKKyAgICAgICAgcmV0dXJuIGdldEF0
dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
OworICAgIHJldHVybiBub3RGb3VuZDsKK30KKwogfQogCiAjZW5kaWYgLy8gRWxlbWVudEF0dHJp
YnV0ZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCAwYTMyYTY2Y2Fm
ZWQ3MmM1ZTlhZmU2NzI4MmEyMTRjM2NjMmIyMWNjLi40NzE0NTk3MGViNTkzMmYzNjI3YzU1ODRk
YWJjN2JmODFlZDdkMTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApAQCAtNDAs
MTUgKzQwLDYgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Uo
Y29uc3QgRWxlbWVudCogZSkKICAgICByZXR1cm4gZSAmJiBlLT5kb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpICYmIGUtPmlzSFRNTEVsZW1lbnQoKTsKIH0KIAotaW5saW5lIHZvaWQgTmFtZWRO
b2RlTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKQotewotICAgIHNpemVfdCBzaXpl
ID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
IGkrKykgewotICAgICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigp
KQotICAgICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKLSAgICB9Ci19Ci0KIHZvaWQgTmFt
ZWROb2RlTWFwOjpyZWYoKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwpAQCAtNjEsMTQgKzUy
LDkgQEAgdm9pZCBOYW1lZE5vZGVNYXA6OmRlcmVmKCkKICAgICBtX2VsZW1lbnQtPmRlcmVmKCk7
CiB9CiAKLU5hbWVkTm9kZU1hcDo6fk5hbWVkTm9kZU1hcCgpCi17Ci0gICAgZGV0YWNoQXR0cmli
dXRlc0Zyb21FbGVtZW50KCk7Ci19Ci0KIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpn
ZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIEF0dHJpYnV0ZSog
YSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2Vs
ZW1lbnQpKTsKKyAgICBBdHRyaWJ1dGUqIGEgPSBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRl
SXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkpOwogICAgIGlm
ICghYSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC04Miw3ICs2OCw3IEBAIFBhc3NSZWZQ
dHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QKIAogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5h
bWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEF0
dHJpYnV0ZSogYSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZShtX2VsZW1lbnQpKTsKKyAgICBBdHRyaWJ1dGUqIGEgPSBtX2F0dHJpYnV0ZURhdGEuZ2V0
QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkp
OwogICAgIGlmICghYSkgewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTM1LDkgKzEyMSw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFw
OjpzZXROYW1lZEl0ZW0oTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgUmVmUHRy
PEF0dHI+IG9sZEF0dHI7CiAgICAgaWYgKG9sZEF0dHJpYnV0ZSkgewogICAgICAgICBvbGRBdHRy
ID0gb2xkQXR0cmlidXRlLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKLSAgICAgICAg
cmVwbGFjZUF0dHJpYnV0ZShpbmRleCwgYXR0cmlidXRlKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVE
YXRhLnJlcGxhY2VBdHRyaWJ1dGUoaW5kZXgsIGF0dHJpYnV0ZSwgbV9lbGVtZW50KTsKICAgICB9
IGVsc2UKLSAgICAgICAgYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgICAgIG1fYXR0cmli
dXRlRGF0YS5hZGRBdHRyaWJ1dGUoYXR0cmlidXRlLCBtX2VsZW1lbnQpOwogCiAgICAgcmV0dXJu
IG9sZEF0dHIucmVsZWFzZSgpOwogfQpAQCAtMTU3LDcgKzE0Myw3IEBAIFBhc3NSZWZQdHI8Tm9k
ZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgRXhjZXB0CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxBdHRyPiBh
dHRyID0gbV9hdHRyaWJ1dGVzW2luZGV4XS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7
CisgICAgUmVmUHRyPEF0dHI+IGF0dHIgPSBtX2F0dHJpYnV0ZURhdGEubV9hdHRyaWJ1dGVzW2lu
ZGV4XS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7CiAKICAgICByZW1vdmVBdHRyaWJ1
dGUoaW5kZXgpOwogCkBAIC0xNjksNDAgKzE1NSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRO
b2RlTWFwOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIGlmIChpbmRleCA+PSBsZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4
XS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7Ci19Ci0KLXZvaWQgTmFtZWROb2RlTWFw
Ojpjb3B5QXR0cmlidXRlc1RvVmVjdG9yKFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+JiBjb3B5
KQotewotICAgIGNvcHkgPSBtX2F0dHJpYnV0ZXM7Ci19Ci0KLXNpemVfdCBOYW1lZE5vZGVNYXA6
OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbiA9IGxl
bmd0aCgpOwotCi0gICAgLy8gQ29udGludWUgdG8gY2hlY2tpbmcgY2FzZS1pbnNlbnNpdGl2ZWx5
IGFuZC9vciBmdWxsIG5hbWVzcGFjZWQgbmFtZXMgaWYgbmVjZXNzYXJ5OgotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOwotICAgICAgICBpZiAoIWF0dHJO
YW1lLmhhc1ByZWZpeCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZSAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBhdHRyTmFtZS5sb2NhbE5hbWUoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogV291bGQgYmUgZmFzdGVyIHRvIGRvIHRoaXMgY29tcGFyaXNvbiB3aXRob3V0IGNh
bGxpbmcgdG9TdHJpbmcsIHdoaWNoCi0gICAgICAgICAgICAvLyBnZW5lcmF0ZXMgYSB0ZW1wb3Jh
cnkgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpb24uIEJ1dCB0aGlzIGJyYW5jaCBpcyBvbmx5IHJlYWNo
ZWQKLSAgICAgICAgICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBoYXMgYSBwcmVmaXgsIHdo
aWNoIGlzIHJhcmUgaW4gSFRNTC4KLSAgICAgICAgICAgIGlmIChlcXVhbFBvc3NpYmx5SWdub3Jp
bmdDYXNlKG5hbWUsIGF0dHJOYW1lLnRvU3RyaW5nKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBub3RGb3VuZDsKLX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6OmNsZWFyQXR0cmlidXRlcygp
Ci17Ci0gICAgYXR0cmlidXRlRGF0YSgpLT5jbGVhckNsYXNzKCk7Ci0gICAgZGV0YWNoQXR0cmli
dXRlc0Zyb21FbGVtZW50KCk7Ci0gICAgbV9hdHRyaWJ1dGVzLmNsZWFyKCk7CisgICAgcmV0dXJu
IG1fYXR0cmlidXRlRGF0YS5tX2F0dHJpYnV0ZXNbaW5kZXhdLT5jcmVhdGVBdHRySWZOZWVkZWQo
bV9lbGVtZW50KTsKIH0KIAogdm9pZCBOYW1lZE5vZGVNYXA6OmRldGFjaEZyb21FbGVtZW50KCkK
QEAgLTIxMiw5MCArMTY1LDcgQEAgdm9pZCBOYW1lZE5vZGVNYXA6OmRldGFjaEZyb21FbGVtZW50
KCkKICAgICAvLyBvZiB0aGF0LCB3ZSBjYW4gc2ltcGx5IGNsZWFyIGFsbCB0aGUgYXR0cmlidXRl
cyB0byBhdm9pZCBhY2Nlc3Npbmcgc3RhbGUKICAgICAvLyBwb2ludGVycyB0byBkbyB0aGluZ3Mg
bGlrZSBjcmVhdGUgQXR0ciBvYmplY3RzLgogICAgIG1fZWxlbWVudCA9IDA7Ci0gICAgY2xlYXJB
dHRyaWJ1dGVzKCk7Ci19Ci0KLXZvaWQgTmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0
IE5hbWVkTm9kZU1hcCYgb3RoZXIpCi17Ci0gICAgLy8gY2xvbmUgYWxsIGF0dHJpYnV0ZXMgaW4g
dGhlIG90aGVyIG1hcCwgYnV0IGF0dGFjaCB0byBvdXIgZWxlbWVudAotICAgIGlmICghbV9lbGVt
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiBhc3NpZ25pbmcgdGhlIG1hcCBjaGFu
Z2VzIHRoZSBpZCBhdHRyaWJ1dGUsIHdlIG5lZWQgdG8gY2FsbAotICAgIC8vIHVwZGF0ZUlkLgot
ICAgIEF0dHJpYnV0ZSogb2xkSWQgPSBnZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwotICAgIEF0dHJpYnV0ZSogbmV3SWQgPSBvdGhlci5n
ZXRBdHRyaWJ1dGVJdGVtKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkp
OwotCi0gICAgaWYgKG9sZElkIHx8IG5ld0lkKQotICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUlk
KG9sZElkID8gb2xkSWQtPnZhbHVlKCkgOiBudWxsQXRvbSwgbmV3SWQgPyBuZXdJZC0+dmFsdWUo
KSA6IG51bGxBdG9tKTsKLQotICAgIEF0dHJpYnV0ZSogb2xkTmFtZSA9IGdldEF0dHJpYnV0ZUl0
ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7Ci0gICAgQXR0cmlidXRlKiBuZXdOYW1lID0gb3RoZXIu
Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKLQotICAgIGlmIChvbGROYW1l
IHx8IG5ld05hbWUpCi0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRlTmFtZShvbGROYW1lID8gb2xk
TmFtZS0+dmFsdWUoKSA6IG51bGxBdG9tLCBuZXdOYW1lID8gbmV3TmFtZS0+dmFsdWUoKSA6IG51
bGxBdG9tKTsKLQotICAgIGNsZWFyQXR0cmlidXRlcygpOwotICAgIHVuc2lnbmVkIG5ld0xlbmd0
aCA9IG90aGVyLmxlbmd0aCgpOwotICAgIG1fYXR0cmlidXRlcy5yZXNpemUobmV3TGVuZ3RoKTsK
LQotICAgIC8vIEZJWE1FOiBUaGVzZSBsb29wcyBjYW4gcHJvYmFibHkgYmUgY29tYmluZWQuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgaSsrKQotICAgICAgICBtX2F0
dHJpYnV0ZXNbaV0gPSBvdGhlci5tX2F0dHJpYnV0ZXNbaV0tPmNsb25lKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgaSsrKQotICAgICAgICBtX2VsZW1lbnQtPmF0
dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGVzW2ldLmdldCgpKTsKLX0KLQotdm9pZCBOYW1lZE5v
ZGVNYXA6OmFkZEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gcHJwQXR0cmlidXRlKQot
ewotICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IHBycEF0dHJpYnV0ZTsKLQotICAg
IGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+d2lsbE1vZGlmeUF0dHJpYnV0ZShh
dHRyaWJ1dGUtPm5hbWUoKSwgbnVsbEF0b20sIGF0dHJpYnV0ZS0+dmFsdWUoKSk7Ci0KLSAgICBt
X2F0dHJpYnV0ZXMuYXBwZW5kKGF0dHJpYnV0ZSk7Ci0gICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRy
aWJ1dGUtPmF0dHIoKSkKLSAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gbV9lbGVtZW50OwotCi0g
ICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT5kaWRNb2RpZnlBdHRyaWJ1dGUo
YXR0cmlidXRlLmdldCgpKTsKLX0KLQotdm9pZCBOYW1lZE5vZGVNYXA6OnJlbW92ZUF0dHJpYnV0
ZShzaXplX3QgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOwotCi0gICAg
UmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVzW2luZGV4XTsKLQotICAg
IGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+d2lsbFJlbW92ZUF0dHJpYnV0ZShh
dHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKLQotICAgIGlmIChBdHRyKiBh
dHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCi0gICAgICAgIGF0dHItPm1fZWxlbWVudCA9IDA7Ci0g
ICAgbV9hdHRyaWJ1dGVzLnJlbW92ZShpbmRleCk7Ci0KLSAgICBpZiAobV9lbGVtZW50KQotICAg
ICAgICBtX2VsZW1lbnQtPmRpZFJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUuZ2V0KCkpOwotfQot
Ci12b2lkIE5hbWVkTm9kZU1hcDo6cmVwbGFjZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgsIFBhc3NS
ZWZQdHI8QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgbGVu
Z3RoKCkpOwotCi0gICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gcHJwQXR0cmlidXRl
OwotICAgIEF0dHJpYnV0ZSogb2xkID0gbV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQoKTsKLQotICAg
IGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+d2lsbE1vZGlmeUF0dHJpYnV0ZShh
dHRyaWJ1dGUtPm5hbWUoKSwgb2xkLT52YWx1ZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwotCi0g
ICAgaWYgKEF0dHIqIGF0dHIgPSBvbGQtPmF0dHIoKSkKLSAgICAgICAgYXR0ci0+bV9lbGVtZW50
ID0gMDsKLSAgICBtX2F0dHJpYnV0ZXNbaW5kZXhdID0gYXR0cmlidXRlOwotICAgIGlmIChBdHRy
KiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCi0gICAgICAgIGF0dHItPm1fZWxlbWVudCA9IG1f
ZWxlbWVudDsKLQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+ZGlkTW9k
aWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS5nZXQoKSk7CisgICAgbV9hdHRyaWJ1dGVEYXRhLmNsZWFy
QXR0cmlidXRlcygpOwogfQogCiBib29sIE5hbWVkTm9kZU1hcDo6bWFwc0VxdWl2YWxlbnQoY29u
c3QgTmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAu
aAppbmRleCA2YmRkZTBmYjMyMzA1OGJjOTI0MjBjMzE5ZTJiZTZkZGFkZWZjMzcwLi4zMjAxZmNk
MDgwMzRlMWZlMDI1Y2FkZGNkYzI0MjdiMTEzOTc2Nzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTmFtZWROb2RlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5oCkBAIC0yNSwxMCArMjUsOCBAQAogI2lmbmRlZiBOYW1lZE5vZGVNYXBfaAogI2RlZmlu
ZSBOYW1lZE5vZGVNYXBfaAogCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRWxl
bWVudEF0dHJpYnV0ZURhdGEuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL05vdEZvdW5kLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsOCAr
NDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTmFtZWROb2RlTWFw
KGVsZW1lbnQpKTsKICAgICB9CiAKLSAgICB+TmFtZWROb2RlTWFwKCk7Ci0KICAgICB2b2lkIHJl
ZigpOwogICAgIHZvaWQgZGVyZWYoKTsKIApAQCAtNjMsMTkgKzU5LDE3IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbU5TKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7
CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotICAg
IHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuc2l6ZSgpOyB9Ci0g
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9CisgICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5sZW5ndGgoKTsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5pc0VtcHR5KCk7
IH0KIAogICAgIC8vIEludGVybmFsIGludGVyZmFjZS4KIAotICAgIEF0dHJpYnV0ZSogYXR0cmli
dXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4
XS5nZXQoKTsgfQotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3Q7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBR
dWFsaWZpZWROYW1lJikgY29uc3Q7Ci0KLSAgICB2b2lkIGNvcHlBdHRyaWJ1dGVzVG9WZWN0b3Io
VmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4mKTsKKyAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5hdHRyaWJ1
dGVJdGVtKGluZGV4KTsgfQorICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0
cmlidXRlSXRlbShuYW1lKTsgfQorICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdl
dEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsgfQogCi0gICAgdm9pZCBzaHJpbmtUb0xlbmd0aCgp
IHsgbV9hdHRyaWJ1dGVzLnNocmlua0NhcGFjaXR5KGxlbmd0aCgpKTsgfQotICAgIHZvaWQgcmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkgeyBtX2F0dHJpYnV0ZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShjYXBhY2l0eSk7IH0KKyAgICB2b2lkIHNocmlua1RvTGVuZ3Ro
KCkgeyBtX2F0dHJpYnV0ZURhdGEubV9hdHRyaWJ1dGVzLnNocmlua0NhcGFjaXR5KGxlbmd0aCgp
KTsgfQorICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkg
eyBtX2F0dHJpYnV0ZURhdGEubV9hdHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2Fw
YWNpdHkpOyB9CiAKICAgICAvLyBVc2VkIGR1cmluZyBwYXJzaW5nOiBvbmx5IGluc2VydHMgaWYg
bm90IGFscmVhZHkgdGhlcmUuIE5vIGVycm9yIGNoZWNraW5nIQogICAgIHZvaWQgaW5zZXJ0QXR0
cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdBdHRyaWJ1dGUsIGJvb2wgYWxsb3dEdXBs
aWNhdGVzKQpAQCAtODgsOSArODIsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXBzRXF1aXZhbGVu
dChjb25zdCBOYW1lZE5vZGVNYXAqIG90aGVyTWFwKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBkbyBubyBlcnJvciBjaGVja2luZy4KLSAgICB2b2lkIGFkZEF0dHJpYnV0ZShQYXNz
UmVmUHRyPEF0dHJpYnV0ZT4pOwotICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpOworICAg
IHZvaWQgYWRkQXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUpIHsgbV9h
dHRyaWJ1dGVEYXRhLmFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUsIG1fZWxlbWVudCk7IH0KKyAgICB2
b2lkIHJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSB7IG1fYXR0cmli
dXRlRGF0YS5yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbV9lbGVtZW50KTsgfQorICAgIHZvaWQgcmVt
b3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCkgeyBtX2F0dHJpYnV0ZURhdGEucmVtb3ZlQXR0cmli
dXRlKGluZGV4LCBtX2VsZW1lbnQpOyB9CiAKICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50OyB9CiAKQEAgLTEwMywxNCArOTcsOCBAQCBwcml2YXRlOgogICAg
IHsKICAgICB9CiAKLSAgICB2b2lkIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogICAg
IHZvaWQgZGV0YWNoRnJvbUVsZW1lbnQoKTsKLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0
ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNv
bnN0OwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OwotICAgIHNpemVfdCBnZXRB
dHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGVzKGNvbnN0
IE5hbWVkTm9kZU1hcCYpOwotICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7Ci0gICAgdm9pZCBy
ZXBsYWNlQXR0cmlidXRlKHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKKyAg
ICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5n
ZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOyB9CiAKICAg
ICAvLyBGSVhNRTogTmFtZWROb2RlTWFwIGlzIGJlaW5nIGJyb2tlbiB1cCBpbnRvIHR3byBjbGFz
c2VzLCBvbmUgY29udGFpbmluZyBkYXRhCiAgICAgLy8gICAgICAgIGZvciBlbGVtZW50cyB3aXRo
IGF0dHJpYnV0ZXMsIGFuZCBvbmUgZm9yIGV4cG9zdXJlIHRvIHRoZSBET00uCkBAIC0xMTgsNjYg
KzEwNiw4IEBAIHByaXZhdGU6CiAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEgbV9hdHRyaWJ1dGVE
YXRhOwogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwotICAgIFZlY3RvcjxSZWZQdHI8QXR0cmli
dXRlPiwgND4gbV9hdHRyaWJ1dGVzOwogfTsKIAotaW5saW5lIEF0dHJpYnV0ZSogTmFtZWROb2Rl
TWFwOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Ci17
Ci0gICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwotICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0u
Z2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBzaXplX3QgTmFtZWROb2RlTWFwOjpn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKLXsK
LSAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS5tYXRjaGVz
KG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3Vu
ZDsKLX0KLQotaW5saW5lIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFwOjpnZXRBdHRyaWJ1dGVJdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25z
dAotewotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCi0gICAg
ICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOwotICAgIHJldHVybiAwOwotfQot
Ci0vLyBXZSB1c2UgYSBib29sZWFuIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSBzbyB0aGF0IHRoZSBjYWxsZXIKLS8vIGNhbiB0dW5lIHRoZSBi
ZWhhdmlvciAoaGFzQXR0cmlidXRlIGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmli
dXRlIGlzIG5vdCkuCi1pbmxpbmUgc2l6ZV90IE5hbWVkTm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRl
bUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGJvb2wgZG9TbG93
Q2hlY2sgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlOwotCi0gICAgLy8gT3B0aW1pemUgZm9y
IHRoZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgZXhpc3RzIGFuZCBpdHMgbmFtZSBleGFjdGx5
IG1hdGNoZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gbV9hdHRyaWJ1dGVzW2ldLT5uYW1l
KCk7Ci0gICAgICAgIGlmICghYXR0ck5hbWUuaGFzUHJlZml4KCkpIHsKLSAgICAgICAgICAgIGlm
IChuYW1lID09IGF0dHJOYW1lLmxvY2FsTmFtZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRvU2xvd0NoZWNrID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoZG9TbG93Q2hlY2spCi0gICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXhTbG93Q2FzZShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKLSAgICByZXR1
cm4gbm90Rm91bmQ7Ci19Ci0KLWlubGluZSB2b2lkIE5hbWVkTm9kZU1hcDo6cmVtb3ZlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0gZ2V0
QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTmFtZWROb2RlTWFwX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U3R5bGVkRWxlbWVudC5oCmluZGV4IDJhNmQzOTJjZjhjODgyNmRiMWM0ODUyZTAzNmQzMzQxNGRk
ZDA1NjkuLjI2ODA1ZTQwMTQ0Y2UxNzQ5MjkyZTQ0NzUxNTdhOGY2YmZhZWVlOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1N0eWxlZEVsZW1lbnQuaApAQCAtNDgsMTEgKzQ4LDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCiAgICAgU3R5bGVQcm9wZXJ0eVNldCog
aW5saW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgpID8gYXR0cmli
dXRlRGF0YSgpLT5pbmxpbmVTdHlsZURlY2woKSA6IDA7IH0KLSAgICBTdHlsZVByb3BlcnR5U2V0
KiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1dGVEYXRhV2l0
aG91dFVwZGF0ZSgpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2wodGhpcyk7IH0KKyAgICBTdHlsZVBy
b3BlcnR5U2V0KiBlbnN1cmVJbmxpbmVTdHlsZURlY2woKSB7IHJldHVybiBlbnN1cmVBdHRyaWJ1
dGVEYXRhKCktPmVuc3VyZUlubGluZVN0eWxlRGVjbCh0aGlzKTsgfQogICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBPVkVSUklERSB7IHJldHVybiBlbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOyB9CiAKICAgICBTdHlsZVBy
b3BlcnR5U2V0KiBhdHRyaWJ1dGVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEo
KSA/IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlU3R5bGUoKSA6IDA7IH0KLSAgICBTdHlsZVBy
b3BlcnR5U2V0KiBlbnN1cmVBdHRyaWJ1dGVTdHlsZSgpIHsgcmV0dXJuIGVuc3VyZUF0dHJpYnV0
ZURhdGFXaXRob3V0VXBkYXRlKCktPmVuc3VyZUF0dHJpYnV0ZVN0eWxlKHRoaXMpOyB9CisgICAg
U3R5bGVQcm9wZXJ0eVNldCogZW5zdXJlQXR0cmlidXRlU3R5bGUoKSB7IHJldHVybiBlbnN1cmVB
dHRyaWJ1dGVEYXRhKCktPmVuc3VyZUF0dHJpYnV0ZVN0eWxlKHRoaXMpOyB9CiAKICAgICBjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDk2MDA0MGZkZDE5Y2UwMjIzMDMxZDViYmU1
YmY3MmVlZDQ2ZDI0ZDEuLmEwNGQ1NGNjNDVhZjY1YmUyZmMxNDhlMTE4NjlkNmE5NTBkNTBiODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNTQ1LDcgKzU0
NSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgpCiAgICAgICAgIHJlZ2lz
dGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKTsKIAogICAgIGlmIChkaWRSZXNwZWN0
SGVpZ2h0QW5kV2lkdGggIT0gbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RIZWlnaHRBbmRXaWR0
aEF0dHJpYnV0ZXMoKSkgewotICAgICAgICBBU1NFUlQoYXR0cmlidXRlTWFwKCkpOworICAgICAg
ICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogaGVpZ2h0
ID0gZ2V0QXR0cmlidXRlSXRlbShoZWlnaHRBdHRyKSkKICAgICAgICAgICAgIGF0dHJpYnV0ZUNo
YW5nZWQoaGVpZ2h0KTsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogd2lkdGggPSBnZXRBdHRyaWJ1
dGVJdGVtKHdpZHRoQXR0cikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmgKaW5kZXggZTZi
ZDAxM2ViZjhmZTA2ZGUyNGRmOGE2NjhjZTExM2YyYmVjYTkzOC4uZDZlNTcxMDg1ZTVmM2M5NDkz
YTc4NWM4YmExMGM1MGM4Mzc1NWI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIuaApA
QCAtMzcsMTUgKzM3LDE0IEBAIHN0cnVjdCBTVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVy
PHRydWU+IHsKICAgICAgICAgLy8gQXR0cmlidXRlIGRpcmVjdGx5IHRvIGF2b2lkIGEgY2FsbCB0
byBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkCiAgICAgICAgIC8vIHRoYXQgY291bGQgY2F1c2Ug
dGhlIFNWR0VsZW1lbnQgdG8gZXJyb25lb3VzbHkgcmVzZXQgaXRzIHByb3BlcnRpZXMuCiAgICAg
ICAgIC8vIHN2Zy9kb20vU1ZHU3RyaW5nTGlzdC1iYXNpY3MueGh0bWwgZXhlcmNpc2VzIHRoaXMg
YmVoYXZpb3IuCi0gICAgICAgIE5hbWVkTm9kZU1hcCogbmFtZWRBdHRyTWFwID0gb3duZXJFbGVt
ZW50LT5lbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOwotICAgICAgICBBdHRyaWJ1dGUqIG9sZCA9
IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShhdHRyTmFtZSk7CisgICAgICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gb3duZXJFbGVtZW50LT5lbnN1cmVVcGRh
dGVkQXR0cmlidXRlRGF0YSgpOworICAgICAgICBBdHRyaWJ1dGUqIG9sZCA9IGF0dHJpYnV0ZURh
dGEtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0ck5hbWUpOwogICAgICAgICBpZiAob2xkICYmIHZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5yZW1vdmVBdHRyaWJ1dGUob2xk
LT5uYW1lKCkpOworICAgICAgICAgICAgYXR0cmlidXRlRGF0YS0+cmVtb3ZlQXR0cmlidXRlKG9s
ZC0+bmFtZSgpLCBvd25lckVsZW1lbnQpOwogICAgICAgICBlbHNlIGlmICghb2xkICYmICF2YWx1
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+YWRkQXR0cmlidXRlKG93bmVy
RWxlbWVudC0+Y3JlYXRlQXR0cmlidXRlKGF0dHJOYW1lLCB2YWx1ZSkpOworICAgICAgICAgICAg
YXR0cmlidXRlRGF0YS0+YWRkQXR0cmlidXRlKG93bmVyRWxlbWVudC0+Y3JlYXRlQXR0cmlidXRl
KGF0dHJOYW1lLCB2YWx1ZSksIG93bmVyRWxlbWVudCk7CiAgICAgICAgIGVsc2UgaWYgKG9sZCAm
JiAhdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICBvbGQtPnNldFZhbHVlKHZhbHVlKTsKLQog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyUXQuY3BwCmluZGV4IGNkNmVhMTQ5NGY1MTI2MTAyNThjNjgyMzkyYjFhNTRmOGFiNDM5
MmMuLjc1YjMxOWZmZWVhYjYyZjc2YTA0NzZmYTIyOWY1MDVkNTg4NjNiNjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtMTM4
LDcgKzEzOCw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVu
dEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAKICAgICBRWG1sU3RyZWFtTmFt
ZXNwYWNlRGVjbGFyYXRpb25zIG5hbWVzcGFjZXM7CiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50
ID0gZWxlbVN0YWNrLmxhc3QoKTsgIWVsZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1v
dmVMYXN0KCkpIHsKLSAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogYXR0cnMgPSBlbGVtZW50LT51
cGRhdGVkQXR0cmlidXRlcygpKSB7CisgICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cnMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgpKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAg
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAg
ICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0gInhtbG5zIikK
</data>
<flag name="review"
          id="128320"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>