<?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>128877</bug_id>
          
          <creation_ts>2014-02-15 18:43:04 -0800</creation_ts>
          <short_desc>Move document life time management from TreeScope to Document</short_desc>
          <delta_ts>2014-02-16 11:27:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>981223</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-15 18:43:04 -0800</bug_when>
    <thetext>Also devirtualize TreeScope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981246</commentid>
    <comment_count>1</comment_count>
      <attachid>224311</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-15 19:29:11 -0800</bug_when>
    <thetext>Created attachment 224311
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981248</commentid>
    <comment_count>2</comment_count>
      <attachid>224311</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-15 19:48:21 -0800</bug_when>
    <thetext>Comment on attachment 224311
patch

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

&gt; Source/WebCore/css/ElementRuleCollector.cpp:158
&gt; -    if (!MatchingUARulesScope::isMatchingUARules()
&gt; -        &amp;&amp; !m_element.treeScope().applyAuthorStyles())
&gt; +    // Only match UA rules in shadow tree.
&gt; +    if (!MatchingUARulesScope::isMatchingUARules() &amp;&amp; m_element.treeScope().rootNode()-&gt;isShadowRoot())

It seems like we can put this in a separate patch.

&gt; Source/WebCore/dom/TreeScope.cpp:-54
&gt; -    int ints[1];

Don&apos;t we still have m_resetStyleInheritance and m_type as flags here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981249</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-15 19:57:30 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/dom/TreeScope.cpp:-54
&gt; &gt; -    int ints[1];
&gt; 
&gt; Don&apos;t we still have m_resetStyleInheritance and m_type as flags here?

You are thinking ShadowRoot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981250</commentid>
    <comment_count>4</comment_count>
      <attachid>224312</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-02-15 19:57:58 -0800</bug_when>
    <thetext>Created attachment 224312
build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981281</commentid>
    <comment_count>5</comment_count>
      <attachid>224312</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-16 11:27:37 -0800</bug_when>
    <thetext>Comment on attachment 224312
build fix

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

r=me. This feels like a good step forward.

&gt; Source/WebCore/dom/Document.h:1714
&gt; -    , m_treeScope(document ? document : &amp;TreeScope::noDocumentInstance())
&gt; +    , m_treeScope(document)

Nice!

&gt; Source/WebCore/dom/DocumentOrderedMap.cpp:94
&gt; +    UNUSED_PARAM(treeScope);
&gt;      ASSERT_WITH_SECURITY_IMPLICATION(element.isInTreeScope());
&gt;      ASSERT_WITH_SECURITY_IMPLICATION(treeScope.rootNode()-&gt;containsIncludingShadowDOM(&amp;element));

Oh, there&apos;s no ASSERT_WITH_SECURITY_IMPLICATION_UNUSED so we have to use UNUSED_PARAM.
Not ideal but whatever.

&gt; Source/WebCore/dom/Node.cpp:306
&gt;      if (hasRareData())
&gt;          clearRareData();

This is also done by ~ShadowRoot which no longer seems necessary.

&gt; Source/WebCore/dom/TreeScope.h:98
&gt; +    ContainerNode* rootNode() const { return &amp;m_rootNode; }

I suppose we can make this return ContainerNode&amp; later on.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224311</attachid>
            <date>2014-02-15 19:29:11 -0800</date>
            <delta_ts>2014-02-15 19:57:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>tree-scope-non-virtual-2.patch</filename>
            <type>text/plain</type>
            <size>30307</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE0LTAyLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGRvY3VtZW50IGxpZmUg
dGltZSBtYW5hZ2VtZW50IGZyb20gVHJlZVNjb3BlIHRvIERvY3VtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg4NzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZG9jdW1lbnQgbGlmZSB0aW1l
IGlzIG1hbmFnZWQgaW4gY29uZnVzaW5nIG1hbm5lciBieSBUcmVlU2NvcGVzIHdoaWNoIGFyZSBh
bHNvIGluaGVyaXRlZCB0byBTaGFkb3dSb290cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0
Y2hlcyBtb3ZlcyB0aGUgbGlmZSB0aW1lIG1hbmFnZW1lbnQgdG8gRG9jdW1lbnQuIE5vZGVzIGlu
IHNoYWRvdyB0cmVlcyBzZWxmT25seVJlZiB0aGUgRG9jdW1lbnQgaW5zdGVhZAorICAgICAgICBv
ZiB0aGUgU2hhZG93Um9vdC4gU2hhZG93Um9vdCBpcyB0cmVhdGVkIGxpa2UgYW55IG90aGVyIG5v
ZGUgYW5kIHNlbGZPbmx5UmVmcyB0aGUgRG9jdW1lbnQgYXMgd2VsbCAod2hpY2ggaXQKKyAgICAg
ICAgYWxzbyBkaWQgZWFybGllciwgaW5kaXJlY3RseSkuCisgICAgICAgIAorICAgICAgICBUcmVl
U2NvcGUgaXMgZGV2aXJ0dWFsaXplZC4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIEF1dGhvciBzdHlsZXNoZWV0
cyBuZXZlciBtYXRjaCBpbiBVQSBzaGFkb3cgdHJlZXMuCisKKyAgICAgICAgKiBkb20vQ29udGFp
bmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjp+Q29udGFpbmVy
Tm9kZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZk9ubHlS
ZWYpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGZPbmx5RGVyZWYpOgorCisgICAg
ICAgICAgICBUbyBhdm9pZCBicmFuY2hlcyBEb2N1bWVudCBzZWxmLXJlZnMgaXRzZWxmIGxpa2Ug
YWxsIG90aGVyIE5vZGVzLiBUaGlzIGlzIHdoeSBkZWxldGlvbiB3aWxsIG5vdyBoYXBwZW4gb24g
cmVmIGNvdW50IG9mIDEuCisKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRG9jdW1lbnROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjph
ZGQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJv
bSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6fk5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVtb3ZlZExhc3RSZWYpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjppbkRvY3VtZW50KToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3Q6On5TaGFkb3dSb290KToKKyAgICAgICAgKiBkb20vU2hhZG93
Um9vdC5oOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjpUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjp+VHJl
ZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNjb3Bl
KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2Nv
cGU6OmRvY3VtZW50U2NvcGUpOgorICAgICAgICAKKyAgICAgICAgICAgIERvY3VtZW50IGNhbiBu
byBsb25nZXIgZXZlciBiZSBudWxsLgorCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnJv
b3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6c2V0RG9jdW1lbnRTY29wZSk6
CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
IAorICAgICAgICAgICAgTWFuYWdlIERvY3VtZW50IHNlbGZPbmx5UmVmcyBmb3Igbm9kZXMgaW4g
c2hhZG93IHRyZWVzIHRvby4KKworICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6
dXBkYXRlVHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1v
dmVOb2RlVG9OZXdEb2N1bWVudCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuaDoK
KwogMjAxNC0wMi0xNSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGNoZWNrZWQgY2FzdHMgZm9yIEV2ZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxNjQxMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTQsMTEgKzE1NCw4IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGkK
ICAgICBpZiAobV9lbGVtZW50LmlzV2ViVlRURWxlbWVudCgpKQogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVzKCks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNlbmRpZgotICAgIC8vIENoZWNrIHdoZXRoZXIg
b3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBz
Y29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6Ci0gICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKLSAgICAv
LyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCi0gICAgaWYgKCFNYXRjaGlu
Z1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQotICAgICAgICAmJiAhbV9lbGVtZW50
LnRyZWVTY29wZSgpLmFwcGx5QXV0aG9yU3R5bGVzKCkpCisgICAgLy8gT25seSBtYXRjaCBVQSBy
dWxlcyBpbiBzaGFkb3cgdHJlZS4KKyAgICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01h
dGNoaW5nVUFSdWxlcygpICYmIG1fZWxlbWVudC50cmVlU2NvcGUoKS5yb290Tm9kZSgpLT5pc1No
YWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0
IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBh
IGJ1ZmZlciBhbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlz
aW9uIDE2NDEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDggKzE1MCw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6dGFrZUFs
bENoaWxkcmVuRnJvbSgKIAogQ29udGFpbmVyTm9kZTo6fkNvbnRhaW5lck5vZGUoKQogewotICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBkb2N1bWVudEludGVybmFsKCkpCi0gICAgICAgIHdp
bGxCZURlbGV0ZWRGcm9tKGRvY3VtZW50KTsKKyAgICB3aWxsQmVEZWxldGVkRnJvbSgmZG9jdW1l
bnQoKSk7CiAgICAgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbigpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE2NDEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw4ICszOTMsOSBAQCBib29sIFRleHRB
dXRvU2l6aW5nVHJhaXRzOjppc0RlbGV0ZWRWYWx1CiAjZW5kaWYKIAogRG9jdW1lbnQ6OkRvY3Vt
ZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIHVuc2lnbmVkIGRvY3VtZW50Q2xhc3Nl
cywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MpCi0gICAgOiBDb250YWluZXJOb2RlKG51bGxw
dHIsIENyZWF0ZURvY3VtZW50KQotICAgICwgVHJlZVNjb3BlKHRoaXMpCisgICAgOiBDb250YWlu
ZXJOb2RlKHRoaXMsIENyZWF0ZURvY3VtZW50KQorICAgICwgVHJlZVNjb3BlKCp0aGlzKQorICAg
ICwgbV9zZWxmT25seVJlZkNvdW50KDEpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgUExB
VEZPUk0oSU9TKQogICAgICwgbV9oYW5kbGluZ1RvdWNoRXZlbnQoZmFsc2UpCiAgICAgLCBtX3Rv
dWNoRXZlbnRSZWdpb25zRGlydHkoZmFsc2UpCkBAIC02MzMsNDMgKzYzNCw1OSBAQCBEb2N1bWVu
dDo6fkRvY3VtZW50KCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSChtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50cyk7ICsraSkKICAgICAgICAgQVNTRVJU
KCFtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50c1tpXSk7CiAKLSAgICBjbGVhckRvY3VtZW50
U2NvcGUoKTsKLQogICAgIEluc3BlY3RvckNvdW50ZXJzOjpkZWNyZW1lbnRDb3VudGVyKEluc3Bl
Y3RvckNvdW50ZXJzOjpEb2N1bWVudENvdW50ZXIpOwogfQogCi12b2lkIERvY3VtZW50Ojpkcm9w
Q2hpbGRyZW4oKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYoKQogewogICAgIEFTU0VS
VCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKLQotICAgIC8vIFdlIG11c3QgbWFrZSBzdXJlIG5vdCB0
byBiZSByZXRhaW5pbmcgYW55IG9mIG91ciBjaGlsZHJlbiB0aHJvdWdoCi0gICAgLy8gdGhlc2Ug
ZXh0cmEgcG9pbnRlcnMgb3Igd2Ugd2lsbCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAg
bV9mb2N1c2VkRWxlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9ob3ZlcmVkRWxlbWVudCA9IG51bGxw
dHI7Ci0gICAgbV9hY3RpdmVFbGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3RpdGxlRWxlbWVudCA9
IG51bGxwdHI7Ci0gICAgbV9kb2N1bWVudEVsZW1lbnQgPSBudWxscHRyOwotICAgIG1fdXNlckFj
dGlvbkVsZW1lbnRzLmRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpOworICAgIEFTU0VSVChtX3Nl
bGZPbmx5UmVmQ291bnQpOworICAgIGlmIChtX3NlbGZPbmx5UmVmQ291bnQgPiAxKSB7CisgICAg
ICAgIC8vIElmIHJlbW92aW5nIGEgY2hpbGQgcmVtb3ZlcyB0aGUgbGFzdCBzZWxmLW9ubHkgcmVm
LCB3ZSBkb24ndCB3YW50IHRoZSBzY29wZSB0byBiZSBkZXN0cm95ZWQKKyAgICAgICAgLy8gdW50
aWwgYWZ0ZXIgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0IG91
cnNlbHZlcyB3aXRoIGFuIGV4dHJhIHNlbGYtb25seSByZWYuCisgICAgICAgIHNlbGZPbmx5UmVm
KCk7CisKKyAgICAgICAgLy8gV2UgbXVzdCBtYWtlIHN1cmUgbm90IHRvIGJlIHJldGFpbmluZyBh
bnkgb2Ygb3VyIGNoaWxkcmVuIHRocm91Z2gKKyAgICAgICAgLy8gdGhlc2UgZXh0cmEgcG9pbnRl
cnMgb3Igd2Ugd2lsbCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgIG1fZm9jdXNl
ZEVsZW1lbnQgPSBudWxscHRyOworICAgICAgICBtX2hvdmVyZWRFbGVtZW50ID0gbnVsbHB0cjsK
KyAgICAgICAgbV9hY3RpdmVFbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgbV90aXRsZUVsZW1l
bnQgPSBudWxscHRyOworICAgICAgICBtX2RvY3VtZW50RWxlbWVudCA9IG51bGxwdHI7CisgICAg
ICAgIG1fdXNlckFjdGlvbkVsZW1lbnRzLmRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpOwogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gbnVsbHB0
cjsKLSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50U3RhY2suY2xlYXIoKTsKKyAgICAgICAgbV9mdWxs
U2NyZWVuRWxlbWVudCA9IG51bGxwdHI7CisgICAgICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFj
ay5jbGVhcigpOwogI2VuZGlmCiAKLSAgICBkZXRhY2hQYXJzZXIoKTsKLQotICAgIC8vIHJlbW92
ZURldGFjaGVkQ2hpbGRyZW4oKSBkb2Vzbid0IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywKLSAgICAv
LyBzbyB0ZWFyIGRvd24gc2NvcGUgaW5mb3JtYXRpb24gdXAgZnJvbnQgdG8gYXZvaWQgaGF2aW5n
Ci0gICAgLy8gc3RhbGUgcmVmZXJlbmNlcyBpbiB0aGUgbWFwLgorICAgICAgICBkZXRhY2hQYXJz
ZXIoKTsKIAotICAgIGRlc3Ryb3lUcmVlU2NvcGVEYXRhKCk7Ci0gICAgcmVtb3ZlRGV0YWNoZWRD
aGlsZHJlbigpOwotICAgIG1fZm9ybUNvbnRyb2xsZXIuY2xlYXIoKTsKKyAgICAgICAgLy8gcmVt
b3ZlRGV0YWNoZWRDaGlsZHJlbigpIGRvZXNuJ3QgYWx3YXlzIHVucmVnaXN0ZXIgSURzLAorICAg
ICAgICAvLyBzbyB0ZWFyIGRvd24gc2NvcGUgaW5mb3JtYXRpb24gdXAgZnJvbnQgdG8gYXZvaWQg
aGF2aW5nCisgICAgICAgIC8vIHN0YWxlIHJlZmVyZW5jZXMgaW4gdGhlIG1hcC4KIAotICAgIG1f
bWFya2Vycy0+ZGV0YWNoKCk7Ci0KLSAgICBtX2Nzc0NhbnZhc0VsZW1lbnRzLmNsZWFyKCk7Cisg
ICAgICAgIGRlc3Ryb3lUcmVlU2NvcGVEYXRhKCk7CisgICAgICAgIHJlbW92ZURldGFjaGVkQ2hp
bGRyZW4oKTsKKyAgICAgICAgbV9mb3JtQ29udHJvbGxlci5jbGVhcigpOworICAgICAgICAKKyAg
ICAgICAgbV9tYXJrZXJzLT5kZXRhY2goKTsKKyAgICAgICAgCisgICAgICAgIG1fY3NzQ2FudmFz
RWxlbWVudHMuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGNvbW1vblRlYXJkb3duKCk7CiAK
LSAgICBjb21tb25UZWFyZG93bigpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyB0aGlzIHJpZ2h0IG5vdyBzaW5jZSBzZWxmT25seURlcmVmKCkgY2FuIGRlbGV0ZSB0
aGlzLgorICAgICAgICBtX2luUmVtb3ZlZExhc3RSZWZGdW5jdGlvbiA9IGZhbHNlOworI2VuZGlm
CisgICAgICAgIHNlbGZPbmx5RGVyZWYoKTsKKyAgICB9IGVsc2UgeworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgbV9pblJlbW92ZWRMYXN0UmVmRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgbV9k
ZWxldGlvbkhhc0JlZ3VuID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICBkZWxldGUgdGhpczsKKyAg
ICB9CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmNvbW1vblRlYXJkb3duKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiAxNjQxMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2MywzMSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5Eb2N1bWVudCgpOwogCisgICAgLy8gTm9kZXMgYmVsb25naW5nIHRvIHRoaXMgZG9j
dW1lbnQgaG9sZCBzZWxmLW9ubHkgcmVmZXJlbmNlcyAtCisgICAgLy8gdGhlc2UgYXJlIGVub3Vn
aCB0byBrZWVwIHRoZSBkb2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCwgYnV0CisgICAgLy8g
bm90IGVub3VnaCB0byBrZWVwIGl0IGZyb20gcmVtb3ZpbmcgaXRzIGNoaWxkcmVuLiBUaGlzIGFs
bG93cyBhCisgICAgLy8gbm9kZSB0aGF0IG91dGxpdmVzIGl0cyBzY29wZSB0byBzdGlsbCBoYXZl
IGEgdmFsaWQgZG9jdW1lbnQKKyAgICAvLyBwb2ludGVyIHdpdGhvdXQgaW50cm9kdWNpbmcgcmVm
ZXJlbmNlIGN5Y2xlcy4KKyAgICB2b2lkIHNlbGZPbmx5UmVmKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAgICAgICAgKyttX3NlbGZPbmx5UmVmQ291bnQ7
CisgICAgfQorCisgICAgdm9pZCBzZWxmT25seURlcmVmKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9kZWxldGlvbkhhc0JlZ3VuIHx8IG1fc2VsZk9ubHlSZWZDb3VudCA9PSAxKTsKKyAgICAg
ICAgLS1tX3NlbGZPbmx5UmVmQ291bnQ7CisgICAgICAgIGlmIChtX3NlbGZPbmx5UmVmQ291bnQg
PT0gMSAmJiAhcmVmQ291bnQoKSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAg
IG1fZGVsZXRpb25IYXNCZWd1biA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIGRlbGV0ZSB0
aGlzOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZW1vdmVkTGFzdFJlZigpOworCiAg
ICAgTWVkaWFRdWVyeU1hdGNoZXImIG1lZGlhUXVlcnlNYXRjaGVyKCk7CiAKICAgICB1c2luZyBD
b250YWluZXJOb2RlOjpyZWY7CkBAIC0xMjU0LDggKzEyNzksNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgY3JlYXRlUmVuZGVyVHJlZSgpOwogICAgIHZvaWQgZGV0YWNoUGFyc2VyKCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJvcENoaWxkcmVuKCkgb3ZlcnJpZGU7Ci0KICAgICB0eXBlZGVmIHZvaWQg
KCpBcmd1bWVudHNDYWxsYmFjaykoY29uc3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdmFsdWVTdHJpbmcsIERvY3VtZW50Kiwgdm9pZCogZGF0YSk7CiAgICAgdm9pZCBwcm9jZXNz
QXJndW1lbnRzKGNvbnN0IFN0cmluZyYgZmVhdHVyZXMsIHZvaWQqIGRhdGEsIEFyZ3VtZW50c0Nh
bGxiYWNrKTsKIApAQCAtMTMyMCw2ICsxMzQzLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRB
c3NvY2lhdGVGb3JtQ29udHJvbHNUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50PiYpOwogCiAgICAg
dm9pZCBzdHlsZVJlc29sdmVyVGhyb3dhd2F5VGltZXJGaXJlZChEZWZlcnJhYmxlT25lU2hvdFRp
bWVyPERvY3VtZW50PiYpOworCisgICAgdW5zaWduZWQgbV9zZWxmT25seVJlZkNvdW50OworCisK
ICAgICBEZWZlcnJhYmxlT25lU2hvdFRpbWVyPERvY3VtZW50PiBtX3N0eWxlUmVzb2x2ZXJUaHJv
d2F3YXlUaW1lcjsKIAogICAgIE93blB0cjxTdHlsZVJlc29sdmVyPiBtX3N0eWxlUmVzb2x2ZXI7
CkBAIC0xNjc5LDE3ICsxNzA2LDE3IEBAIGlubGluZSBjb25zdCBEb2N1bWVudCogRG9jdW1lbnQ6
OnRlbXBsYXQKIAogaW5saW5lIGJvb2wgTm9kZTo6aXNEb2N1bWVudE5vZGUoKSBjb25zdAogewot
ICAgIHJldHVybiB0aGlzID09IGRvY3VtZW50SW50ZXJuYWwoKTsKKyAgICByZXR1cm4gdGhpcyA9
PSAmZG9jdW1lbnQoKTsKIH0KIAogaW5saW5lIE5vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCiAgICAgOiBtX25vZGVGbGFncyh0eXBlKQogICAgICwg
bV9wYXJlbnROb2RlKDApCi0gICAgLCBtX3RyZWVTY29wZShkb2N1bWVudCA/IGRvY3VtZW50IDog
JlRyZWVTY29wZTo6bm9Eb2N1bWVudEluc3RhbmNlKCkpCisgICAgLCBtX3RyZWVTY29wZShkb2N1
bWVudCkKICAgICAsIG1fcHJldmlvdXMoMCkKICAgICAsIG1fbmV4dCgwKQogewotICAgIG1fdHJl
ZVNjb3BlLT5zZWxmT25seVJlZigpOworICAgIGRvY3VtZW50LT5zZWxmT25seVJlZigpOwogCiAj
aWYgIWRlZmluZWQoTkRFQlVHKSB8fCAoZGVmaW5lZChEVU1QX05PREVfU1RBVElTVElDUykgJiYg
RFVNUF9OT0RFX1NUQVRJU1RJQ1MpCiAgICAgdHJhY2tGb3JEZWJ1Z2dpbmcoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCShyZXZpc2lvbiAxNjQxMzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6YWRkKGNvbnN0
IEF0b21pCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZWxlbWVudC5p
c0luVHJlZVNjb3BlKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHRy
ZWVTY29wZS5yb290Tm9kZSgpLT5jb250YWluc0luY2x1ZGluZ1NoYWRvd0RPTSgmZWxlbWVudCkp
OwotICAgIGlmICghZWxlbWVudC5pc0luVHJlZVNjb3BlKCkgfHwgJmVsZW1lbnQuZG9jdW1lbnQo
KSAhPSB0cmVlU2NvcGUuZG9jdW1lbnRTY29wZSgpKQorICAgIGlmICghZWxlbWVudC5pc0luVHJl
ZVNjb3BlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQg
PSBtX21hcC5hZGQoJmtleSwgTWFwRW50cnkoJmVsZW1lbnQpKTsKICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjQxMzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NTIsOSArMTM1Miw5IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgRWxlbWUK
ICAgICAgICAgZWxlbWVudFJhcmVEYXRhKCktPmNsZWFyQ2xhc3NMaXN0VmFsdWVGb3JRdWlya3NN
b2RlKCk7CiAKICAgICBUcmVlU2NvcGUqIG5ld1Njb3BlID0gJmluc2VydGlvblBvaW50LnRyZWVT
Y29wZSgpOwotICAgIEhUTUxEb2N1bWVudCogbmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1bWVudCAm
JiBpbkRvY3VtZW50KCkgJiYgbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKS0+aXNIVE1MRG9jdW1l
bnQoKSA/IHRvSFRNTERvY3VtZW50KG5ld1Njb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogMDsKKyAg
ICBIVE1MRG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gIXdhc0luRG9jdW1lbnQgJiYgaW5Eb2N1bWVu
dCgpICYmIG5ld1Njb3BlLT5kb2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IHRvSFRN
TERvY3VtZW50KCZuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CiAgICAgaWYg
KG5ld1Njb3BlICE9ICZ0cmVlU2NvcGUoKSkKLSAgICAgICAgbmV3U2NvcGUgPSAwOworICAgICAg
ICBuZXdTY29wZSA9IG51bGxwdHI7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUg
PSBnZXRJZEF0dHJpYnV0ZSgpOwogICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSkgewpAQCAtMTM5
NSw5ICsxMzk1LDkgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJgog
CiAgICAgaWYgKGluc2VydGlvblBvaW50LmlzSW5UcmVlU2NvcGUoKSkgewogICAgICAgICBUcmVl
U2NvcGUqIG9sZFNjb3BlID0gJmluc2VydGlvblBvaW50LnRyZWVTY29wZSgpOwotICAgICAgICBI
VE1MRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVudCgpICYmIG9sZFNjb3BlLT5kb2N1
bWVudFNjb3BlKCktPmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1bWVudChvbGRTY29wZS0+
ZG9jdW1lbnRTY29wZSgpKSA6IDA7CisgICAgICAgIEhUTUxEb2N1bWVudCogb2xkRG9jdW1lbnQg
PSBpbkRvY3VtZW50KCkgJiYgb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKS5pc0hUTUxEb2N1bWVu
dCgpID8gdG9IVE1MRG9jdW1lbnQoJm9sZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0
cjsKICAgICAgICAgaWYgKG9sZFNjb3BlICE9ICZ0cmVlU2NvcGUoKSkKLSAgICAgICAgICAgIG9s
ZFNjb3BlID0gMDsKKyAgICAgICAgICAgIG9sZFNjb3BlID0gbnVsbHB0cjsKIAogICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUgPSBnZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICBp
ZiAoIWlkVmFsdWUuaXNOdWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE2
NDEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA1LDEyICszMDUsMTAgQEAgTm9kZTo6fk5vZGUoKQogICAgIGlmIChoYXNSYXJlRGF0YSgpKQog
ICAgICAgICBjbGVhclJhcmVEYXRhKCk7CiAKLSAgICBpZiAoIWlzQ29udGFpbmVyTm9kZSgpKSB7
Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBkb2N1bWVudEludGVybmFsKCkpCi0g
ICAgICAgICAgICB3aWxsQmVEZWxldGVkRnJvbShkb2N1bWVudCk7Ci0gICAgfQorICAgIGlmICgh
aXNDb250YWluZXJOb2RlKCkpCisgICAgICAgIHdpbGxCZURlbGV0ZWRGcm9tKCZkb2N1bWVudCgp
KTsKIAotICAgIG1fdHJlZVNjb3BlLT5zZWxmT25seURlcmVmKCk7CisgICAgZG9jdW1lbnQoKS5z
ZWxmT25seURlcmVmKCk7CiAKICAgICBJbnNwZWN0b3JDb3VudGVyczo6ZGVjcmVtZW50Q291bnRl
cihJbnNwZWN0b3JDb3VudGVyczo6Tm9kZUNvdW50ZXIpOwogfQpAQCAtMjE5NCwzMSArMjE5Miw2
IEBAIGJvb2wgTm9kZTo6d2lsbFJlc3BvbmRUb01vdXNlV2hlZWxFdmVudHMKICAgICByZXR1cm4g
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCk7CiB9CiAKLS8v
IFRoaXMgaXMgaGVyZSBzbyBpdCBjYW4gYmUgaW5saW5lZCBpbnRvIE5vZGU6OnJlbW92ZWRMYXN0
UmVmLgotLy8gRklYTUU6IFJlYWxseT8gU2VlbXMgbGlrZSB0aGlzIGNvdWxkIGJlIGlubGluZWQg
aW50byBOb2RlOjpyZW1vdmVkTGFzdFJlZiBpZiBpdCB3YXMgaW4gVHJlZVNjb3BlLmguCi0vLyBG
SVhNRTogSXQgYWxzbyBub3Qgc2VlbSBpbXBvcnRhbnQgdG8gaW5saW5lIHRoaXMuIElzIHRoaXMg
cmVhbGx5IGhvdD8KLWlubGluZSB2b2lkIFRyZWVTY29wZTo6cmVtb3ZlZExhc3RSZWZUb1Njb3Bl
KCkKLXsKLSAgICBBU1NFUlQoIWRlbGV0aW9uSGFzQmVndW4oKSk7Ci0gICAgaWYgKG1fc2VsZk9u
bHlSZWZDb3VudCkgewotICAgICAgICAvLyBJZiByZW1vdmluZyBhIGNoaWxkIHJlbW92ZXMgdGhl
IGxhc3Qgc2VsZi1vbmx5IHJlZiwgd2UgZG9uJ3Qgd2FudCB0aGUgc2NvcGUgdG8gYmUgZGVzdHJv
eWVkCi0gICAgICAgIC8vIHVudGlsIGFmdGVyIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4gcmV0dXJu
cywgc28gd2UgcHJvdGVjdCBvdXJzZWx2ZXMgd2l0aCBhbiBleHRyYSBzZWxmLW9ubHkgcmVmLgot
ICAgICAgICBzZWxmT25seVJlZigpOwotICAgICAgICBkcm9wQ2hpbGRyZW4oKTsKLSNpZm5kZWYg
TkRFQlVHCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyByaWdodCBub3cgc2luY2Ugc2Vs
Zk9ubHlEZXJlZigpIGNhbiBkZWxldGUgdGhpcy4KLSAgICAgICAgcm9vdE5vZGUoKS0+bV9pblJl
bW92ZWRMYXN0UmVmRnVuY3Rpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICBzZWxmT25seURl
cmVmKCk7Ci0gICAgfSBlbHNlIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHJvb3ROb2RlKCkt
Pm1faW5SZW1vdmVkTGFzdFJlZkZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgIGJlZ2luRGVsZXRp
b24oKTsKLSNlbmRpZgotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci19Ci0KIC8vIEl0J3Mg
aW1wb3J0YW50IG5vdCB0byBpbmxpbmUgcmVtb3ZlZExhc3RSZWYsIGJlY2F1c2Ugd2UgZG9uJ3Qg
d2FudCB0byBpbmxpbmUgdGhlIGNvZGUgdG8KIC8vIGRlbGV0ZSBhIE5vZGUgYXQgZWFjaCBkZXJl
ZiBjYWxsIHNpdGUuCiB2b2lkIE5vZGU6OnJlbW92ZWRMYXN0UmVmKCkKQEAgLTIyMjYsOCArMjE5
OSw4IEBAIHZvaWQgTm9kZTo6cmVtb3ZlZExhc3RSZWYoKQogICAgIC8vIEFuIGV4cGxpY2l0IGNo
ZWNrIGZvciBEb2N1bWVudCBoZXJlIGlzIGJldHRlciB0aGFuIGEgdmlydHVhbCBmdW5jdGlvbiBz
aW5jZSBpdCBpcwogICAgIC8vIGZhc3RlciBmb3Igbm9uLURvY3VtZW50IG5vZGVzLCBhbmQgYmVj
YXVzZSB0aGUgY2FsbCB0byByZW1vdmVkTGFzdFJlZiB0aGF0IGlzIGlubGluZWQKICAgICAvLyBh
dCBhbGwgZGVyZWYgY2FsbCBzaXRlcyBpcyBzbWFsbGVyIGlmIGl0J3MgYSBub24tdmlydHVhbCBm
dW5jdGlvbi4KLSAgICBpZiAoaXNUcmVlU2NvcGUoKSkgewotICAgICAgICB0cmVlU2NvcGUoKS5y
ZW1vdmVkTGFzdFJlZlRvU2NvcGUoKTsKKyAgICBpZiAoaXNEb2N1bWVudE5vZGUoKSkgeworICAg
ICAgICB0b0RvY3VtZW50KCp0aGlzKS5yZW1vdmVkTGFzdFJlZigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDE2NDEzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw4ICszODIsNyBAQCBwdWJs
aWM6CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VCh0aGlzKTsKLSAgICAgICAgQVNTRVJUKGRvY3VtZW50SW50ZXJuYWwoKSk7Ci0gICAgICAgIHJl
dHVybiAqZG9jdW1lbnRJbnRlcm5hbCgpOworICAgICAgICByZXR1cm4gdHJlZVNjb3BlKCkuZG9j
dW1lbnRTY29wZSgpOwogICAgIH0KIAogICAgIFRyZWVTY29wZSYgdHJlZVNjb3BlKCkgY29uc3QK
QEAgLTM5Niw3ICszOTUsNiBAQCBwdWJsaWM6CiAgICAgLy8gbm9kZSB0cmVlLCBmYWxzZSBvdGhl
cndpc2UuCiAgICAgYm9vbCBpbkRvY3VtZW50KCkgY29uc3QgCiAgICAgeyAKLSAgICAgICAgQVNT
RVJUKGRvY3VtZW50SW50ZXJuYWwoKSB8fCAhZ2V0RmxhZyhJbkRvY3VtZW50RmxhZykpOwogICAg
ICAgICByZXR1cm4gZ2V0RmxhZyhJbkRvY3VtZW50RmxhZyk7CiAgICAgfQogICAgIGJvb2wgaXNJ
blNoYWRvd1RyZWUoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzSW5TaGFkb3dUcmVlRmxhZyk7
IH0KQEAgLTY0NCw3ICs2NDIsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHNldE5lZWRzTm9k
ZVJlbmRlcmluZ1RyYXZlcnNhbFNsb3dQYXRoKGJvb2wgZmxhZykgeyBzZXRGbGFnKGZsYWcsIE5l
ZWRzTm9kZVJlbmRlcmluZ1RyYXZlcnNhbFNsb3dQYXRoRmxhZyk7IH0KIAotICAgIERvY3VtZW50
KiBkb2N1bWVudEludGVybmFsKCkgY29uc3QgeyByZXR1cm4gdHJlZVNjb3BlKCkuZG9jdW1lbnRT
Y29wZSgpOyB9CiAgICAgdm9pZCBzZXRUcmVlU2NvcGUoVHJlZVNjb3BlJiBzY29wZSkgeyBtX3Ry
ZWVTY29wZSA9ICZzY29wZTsgfQogCiAgICAgdm9pZCBzZXRTdHlsZUNoYW5nZShTdHlsZUNoYW5n
ZVR5cGUgY2hhbmdlVHlwZSkgeyBtX25vZGVGbGFncyA9IChtX25vZGVGbGFncyAmIH5TdHlsZUNo
YW5nZU1hc2spIHwgY2hhbmdlVHlwZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNw
cAkocmV2aXNpb24gMTY0MTM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw4IEBAIGVudW0gU2hhZG93Um9vdFVzYWdlT3Jp
Z2luVHlwZSB7CiB9OwogCiBTaGFkb3dSb290OjpTaGFkb3dSb290KERvY3VtZW50JiBkb2N1bWVu
dCwgU2hhZG93Um9vdFR5cGUgdHlwZSkKLSAgICA6IERvY3VtZW50RnJhZ21lbnQoMCwgQ3JlYXRl
U2hhZG93Um9vdCkKLSAgICAsIFRyZWVTY29wZSh0aGlzLCAmZG9jdW1lbnQpCi0gICAgLCBtX2Fw
cGx5QXV0aG9yU3R5bGVzKGZhbHNlKQorICAgIDogRG9jdW1lbnRGcmFnbWVudCgmZG9jdW1lbnQs
IENyZWF0ZVNoYWRvd1Jvb3QpCisgICAgLCBUcmVlU2NvcGUoKnRoaXMsIGRvY3VtZW50KQogICAg
ICwgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UoZmFsc2UpCiAgICAgLCBtX3R5cGUodHlwZSkKICAg
ICAsIG1faG9zdEVsZW1lbnQoMCkKQEAgLTY3LDcgKzY2LDcgQEAgU2hhZG93Um9vdDo6flNoYWRv
d1Jvb3QoKQogICAgIC8vIGZvciB0aGlzIFNoYWRvd1Jvb3QgaW5zdGFuY2UgYmVjYXVzZSBUcmVl
U2NvcGUgZGVzdHJ1Y3RvcgogICAgIC8vIGNsZWFycyBOb2RlOjptX3RyZWVTY29wZSB0aHVzIENv
bnRhaW5lck5vZGUgaXMgbm8gbG9uZ2VyIGFibGUKICAgICAvLyB0byBhY2Nlc3MgaXQgRG9jdW1l
bnQgcmVmZXJlbmNlIGFmdGVyIHRoYXQuCi0gICAgd2lsbEJlRGVsZXRlZEZyb20oZG9jdW1lbnRJ
bnRlcm5hbCgpKTsKKyAgICB3aWxsQmVEZWxldGVkRnJvbSgmZG9jdW1lbnQoKSk7CiAKICAgICAv
LyBXZSBtdXN0IHJlbW92ZSBhbGwgb2Ygb3VyIGNoaWxkcmVuIGZpcnN0IGJlZm9yZSB0aGUgVHJl
ZVNjb3BlIGRlc3RydWN0b3IKICAgICAvLyBydW5zIHNvIHdlIGRvbid0IGdvIHRocm91Z2ggVHJl
ZVNjb3BlQWRvcHRlciBmb3IgZWFjaCBjaGlsZCB3aXRoIGEKQEAgLTgwLDExICs3OSw2IEBAIFNo
YWRvd1Jvb3Q6On5TaGFkb3dSb290KCkKICAgICAgICAgY2xlYXJSYXJlRGF0YSgpOwogfQogCi12
b2lkIFNoYWRvd1Jvb3Q6OmRyb3BDaGlsZHJlbigpCi17Ci0gICAgcmVtb3ZlRGV0YWNoZWRDaGls
ZHJlbigpOwotfQotCiBQYXNzUmVmUHRyPE5vZGU+IFNoYWRvd1Jvb3Q6OmNsb25lTm9kZShib29s
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOwpAQCAtMTIy
LDE3ICsxMTYsNiBAQCBib29sIFNoYWRvd1Jvb3Q6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5CiAg
ICAgfQogfQogCi12b2lkIFNoYWRvd1Jvb3Q6OnNldEFwcGx5QXV0aG9yU3R5bGVzKGJvb2wgdmFs
dWUpCi17Ci0gICAgaWYgKGlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2FwcGx5QXV0aG9yU3R5bGVzICE9IHZhbHVlKSB7Ci0gICAgICAgIG1fYXBwbHlBdXRob3JTdHls
ZXMgPSB2YWx1ZTsKLSAgICAgICAgaG9zdEVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OwotICAgIH0KLX0KLQogdm9pZCBTaGFkb3dSb290OjpzZXRSZXNldFN0eWxlSW5oZXJpdGFuY2Uo
Ym9vbCB2YWx1ZSkKIHsKICAgICBpZiAoaXNPcnBoYW4oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuaAkocmV2aXNpb24gMTY0MTM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIH5TaGFkb3dSb290KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2FwcGx5QXV0aG9yU3R5bGVzOyB9Ci0gICAgdm9p
ZCBzZXRBcHBseUF1dGhvclN0eWxlcyhib29sKTsKICAgICBib29sIHJlc2V0U3R5bGVJbmhlcml0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlOyB9CiAgICAgdm9p
ZCBzZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UoYm9vbCk7CiAKQEAgLTc1LDcgKzczLDYgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBTaGFkb3dSb290KERvY3VtZW50JiwgU2hhZG93Um9vdFR5cGUp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyb3BDaGlsZHJlbigpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7
CiAKQEAgLTg1LDcgKzgyLDYgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRu
J3QgaGFwcGVuLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg4MzQK
ICAgICBib29sIGlzT3JwaGFuKCkgY29uc3QgeyByZXR1cm4gIWhvc3RFbGVtZW50KCk7IH0KIAot
ICAgIHVuc2lnbmVkIG1fYXBwbHlBdXRob3JTdHlsZXMgOiAxOwogICAgIHVuc2lnbmVkIG1fcmVz
ZXRTdHlsZUluaGVyaXRhbmNlIDogMTsKICAgICB1bnNpZ25lZCBtX3R5cGUgOiAxOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkocmV2aXNpb24gMTY0MTM5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYwICs0OSwzNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgU2FtZVNpemVBc1RyZWVTY29wZSB7Ci0g
ICAgdmlydHVhbCB+U2FtZVNpemVBc1RyZWVTY29wZSgpOwogICAgIHZvaWQqIHBvaW50ZXJzWzld
OwotICAgIGludCBpbnRzWzFdOwogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFRyZWVTY29w
ZSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNUcmVlU2NvcGUpLCB0cmVlc2NvcGVfc2hvdWxkX3N0YXlf
c21hbGwpOwogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1UcmVlU2NvcGU6OlRyZWVT
Y29wZShDb250YWluZXJOb2RlKiByb290Tm9kZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDog
bV9yb290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fZG9jdW1lbnRTY29wZShkb2N1bWVudCkKLSAg
ICAsIG1fcGFyZW50VHJlZVNjb3BlKGRvY3VtZW50KQotICAgICwgbV9zZWxmT25seVJlZkNvdW50
KDApCitUcmVlU2NvcGU6OlRyZWVTY29wZShTaGFkb3dSb290JiBzaGFkb3dSb290LCBEb2N1bWVu
dCYgZG9jdW1lbnQpCisgICAgOiBtX3Jvb3ROb2RlKHNoYWRvd1Jvb3QpCisgICAgLCBtX2RvY3Vt
ZW50U2NvcGUoJmRvY3VtZW50KQorICAgICwgbV9wYXJlbnRUcmVlU2NvcGUoJmRvY3VtZW50KQog
ICAgICwgbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0cnkoc3RkOjptYWtlX3VuaXF1ZTxJZFRhcmdl
dE9ic2VydmVyUmVnaXN0cnk+KCkpCiB7Ci0gICAgQVNTRVJUKHJvb3ROb2RlKTsKLSAgICBBU1NF
UlQoZG9jdW1lbnQpOwotICAgIEFTU0VSVChyb290Tm9kZSAhPSBkb2N1bWVudCk7Ci0gICAgbV9w
YXJlbnRUcmVlU2NvcGUtPnNlbGZPbmx5UmVmKCk7Ci0gICAgbV9yb290Tm9kZS0+c2V0VHJlZVNj
b3BlKCp0aGlzKTsKKyAgICBzaGFkb3dSb290LnNldFRyZWVTY29wZSgqdGhpcyk7CiB9CiAKLVRy
ZWVTY29wZTo6VHJlZVNjb3BlKERvY3VtZW50KiBkb2N1bWVudCkKK1RyZWVTY29wZTo6VHJlZVNj
b3BlKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fcm9vdE5vZGUoZG9jdW1lbnQpCi0gICAg
LCBtX2RvY3VtZW50U2NvcGUoZG9jdW1lbnQpCisgICAgLCBtX2RvY3VtZW50U2NvcGUoJmRvY3Vt
ZW50KQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUobnVsbHB0cikKLSAgICAsIG1fc2VsZk9ubHlS
ZWZDb3VudCgwKQogICAgICwgbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0cnkoc3RkOjptYWtlX3Vu
aXF1ZTxJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk+KCkpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50
KTsKLSAgICBtX3Jvb3ROb2RlLT5zZXRUcmVlU2NvcGUoKnRoaXMpOwotfQotCi1UcmVlU2NvcGU6
OlRyZWVTY29wZSgpCi0gICAgOiBtX3Jvb3ROb2RlKG51bGxwdHIpCi0gICAgLCBtX2RvY3VtZW50
U2NvcGUobnVsbHB0cikKLSAgICAsIG1fcGFyZW50VHJlZVNjb3BlKG51bGxwdHIpCi0gICAgLCBt
X3NlbGZPbmx5UmVmQ291bnQoMCkKLXsKKyAgICBkb2N1bWVudC5zZXRUcmVlU2NvcGUoKnRoaXMp
OwogfQogCiBUcmVlU2NvcGU6On5UcmVlU2NvcGUoKQogewotICAgIEFTU0VSVCghbV9zZWxmT25s
eVJlZkNvdW50KTsKLSAgICBtX3Jvb3ROb2RlLT5zZXRUcmVlU2NvcGUobm9Eb2N1bWVudEluc3Rh
bmNlKCkpOwotCiAgICAgaWYgKG1fc2VsZWN0aW9uKSB7CiAgICAgICAgIG1fc2VsZWN0aW9uLT5j
bGVhclRyZWVTY29wZSgpOwogICAgICAgICBtX3NlbGVjdGlvbiA9IG51bGxwdHI7CiAgICAgfQot
Ci0gICAgaWYgKG1fcGFyZW50VHJlZVNjb3BlKQotICAgICAgICBtX3BhcmVudFRyZWVTY29wZS0+
c2VsZk9ubHlEZXJlZigpOwogfQogCiB2b2lkIFRyZWVTY29wZTo6ZGVzdHJveVRyZWVTY29wZURh
dGEoKQpAQCAtMTEyLDEyICs4OSw2IEBAIHZvaWQgVHJlZVNjb3BlOjpkZXN0cm95VHJlZVNjb3Bl
RGF0YSgpCiAgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZSA9IG51bGxwdHI7CiB9CiAKLXZvaWQg
VHJlZVNjb3BlOjpjbGVhckRvY3VtZW50U2NvcGUoKQotewotICAgIEFTU0VSVChyb290Tm9kZSgp
LT5pc0RvY3VtZW50Tm9kZSgpKTsKLSAgICBtX2RvY3VtZW50U2NvcGUgPSBudWxscHRyOwotfQot
CiB2b2lkIFRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNjb3BlKFRyZWVTY29wZSogbmV3UGFyZW50
U2NvcGUpCiB7CiAgICAgLy8gQSBkb2N1bWVudCBub2RlIGNhbm5vdCBiZSByZS1wYXJlbnRlZC4K
QEAgLTEyNSwxMSArOTYsOCBAQCB2b2lkIFRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNjb3BlKFRy
ZWVTCiAgICAgLy8gRXZlcnkgc2NvcGUgb3RoZXIgdGhhbiBkb2N1bWVudCBuZWVkcyBhIHBhcmVu
dCBzY29wZS4KICAgICBBU1NFUlQobmV3UGFyZW50U2NvcGUpOwogCi0gICAgbmV3UGFyZW50U2Nv
cGUtPnNlbGZPbmx5UmVmKCk7Ci0gICAgaWYgKG1fcGFyZW50VHJlZVNjb3BlKQotICAgICAgICBt
X3BhcmVudFRyZWVTY29wZS0+c2VsZk9ubHlEZXJlZigpOwogICAgIG1fcGFyZW50VHJlZVNjb3Bl
ID0gbmV3UGFyZW50U2NvcGU7Ci0gICAgc2V0RG9jdW1lbnRTY29wZShuZXdQYXJlbnRTY29wZS0+
ZG9jdW1lbnRTY29wZSgpKTsKKyAgICBzZXREb2N1bWVudFNjb3BlKCZuZXdQYXJlbnRTY29wZS0+
ZG9jdW1lbnRTY29wZSgpKTsKIH0KIAogRWxlbWVudCogVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJ
ZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKQEAgLTM0NSwxMSArMzEzLDYg
QEAgRWxlbWVudCogVHJlZVNjb3BlOjpmaW5kQW5jaG9yKGNvbnN0IFN0cgogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1ib29sIFRyZWVTY29wZTo6YXBwbHlBdXRob3JTdHlsZXMoKSBjb25zdAot
ewotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIFRyZWVTY29wZTo6YWRvcHRJZk5lZWRlZChO
b2RlKiBub2RlKQogewogICAgIEFTU0VSVCh0aGlzKTsKQEAgLTQyNiwyNCArMzg5LDQgQEAgVHJl
ZVNjb3BlKiBjb21tb25UcmVlU2NvcGUoTm9kZSogbm9kZUEsIAogICAgIHJldHVybiB0cmVlU2Nv
cGVzQVtpbmRleEFdID09IHRyZWVTY29wZXNCW2luZGV4Ql0gPyB0cmVlU2NvcGVzQVtpbmRleEFd
IDogbnVsbHB0cjsKIH0KIAotI2lmbmRlZiBOREVCVUcKLWJvb2wgVHJlZVNjb3BlOjpkZWxldGlv
bkhhc0JlZ3VuKCkKLXsKLSAgICByZXR1cm4gcm9vdE5vZGUoKSAmJiByb290Tm9kZSgpLT5tX2Rl
bGV0aW9uSGFzQmVndW47Ci19Ci0KLXZvaWQgVHJlZVNjb3BlOjpiZWdpbkRlbGV0aW9uKCkKLXsK
LSAgICBBU1NFUlQodGhpcyAhPSAmbm9Eb2N1bWVudEluc3RhbmNlKCkpOwotICAgIHJvb3ROb2Rl
KCktPm1fZGVsZXRpb25IYXNCZWd1biA9IHRydWU7Ci19Ci0jZW5kaWYKLQotaW50IFRyZWVTY29w
ZTo6cmVmQ291bnQoKSBjb25zdAotewotICAgIGlmIChOb2RlKiByb290ID0gcm9vdE5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIHJvb3QtPnJlZkNvdW50KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHJldmlzaW9u
IDE2NDEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMTAgKzQzLDggQEAgY2xhc3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFzcyBMYXlvdXRQ
b2ludDsKIGNsYXNzIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTsKIGNsYXNzIE5vZGU7CitjbGFz
cyBTaGFkb3dSb290OwogCi0vLyBBIGNsYXNzIHdoaWNoIGluaGVyaXRzIGJvdGggTm9kZSBhbmQg
VHJlZVNjb3BlIG11c3QgY2FsbCBjbGVhclJhcmVEYXRhKCkgaW4gaXRzIGRlc3RydWN0b3IKLS8v
IHNvIHRoYXQgdGhlIE5vZGUgZGVzdHJ1Y3RvciBubyBsb25nZXIgZG9lcyBwcm9ibGVtYXRpYyBO
b2RlTGlzdCBjYWNoZSBtYW5pcHVsYXRpb24gaW4KLS8vIHRoZSBkZXN0cnVjdG9yLgogY2xhc3Mg
VHJlZVNjb3BlIHsKICAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNz
IFRyZWVTY29wZUFkb3B0ZXI7CkBAIC02OSw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEVsZW1lbnQmKTsKICAgICB2
b2lkIHJlbW92ZUVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEVsZW1lbnQm
KTsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudFNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1
bWVudFNjb3BlOyB9CisgICAgRG9jdW1lbnQmIGRvY3VtZW50U2NvcGUoKSBjb25zdCB7IHJldHVy
biAqbV9kb2N1bWVudFNjb3BlOyB9CiAKICAgICBOb2RlKiBhbmNlc3RvckluVGhpc1Njb3BlKE5v
ZGUqKSBjb25zdDsKIApAQCAtOTQsNzYgKzkyLDI5IEBAIHB1YmxpYzoKICAgICAvLyBxdWlya3Mg
bW9kZSBmb3IgaGlzdG9yaWNhbCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgRWxlbWVudCog
ZmluZEFuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBib29sIGFwcGx5
QXV0aG9yU3R5bGVzKCkgY29uc3Q7Ci0KICAgICAvLyBVc2VkIGJ5IHRoZSBiYXNpYyBET00gbXV0
YXRpb24gbWV0aG9kcyAoZS5nLiwgYXBwZW5kQ2hpbGQoKSkuCiAgICAgdm9pZCBhZG9wdElmTmVl
ZGVkKE5vZGUqKTsKIAotICAgIENvbnRhaW5lck5vZGUqIHJvb3ROb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9yb290Tm9kZTsgfQorICAgIENvbnRhaW5lck5vZGUqIHJvb3ROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gJm1fcm9vdE5vZGU7IH0KIAogICAgIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeSYgaWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gKm1faWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmdldCgpOyB9CiAKLSAgICBzdGF0aWMgVHJlZVNjb3BlJiBub0RvY3VtZW50SW5z
dGFuY2UoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChUcmVlU2NvcGUsIGlu
c3RhbmNlLCAoKSk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICAvLyBO
b2RlcyBiZWxvbmdpbmcgdG8gdGhpcyBzY29wZSBob2xkIHNlbGYtb25seSByZWZlcmVuY2VzIC0K
LSAgICAvLyB0aGVzZSBhcmUgZW5vdWdoIHRvIGtlZXAgdGhlIHNjb3BlIGZyb20gYmVpbmcgZGVz
dHJveWVkLCBidXQKLSAgICAvLyBub3QgZW5vdWdoIHRvIGtlZXAgaXQgZnJvbSByZW1vdmluZyBp
dHMgY2hpbGRyZW4uIFRoaXMgYWxsb3dzIGEKLSAgICAvLyBub2RlIHRoYXQgb3V0bGl2ZXMgaXRz
IHNjb3BlIHRvIHN0aWxsIGhhdmUgYSB2YWxpZCBkb2N1bWVudAotICAgIC8vIHBvaW50ZXIgd2l0
aG91dCBpbnRyb2R1Y2luZyByZWZlcmVuY2UgY3ljbGVzLgotICAgIHZvaWQgc2VsZk9ubHlSZWYo
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOwotICAgICAgICAr
K21fc2VsZk9ubHlSZWZDb3VudDsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbGZPbmx5RGVyZWYoKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOwotICAgICAgICAtLW1f
c2VsZk9ubHlSZWZDb3VudDsKLSAgICAgICAgaWYgKCFtX3NlbGZPbmx5UmVmQ291bnQgJiYgIXJl
ZkNvdW50KCkgJiYgdGhpcyAhPSAmbm9Eb2N1bWVudEluc3RhbmNlKCkpIHsKLSAgICAgICAgICAg
IGJlZ2luRGVsZXRpb24oKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdm9pZCByZW1vdmVkTGFzdFJlZlRvU2NvcGUoKTsKLQogcHJvdGVjdGVkOgot
ICAgIFRyZWVTY29wZShDb250YWluZXJOb2RlKiwgRG9jdW1lbnQqKTsKLSAgICBleHBsaWNpdCBU
cmVlU2NvcGUoRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5UcmVlU2NvcGUoKTsKKyAgICBUcmVl
U2NvcGUoU2hhZG93Um9vdCYsIERvY3VtZW50Jik7CisgICAgZXhwbGljaXQgVHJlZVNjb3BlKERv
Y3VtZW50Jik7CisgICAgflRyZWVTY29wZSgpOwogCiAgICAgdm9pZCBkZXN0cm95VHJlZVNjb3Bl
RGF0YSgpOwotICAgIHZvaWQgY2xlYXJEb2N1bWVudFNjb3BlKCk7CiAgICAgdm9pZCBzZXREb2N1
bWVudFNjb3BlKERvY3VtZW50KiBkb2N1bWVudCkKICAgICB7CiAgICAgICAgIEFTU0VSVChkb2N1
bWVudCk7Ci0gICAgICAgIEFTU0VSVCh0aGlzICE9ICZub0RvY3VtZW50SW5zdGFuY2UoKSk7CiAg
ICAgICAgIG1fZG9jdW1lbnRTY29wZSA9IGRvY3VtZW50OwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBUcmVlU2NvcGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcm9wQ2hpbGRyZW4oKSB7IH0KLQot
ICAgIGludCByZWZDb3VudCgpIGNvbnN0OwotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIGRlbGV0
aW9uSGFzQmVndW4oKTsKLSAgICB2b2lkIGJlZ2luRGVsZXRpb24oKTsKLSNlbHNlCi0gICAgYm9v
bCBkZWxldGlvbkhhc0JlZ3VuKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGJlZ2luRGVs
ZXRpb24oKSB7IH0KLSNlbmRpZgotCi0gICAgQ29udGFpbmVyTm9kZSogbV9yb290Tm9kZTsKKyAg
ICBDb250YWluZXJOb2RlJiBtX3Jvb3ROb2RlOwogICAgIERvY3VtZW50KiBtX2RvY3VtZW50U2Nv
cGU7CiAgICAgVHJlZVNjb3BlKiBtX3BhcmVudFRyZWVTY29wZTsKLSAgICB1bnNpZ25lZCBtX3Nl
bGZPbmx5UmVmQ291bnQ7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRPcmRlcmVkTWFw
PiBtX2VsZW1lbnRzQnlJZDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRPcmRlcmVkTWFw
PiBtX2VsZW1lbnRzQnlOYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFk
b3B0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9w
dGVyLmNwcAkocmV2aXNpb24gMTY0MTM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZUFkb3B0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNyArMzIsMjggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogRG8gd2UgZXZlciBjaGFuZ2UgdHJlZSBzY29wZXMg
ZXhjZXB0IGJldHdlZW4gZG9jdW1lbnRzPwogdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJl
ZVRvTmV3U2NvcGUoTm9kZSogcm9vdCkgY29uc3QKIHsKICAgICBBU1NFUlQobmVlZHNTY29wZUNo
YW5nZSgpKTsKIAotICAgIG1fb2xkU2NvcGUuc2VsZk9ubHlSZWYoKTsKLQogICAgIC8vIElmIGFu
IGVsZW1lbnQgaXMgbW92ZWQgZnJvbSBhIGRvY3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFj
ayBhZ2FpbiB0aGUgY29sbGVjdGlvbiBjYWNoZSBmb3IKICAgICAvLyB0aGF0IGVsZW1lbnQgbWF5
IGNvbnRhaW4gc3RhbGUgZGF0YSBhcyBjaGFuZ2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0
ZWQgdGhlIERPTVRyZWVWZXJzaW9uCiAgICAgLy8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3Zl
ZCB0by4gQnkgaW5jcmVhc2luZyB0aGUgRE9NVHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRv
Y3VtZW50IGhlcmUKICAgICAvLyB3ZSBlbnN1cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3
aWxsIGJlIGludmFsaWRhdGVkIGFzIG5lZWRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJh
Y2suCi0gICAgRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gbV9vbGRTY29wZS5kb2N1bWVudFNjb3Bl
KCk7Ci0gICAgRG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gbV9uZXdTY29wZS5kb2N1bWVudFNjb3Bl
KCk7Ci0gICAgYm9vbCB3aWxsTW92ZVRvTmV3RG9jdW1lbnQgPSBvbGREb2N1bWVudCAhPSBuZXdE
b2N1bWVudDsKLSAgICBpZiAob2xkRG9jdW1lbnQgJiYgd2lsbE1vdmVUb05ld0RvY3VtZW50KQot
ICAgICAgICBvbGREb2N1bWVudC0+aW5jRE9NVHJlZVZlcnNpb24oKTsKKyAgICBEb2N1bWVudCYg
b2xkRG9jdW1lbnQgPSBtX29sZFNjb3BlLmRvY3VtZW50U2NvcGUoKTsKKyAgICBEb2N1bWVudCYg
bmV3RG9jdW1lbnQgPSBtX25ld1Njb3BlLmRvY3VtZW50U2NvcGUoKTsKKyAgICBib29sIHdpbGxN
b3ZlVG9OZXdEb2N1bWVudCA9ICZvbGREb2N1bWVudCAhPSAmbmV3RG9jdW1lbnQ7CisgICAgaWYg
KHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkgeworICAgICAgICBvbGREb2N1bWVudC5zZWxmT25seVJl
ZigpOworICAgICAgICBvbGREb2N1bWVudC5pbmNET01UcmVlVmVyc2lvbigpOworICAgIH0KIAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIHVwZGF0ZVRyZWVTY29wZShub2RlKTsKIAogICAg
ICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICAgICAgbW92ZU5vZGVUb05l
d0RvY3VtZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgICAgICAgICBt
b3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9kZSwgJm9sZERvY3VtZW50LCAmbmV3RG9jdW1lbnQpOwog
ICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgICAgICBOb2Rl
UmFyZURhdGEqIHJhcmVEYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKICAgICAgICAgICAgIGlmIChy
YXJlRGF0YS0+bm9kZUxpc3RzKCkpCkBAIC03MSwxOSArNzIsMjAgQEAgdm9pZCBUcmVlU2NvcGVB
ZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAogICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93
ID0gbm9kZS0+c2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICBzaGFkb3ctPnNldFBhcmVudFRy
ZWVTY29wZSgmbV9uZXdTY29wZSk7CiAgICAgICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3Vt
ZW50KQotICAgICAgICAgICAgICAgIG1vdmVUcmVlVG9OZXdEb2N1bWVudChzaGFkb3csIG9sZERv
Y3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05l
d0RvY3VtZW50KHNoYWRvdywgJm9sZERvY3VtZW50LCAmbmV3RG9jdW1lbnQpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgbV9vbGRTY29wZS5zZWxmT25seURlcmVmKCk7CisgICAgaWYgKHdpbGxN
b3ZlVG9OZXdEb2N1bWVudCkKKyAgICAgICAgb2xkRG9jdW1lbnQuc2VsZk9ubHlEZXJlZigpOwog
fQogCi12b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudChOb2RlKiBy
b290LCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkgY29uc3QK
K3ZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVNoYWRvd1RyZWVUb05ld0RvY3VtZW50KFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0Rv
Y3VtZW50KSBjb25zdAogewotICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7CisgICAgZm9yIChOb2RlKiBub2Rl
ID0gc2hhZG93Um9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc2hh
ZG93Um9vdCkpIHsKICAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KG5vZGUsIG9sZERvY3Vt
ZW50LCBuZXdEb2N1bWVudCk7CiAgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3cgPSBub2Rl
LT5zaGFkb3dSb290KCkpCi0gICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQoc2hhZG93
LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVU
b05ld0RvY3VtZW50KHNoYWRvdywgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKICAgICB9CiB9
CiAKQEAgLTEwMyw4ICsxMDUsNiBAQCBpbmxpbmUgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjp1cGRh
dGVUcmVlCiB7CiAgICAgQVNTRVJUKCFub2RlLT5pc1RyZWVTY29wZSgpKTsKICAgICBBU1NFUlQo
Jm5vZGUtPnRyZWVTY29wZSgpID09ICZtX29sZFNjb3BlKTsKLSAgICBtX25ld1Njb3BlLnNlbGZP
bmx5UmVmKCk7Ci0gICAgbV9vbGRTY29wZS5zZWxmT25seURlcmVmKCk7CiAgICAgbm9kZS0+c2V0
VHJlZVNjb3BlKG1fbmV3U2NvcGUpOwogfQogCkBAIC0xMTIsNiArMTEyLDkgQEAgaW5saW5lIHZv
aWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZU5vZGVUbwogewogICAgIEFTU0VSVCghbm9kZS0+aW5E
b2N1bWVudCgpIHx8IG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KTsKIAorICAgIG5ld0RvY3Vt
ZW50LT5zZWxmT25seVJlZigpOworICAgIG9sZERvY3VtZW50LT5zZWxmT25seURlcmVmKCk7CisK
ICAgICBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkgewogICAgICAgICBOb2RlUmFyZURhdGEqIHJh
cmVEYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKICAgICAgICAgaWYgKHJhcmVEYXRhLT5ub2RlTGlz
dHMoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuaAkocmV2aXNpb24g
MTY0MTM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlVHJlZVNjb3BlKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIG1vdmVUcmVlVG9OZXdTY29wZShO
b2RlKikgY29uc3Q7Ci0gICAgdm9pZCBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQoTm9kZSosIERvY3Vt
ZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KSBjb25zdDsKKyAgICB2b2lk
IG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudChTaGFkb3dSb290KiwgRG9jdW1lbnQqIG9sZERv
Y3VtZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpIGNvbnN0OwogICAgIHZvaWQgbW92ZU5vZGVU
b05ld0RvY3VtZW50KE5vZGUqLCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdE
b2N1bWVudCkgY29uc3Q7CiAKICAgICBOb2RlKiBtX3RvQWRvcHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224312</attachid>
            <date>2014-02-15 19:57:58 -0800</date>
            <delta_ts>2014-02-16 11:27:36 -0800</delta_ts>
            <desc>build fix</desc>
            <filename>tree-scope-non-virtual-3.patch</filename>
            <type>text/plain</type>
            <size>30467</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE0LTAyLTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGRvY3VtZW50IGxpZmUg
dGltZSBtYW5hZ2VtZW50IGZyb20gVHJlZVNjb3BlIHRvIERvY3VtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg4NzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZG9jdW1lbnQgbGlmZSB0aW1l
IGlzIG1hbmFnZWQgaW4gY29uZnVzaW5nIG1hbm5lciBieSBUcmVlU2NvcGVzIHdoaWNoIGFyZSBh
bHNvIGluaGVyaXRlZCB0byBTaGFkb3dSb290cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0
Y2hlcyBtb3ZlcyB0aGUgbGlmZSB0aW1lIG1hbmFnZW1lbnQgdG8gRG9jdW1lbnQuIE5vZGVzIGlu
IHNoYWRvdyB0cmVlcyBzZWxmT25seVJlZiB0aGUgRG9jdW1lbnQgaW5zdGVhZAorICAgICAgICBv
ZiB0aGUgU2hhZG93Um9vdC4gU2hhZG93Um9vdCBpcyB0cmVhdGVkIGxpa2UgYW55IG90aGVyIG5v
ZGUgYW5kIHNlbGZPbmx5UmVmcyB0aGUgRG9jdW1lbnQgYXMgd2VsbCAod2hpY2ggaXQKKyAgICAg
ICAgYWxzbyBkaWQgZWFybGllciwgaW5kaXJlY3RseSkuCisgICAgICAgIAorICAgICAgICBUcmVl
U2NvcGUgaXMgZGV2aXJ0dWFsaXplZC4KKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVj
dE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIEF1dGhvciBzdHlsZXNoZWV0
cyBuZXZlciBtYXRjaCBpbiBVQSBzaGFkb3cgdHJlZXMuCisKKyAgICAgICAgKiBkb20vQ29udGFp
bmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjp+Q29udGFpbmVy
Tm9kZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2VsZk9ubHlS
ZWYpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGZPbmx5RGVyZWYpOgorCisgICAg
ICAgICAgICBUbyBhdm9pZCBicmFuY2hlcyBEb2N1bWVudCBzZWxmLXJlZnMgaXRzZWxmIGxpa2Ug
YWxsIG90aGVyIE5vZGVzLiBUaGlzIGlzIHdoeSBkZWxldGlvbiB3aWxsIG5vdyBoYXBwZW4gb24g
cmVmIGNvdW50IG9mIDEuCisKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRG9jdW1lbnROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjph
ZGQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJv
bSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6fk5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVtb3ZlZExhc3RSZWYpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjppbkRvY3VtZW50KToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3Q6On5TaGFkb3dSb290KToKKyAgICAgICAgKiBkb20vU2hhZG93
Um9vdC5oOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjpUcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjp+VHJl
ZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNjb3Bl
KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2Nv
cGU6OmRvY3VtZW50U2NvcGUpOgorICAgICAgICAKKyAgICAgICAgICAgIERvY3VtZW50IGNhbiBu
byBsb25nZXIgZXZlciBiZSBudWxsLgorCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnJv
b3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6c2V0RG9jdW1lbnRTY29wZSk6
CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCk6CisgICAgICAg
IAorICAgICAgICAgICAgTWFuYWdlIERvY3VtZW50IHNlbGZPbmx5UmVmcyBmb3Igbm9kZXMgaW4g
c2hhZG93IHRyZWVzIHRvby4KKworICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6
dXBkYXRlVHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1v
dmVOb2RlVG9OZXdEb2N1bWVudCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuaDoK
KwogMjAxNC0wMi0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBET01TZWxlY3Rpb24gc2hvdWxkbid0IGluc3RhbnRpYXRlIFZpc2libGVTZWxlY3Rpb24gZXZl
cnl3aGVyZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNjQxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCw4IEBAIHZvaWQgRWxl
bWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGkKICAgICBpZiAobV9lbGVtZW50LmlzV2Vi
VlRURWxlbWVudCgpKQogICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hS
ZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdl
KTsKICNlbmRpZgotICAgIC8vIENoZWNrIHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJl
IGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6
Ci0gICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKLSAgICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxv
d3MgYXV0aG9yIHJ1bGVzCi0gICAgaWYgKCFNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGlu
Z1VBUnVsZXMoKQotICAgICAgICAmJiAhbV9lbGVtZW50LnRyZWVTY29wZSgpLmFwcGx5QXV0aG9y
U3R5bGVzKCkpCisgICAgLy8gT25seSBtYXRjaCBVQSBydWxlcyBpbiBzaGFkb3cgdHJlZS4KKyAg
ICBpZiAoIU1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpICYmIG1fZWxl
bWVudC50cmVlU2NvcGUoKS5yb290Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNz
LCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDE2NDE4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDggKzE1
MCw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6dGFrZUFsbENoaWxkcmVuRnJvbSgKIAogQ29udGFp
bmVyTm9kZTo6fkNvbnRhaW5lck5vZGUoKQogewotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBkb2N1bWVudEludGVybmFsKCkpCi0gICAgICAgIHdpbGxCZURlbGV0ZWRGcm9tKGRvY3VtZW50
KTsKKyAgICB3aWxsQmVEZWxldGVkRnJvbSgmZG9jdW1lbnQoKSk7CiAgICAgcmVtb3ZlRGV0YWNo
ZWRDaGlsZHJlbigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDE2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Myw4ICszOTMsOSBAQCBib29sIFRleHRBdXRvU2l6aW5nVHJhaXRzOjppc0RlbGV0
ZWRWYWx1CiAjZW5kaWYKIAogRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3Qg
VVJMJiB1cmwsIHVuc2lnbmVkIGRvY3VtZW50Q2xhc3NlcywgdW5zaWduZWQgY29uc3RydWN0aW9u
RmxhZ3MpCi0gICAgOiBDb250YWluZXJOb2RlKG51bGxwdHIsIENyZWF0ZURvY3VtZW50KQotICAg
ICwgVHJlZVNjb3BlKHRoaXMpCisgICAgOiBDb250YWluZXJOb2RlKHRoaXMsIENyZWF0ZURvY3Vt
ZW50KQorICAgICwgVHJlZVNjb3BlKCp0aGlzKQorICAgICwgbV9zZWxmT25seVJlZkNvdW50KDEp
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgUExBVEZPUk0oSU9TKQogICAgICwgbV9oYW5k
bGluZ1RvdWNoRXZlbnQoZmFsc2UpCiAgICAgLCBtX3RvdWNoRXZlbnRSZWdpb25zRGlydHkoZmFs
c2UpCkBAIC02MzMsNDMgKzYzNCw1OSBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX25vZGVMaXN0QW5kQ29sbGVj
dGlvbkNvdW50cyk7ICsraSkKICAgICAgICAgQVNTRVJUKCFtX25vZGVMaXN0QW5kQ29sbGVjdGlv
bkNvdW50c1tpXSk7CiAKLSAgICBjbGVhckRvY3VtZW50U2NvcGUoKTsKLQogICAgIEluc3BlY3Rv
ckNvdW50ZXJzOjpkZWNyZW1lbnRDb3VudGVyKEluc3BlY3RvckNvdW50ZXJzOjpEb2N1bWVudENv
dW50ZXIpOwogfQogCi12b2lkIERvY3VtZW50Ojpkcm9wQ2hpbGRyZW4oKQordm9pZCBEb2N1bWVu
dDo6cmVtb3ZlZExhc3RSZWYoKQogewogICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsK
LQotICAgIC8vIFdlIG11c3QgbWFrZSBzdXJlIG5vdCB0byBiZSByZXRhaW5pbmcgYW55IG9mIG91
ciBjaGlsZHJlbiB0aHJvdWdoCi0gICAgLy8gdGhlc2UgZXh0cmEgcG9pbnRlcnMgb3Igd2Ugd2ls
bCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgbV9mb2N1c2VkRWxlbWVudCA9IG51bGxw
dHI7Ci0gICAgbV9ob3ZlcmVkRWxlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9hY3RpdmVFbGVtZW50
ID0gbnVsbHB0cjsKLSAgICBtX3RpdGxlRWxlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9kb2N1bWVu
dEVsZW1lbnQgPSBudWxscHRyOwotICAgIG1fdXNlckFjdGlvbkVsZW1lbnRzLmRvY3VtZW50RGlk
UmVtb3ZlTGFzdFJlZigpOworICAgIEFTU0VSVChtX3NlbGZPbmx5UmVmQ291bnQpOworICAgIGlm
IChtX3NlbGZPbmx5UmVmQ291bnQgPiAxKSB7CisgICAgICAgIC8vIElmIHJlbW92aW5nIGEgY2hp
bGQgcmVtb3ZlcyB0aGUgbGFzdCBzZWxmLW9ubHkgcmVmLCB3ZSBkb24ndCB3YW50IHRoZSBzY29w
ZSB0byBiZSBkZXN0cm95ZWQKKyAgICAgICAgLy8gdW50aWwgYWZ0ZXIgcmVtb3ZlRGV0YWNoZWRD
aGlsZHJlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0IG91cnNlbHZlcyB3aXRoIGFuIGV4dHJhIHNl
bGYtb25seSByZWYuCisgICAgICAgIHNlbGZPbmx5UmVmKCk7CisKKyAgICAgICAgLy8gV2UgbXVz
dCBtYWtlIHN1cmUgbm90IHRvIGJlIHJldGFpbmluZyBhbnkgb2Ygb3VyIGNoaWxkcmVuIHRocm91
Z2gKKyAgICAgICAgLy8gdGhlc2UgZXh0cmEgcG9pbnRlcnMgb3Igd2Ugd2lsbCBjcmVhdGUgYSBy
ZWZlcmVuY2UgY3ljbGUuCisgICAgICAgIG1fZm9jdXNlZEVsZW1lbnQgPSBudWxscHRyOworICAg
ICAgICBtX2hvdmVyZWRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgbV9hY3RpdmVFbGVtZW50
ID0gbnVsbHB0cjsKKyAgICAgICAgbV90aXRsZUVsZW1lbnQgPSBudWxscHRyOworICAgICAgICBt
X2RvY3VtZW50RWxlbWVudCA9IG51bGxwdHI7CisgICAgICAgIG1fdXNlckFjdGlvbkVsZW1lbnRz
LmRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
LSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2Z1bGxTY3JlZW5FbGVt
ZW50U3RhY2suY2xlYXIoKTsKKyAgICAgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IG51bGxwdHI7
CisgICAgICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5jbGVhcigpOwogI2VuZGlmCiAKLSAg
ICBkZXRhY2hQYXJzZXIoKTsKLQotICAgIC8vIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKSBkb2Vz
bid0IGFsd2F5cyB1bnJlZ2lzdGVyIElEcywKLSAgICAvLyBzbyB0ZWFyIGRvd24gc2NvcGUgaW5m
b3JtYXRpb24gdXAgZnJvbnQgdG8gYXZvaWQgaGF2aW5nCi0gICAgLy8gc3RhbGUgcmVmZXJlbmNl
cyBpbiB0aGUgbWFwLgorICAgICAgICBkZXRhY2hQYXJzZXIoKTsKIAotICAgIGRlc3Ryb3lUcmVl
U2NvcGVEYXRhKCk7Ci0gICAgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbigpOwotICAgIG1fZm9ybUNv
bnRyb2xsZXIuY2xlYXIoKTsKKyAgICAgICAgLy8gcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbigpIGRv
ZXNuJ3QgYWx3YXlzIHVucmVnaXN0ZXIgSURzLAorICAgICAgICAvLyBzbyB0ZWFyIGRvd24gc2Nv
cGUgaW5mb3JtYXRpb24gdXAgZnJvbnQgdG8gYXZvaWQgaGF2aW5nCisgICAgICAgIC8vIHN0YWxl
IHJlZmVyZW5jZXMgaW4gdGhlIG1hcC4KIAotICAgIG1fbWFya2Vycy0+ZGV0YWNoKCk7Ci0KLSAg
ICBtX2Nzc0NhbnZhc0VsZW1lbnRzLmNsZWFyKCk7CisgICAgICAgIGRlc3Ryb3lUcmVlU2NvcGVE
YXRhKCk7CisgICAgICAgIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKTsKKyAgICAgICAgbV9mb3Jt
Q29udHJvbGxlci5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgbV9tYXJrZXJzLT5kZXRhY2go
KTsKKyAgICAgICAgCisgICAgICAgIG1fY3NzQ2FudmFzRWxlbWVudHMuY2xlYXIoKTsKKyAgICAg
ICAgCisgICAgICAgIGNvbW1vblRlYXJkb3duKCk7CiAKLSAgICBjb21tb25UZWFyZG93bigpOwor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIHJpZ2h0IG5vdyBz
aW5jZSBzZWxmT25seURlcmVmKCkgY2FuIGRlbGV0ZSB0aGlzLgorICAgICAgICBtX2luUmVtb3Zl
ZExhc3RSZWZGdW5jdGlvbiA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIHNlbGZPbmx5RGVyZWYo
KTsKKyAgICB9IGVsc2UgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV9pblJlbW92ZWRMYXN0
UmVmRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgbV9kZWxldGlvbkhhc0JlZ3VuID0gdHJ1ZTsK
KyNlbmRpZgorICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OmNvbW1vblRlYXJkb3duKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNjQx
ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYzLDYgKzI2MywzMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5Eb2N1bWVudCgpOwogCisg
ICAgLy8gTm9kZXMgYmVsb25naW5nIHRvIHRoaXMgZG9jdW1lbnQgaG9sZCBzZWxmLW9ubHkgcmVm
ZXJlbmNlcyAtCisgICAgLy8gdGhlc2UgYXJlIGVub3VnaCB0byBrZWVwIHRoZSBkb2N1bWVudCBm
cm9tIGJlaW5nIGRlc3Ryb3llZCwgYnV0CisgICAgLy8gbm90IGVub3VnaCB0byBrZWVwIGl0IGZy
b20gcmVtb3ZpbmcgaXRzIGNoaWxkcmVuLiBUaGlzIGFsbG93cyBhCisgICAgLy8gbm9kZSB0aGF0
IG91dGxpdmVzIGl0cyBzY29wZSB0byBzdGlsbCBoYXZlIGEgdmFsaWQgZG9jdW1lbnQKKyAgICAv
LyBwb2ludGVyIHdpdGhvdXQgaW50cm9kdWNpbmcgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICB2b2lk
IHNlbGZPbmx5UmVmKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3Vu
KTsKKyAgICAgICAgKyttX3NlbGZPbmx5UmVmQ291bnQ7CisgICAgfQorCisgICAgdm9pZCBzZWxm
T25seURlcmVmKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuIHx8
IG1fc2VsZk9ubHlSZWZDb3VudCA9PSAxKTsKKyAgICAgICAgLS1tX3NlbGZPbmx5UmVmQ291bnQ7
CisgICAgICAgIGlmIChtX3NlbGZPbmx5UmVmQ291bnQgPT0gMSAmJiAhcmVmQ291bnQoKSkgewor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgICAgIG1fZGVsZXRpb25IYXNCZWd1biA9IHRy
dWU7CisjZW5kaWYKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCByZW1vdmVkTGFzdFJlZigpOworCiAgICAgTWVkaWFRdWVyeU1hdGNoZXImIG1l
ZGlhUXVlcnlNYXRjaGVyKCk7CiAKICAgICB1c2luZyBDb250YWluZXJOb2RlOjpyZWY7CkBAIC0x
MjU0LDggKzEyNzksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlUmVuZGVyVHJlZSgpOwog
ICAgIHZvaWQgZGV0YWNoUGFyc2VyKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJvcENoaWxkcmVu
KCkgb3ZlcnJpZGU7Ci0KICAgICB0eXBlZGVmIHZvaWQgKCpBcmd1bWVudHNDYWxsYmFjaykoY29u
c3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJpbmcsIERvY3VtZW50
Kiwgdm9pZCogZGF0YSk7CiAgICAgdm9pZCBwcm9jZXNzQXJndW1lbnRzKGNvbnN0IFN0cmluZyYg
ZmVhdHVyZXMsIHZvaWQqIGRhdGEsIEFyZ3VtZW50c0NhbGxiYWNrKTsKIApAQCAtMTMyMCw2ICsx
MzQzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEFzc29jaWF0ZUZvcm1Db250cm9sc1RpbWVy
RmlyZWQoVGltZXI8RG9jdW1lbnQ+Jik7CiAKICAgICB2b2lkIHN0eWxlUmVzb2x2ZXJUaHJvd2F3
YXlUaW1lckZpcmVkKERlZmVycmFibGVPbmVTaG90VGltZXI8RG9jdW1lbnQ+Jik7CisKKyAgICB1
bnNpZ25lZCBtX3NlbGZPbmx5UmVmQ291bnQ7CisKICAgICBEZWZlcnJhYmxlT25lU2hvdFRpbWVy
PERvY3VtZW50PiBtX3N0eWxlUmVzb2x2ZXJUaHJvd2F3YXlUaW1lcjsKIAogICAgIE93blB0cjxT
dHlsZVJlc29sdmVyPiBtX3N0eWxlUmVzb2x2ZXI7CkBAIC0xNjc5LDE3ICsxNzA1LDE3IEBAIGlu
bGluZSBjb25zdCBEb2N1bWVudCogRG9jdW1lbnQ6OnRlbXBsYXQKIAogaW5saW5lIGJvb2wgTm9k
ZTo6aXNEb2N1bWVudE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiB0aGlzID09IGRvY3VtZW50
SW50ZXJuYWwoKTsKKyAgICByZXR1cm4gdGhpcyA9PSAmZG9jdW1lbnQoKTsKIH0KIAogaW5saW5l
IE5vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCiAg
ICAgOiBtX25vZGVGbGFncyh0eXBlKQogICAgICwgbV9wYXJlbnROb2RlKDApCi0gICAgLCBtX3Ry
ZWVTY29wZShkb2N1bWVudCA/IGRvY3VtZW50IDogJlRyZWVTY29wZTo6bm9Eb2N1bWVudEluc3Rh
bmNlKCkpCisgICAgLCBtX3RyZWVTY29wZShkb2N1bWVudCkKICAgICAsIG1fcHJldmlvdXMoMCkK
ICAgICAsIG1fbmV4dCgwKQogewotICAgIG1fdHJlZVNjb3BlLT5zZWxmT25seVJlZigpOworICAg
IGRvY3VtZW50LT5zZWxmT25seVJlZigpOwogCiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAoZGVm
aW5lZChEVU1QX05PREVfU1RBVElTVElDUykgJiYgRFVNUF9OT0RFX1NUQVRJU1RJQ1MpCiAgICAg
dHJhY2tGb3JEZWJ1Z2dpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9y
ZGVyZWRNYXAuY3BwCShyZXZpc2lvbiAxNjQxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRPcmRlcmVkTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksMTAgQEAgdm9p
ZCBEb2N1bWVudE9yZGVyZWRNYXA6OmNsZWFyKCkKIAogdm9pZCBEb2N1bWVudE9yZGVyZWRNYXA6
OmFkZChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFRyZWVTY29wZSYgdHJlZVNjb3BlKQogeworICAgIFVOVVNFRF9QQVJBTSh0cmVlU2NvcGUpOwog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGVsZW1lbnQuaXNJblRyZWVTY29w
ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih0cmVlU2NvcGUucm9v
dE5vZGUoKS0+Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oJmVsZW1lbnQpKTsKLSAgICBpZiAo
IWVsZW1lbnQuaXNJblRyZWVTY29wZSgpIHx8ICZlbGVtZW50LmRvY3VtZW50KCkgIT0gdHJlZVNj
b3BlLmRvY3VtZW50U2NvcGUoKSkKKyAgICBpZiAoIWVsZW1lbnQuaXNJblRyZWVTY29wZSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9tYXAuYWRk
KCZrZXksIE1hcEVudHJ5KCZlbGVtZW50KSk7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTY0MTg4KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUzLDkgKzEzNTMs
OSBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVsZW1lCiAgICAgICAgIGVs
ZW1lbnRSYXJlRGF0YSgpLT5jbGVhckNsYXNzTGlzdFZhbHVlRm9yUXVpcmtzTW9kZSgpOwogCiAg
ICAgVHJlZVNjb3BlKiBuZXdTY29wZSA9ICZpbnNlcnRpb25Qb2ludC50cmVlU2NvcGUoKTsKLSAg
ICBIVE1MRG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gIXdhc0luRG9jdW1lbnQgJiYgaW5Eb2N1bWVu
dCgpICYmIG5ld1Njb3BlLT5kb2N1bWVudFNjb3BlKCktPmlzSFRNTERvY3VtZW50KCkgPyB0b0hU
TUxEb2N1bWVudChuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IDA7CisgICAgSFRNTERvY3Vt
ZW50KiBuZXdEb2N1bWVudCA9ICF3YXNJbkRvY3VtZW50ICYmIGluRG9jdW1lbnQoKSAmJiBuZXdT
Y29wZS0+ZG9jdW1lbnRTY29wZSgpLmlzSFRNTERvY3VtZW50KCkgPyB0b0hUTUxEb2N1bWVudCgm
bmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKSkgOiBudWxscHRyOwogICAgIGlmIChuZXdTY29wZSAh
PSAmdHJlZVNjb3BlKCkpCi0gICAgICAgIG5ld1Njb3BlID0gMDsKKyAgICAgICAgbmV3U2NvcGUg
PSBudWxscHRyOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZ2V0SWRBdHRy
aWJ1dGUoKTsKICAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkpIHsKQEAgLTEzOTYsOSArMTM5Niw5
IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYKIAogICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pc0luVHJlZVNjb3BlKCkpIHsKICAgICAgICAgVHJlZVNjb3BlKiBvbGRT
Y29wZSA9ICZpbnNlcnRpb25Qb2ludC50cmVlU2NvcGUoKTsKLSAgICAgICAgSFRNTERvY3VtZW50
KiBvbGREb2N1bWVudCA9IGluRG9jdW1lbnQoKSAmJiBvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgp
LT5pc0hUTUxEb2N1bWVudCgpID8gdG9IVE1MRG9jdW1lbnQob2xkU2NvcGUtPmRvY3VtZW50U2Nv
cGUoKSkgOiAwOworICAgICAgICBIVE1MRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gaW5Eb2N1bWVu
dCgpICYmIG9sZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkuaXNIVE1MRG9jdW1lbnQoKSA/IHRvSFRN
TERvY3VtZW50KCZvbGRTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA6IG51bGxwdHI7CiAgICAgICAg
IGlmIChvbGRTY29wZSAhPSAmdHJlZVNjb3BlKCkpCi0gICAgICAgICAgICBvbGRTY29wZSA9IDA7
CisgICAgICAgICAgICBvbGRTY29wZSA9IG51bGxwdHI7CiAKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZFZhbHVlID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFpZFZhbHVl
LmlzTnVsbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxNjQxODgpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSwxMiArMzA1
LDEwIEBAIE5vZGU6On5Ob2RlKCkKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgY2xl
YXJSYXJlRGF0YSgpOwogCi0gICAgaWYgKCFpc0NvbnRhaW5lck5vZGUoKSkgewotICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZG9jdW1lbnRJbnRlcm5hbCgpKQotICAgICAgICAgICAg
d2lsbEJlRGVsZXRlZEZyb20oZG9jdW1lbnQpOwotICAgIH0KKyAgICBpZiAoIWlzQ29udGFpbmVy
Tm9kZSgpKQorICAgICAgICB3aWxsQmVEZWxldGVkRnJvbSgmZG9jdW1lbnQoKSk7CiAKLSAgICBt
X3RyZWVTY29wZS0+c2VsZk9ubHlEZXJlZigpOworICAgIGRvY3VtZW50KCkuc2VsZk9ubHlEZXJl
ZigpOwogCiAgICAgSW5zcGVjdG9yQ291bnRlcnM6OmRlY3JlbWVudENvdW50ZXIoSW5zcGVjdG9y
Q291bnRlcnM6Ok5vZGVDb3VudGVyKTsKIH0KQEAgLTIxOTAsMzEgKzIxODgsNiBAQCBib29sIE5v
ZGU6OndpbGxSZXNwb25kVG9Nb3VzZVdoZWVsRXZlbnRzCiAgICAgcmV0dXJuIGhhc0V2ZW50TGlz
dGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpOwogfQogCi0vLyBUaGlzIGlzIGhl
cmUgc28gaXQgY2FuIGJlIGlubGluZWQgaW50byBOb2RlOjpyZW1vdmVkTGFzdFJlZi4KLS8vIEZJ
WE1FOiBSZWFsbHk/IFNlZW1zIGxpa2UgdGhpcyBjb3VsZCBiZSBpbmxpbmVkIGludG8gTm9kZTo6
cmVtb3ZlZExhc3RSZWYgaWYgaXQgd2FzIGluIFRyZWVTY29wZS5oLgotLy8gRklYTUU6IEl0IGFs
c28gbm90IHNlZW0gaW1wb3J0YW50IHRvIGlubGluZSB0aGlzLiBJcyB0aGlzIHJlYWxseSBob3Q/
Ci1pbmxpbmUgdm9pZCBUcmVlU2NvcGU6OnJlbW92ZWRMYXN0UmVmVG9TY29wZSgpCi17Ci0gICAg
QVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOwotICAgIGlmIChtX3NlbGZPbmx5UmVmQ291bnQp
IHsKLSAgICAgICAgLy8gSWYgcmVtb3ZpbmcgYSBjaGlsZCByZW1vdmVzIHRoZSBsYXN0IHNlbGYt
b25seSByZWYsIHdlIGRvbid0IHdhbnQgdGhlIHNjb3BlIHRvIGJlIGRlc3Ryb3llZAotICAgICAg
ICAvLyB1bnRpbCBhZnRlciByZW1vdmVEZXRhY2hlZENoaWxkcmVuIHJldHVybnMsIHNvIHdlIHBy
b3RlY3Qgb3Vyc2VsdmVzIHdpdGggYW4gZXh0cmEgc2VsZi1vbmx5IHJlZi4KLSAgICAgICAgc2Vs
Zk9ubHlSZWYoKTsKLSAgICAgICAgZHJvcENoaWxkcmVuKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgcmlnaHQgbm93IHNpbmNlIHNlbGZPbmx5RGVyZWYo
KSBjYW4gZGVsZXRlIHRoaXMuCi0gICAgICAgIHJvb3ROb2RlKCktPm1faW5SZW1vdmVkTGFzdFJl
ZkZ1bmN0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgc2VsZk9ubHlEZXJlZigpOwotICAg
IH0gZWxzZSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICByb290Tm9kZSgpLT5tX2luUmVtb3Zl
ZExhc3RSZWZGdW5jdGlvbiA9IGZhbHNlOwotICAgICAgICBiZWdpbkRlbGV0aW9uKCk7Ci0jZW5k
aWYKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotfQotCiAvLyBJdCdzIGltcG9ydGFudCBu
b3QgdG8gaW5saW5lIHJlbW92ZWRMYXN0UmVmLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaW5s
aW5lIHRoZSBjb2RlIHRvCiAvLyBkZWxldGUgYSBOb2RlIGF0IGVhY2ggZGVyZWYgY2FsbCBzaXRl
Lgogdm9pZCBOb2RlOjpyZW1vdmVkTGFzdFJlZigpCkBAIC0yMjIyLDggKzIxOTUsOCBAQCB2b2lk
IE5vZGU6OnJlbW92ZWRMYXN0UmVmKCkKICAgICAvLyBBbiBleHBsaWNpdCBjaGVjayBmb3IgRG9j
dW1lbnQgaGVyZSBpcyBiZXR0ZXIgdGhhbiBhIHZpcnR1YWwgZnVuY3Rpb24gc2luY2UgaXQgaXMK
ICAgICAvLyBmYXN0ZXIgZm9yIG5vbi1Eb2N1bWVudCBub2RlcywgYW5kIGJlY2F1c2UgdGhlIGNh
bGwgdG8gcmVtb3ZlZExhc3RSZWYgdGhhdCBpcyBpbmxpbmVkCiAgICAgLy8gYXQgYWxsIGRlcmVm
IGNhbGwgc2l0ZXMgaXMgc21hbGxlciBpZiBpdCdzIGEgbm9uLXZpcnR1YWwgZnVuY3Rpb24uCi0g
ICAgaWYgKGlzVHJlZVNjb3BlKCkpIHsKLSAgICAgICAgdHJlZVNjb3BlKCkucmVtb3ZlZExhc3RS
ZWZUb1Njb3BlKCk7CisgICAgaWYgKGlzRG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgdG9Eb2N1
bWVudCgqdGhpcykucmVtb3ZlZExhc3RSZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxNjQxODgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsOCArMzgyLDcgQEAgcHVibGljOgogICAgIERv
Y3VtZW50JiBkb2N1bWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQodGhpcyk7Ci0g
ICAgICAgIEFTU0VSVChkb2N1bWVudEludGVybmFsKCkpOwotICAgICAgICByZXR1cm4gKmRvY3Vt
ZW50SW50ZXJuYWwoKTsKKyAgICAgICAgcmV0dXJuIHRyZWVTY29wZSgpLmRvY3VtZW50U2NvcGUo
KTsKICAgICB9CiAKICAgICBUcmVlU2NvcGUmIHRyZWVTY29wZSgpIGNvbnN0CkBAIC0zOTYsNyAr
Mzk1LDYgQEAgcHVibGljOgogICAgIC8vIG5vZGUgdHJlZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAg
IGJvb2wgaW5Eb2N1bWVudCgpIGNvbnN0IAogICAgIHsgCi0gICAgICAgIEFTU0VSVChkb2N1bWVu
dEludGVybmFsKCkgfHwgIWdldEZsYWcoSW5Eb2N1bWVudEZsYWcpKTsKICAgICAgICAgcmV0dXJu
IGdldEZsYWcoSW5Eb2N1bWVudEZsYWcpOwogICAgIH0KICAgICBib29sIGlzSW5TaGFkb3dUcmVl
KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc0luU2hhZG93VHJlZUZsYWcpOyB9CkBAIC02NDQs
NyArNjQyLDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBzZXROZWVkc05vZGVSZW5kZXJpbmdU
cmF2ZXJzYWxTbG93UGF0aChib29sIGZsYWcpIHsgc2V0RmxhZyhmbGFnLCBOZWVkc05vZGVSZW5k
ZXJpbmdUcmF2ZXJzYWxTbG93UGF0aEZsYWcpOyB9CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnRJ
bnRlcm5hbCgpIGNvbnN0IHsgcmV0dXJuIHRyZWVTY29wZSgpLmRvY3VtZW50U2NvcGUoKTsgfQog
ICAgIHZvaWQgc2V0VHJlZVNjb3BlKFRyZWVTY29wZSYgc2NvcGUpIHsgbV90cmVlU2NvcGUgPSAm
c2NvcGU7IH0KIAogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlIGNoYW5n
ZVR5cGUpIHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+U3R5bGVDaGFuZ2VNYXNrKSB8
IGNoYW5nZVR5cGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsOSArNTIsOCBAQCBlbnVtIFNoYWRvd1Jvb3RVc2FnZU9yaWdpblR5cGUgewog
fTsKIAogU2hhZG93Um9vdDo6U2hhZG93Um9vdChEb2N1bWVudCYgZG9jdW1lbnQsIFNoYWRvd1Jv
b3RUeXBlIHR5cGUpCi0gICAgOiBEb2N1bWVudEZyYWdtZW50KDAsIENyZWF0ZVNoYWRvd1Jvb3Qp
Ci0gICAgLCBUcmVlU2NvcGUodGhpcywgJmRvY3VtZW50KQotICAgICwgbV9hcHBseUF1dGhvclN0
eWxlcyhmYWxzZSkKKyAgICA6IERvY3VtZW50RnJhZ21lbnQoJmRvY3VtZW50LCBDcmVhdGVTaGFk
b3dSb290KQorICAgICwgVHJlZVNjb3BlKCp0aGlzLCBkb2N1bWVudCkKICAgICAsIG1fcmVzZXRT
dHlsZUluaGVyaXRhbmNlKGZhbHNlKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2hvc3RF
bGVtZW50KDApCkBAIC02Nyw3ICs2Niw3IEBAIFNoYWRvd1Jvb3Q6On5TaGFkb3dSb290KCkKICAg
ICAvLyBmb3IgdGhpcyBTaGFkb3dSb290IGluc3RhbmNlIGJlY2F1c2UgVHJlZVNjb3BlIGRlc3Ry
dWN0b3IKICAgICAvLyBjbGVhcnMgTm9kZTo6bV90cmVlU2NvcGUgdGh1cyBDb250YWluZXJOb2Rl
IGlzIG5vIGxvbmdlciBhYmxlCiAgICAgLy8gdG8gYWNjZXNzIGl0IERvY3VtZW50IHJlZmVyZW5j
ZSBhZnRlciB0aGF0LgotICAgIHdpbGxCZURlbGV0ZWRGcm9tKGRvY3VtZW50SW50ZXJuYWwoKSk7
CisgICAgd2lsbEJlRGVsZXRlZEZyb20oJmRvY3VtZW50KCkpOwogCiAgICAgLy8gV2UgbXVzdCBy
ZW1vdmUgYWxsIG9mIG91ciBjaGlsZHJlbiBmaXJzdCBiZWZvcmUgdGhlIFRyZWVTY29wZSBkZXN0
cnVjdG9yCiAgICAgLy8gcnVucyBzbyB3ZSBkb24ndCBnbyB0aHJvdWdoIFRyZWVTY29wZUFkb3B0
ZXIgZm9yIGVhY2ggY2hpbGQgd2l0aCBhCkBAIC04MCwxMSArNzksNiBAQCBTaGFkb3dSb290Ojp+
U2hhZG93Um9vdCgpCiAgICAgICAgIGNsZWFyUmFyZURhdGEoKTsKIH0KIAotdm9pZCBTaGFkb3dS
b290Ojpkcm9wQ2hpbGRyZW4oKQotewotICAgIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKTsKLX0K
LQogUGFzc1JlZlB0cjxOb2RlPiBTaGFkb3dSb290OjpjbG9uZU5vZGUoYm9vbCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKQEAgLTEyMiwxNyArMTE2LDYg
QEAgYm9vbCBTaGFkb3dSb290OjpjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeQogICAgIH0KIH0KIAot
dm9pZCBTaGFkb3dSb290OjpzZXRBcHBseUF1dGhvclN0eWxlcyhib29sIHZhbHVlKQotewotICAg
IGlmIChpc09ycGhhbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hcHBseUF1dGhv
clN0eWxlcyAhPSB2YWx1ZSkgewotICAgICAgICBtX2FwcGx5QXV0aG9yU3R5bGVzID0gdmFsdWU7
Ci0gICAgICAgIGhvc3RFbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci19
Ci0KIHZvaWQgU2hhZG93Um9vdDo6c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKGJvb2wgdmFsdWUp
CiB7CiAgICAgaWYgKGlzT3JwaGFuKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHJl
dmlzaW9uIDE2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+U2hhZG93
Um9vdCgpOwogCi0gICAgdmlydHVhbCBib29sIGFwcGx5QXV0aG9yU3R5bGVzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9hcHBseUF1dGhvclN0eWxlczsgfQotICAgIHZvaWQgc2V0QXBwbHlB
dXRob3JTdHlsZXMoYm9vbCk7CiAgICAgYm9vbCByZXNldFN0eWxlSW5oZXJpdGFuY2UoKSBjb25z
dCB7IHJldHVybiBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZTsgfQogICAgIHZvaWQgc2V0UmVzZXRT
dHlsZUluaGVyaXRhbmNlKGJvb2wpOwogCkBAIC03NSw3ICs3Myw2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU2hhZG93Um9vdChEb2N1bWVudCYsIFNoYWRvd1Jvb3RUeXBlKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBkcm9wQ2hpbGRyZW4oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2hp
bGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIG92ZXJyaWRlOwogCkBAIC04NSw3
ICs4Miw2IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGhhcHBlbi4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4ODM0CiAgICAgYm9vbCBp
c09ycGhhbigpIGNvbnN0IHsgcmV0dXJuICFob3N0RWxlbWVudCgpOyB9CiAKLSAgICB1bnNpZ25l
ZCBtX2FwcGx5QXV0aG9yU3R5bGVzIDogMTsKICAgICB1bnNpZ25lZCBtX3Jlc2V0U3R5bGVJbmhl
cml0YW5jZSA6IDE7CiAgICAgdW5zaWduZWQgbV90eXBlIDogMTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDE2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2MCArNDksMzcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RydWN0IFNhbWVTaXplQXNUcmVlU2NvcGUgewotICAgIHZpcnR1YWwg
flNhbWVTaXplQXNUcmVlU2NvcGUoKTsKICAgICB2b2lkKiBwb2ludGVyc1s5XTsKLSAgICBpbnQg
aW50c1sxXTsKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihUcmVlU2NvcGUpID09IHNpemVv
ZihTYW1lU2l6ZUFzVHJlZVNjb3BlKSwgdHJlZXNjb3BlX3Nob3VsZF9zdGF5X3NtYWxsKTsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotVHJlZVNjb3BlOjpUcmVlU2NvcGUoQ29udGFp
bmVyTm9kZSogcm9vdE5vZGUsIERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IG1fcm9vdE5vZGUo
cm9vdE5vZGUpCi0gICAgLCBtX2RvY3VtZW50U2NvcGUoZG9jdW1lbnQpCi0gICAgLCBtX3BhcmVu
dFRyZWVTY29wZShkb2N1bWVudCkKLSAgICAsIG1fc2VsZk9ubHlSZWZDb3VudCgwKQorVHJlZVNj
b3BlOjpUcmVlU2NvcGUoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRG9jdW1lbnQmIGRvY3VtZW50
KQorICAgIDogbV9yb290Tm9kZShzaGFkb3dSb290KQorICAgICwgbV9kb2N1bWVudFNjb3BlKCZk
b2N1bWVudCkKKyAgICAsIG1fcGFyZW50VHJlZVNjb3BlKCZkb2N1bWVudCkKICAgICAsIG1faWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5KHN0ZDo6bWFrZV91bmlxdWU8SWRUYXJnZXRPYnNlcnZlclJl
Z2lzdHJ5PigpKQogewotICAgIEFTU0VSVChyb290Tm9kZSk7Ci0gICAgQVNTRVJUKGRvY3VtZW50
KTsKLSAgICBBU1NFUlQocm9vdE5vZGUgIT0gZG9jdW1lbnQpOwotICAgIG1fcGFyZW50VHJlZVNj
b3BlLT5zZWxmT25seVJlZigpOwotICAgIG1fcm9vdE5vZGUtPnNldFRyZWVTY29wZSgqdGhpcyk7
CisgICAgc2hhZG93Um9vdC5zZXRUcmVlU2NvcGUoKnRoaXMpOwogfQogCi1UcmVlU2NvcGU6OlRy
ZWVTY29wZShEb2N1bWVudCogZG9jdW1lbnQpCitUcmVlU2NvcGU6OlRyZWVTY29wZShEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgOiBtX3Jvb3ROb2RlKGRvY3VtZW50KQotICAgICwgbV9kb2N1bWVu
dFNjb3BlKGRvY3VtZW50KQorICAgICwgbV9kb2N1bWVudFNjb3BlKCZkb2N1bWVudCkKICAgICAs
IG1fcGFyZW50VHJlZVNjb3BlKG51bGxwdHIpCi0gICAgLCBtX3NlbGZPbmx5UmVmQ291bnQoMCkK
ICAgICAsIG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5KHN0ZDo6bWFrZV91bmlxdWU8SWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5PigpKQogewotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgbV9y
b290Tm9kZS0+c2V0VHJlZVNjb3BlKCp0aGlzKTsKLX0KLQotVHJlZVNjb3BlOjpUcmVlU2NvcGUo
KQotICAgIDogbV9yb290Tm9kZShudWxscHRyKQotICAgICwgbV9kb2N1bWVudFNjb3BlKG51bGxw
dHIpCi0gICAgLCBtX3BhcmVudFRyZWVTY29wZShudWxscHRyKQotICAgICwgbV9zZWxmT25seVJl
ZkNvdW50KDApCi17CisgICAgZG9jdW1lbnQuc2V0VHJlZVNjb3BlKCp0aGlzKTsKIH0KIAogVHJl
ZVNjb3BlOjp+VHJlZVNjb3BlKCkKIHsKLSAgICBBU1NFUlQoIW1fc2VsZk9ubHlSZWZDb3VudCk7
Ci0gICAgbV9yb290Tm9kZS0+c2V0VHJlZVNjb3BlKG5vRG9jdW1lbnRJbnN0YW5jZSgpKTsKLQog
ICAgIGlmIChtX3NlbGVjdGlvbikgewogICAgICAgICBtX3NlbGVjdGlvbi0+Y2xlYXJUcmVlU2Nv
cGUoKTsKICAgICAgICAgbV9zZWxlY3Rpb24gPSBudWxscHRyOwogICAgIH0KLQotICAgIGlmICht
X3BhcmVudFRyZWVTY29wZSkKLSAgICAgICAgbV9wYXJlbnRUcmVlU2NvcGUtPnNlbGZPbmx5RGVy
ZWYoKTsKIH0KIAogdm9pZCBUcmVlU2NvcGU6OmRlc3Ryb3lUcmVlU2NvcGVEYXRhKCkKQEAgLTEx
MiwxMiArODksNiBAQCB2b2lkIFRyZWVTY29wZTo6ZGVzdHJveVRyZWVTY29wZURhdGEoKQogICAg
IG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUgPSBudWxscHRyOwogfQogCi12b2lkIFRyZWVTY29wZTo6
Y2xlYXJEb2N1bWVudFNjb3BlKCkKLXsKLSAgICBBU1NFUlQocm9vdE5vZGUoKS0+aXNEb2N1bWVu
dE5vZGUoKSk7Ci0gICAgbV9kb2N1bWVudFNjb3BlID0gbnVsbHB0cjsKLX0KLQogdm9pZCBUcmVl
U2NvcGU6OnNldFBhcmVudFRyZWVTY29wZShUcmVlU2NvcGUqIG5ld1BhcmVudFNjb3BlKQogewog
ICAgIC8vIEEgZG9jdW1lbnQgbm9kZSBjYW5ub3QgYmUgcmUtcGFyZW50ZWQuCkBAIC0xMjUsMTEg
Kzk2LDggQEAgdm9pZCBUcmVlU2NvcGU6OnNldFBhcmVudFRyZWVTY29wZShUcmVlUwogICAgIC8v
IEV2ZXJ5IHNjb3BlIG90aGVyIHRoYW4gZG9jdW1lbnQgbmVlZHMgYSBwYXJlbnQgc2NvcGUuCiAg
ICAgQVNTRVJUKG5ld1BhcmVudFNjb3BlKTsKIAotICAgIG5ld1BhcmVudFNjb3BlLT5zZWxmT25s
eVJlZigpOwotICAgIGlmIChtX3BhcmVudFRyZWVTY29wZSkKLSAgICAgICAgbV9wYXJlbnRUcmVl
U2NvcGUtPnNlbGZPbmx5RGVyZWYoKTsKICAgICBtX3BhcmVudFRyZWVTY29wZSA9IG5ld1BhcmVu
dFNjb3BlOwotICAgIHNldERvY3VtZW50U2NvcGUobmV3UGFyZW50U2NvcGUtPmRvY3VtZW50U2Nv
cGUoKSk7CisgICAgc2V0RG9jdW1lbnRTY29wZSgmbmV3UGFyZW50U2NvcGUtPmRvY3VtZW50U2Nv
cGUoKSk7CiB9CiAKIEVsZW1lbnQqIFRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRv
bWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CkBAIC0zNDUsMTEgKzMxMyw2IEBAIEVsZW1lbnQq
IFRyZWVTY29wZTo6ZmluZEFuY2hvcihjb25zdCBTdHIKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotYm9vbCBUcmVlU2NvcGU6OmFwcGx5QXV0aG9yU3R5bGVzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQogdm9pZCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQoTm9kZSogbm9kZSkK
IHsKICAgICBBU1NFUlQodGhpcyk7CkBAIC00MjYsMjQgKzM4OSw0IEBAIFRyZWVTY29wZSogY29t
bW9uVHJlZVNjb3BlKE5vZGUqIG5vZGVBLCAKICAgICByZXR1cm4gdHJlZVNjb3Blc0FbaW5kZXhB
XSA9PSB0cmVlU2NvcGVzQltpbmRleEJdID8gdHJlZVNjb3Blc0FbaW5kZXhBXSA6IG51bGxwdHI7
CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1ib29sIFRyZWVTY29wZTo6ZGVsZXRpb25IYXNCZWd1bigp
Ci17Ci0gICAgcmV0dXJuIHJvb3ROb2RlKCkgJiYgcm9vdE5vZGUoKS0+bV9kZWxldGlvbkhhc0Jl
Z3VuOwotfQotCi12b2lkIFRyZWVTY29wZTo6YmVnaW5EZWxldGlvbigpCi17Ci0gICAgQVNTRVJU
KHRoaXMgIT0gJm5vRG9jdW1lbnRJbnN0YW5jZSgpKTsKLSAgICByb290Tm9kZSgpLT5tX2RlbGV0
aW9uSGFzQmVndW4gPSB0cnVlOwotfQotI2VuZGlmCi0KLWludCBUcmVlU2NvcGU6OnJlZkNvdW50
KCkgY29uc3QKLXsKLSAgICBpZiAoTm9kZSogcm9vdCA9IHJvb3ROb2RlKCkpCi0gICAgICAgIHJl
dHVybiByb290LT5yZWZDb3VudCgpOwotICAgIHJldHVybiAwOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCShyZXZpc2lvbiAxNjQxODgpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEw
ICs0Myw4IEBAIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogY2xhc3MgTGF5b3V0UG9pbnQ7CiBjbGFz
cyBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk7CiBjbGFzcyBOb2RlOworY2xhc3MgU2hhZG93Um9v
dDsKIAotLy8gQSBjbGFzcyB3aGljaCBpbmhlcml0cyBib3RoIE5vZGUgYW5kIFRyZWVTY29wZSBt
dXN0IGNhbGwgY2xlYXJSYXJlRGF0YSgpIGluIGl0cyBkZXN0cnVjdG9yCi0vLyBzbyB0aGF0IHRo
ZSBOb2RlIGRlc3RydWN0b3Igbm8gbG9uZ2VyIGRvZXMgcHJvYmxlbWF0aWMgTm9kZUxpc3QgY2Fj
aGUgbWFuaXB1bGF0aW9uIGluCi0vLyB0aGUgZGVzdHJ1Y3Rvci4KIGNsYXNzIFRyZWVTY29wZSB7
CiAgICAgZnJpZW5kIGNsYXNzIERvY3VtZW50OwogICAgIGZyaWVuZCBjbGFzcyBUcmVlU2NvcGVB
ZG9wdGVyOwpAQCAtNjksNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRFbGVtZW50QnlO
YW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBFbGVtZW50Jik7CiAgICAgdm9pZCByZW1vdmVF
bGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBFbGVtZW50Jik7CiAKLSAgICBE
b2N1bWVudCogZG9jdW1lbnRTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRTY29wZTsg
fQorICAgIERvY3VtZW50JiBkb2N1bWVudFNjb3BlKCkgY29uc3QgeyByZXR1cm4gKm1fZG9jdW1l
bnRTY29wZTsgfQogCiAgICAgTm9kZSogYW5jZXN0b3JJblRoaXNTY29wZShOb2RlKikgY29uc3Q7
CiAKQEAgLTk0LDc2ICs5MiwyOSBAQCBwdWJsaWM6CiAgICAgLy8gcXVpcmtzIG1vZGUgZm9yIGhp
c3RvcmljYWwgY29tcGF0aWJpbGl0eSByZWFzb25zLgogICAgIEVsZW1lbnQqIGZpbmRBbmNob3Io
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhvclN0eWxl
cygpIGNvbnN0OwotCiAgICAgLy8gVXNlZCBieSB0aGUgYmFzaWMgRE9NIG11dGF0aW9uIG1ldGhv
ZHMgKGUuZy4sIGFwcGVuZENoaWxkKCkpLgogICAgIHZvaWQgYWRvcHRJZk5lZWRlZChOb2RlKik7
CiAKLSAgICBDb250YWluZXJOb2RlKiByb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE5v
ZGU7IH0KKyAgICBDb250YWluZXJOb2RlKiByb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICZtX3Jv
b3ROb2RlOyB9CiAKICAgICBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnkmIGlkVGFyZ2V0T2JzZXJ2
ZXJSZWdpc3RyeSgpIGNvbnN0IHsgcmV0dXJuICptX2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5n
ZXQoKTsgfQogCi0gICAgc3RhdGljIFRyZWVTY29wZSYgbm9Eb2N1bWVudEluc3RhbmNlKCkKLSAg
ICB7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoVHJlZVNjb3BlLCBpbnN0YW5jZSwgKCkp
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgLy8gTm9kZXMgYmVsb25n
aW5nIHRvIHRoaXMgc2NvcGUgaG9sZCBzZWxmLW9ubHkgcmVmZXJlbmNlcyAtCi0gICAgLy8gdGhl
c2UgYXJlIGVub3VnaCB0byBrZWVwIHRoZSBzY29wZSBmcm9tIGJlaW5nIGRlc3Ryb3llZCwgYnV0
Ci0gICAgLy8gbm90IGVub3VnaCB0byBrZWVwIGl0IGZyb20gcmVtb3ZpbmcgaXRzIGNoaWxkcmVu
LiBUaGlzIGFsbG93cyBhCi0gICAgLy8gbm9kZSB0aGF0IG91dGxpdmVzIGl0cyBzY29wZSB0byBz
dGlsbCBoYXZlIGEgdmFsaWQgZG9jdW1lbnQKLSAgICAvLyBwb2ludGVyIHdpdGhvdXQgaW50cm9k
dWNpbmcgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICB2b2lkIHNlbGZPbmx5UmVmKCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsKLSAgICAgICAgKyttX3NlbGZPbmx5
UmVmQ291bnQ7Ci0gICAgfQotCi0gICAgdm9pZCBzZWxmT25seURlcmVmKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsKLSAgICAgICAgLS1tX3NlbGZPbmx5UmVm
Q291bnQ7Ci0gICAgICAgIGlmICghbV9zZWxmT25seVJlZkNvdW50ICYmICFyZWZDb3VudCgpICYm
IHRoaXMgIT0gJm5vRG9jdW1lbnRJbnN0YW5jZSgpKSB7Ci0gICAgICAgICAgICBiZWdpbkRlbGV0
aW9uKCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpczsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHZvaWQgcmVtb3ZlZExhc3RSZWZUb1Njb3BlKCk7Ci0KIHByb3RlY3RlZDoKLSAgICBUcmVlU2Nv
cGUoQ29udGFpbmVyTm9kZSosIERvY3VtZW50Kik7Ci0gICAgZXhwbGljaXQgVHJlZVNjb3BlKERv
Y3VtZW50Kik7Ci0gICAgdmlydHVhbCB+VHJlZVNjb3BlKCk7CisgICAgVHJlZVNjb3BlKFNoYWRv
d1Jvb3QmLCBEb2N1bWVudCYpOworICAgIGV4cGxpY2l0IFRyZWVTY29wZShEb2N1bWVudCYpOwor
ICAgIH5UcmVlU2NvcGUoKTsKIAogICAgIHZvaWQgZGVzdHJveVRyZWVTY29wZURhdGEoKTsKLSAg
ICB2b2lkIGNsZWFyRG9jdW1lbnRTY29wZSgpOwogICAgIHZvaWQgc2V0RG9jdW1lbnRTY29wZShE
b2N1bWVudCogZG9jdW1lbnQpCiAgICAgewogICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAg
ICAgICBBU1NFUlQodGhpcyAhPSAmbm9Eb2N1bWVudEluc3RhbmNlKCkpOwogICAgICAgICBtX2Rv
Y3VtZW50U2NvcGUgPSBkb2N1bWVudDsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVHJlZVNjb3Bl
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJvcENoaWxkcmVuKCkgeyB9Ci0KLSAgICBpbnQgcmVm
Q291bnQoKSBjb25zdDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBkZWxldGlvbkhhc0JlZ3Vu
KCk7Ci0gICAgdm9pZCBiZWdpbkRlbGV0aW9uKCk7Ci0jZWxzZQotICAgIGJvb2wgZGVsZXRpb25I
YXNCZWd1bigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBiZWdpbkRlbGV0aW9uKCkgeyB9
Ci0jZW5kaWYKLQotICAgIENvbnRhaW5lck5vZGUqIG1fcm9vdE5vZGU7CisgICAgQ29udGFpbmVy
Tm9kZSYgbV9yb290Tm9kZTsKICAgICBEb2N1bWVudCogbV9kb2N1bWVudFNjb3BlOwogICAgIFRy
ZWVTY29wZSogbV9wYXJlbnRUcmVlU2NvcGU7Ci0gICAgdW5zaWduZWQgbV9zZWxmT25seVJlZkNv
dW50OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPERvY3VtZW50T3JkZXJlZE1hcD4gbV9lbGVtZW50
c0J5SWQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERvY3VtZW50T3JkZXJlZE1hcD4gbV9lbGVtZW50
c0J5TmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJl
dmlzaW9uIDE2NDE4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjcgKzMyLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorLy8gRklYTUU6IERvIHdlIGV2ZXIgY2hhbmdlIHRyZWUgc2NvcGVzIGV4Y2VwdCBiZXR3
ZWVuIGRvY3VtZW50cz8KIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3Bl
KE5vZGUqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG5lZWRzU2NvcGVDaGFuZ2UoKSk7CiAK
LSAgICBtX29sZFNjb3BlLnNlbGZPbmx5UmVmKCk7Ci0KICAgICAvLyBJZiBhbiBlbGVtZW50IGlz
IG1vdmVkIGZyb20gYSBkb2N1bWVudCBhbmQgdGhlbiBldmVudHVhbGx5IGJhY2sgYWdhaW4gdGhl
IGNvbGxlY3Rpb24gY2FjaGUgZm9yCiAgICAgLy8gdGhhdCBlbGVtZW50IG1heSBjb250YWluIHN0
YWxlIGRhdGEgYXMgY2hhbmdlcyBtYWRlIHRvIGl0IHdpbGwgaGF2ZSB1cGRhdGVkIHRoZSBET01U
cmVlVmVyc2lvbgogICAgIC8vIG9mIHRoZSBkb2N1bWVudCBpdCB3YXMgbW92ZWQgdG8uIEJ5IGlu
Y3JlYXNpbmcgdGhlIERPTVRyZWVWZXJzaW9uIG9mIHRoZSBkb25hdGluZyBkb2N1bWVudCBoZXJl
CiAgICAgLy8gd2UgZW5zdXJlIHRoYXQgdGhlIGNvbGxlY3Rpb24gY2FjaGUgd2lsbCBiZSBpbnZh
bGlkYXRlZCBhcyBuZWVkZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBtb3ZlZCBiYWNrLgotICAgIERv
Y3VtZW50KiBvbGREb2N1bWVudCA9IG1fb2xkU2NvcGUuZG9jdW1lbnRTY29wZSgpOwotICAgIERv
Y3VtZW50KiBuZXdEb2N1bWVudCA9IG1fbmV3U2NvcGUuZG9jdW1lbnRTY29wZSgpOwotICAgIGJv
b2wgd2lsbE1vdmVUb05ld0RvY3VtZW50ID0gb2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQ7Ci0g
ICAgaWYgKG9sZERvY3VtZW50ICYmIHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAgICAgICAgb2xk
RG9jdW1lbnQtPmluY0RPTVRyZWVWZXJzaW9uKCk7CisgICAgRG9jdW1lbnQmIG9sZERvY3VtZW50
ID0gbV9vbGRTY29wZS5kb2N1bWVudFNjb3BlKCk7CisgICAgRG9jdW1lbnQmIG5ld0RvY3VtZW50
ID0gbV9uZXdTY29wZS5kb2N1bWVudFNjb3BlKCk7CisgICAgYm9vbCB3aWxsTW92ZVRvTmV3RG9j
dW1lbnQgPSAmb2xkRG9jdW1lbnQgIT0gJm5ld0RvY3VtZW50OworICAgIGlmICh3aWxsTW92ZVRv
TmV3RG9jdW1lbnQpIHsKKyAgICAgICAgb2xkRG9jdW1lbnQuc2VsZk9ubHlSZWYoKTsKKyAgICAg
ICAgb2xkRG9jdW1lbnQuaW5jRE9NVHJlZVZlcnNpb24oKTsKKyAgICB9CiAKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBy
b290KSkgewogICAgICAgICB1cGRhdGVUcmVlU2NvcGUobm9kZSk7CiAKICAgICAgICAgaWYgKHdp
bGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAgICAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudChu
b2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICAgICAgbW92ZU5vZGVUb05l
d0RvY3VtZW50KG5vZGUsICZvbGREb2N1bWVudCwgJm5ld0RvY3VtZW50KTsKICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkgewogICAgICAgICAgICAgTm9kZVJhcmVEYXRhKiBy
YXJlRGF0YSA9IG5vZGUtPnJhcmVEYXRhKCk7CiAgICAgICAgICAgICBpZiAocmFyZURhdGEtPm5v
ZGVMaXN0cygpKQpAQCAtNzEsMTkgKzcyLDIwIEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92
ZVRyZWVUb05ld1Njb3AKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnNo
YWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgc2hhZG93LT5zZXRQYXJlbnRUcmVlU2NvcGUoJm1f
bmV3U2NvcGUpOwogICAgICAgICAgICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAgICAg
ICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQoc2hhZG93LCBvbGREb2N1bWVudCwgbmV3
RG9jdW1lbnQpOworICAgICAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudChz
aGFkb3csICZvbGREb2N1bWVudCwgJm5ld0RvY3VtZW50KTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIG1fb2xkU2NvcGUuc2VsZk9ubHlEZXJlZigpOworICAgIGlmICh3aWxsTW92ZVRvTmV3RG9j
dW1lbnQpCisgICAgICAgIG9sZERvY3VtZW50LnNlbGZPbmx5RGVyZWYoKTsKIH0KIAotdm9pZCBU
cmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3RG9jdW1lbnQoTm9kZSogcm9vdCwgRG9jdW1l
bnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpIGNvbnN0Cit2b2lkIFRyZWVT
Y29wZUFkb3B0ZXI6Om1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudChTaGFkb3dSb290KiBzaGFk
b3dSb290LCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkgY29u
c3QKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChub2RlLCByb290KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHNoYWRvd1Jv
b3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHNoYWRvd1Jvb3QpKSB7
CiAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudChub2RlLCBvbGREb2N1bWVudCwgbmV3RG9j
dW1lbnQpOwogICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+c2hhZG93Um9v
dCgpKQotICAgICAgICAgICAgbW92ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywgb2xkRG9jdW1l
bnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVu
dChzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiAgICAgfQogfQogCkBAIC0xMDMs
OCArMTA1LDYgQEAgaW5saW5lIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6dXBkYXRlVHJlZQogewog
ICAgIEFTU0VSVCghbm9kZS0+aXNUcmVlU2NvcGUoKSk7CiAgICAgQVNTRVJUKCZub2RlLT50cmVl
U2NvcGUoKSA9PSAmbV9vbGRTY29wZSk7Ci0gICAgbV9uZXdTY29wZS5zZWxmT25seVJlZigpOwot
ICAgIG1fb2xkU2NvcGUuc2VsZk9ubHlEZXJlZigpOwogICAgIG5vZGUtPnNldFRyZWVTY29wZSht
X25ld1Njb3BlKTsKIH0KIApAQCAtMTEyLDYgKzExMiw5IEBAIGlubGluZSB2b2lkIFRyZWVTY29w
ZUFkb3B0ZXI6Om1vdmVOb2RlVG8KIHsKICAgICBBU1NFUlQoIW5vZGUtPmluRG9jdW1lbnQoKSB8
fCBvbGREb2N1bWVudCAhPSBuZXdEb2N1bWVudCk7CiAKKyAgICBuZXdEb2N1bWVudC0+c2VsZk9u
bHlSZWYoKTsKKyAgICBvbGREb2N1bWVudC0+c2VsZk9ubHlEZXJlZigpOworCiAgICAgaWYgKG5v
ZGUtPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5v
ZGUtPnJhcmVEYXRhKCk7CiAgICAgICAgIGlmIChyYXJlRGF0YS0+bm9kZUxpc3RzKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmgJKHJldmlzaW9uIDE2NDE4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRyZWVTY29w
ZShOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBtb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSopIGNvbnN0
OwotICAgIHZvaWQgbW92ZVRyZWVUb05ld0RvY3VtZW50KE5vZGUqLCBEb2N1bWVudCogb2xkRG9j
dW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkgY29uc3Q7CisgICAgdm9pZCBtb3ZlU2hhZG93
VHJlZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCosIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9j
dW1lbnQqIG5ld0RvY3VtZW50KSBjb25zdDsKICAgICB2b2lkIG1vdmVOb2RlVG9OZXdEb2N1bWVu
dChOb2RlKiwgRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpIGNv
bnN0OwogCiAgICAgTm9kZSogbV90b0Fkb3B0Owo=
</data>
<flag name="review"
          id="248402"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>