<?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>84882</bug_id>
          
          <creation_ts>2012-04-25 12:32:25 -0700</creation_ts>
          <short_desc>Remove owner node pointer from StyleSheetInternal</short_desc>
          <delta_ts>2012-04-25 16:10:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77745</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>609969</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-25 12:32:25 -0700</bug_when>
    <thetext>To make sharing between multiple nodes possible, StyleSheetInternal should not have a Node pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610058</commentid>
    <comment_count>1</comment_count>
      <attachid>138875</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-25 14:39:34 -0700</bug_when>
    <thetext>Created attachment 138875
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610099</commentid>
    <comment_count>2</comment_count>
      <attachid>138875</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-04-25 15:32:54 -0700</bug_when>
    <thetext>Comment on attachment 138875
patch

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

r=me with the Node reffing change we discussed.

&gt; Source/WebCore/css/CSSImportRule.cpp:67
&gt; +    CSSParserContext context = m_parentStyleSheet ? m_parentStyleSheet-&gt;parserContext() : CSSStrictMode;

Not a huge fan of this construction syntax. But NABD.

&gt; Source/WebCore/css/CSSStyleSheet.cpp:326
&gt; -    RefPtr&lt;Node&gt; owner = ownerNode();
&gt; -    if (!owner)
&gt; +    StyleSheetInternal* parentSheet = parentStyleSheet();
&gt; +    if (parentSheet) {
&gt; +        parentSheet-&gt;checkLoaded();
&gt; +        m_loadCompleted = true;
&gt; +        return;
&gt; +    }
&gt; +    Node* ownerNode = singleOwnerNode();
&gt; +    if (!ownerNode) {
&gt;          m_loadCompleted = true;
&gt; -    else {
&gt; -        m_loadCompleted = owner-&gt;sheetLoaded();
&gt; -        if (m_loadCompleted)
&gt; -            owner-&gt;notifyLoadedSheetAndAllCriticalSubresources(m_didLoadErrorOccur);
&gt; +        return;
&gt;      }
&gt; +    // This may run javascript and kill the node.
&gt; +    m_loadCompleted = ownerNode-&gt;sheetLoaded();
&gt; +    // Get the node again.
&gt; +    ownerNode = singleOwnerNode();
&gt; +    if (m_loadCompleted &amp;&amp; ownerNode)
&gt; +        ownerNode-&gt;notifyLoadedSheetAndAllCriticalSubresources(m_didLoadErrorOccur);

We should hold a ref on the owner Node throughout the sheetLoaded() call to prevent it from disappearing under us. (Like the old code did.)

&gt; Source/WebCore/dom/Document.cpp:2626
&gt; +        // Element sheet is a silly. It never contains anything.

I agree. :)
I have an occasional daydream where we remove it. Someday..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610129</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-25 16:10:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/115250</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138875</attachid>
            <date>2012-04-25 14:39:34 -0700</date>
            <delta_ts>2012-04-25 15:32:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-node-9.patch</filename>
            <type>text/plain</type>
            <size>41536</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTIzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0wNC0yNSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG93bmVyIG5vZGUg
cG9pbnRlciBmcm9tIHRoZSBTdHlsZVNoZWV0SW50ZXJuYWwgCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDg4MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvIG1ha2Ugc2hhcmluZyBiZXR3ZWVuIG11bHRp
cGxlIG5vZGVzIHBvc3NpYmxlLCBTdHlsZVNoZWV0SW50ZXJuYWwgc2hvdWxkIG5vdCBoYXZlIGEg
Tm9kZSBwb2ludGVyLgorICAgICAgICAKKyAgICAgICAgLSBNYWtlIFN0eWxlU2hlZXRJbnRlcm5h
bCBjb25zdHJ1Y3RvciB0YWtlIENTU1BhcnNlckNvbnRleHQgaW5zdGVhZCBvZiBOb2RlKgorICAg
ICAgICAtIE1vdmUgb3duZXIgbm9kZSBwb2ludGVyIHRvIENTU1N0eWxlU2hlZXQuIENTU1N0eWxl
U2hlZXQgbm93IGFjdHMgYXMgYSBjbGllbnQgZm9yIFN0eWxlU2hlZXRJbnRlcm5hbC4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZ2V0cyB1cyBjbG9zZXIgdG8gYmVpbmcgYWJsZSB0byBjYWNoZSBz
dHlsZXNoZWV0IGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0lt
cG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpzZXRDU1NT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6cmVxdWVzdFN0
eWxlU2hlZXQpOgorICAgICAgICAKKyAgICAgICAgICAgIFNldHVwIENTU1BhcnNlckNvbnRleHQu
CisgICAgICAgICAgICBSZW1vdmUgRklYTUUgYWJvdXQgdXBkYXRlQmFzZVVSTCgpLiBJdCBpcyBu
byBsb25nZXIgcG9zc2libGUgdG8gY2hhbmdlIFVSTCBvZiBTdHlsZVNoZWV0SW50ZXJuYWwuCisK
KyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFn
ZVJ1bGU6OnNldFNlbGVjdG9yVGV4dCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToKKyAg
ICAgICAgKiBjc3MvQ1NTUGFyc2VyTW9kZS5oOgorICAgICAgICAoQ1NTUGFyc2VyQ29udGV4dCk6
CisgICAgCisgICAgICAgICAgICBFeHBhbmQgQ1NTUGFyc2VyQ29udGV4dCBjb25zdHJ1Y3RvcnMu
CisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29sbGVj
dFVzZXJSdWxlc0Zyb21TaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwOgorCisgICAgICAgICAgICBVc2VyIHN0eWxlc2hlZXRzIHdlbnQgYmFjayB0byBiZWlu
ZyBDU1NTdHlsZVNoZWV0cy4gQWRhcHQgdG8gdGhhdC4KKworICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpTdHlsZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmNoZWNrTG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6c3RhcnRMb2FkaW5nRHluYW1pY1No
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cm9vdFN0eWxlU2hl
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpzaW5nbGVPd25lck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpzaW5nbGVPd25lckRv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6c3R5bGVTaGVl
dENoYW5nZWQpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoZSBvd25lciBub2RlIGlzIG5vdyBs
b2NhdGVkIHRocm91Z2ggQ1NTU3R5bGVTaGVldC4gT25seSBvbmUgY2xpZW50IGlzIHN1cHBvcnRl
ZCBhdG0uCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cmVnaXN0ZXJD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp1bnJlZ2lzdGVy
Q2xpZW50KToKKyAgICAgICAgCisgICAgICAgICAgICBSZWdpc3RlciBDU1NTdHlsZVNoZWV0cy4K
KworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0Ojpjc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpvd25l
ckRvY3VtZW50KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEludGVybmFsOjpjcmVhdGVJbmxpbmUpOgorICAgICAgICAoU3R5bGVTaGVldEludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNyZWF0ZSk6CisgICAgICAg
IChDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgCisgICAgICAgICAgICBNb3ZlZCBtX293bmVyTm9k
ZS4KKyAgICAgICAgICAgIENoYW5nZWQgY29uc3RydWN0b3JzCisgICAgICAgICAgICBSZW1vdmVk
IHNldEZpbmFsVVJMKCkuIAorCisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0
aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAKKyAg
ICAgICAgICAgIEluc3RlYWQgb2Ygc2V0RmluYWxVUkwsIGNvbnN0cnVjdCBhIG5ldyBTdHlsZVNo
ZWV0SW50ZXJuYWwgaWYgdGhlIGJhc2UgdXJsIGV2ZXIgY2hhbmdlcy4KKworICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFk
ZFVzZXJTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudFNoZWV0KToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudFVzZXJTaGVldHMpOgorICAgICAgICAKKyAgICAg
ICAgICAgIEFkYXB0IHRvIHRoZSBuZXcgaW50ZXJmYWNlLgorICAgICAgICAgICAgVHVybmVkIHVz
ZXIgc3R5bGVzaGVldHMgQ1NTU3R5bGVTaGVldHMgc28gdGhleSBjYW4gZmluZCB0aGUgb3duZXIg
bm9kZS4KKworICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KToKKyAg
ICAgICAgKiBkb20vU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxl
bWVudDo6Y3JlYXRlU2hlZXQpOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yUHJvZmlsZTo6c3RhcnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6YmluZFN0eWxlU2hlZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxNZWRpYUxpc3RD
aGFpbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpvd25lckRvY3Vt
ZW50KToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KToKKwogMjAxMi0wNC0y
NSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENyYXNoIGlu
IENhY2hlZFJhd1Jlc291cmNlOjpkaWRBZGRDbGllbnQoKSBkdWUgdG8gbWlzc2luZyBwcm90ZWN0
b3IuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAxMTUy
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDkgKzYzLDE1IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0OjpzZXRDU1NTdHlsZVNo
ZWV0KGMKIHsKICAgICBpZiAobV9zdHlsZVNoZWV0KQogICAgICAgICBtX3N0eWxlU2hlZXQtPmNs
ZWFyT3duZXJSdWxlKCk7Ci0gICAgbV9zdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpj
cmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CiAKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX3BhcmVudFN0eWxlU2hlZXQgPyBtX3BhcmVudFN0eWxlU2hlZXQtPmZpbmREb2N1
bWVudCgpIDogMDsKKyAgICBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQgPSBtX3BhcmVudFN0eWxl
U2hlZXQgPyBtX3BhcmVudFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQoKSA6IENTU1N0cmljdE1v
ZGU7CisgICAgY29udGV4dC5jaGFyc2V0ID0gY2hhcnNldDsKKyAgICBpZiAoIWJhc2VVUkwuaXNO
dWxsKCkpCisgICAgICAgIGNvbnRleHQuYmFzZVVSTCA9IGJhc2VVUkw7CisKKyAgICBtX3N0eWxl
U2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSh0aGlzLCBocmVmLCBiYXNlVVJMLCBj
b250ZXh0KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGFyZW50U3R5bGVTaGVldCA/
IG1fcGFyZW50U3R5bGVTaGVldC0+c2luZ2xlT3duZXJEb2N1bWVudCgpIDogMDsKICAgICBtX3N0
eWxlU2hlZXQtPnBhcnNlVXNlclN0eWxlU2hlZXQoY2FjaGVkU3R5bGVTaGVldCwgZG9jdW1lbnQg
PyBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSA6IDApOwogCiAgICAgbV9sb2FkaW5nID0gZmFs
c2U7CkBAIC04NSw3ICs5MSw3IEBAIHZvaWQgU3R5bGVSdWxlSW1wb3J0OjpyZXF1ZXN0U3R5bGVT
aGVldCgKIHsKICAgICBpZiAoIW1fcGFyZW50U3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGFyZW50U3R5bGVTaGVldC0+ZmluZERvY3VtZW50
KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wYXJlbnRTdHlsZVNoZWV0LT5zaW5nbGVP
d25lckRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMDIsNyArMTA4LDYgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnJlcXVlc3RTdHlsZVNoZWV0
KAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVz
dCBiYWlsLgogICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHls
ZVNoZWV0OwogICAgIGZvciAoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9IG1fcGFyZW50U3R5
bGVTaGVldDsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewotICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBpZiB0aGUgZmluYWxVUkwgd2FzIHVwZGF0ZWQg
dmlhIGRvY3VtZW50Ojp1cGRhdGVCYXNlVVJMLgogICAgICAgICBpZiAoYWJzSHJlZiA9PSBzaGVl
dC0+ZmluYWxVUkwoKS5zdHJpbmcoKSB8fCBhYnNIcmVmID09IHNoZWV0LT5vcmlnaW5hbFVSTCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByb290U2hlZXQgPSBzaGVldDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkocmV2aXNpb24gMTE1MjM2KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCB2b2lkIENTU1BhZ2VSdWxlOjpzZXRTZWxlY3RvclRleHQoY29uc3QgCiB7CiAgICAgRG9j
dW1lbnQqIGRvYyA9IDA7CiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJl
bnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIGRvYyA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgp
OworICAgICAgICBkb2MgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7CiAgICAgaWYgKCFk
b2MpCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxMTUyMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgxLDggKzE4MSw5IEBAIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IHN0cmljdENTU1BhcnNlckMKICAgICByZXR1cm4gc3RyaWN0Q29udGV4dDsKIH0KIAotQ1NTUGFy
c2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYXJzZXJNb2RlIG1vZGUpCi0gICAgOiBt
b2RlKG1vZGUpCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KENTU1BhcnNlck1v
ZGUgbW9kZSwgY29uc3QgS1VSTCYgYmFzZVVSTCkKKyAgICA6IGJhc2VVUkwoYmFzZVVSTCkKKyAg
ICAsIG1vZGUobW9kZSkKICAgICAsIGlzSFRNTERvY3VtZW50KGZhbHNlKQogICAgICwgaXNDU1ND
dXN0b21GaWx0ZXJFbmFibGVkKGZhbHNlKQogICAgICwgaXNDU1NSZWdpb25zRW5hYmxlZChmYWxz
ZSkKQEAgLTE5MSw4ICsxOTIsOSBAQCBDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0
KENTU1BhCiB7CiB9CiAKLUNTU1BhcnNlckNvbnRleHQ6OkNTU1BhcnNlckNvbnRleHQoRG9jdW1l
bnQqIGRvY3VtZW50KQotICAgIDogYmFzZVVSTChkb2N1bWVudC0+YmFzZVVSTCgpKQorQ1NTUGFy
c2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwoYmFzZVVS
TC5pc051bGwoKSA/IGRvY3VtZW50LT5iYXNlVVJMKCkgOiBiYXNlVVJMKQorICAgICwgY2hhcnNl
dChjaGFyc2V0KQogICAgICwgbW9kZShkb2N1bWVudC0+aW5RdWlya3NNb2RlKCkgPyBDU1NRdWly
a3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKICAgICAsIGlzSFRNTERvY3VtZW50KGRvY3VtZW50LT5p
c0hUTUxEb2N1bWVudCgpKQogICAgICwgaXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKGRvY3VtZW50
LT5zZXR0aW5ncygpID8gZG9jdW1lbnQtPnNldHRpbmdzKCktPmlzQ1NTQ3VzdG9tRmlsdGVyRW5h
YmxlZCgpIDogZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyTW9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJNb2RlLmgJKHJldmlz
aW9uIDExNTIzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJNb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDggKzU1LDggQEAgaW5saW5lIGJvb2wgaXNTdHJpY3RQYXJzZXJNb2Rl
KENTU1BhcnNlcgogfQogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29udGV4dCB7Ci0gICAgQ1NTUGFyc2Vy
Q29udGV4dChDU1NQYXJzZXJNb2RlKTsKLSAgICBDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50Kik7
CisgICAgQ1NTUGFyc2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBLVVJMJiBiYXNlVVJM
ID0gS1VSTCgpKTsKKyAgICBDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50KiwgY29uc3QgS1VSTCYg
YmFzZVVSTCA9IEtVUkwoKSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gZW1wdHlTdHJpbmcoKSk7
CiAKICAgICBLVVJMIGJhc2VVUkw7CiAgICAgU3RyaW5nIGNoYXJzZXQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkocmV2aXNpb24gMTE1MjM2KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAg
dm9pZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChjb25zdAogewogICAgIERvY3VtZW50
KiBkb2MgPSAwOwogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5
bGVTaGVldCgpKQotICAgICAgICBkb2MgPSBzdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKTsKKyAg
ICAgICAgZG9jID0gc3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpOwogICAgIGlmICghZG9jKQog
ICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDExNTIzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzMsNDAgKzczLDE3IEBAIHN0YXRpYyBib29sIGlzQWNjZXB0
YWJsZUNTU1N0eWxlU2hlZXRQYXIKIH0KICNlbmRpZgogCi1TdHlsZVNoZWV0SW50ZXJuYWw6OlN0
eWxlU2hlZXRJbnRlcm5hbChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFs
VVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDog
bV9vd25lck5vZGUocGFyZW50Tm9kZSkKLSAgICAsIG1fb3duZXJSdWxlKDApCitTdHlsZVNoZWV0
SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGNvbnRleHQpCisgICAgOiBtX293bmVyUnVsZShvd25lclJ1bGUpCiAg
ICAgLCBtX29yaWdpbmFsVVJMKG9yaWdpbmFsVVJMKQogICAgICwgbV9maW5hbFVSTChmaW5hbFVS
TCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxzZSkKLSAgICAsIG1faXNVc2VyU3R5bGVTaGVl
dChmYWxzZSkKKyAgICAsIG1faXNVc2VyU3R5bGVTaGVldChvd25lclJ1bGUgJiYgb3duZXJSdWxl
LT5wYXJlbnRTdHlsZVNoZWV0KCkgJiYgb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmlz
VXNlclN0eWxlU2hlZXQoKSkKICAgICAsIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVy
KHRydWUpCiAgICAgLCBtX2RpZExvYWRFcnJvck9jY3VyKGZhbHNlKQogICAgICwgbV91c2VzUmVt
VW5pdHMoZmFsc2UpCi0gICAgLCBtX3BhcnNlckNvbnRleHQocGFyZW50Tm9kZS0+ZG9jdW1lbnQo
KSkKKyAgICAsIG1fcGFyc2VyQ29udGV4dChjb250ZXh0KQogewotICAgIEFTU0VSVChpc0FjY2Vw
dGFibGVDU1NTdHlsZVNoZWV0UGFyZW50KHBhcmVudE5vZGUpKTsKLQotICAgIHVwZGF0ZUJhc2VV
UkwoKTsKLSAgICBtX3BhcnNlckNvbnRleHQuY2hhcnNldCA9IGNoYXJzZXQ7Ci19Ci0KLVN0eWxl
U2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVsZUltcG9ydCogb3duZXJS
dWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogbV9vd25lck5vZGUoMCkKLSAgICAsIG1fb3duZXJS
dWxlKG93bmVyUnVsZSkKLSAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCi0gICAgLCBt
X2ZpbmFsVVJMKGZpbmFsVVJMKQotICAgICwgbV9sb2FkQ29tcGxldGVkKGZhbHNlKQotICAgICwg
bV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIodHJ1ZSkKLSAgICAsIG1fZGlkTG9hZEVy
cm9yT2NjdXIoZmFsc2UpCi0gICAgLCBtX3VzZXNSZW1Vbml0cyhmYWxzZSkKLSAgICAsIG1fcGFy
c2VyQ29udGV4dCgob3duZXJSdWxlICYmIG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpKSA/
IG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5wYXJzZXJDb250ZXh0KCkgOiBDU1NTdHJp
Y3RNb2RlKQotewotICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U2hlZXQgPSBvd25lclJ1
bGUgPyBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7Ci0gICAgbV9pc1VzZXJTdHls
ZVNoZWV0ID0gcGFyZW50U2hlZXQgJiYgcGFyZW50U2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKTsK
LQotICAgIHVwZGF0ZUJhc2VVUkwoKTsKLSAgICBtX3BhcnNlckNvbnRleHQuY2hhcnNldCA9IGNo
YXJzZXQ7CiB9CiAKIFN0eWxlU2hlZXRJbnRlcm5hbDo6flN0eWxlU2hlZXRJbnRlcm5hbCgpCkBA
IC0zMzAsMTcgKzMwNywyMyBAQCB2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6Y2hlY2tMb2FkZWQo
KQogICAgIC8vIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yU3R5bGVzaGVldHMoKS4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY2MjIzMDA+Lgog
ICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBpZiAo
U3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQotICAg
ICAgICBzdHlsZVNoZWV0LT5jaGVja0xvYWRlZCgpOwotCi0gICAgUmVmUHRyPE5vZGU+IG93bmVy
ID0gb3duZXJOb2RlKCk7Ci0gICAgaWYgKCFvd25lcikKKyAgICBTdHlsZVNoZWV0SW50ZXJuYWwq
IHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOworICAgIGlmIChwYXJlbnRTaGVldCkg
eworICAgICAgICBwYXJlbnRTaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgbV9sb2FkQ29t
cGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBOb2RlKiBvd25lck5v
ZGUgPSBzaW5nbGVPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSkgewogICAgICAgICBt
X2xvYWRDb21wbGV0ZWQgPSB0cnVlOwotICAgIGVsc2UgewotICAgICAgICBtX2xvYWRDb21wbGV0
ZWQgPSBvd25lci0+c2hlZXRMb2FkZWQoKTsKLSAgICAgICAgaWYgKG1fbG9hZENvbXBsZXRlZCkK
LSAgICAgICAgICAgIG93bmVyLT5ub3RpZnlMb2FkZWRTaGVldEFuZEFsbENyaXRpY2FsU3VicmVz
b3VyY2VzKG1fZGlkTG9hZEVycm9yT2NjdXIpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IC8vIFRoaXMgbWF5IHJ1biBqYXZhc2NyaXB0IGFuZCBraWxsIHRoZSBub2RlLgorICAgIG1fbG9h
ZENvbXBsZXRlZCA9IG93bmVyTm9kZS0+c2hlZXRMb2FkZWQoKTsKKyAgICAvLyBHZXQgdGhlIG5v
ZGUgYWdhaW4uCisgICAgb3duZXJOb2RlID0gc2luZ2xlT3duZXJOb2RlKCk7CisgICAgaWYgKG1f
bG9hZENvbXBsZXRlZCAmJiBvd25lck5vZGUpCisgICAgICAgIG93bmVyTm9kZS0+bm90aWZ5TG9h
ZGVkU2hlZXRBbmRBbGxDcml0aWNhbFN1YnJlc291cmNlcyhtX2RpZExvYWRFcnJvck9jY3VyKTsK
IH0KIAogdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6Om5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENh
Y2hlZENTU1N0eWxlU2hlZXQqIHNoZWV0KQpAQCAtMzUxLDIzICszMzQsMzAgQEAgdm9pZCBTdHls
ZVNoZWV0SW50ZXJuYWw6Om5vdGlmeUxvYWRlZFNoZQogCiB2b2lkIFN0eWxlU2hlZXRJbnRlcm5h
bDo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCkKIHsKLSAgICBpZiAoTm9kZSogb3duZXIgPSBv
d25lck5vZGUoKSkKKyAgICBpZiAoTm9kZSogb3duZXIgPSBzaW5nbGVPd25lck5vZGUoKSkKICAg
ICAgICAgb3duZXItPnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpOwogfQogCi1Ob2RlKiBTdHls
ZVNoZWV0SW50ZXJuYWw6OmZpbmRTdHlsZVNoZWV0T3duZXJOb2RlKCkgY29uc3QKK1N0eWxlU2hl
ZXRJbnRlcm5hbCogU3R5bGVTaGVldEludGVybmFsOjpyb290U3R5bGVTaGVldCgpIGNvbnN0CiB7
Ci0gICAgZm9yIChjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gdGhpczsgc2hlZXQ7
IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewotICAgICAgICBpZiAoTm9kZSog
b3duZXJOb2RlID0gc2hlZXQtPm93bmVyTm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIG93bmVy
Tm9kZTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgY29uc3QgU3R5bGVTaGVldEludGVybmFs
KiByb290ID0gdGhpczsKKyAgICB3aGlsZSAocm9vdC0+cGFyZW50U3R5bGVTaGVldCgpKQorICAg
ICAgICByb290ID0gcm9vdC0+cGFyZW50U3R5bGVTaGVldCgpOworICAgIHJldHVybiBjb25zdF9j
YXN0PFN0eWxlU2hlZXRJbnRlcm5hbCo+KHJvb3QpOwogfQogCi1Eb2N1bWVudCogU3R5bGVTaGVl
dEludGVybmFsOjpmaW5kRG9jdW1lbnQoKQorTm9kZSogU3R5bGVTaGVldEludGVybmFsOjpzaW5n
bGVPd25lck5vZGUoKSBjb25zdAogewotICAgIE5vZGUqIG93bmVyTm9kZSA9IGZpbmRTdHlsZVNo
ZWV0T3duZXJOb2RlKCk7CisgICAgU3R5bGVTaGVldEludGVybmFsKiByb290ID0gcm9vdFN0eWxl
U2hlZXQoKTsKKyAgICBpZiAocm9vdC0+bV9jbGllbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQVNTRVJUKHJvb3QtPm1fY2xpZW50cy5zaXplKCkgPT0gMSk7CisgICAgcmV0
dXJuIHJvb3QtPm1fY2xpZW50c1swXS0+b3duZXJOb2RlKCk7Cit9CiAKK0RvY3VtZW50KiBTdHls
ZVNoZWV0SW50ZXJuYWw6OnNpbmdsZU93bmVyRG9jdW1lbnQoKSBjb25zdAoreworICAgIE5vZGUq
IG93bmVyTm9kZSA9IHNpbmdsZU93bmVyTm9kZSgpOwogICAgIHJldHVybiBvd25lck5vZGUgPyBv
d25lck5vZGUtPmRvY3VtZW50KCkgOiAwOwogfQogCkBAIC0zNzgsMzMgKzM2OCwxMCBAQCB2b2lk
IFN0eWxlU2hlZXRJbnRlcm5hbDo6c2V0TWVkaWFRdWVyaWVzCiAKIHZvaWQgU3R5bGVTaGVldElu
dGVybmFsOjpzdHlsZVNoZWV0Q2hhbmdlZCgpCiB7Ci0gICAgU3R5bGVTaGVldEludGVybmFsKiBy
b290U2hlZXQgPSB0aGlzOwotICAgIHdoaWxlIChTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudCA9
IHJvb3RTaGVldC0+cGFyZW50U3R5bGVTaGVldCgpKQotICAgICAgICByb290U2hlZXQgPSBwYXJl
bnQ7Ci0KLSAgICAvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBkbyBldmVyeXRoaW5nIHN0eWxl
UmVzb2x2ZXJDaGFuZ2VkIGRvZXMsCi0gICAgICogYmFzaWNhbGx5IHdlIGp1c3QgbmVlZCB0byBy
ZWNyZWF0ZSB0aGUgZG9jdW1lbnQncyBzZWxlY3RvciB3aXRoIHRoZQotICAgICAqIGFscmVhZHkg
ZXhpc3Rpbmcgc3R5bGUgc2hlZXRzLgotICAgICAqLwotICAgIGlmIChEb2N1bWVudCogZG9jdW1l
bnRUb1VwZGF0ZSA9IHJvb3RTaGVldC0+ZmluZERvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50
VG9VcGRhdGUtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwotfQotCi12
b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6dXBkYXRlQmFzZVVSTCgpCi17Ci0gICAgaWYgKCFtX2Zp
bmFsVVJMLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fcGFyc2VyQ29udGV4dC5iYXNlVVJMID0gbV9m
aW5hbFVSTDsKKyAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCA9IHNpbmdsZU93bmVyRG9jdW1l
bnQoKTsKKyAgICBpZiAoIW93bmVyRG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0
KCkpIHsKLSAgICAgICAgbV9wYXJzZXJDb250ZXh0LmJhc2VVUkwgPSBwYXJlbnRTaGVldC0+YmFz
ZVVSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX293bmVyTm9kZSkgewot
ICAgICAgICBtX3BhcnNlckNvbnRleHQuYmFzZVVSTCA9IG1fb3duZXJOb2RlLT5kb2N1bWVudCgp
LT5iYXNlVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9wYXJzZXJDb250ZXh0
LmJhc2VVUkwgPSBLVVJMKCk7CisgICAgb3duZXJEb2N1bWVudC0+c3R5bGVSZXNvbHZlckNoYW5n
ZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAKIEtVUkwgU3R5bGVTaGVldEludGVybmFsOjpjb21w
bGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKQEAgLTQ0MiwxMSArNDA5LDQzIEBAIFN0
eWxlU2hlZXRJbnRlcm5hbCogU3R5bGVTaGVldEludGVybmFsOjoKICAgICByZXR1cm4gbV9vd25l
clJ1bGUgPyBtX293bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKIH0KIAordm9pZCBT
dHlsZVNoZWV0SW50ZXJuYWw6OnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQqIHNoZWV0KQor
eworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKHNoZWV0KSk7CisgICAgbV9jbGllbnRz
LmFwcGVuZChzaGVldCk7Cit9CisKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjp1bnJlZ2lzdGVy
Q2xpZW50KENTU1N0eWxlU2hlZXQqIHNoZWV0KQoreworICAgIHNpemVfdCBwb3NpdGlvbiA9IG1f
Y2xpZW50cy5maW5kKHNoZWV0KTsKKyAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwor
ICAgIG1fY2xpZW50cy5yZW1vdmUocG9zaXRpb24pOworfQorCitQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZShOb2RlKiBvd25lck5vZGUsIGNvbnN0
IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCit7CisgICAgQ1NTUGFyc2Vy
Q29udGV4dCBwYXJzZXJDb250ZXh0KG93bmVyTm9kZS0+ZG9jdW1lbnQoKSwgYmFzZVVSTCwgZW5j
b2RpbmcpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHNoZWV0ID0gU3R5bGVTaGVl
dEludGVybmFsOjpjcmVhdGUoYmFzZVVSTC5zdHJpbmcoKSwgYmFzZVVSTCwgcGFyc2VyQ29udGV4
dCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LnJlbGVhc2Uo
KSwgb3duZXJOb2RlKSk7Cit9CisKIENTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1Jl
ZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hlZXQsIENTU0ltcG9ydFJ1bGUqIG93bmVy
UnVsZSkKICAgICA6IG1faW50ZXJuYWwoc3R5bGVTaGVldCkKICAgICAsIG1faXNEaXNhYmxlZChm
YWxzZSkKKyAgICAsIG1fb3duZXJOb2RlKDApCiAgICAgLCBtX293bmVyUnVsZShvd25lclJ1bGUp
CiB7CisgICAgbV9pbnRlcm5hbC0+cmVnaXN0ZXJDbGllbnQodGhpcyk7Cit9CisKK0NTU1N0eWxl
U2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHN0eWxl
U2hlZXQsIE5vZGUqIG93bmVyTm9kZSkKKyAgICA6IG1faW50ZXJuYWwoc3R5bGVTaGVldCkKKyAg
ICAsIG1faXNEaXNhYmxlZChmYWxzZSkKKyAgICAsIG1fb3duZXJOb2RlKG93bmVyTm9kZSkKKyAg
ICAsIG1fb3duZXJSdWxlKDApCit7CisgICAgQVNTRVJUKGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hl
ZXRQYXJlbnQob3duZXJOb2RlKSk7CisgICAgbV9pbnRlcm5hbC0+cmVnaXN0ZXJDbGllbnQodGhp
cyk7CiB9CiAKIENTU1N0eWxlU2hlZXQ6On5DU1NTdHlsZVNoZWV0KCkKQEAgLTQ2MCw2ICs0NTks
OCBAQCBDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCgpCiAgICAgfQogICAgIGlmIChtX21l
ZGlhQ1NTT01XcmFwcGVyKQogICAgICAgICBtX21lZGlhQ1NTT01XcmFwcGVyLT5jbGVhclBhcmVu
dFN0eWxlU2hlZXQoKTsKKworICAgIG1faW50ZXJuYWwtPnVucmVnaXN0ZXJDbGllbnQodGhpcyk7
CiB9CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKQEAg
LTQ5NCw3ICs0OTUsNyBAQCBDU1NSdWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGlu
CiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNoZWV0OjpydWxlcygpCiB7CiAgICAg
S1VSTCB1cmwgPSBtX2ludGVybmFsLT5maW5hbFVSTCgpOwotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1faW50ZXJuYWwtPmZpbmREb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG93bmVyRG9jdW1lbnQoKTsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQgJiYg
IWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIC8vIElFIGJlaGF2aW9yLgpAQCAtNTcwLDcgKzU3MSw3IEBAIGludCBDU1NT
dHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYKIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IENTU1N0eWxlU2hlZXQ6OmNzc1J1bGVzKCkKIHsKICAgICBLVVJMIHVybCA9IG1faW50ZXJuYWwt
PmZpbmFsVVJMKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9pbnRlcm5hbC0+ZmluZERv
Y3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gb3duZXJEb2N1bWVudCgpOwogICAg
IGlmICghdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3QodXJsKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX3J1
bGVMaXN0Q1NTT01XcmFwcGVyKQpAQCAtNTkyLDYgKzU5MywxNCBAQCBDU1NTdHlsZVNoZWV0KiBD
U1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsCiAgICAgcmV0dXJuIG1fb3duZXJSdWxlID8gbV9vd25l
clJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7IAogfQogCitEb2N1bWVudCogQ1NTU3R5bGVT
aGVldDo6b3duZXJEb2N1bWVudCgpIGNvbnN0Cit7CisgICAgY29uc3QgQ1NTU3R5bGVTaGVldCog
cm9vdCA9IHRoaXM7CisgICAgd2hpbGUgKHJvb3QtPnBhcmVudFN0eWxlU2hlZXQoKSkKKyAgICAg
ICAgcm9vdCA9IHJvb3QtPnBhcmVudFN0eWxlU2hlZXQoKTsKKyAgICByZXR1cm4gcm9vdC0+b3du
ZXJOb2RlKCkgPyByb290LT5vd25lck5vZGUoKS0+ZG9jdW1lbnQoKSA6IDA7Cit9CisKIHZvaWQg
Q1NTU3R5bGVTaGVldDo6Y2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCkKIHsKICAgICBtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaAkocmV2aXNpb24gMTE1MjM2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjUgKzQ1LDE3IEBAIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFN0eWxlU2hlZXRJbnRlcm5hbD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZVNoZWV0SW50ZXJuYWw+IGNyZWF0ZShjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0ID0g
Q1NTUGFyc2VyQ29udGV4dChDU1NTdHJpY3RNb2RlKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKHN0YXRpY19jYXN0PFN0eWxlUnVsZUltcG9y
dCo+KDApLCBTdHJpbmcoKSwgS1VSTCgpLCBTdHJpbmcoKSkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0eWxlU2hlZXRJbnRlcm5hbCgwLCBTdHJpbmcoKSwgS1VSTCgpLCBjb250ZXh0
KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3Jl
YXRlKE5vZGUqIG93bmVyTm9kZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5h
bFVSTCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93bmVyTm9kZSwgU3RyaW5nKCks
IEtVUkwoKSwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNo
ZWV0SW50ZXJuYWwoMCwgb3JpZ2luYWxVUkwsIGZpbmFsVVJMLCBjb250ZXh0KSk7CiAgICAgfQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKE5vZGUqIG93
bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkws
IGNvbnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hl
ZXRJbnRlcm5hbChvd25lck5vZGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY2hhcnNldCkpOwot
ICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IGNyZWF0ZShT
dHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29u
c3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFsKG93bmVyUnVsZSwgb3JpZ2lu
YWxVUkwsIGZpbmFsVVJMLCBjaGFyc2V0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3Qg
S1VSTCYgZmluYWxVUkwpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxl
U2hlZXRJbnRlcm5hbChvd25lck5vZGUsIGZpbmFsVVJMLnN0cmluZygpLCBmaW5hbFVSTCwgU3Ry
aW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwo
b3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNvbnRleHQpKTsKICAgICB9CiAKICAg
ICB+U3R5bGVTaGVldEludGVybmFsKCk7CkBAIC04NCw4ICs3Niw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNoZWNrTG9hZGVkKCk7CiAgICAgdm9pZCBzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsK
IAotICAgIE5vZGUqIGZpbmRTdHlsZVNoZWV0T3duZXJOb2RlKCkgY29uc3Q7Ci0gICAgRG9jdW1l
bnQqIGZpbmREb2N1bWVudCgpOworICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdFN0eWxlU2hl
ZXQoKSBjb25zdDsKKyAgICBOb2RlKiBzaW5nbGVPd25lck5vZGUoKSBjb25zdDsKKyAgICBEb2N1
bWVudCogc2luZ2xlT3duZXJEb2N1bWVudCgpIGNvbnN0OwogCiAgICAgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJDb250ZXh0LmNoYXJzZXQ7IH0KIApAQCAt
MTE1LDggKzEwOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0
IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICAgICAKICAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBh
cmVudFN0eWxlU2hlZXQoKSBjb25zdDsKLSAgICBOb2RlKiBvd25lck5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyTm9kZTsgfQotICAgIHZvaWQgY2xlYXJPd25lck5vZGUoKSB7IG1fb3duZXJO
b2RlID0gMDsgfQogICAgIFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lclJ1bGU7IH0KICAgICB2b2lkIGNsZWFyT3duZXJSdWxlKCkgeyBtX293bmVyUnVs
ZSA9IDA7IH0KICAgICAKQEAgLTEyNyw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRp
dGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQogICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qg
U3RyaW5nJiB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KICAgICAKLSAgICB2b2lkIHNldEZp
bmFsVVJMKGNvbnN0IEtVUkwmIGZpbmFsVVJMKSB7IG1fZmluYWxVUkwgPSBmaW5hbFVSTDsgdXBk
YXRlQmFzZVVSTCgpOyB9CiAgICAgY29uc3QgS1VSTCYgZmluYWxVUkwoKSBjb25zdCB7IHJldHVy
biBtX2ZpbmFsVVJMOyB9CiAgICAgY29uc3QgS1VSTCYgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyc2VyQ29udGV4dC5iYXNlVVJMOyB9CiAKQEAgLTE0MCwxNiArMTMwLDE3IEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gY3JlYXRlQ2hpbGRSdWxlQ1NTT01XcmFwcGVy
KHVuc2lnbmVkIGluZGV4LCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRXcmFwcGVyKTsKIAorICAgIHZv
aWQgcmVnaXN0ZXJDbGllbnQoQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgdW5yZWdpc3RlckNs
aWVudChDU1NTdHlsZVNoZWV0Kik7CisKIHByaXZhdGU6Ci0gICAgU3R5bGVTaGVldEludGVybmFs
KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYg
ZmluYWxVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7Ci0gICAgU3R5bGVTaGVldEludGVybmFs
KFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBj
b25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICBTdHlsZVNo
ZWV0SW50ZXJuYWwoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luYWxVUkwsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsK
ICAgICAKICAgICB2b2lkIGNsZWFyQ2hhcnNldFJ1bGUoKTsKICAgICBib29sIGhhc0NoYXJzZXRS
dWxlKCkgY29uc3QgeyByZXR1cm4gIW1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUuaXNOdWxsKCk7
IH0KICAgICAKICAgICB2b2lkIHVwZGF0ZUJhc2VVUkwoKTsKIAotICAgIE5vZGUqIG1fb3duZXJO
b2RlOwogICAgIFN0eWxlUnVsZUltcG9ydCogbV9vd25lclJ1bGU7CiAKICAgICBTdHJpbmcgbV9v
cmlnaW5hbFVSTDsKQEAgLTE2OSw2ICsxNjAsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2Vz
UmVtVW5pdHMgOiAxOwogICAgIAogICAgIENTU1BhcnNlckNvbnRleHQgbV9wYXJzZXJDb250ZXh0
OworCisgICAgVmVjdG9yPENTU1N0eWxlU2hlZXQqPiBtX2NsaWVudHM7CiB9OwogCiBjbGFzcyBD
U1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgewpAQCAtMTc3LDExICsxNzAsMTYgQEAg
cHVibGljOgogICAgIHsgCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVl
dChzaGVldCwgb3duZXJSdWxlKSk7CiAgICAgfQorICAgIHN0YXRpYyBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gY3JlYXRlKFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBzaGVldCwgTm9kZSog
b3duZXJOb2RlKQorICAgIHsgCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVT
aGVldChzaGVldCwgb3duZXJOb2RlKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IGNyZWF0ZUlubGluZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgZW5jb2RpbmcgPSBTdHJpbmcoKSk7CiAKICAgICB2aXJ0dWFsIH5DU1NTdHlsZVNoZWV0KCk7
CiAKICAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIE5vZGUqIG93bmVyTm9kZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1faW50ZXJuYWwtPm93bmVyTm9kZSgpOyB9CisgICAgdmlydHVhbCBOb2RlKiBvd25l
ck5vZGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyTm9kZTsgfQogICAgIHZpcnR1
YWwgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5n
IGhyZWYoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT5vcmlnaW5hbFVSTCgp
OyB9ICAKICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faW50ZXJuYWwtPnRpdGxlKCk7IH0KQEAgLTIwMiwxNCArMjAwLDE0IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBDU1NSdWxlKiBpdGVtKHVuc2lnbmVkIGlu
ZGV4KTsKIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhck93bmVyTm9kZSgpIE9WRVJSSURFIHsgbV9p
bnRlcm5hbC0+Y2xlYXJPd25lck5vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhck93bmVy
Tm9kZSgpIE9WRVJSSURFIHsgbV9vd25lck5vZGUgPSAwOyB9CiAgICAgdmlydHVhbCBDU1NJbXBv
cnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyUnVsZTsg
fQogICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9p
bnRlcm5hbC0+YmFzZVVSTCgpOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPmlzTG9hZGluZygpOyB9CiAgICAgCiAgICAg
dm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9CiAgICAgdm9pZCBzdHls
ZVNoZWV0Q2hhbmdlZCgpIHsgbV9pbnRlcm5hbC0+c3R5bGVTaGVldENoYW5nZWQoKTsgfQotICAg
IERvY3VtZW50KiBmaW5kRG9jdW1lbnQoKSB7IHJldHVybiBtX2ludGVybmFsLT5maW5kRG9jdW1l
bnQoKTsgfQorICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7CiAgICAgCiAgICAg
dm9pZCBjbGVhckNoaWxkUnVsZUNTU09NV3JhcHBlcnMoKTsKIApAQCAtMjE3LDYgKzIxNSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKTsKKyAgICBDU1NTdHlsZVNo
ZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiwgTm9kZSogb3duZXJOb2RlKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L2NzcyI7IH0K
QEAgLTIyNCw2ICsyMjMsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJu
YWw+IG1faW50ZXJuYWw7CiAgICAgYm9vbCBtX2lzRGlzYWJsZWQ7CiAKKyAgICBOb2RlKiBtX293
bmVyTm9kZTsKICAgICBDU1NJbXBvcnRSdWxlKiBtX293bmVyUnVsZTsKIAogICAgIG11dGFibGUg
UmVmUHRyPE1lZGlhTGlzdD4gbV9tZWRpYUNTU09NV3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShy
ZXZpc2lvbiAxMTUyMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQg
U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGVyZWYKIHZvaWQgU3R5bGVSdWxlQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygpCiB7CiAgICAgaWYgKENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpKQorICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpKQogICAg
ICAgICAgICAgZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUp
OwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlz
aW9uIDExNTIzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAyLDggKzQwMiw4IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2
ZXIoRG9jdW1lbnQqIGQKIAogICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzISBUaGUgdXNlciBzaGVl
dCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQogICAgIE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0
eWxlID0gUnVsZVNldDo6Y3JlYXRlKCk7Ci0gICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogcGFn
ZVVzZXJTaGVldCA9IGRvY3VtZW50LT5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRlbXBVc2Vy
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQsICptX21lZGl1bSwgdGhpcyk7
CisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQgPSBkb2N1bWVudC0+cGFnZVVz
ZXJTaGVldCgpKQorICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdl
VXNlclNoZWV0LT5pbnRlcm5hbCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgIGFkZEF1dGhvclJ1
bGVzQW5kQ29sbGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPnBhZ2VHcm91cFVzZXJT
aGVldHMoKSwgKnRlbXBVc2VyU3R5bGUpOwogICAgIGFkZEF1dGhvclJ1bGVzQW5kQ29sbGVjdFVz
ZXJSdWxlc0Zyb21TaGVldHMoZG9jdW1lbnQtPmRvY3VtZW50VXNlclNoZWV0cygpLCAqdGVtcFVz
ZXJTdHlsZSk7CiAgICAgaWYgKHRlbXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1w
VXNlclN0eWxlLT5tX3BhZ2VSdWxlcy5zaXplKCkgPiAwKQpAQCAtNDIxLDE4ICs0MjEsMTggQEAg
U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZAogICAgIGFwcGVuZEF1dGhv
clN0eWxlc2hlZXRzKDAsIGRvY3VtZW50LT5zdHlsZVNoZWV0cygpLT52ZWN0b3IoKSk7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkQXV0aG9yUnVsZXNBbmRDb2xsZWN0VXNlclJ1bGVzRnJv
bVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiogdXNlclNo
ZWV0cywgUnVsZVNldCYgdXNlclN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRBdXRob3JS
dWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gPiogdXNlclNoZWV0cywgUnVsZVNldCYgdXNlclN0eWxlKQogewogICAgIGlm
ICghdXNlclNoZWV0cykKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dXNlclNoZWV0cy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICBjb25zdCBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiYgc2hlZXQg
PSB1c2VyU2hlZXRzLT5hdChpKTsKKyAgICAgICAgU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9
IHVzZXJTaGVldHMtPmF0KGkpLT5pbnRlcm5hbCgpOwogICAgICAgICBpZiAoc2hlZXQtPmlzVXNl
clN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldChz
aGVldC5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgICAgIHVzZXJTdHlsZS5hZGRS
dWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQuZ2V0KCksICpt
X21lZGl1bSwgdGhpcyk7CisgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI5MjUsNyArMjky
NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXAKICAgICBjb2xs
ZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdHlsZVNoZWV0V3JhcHBlci5nZXQoKSk7CiB9
CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBwZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwg
UmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1hcCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVyU2V0LCBEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMg
dm9pZCBjb2xsZWN0Q1NTT01XcmFwcGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NT
dHlsZVJ1bGU+ID4mIHdyYXBwZXJNYXAsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRzID0gZG9jdW1lbnQtPnN0
eWxlU2hlZXRzKCktPnZlY3RvcigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHls
ZVNoZWV0cy5zaXplKCk7ICsraSkgewpAQCAtMjkzNCw3ICsyOTM0LDcgQEAgc3RhdGljIHZvaWQg
Y29sbGVjdENTU09NV3JhcHBlcnMoSGFzaE1hcAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdyYXBwZXJNYXAsIHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXQqPihzdHlsZVNoZWV0KSk7CiAgICAgfQotICAgIGNvbGxlY3RDU1NPTVdyYXBwZXJzKHdy
YXBwZXJNYXAsIHNoZWV0V3JhcHBlclNldCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSk7Cisg
ICAgY29sbGVjdENTU09NV3JhcHBlcnMod3JhcHBlck1hcCwgZG9jdW1lbnQtPnBhZ2VVc2VyU2hl
ZXQoKSk7CiB9CiAKIENTU1N0eWxlUnVsZSogU3R5bGVSZXNvbHZlcjo6ZW5zdXJlRnVsbENTU09N
V3JhcHBlckZvckluc3BlY3RvcihTdHlsZVJ1bGUqIHJ1bGUpCkBAIC0yOTQ4LDcgKzI5NDgsNyBA
QCBDU1NTdHlsZVJ1bGUqIFN0eWxlUmVzb2x2ZXI6OmVuc3VyZUZ1bGxDCiAgICAgICAgIGNvbGxl
Y3RDU1NPTVdyYXBwZXJzKG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAsIG1fc3R5bGVTaGVl
dENTU09NV3JhcHBlclNldCwgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOwogICAgICAgICBjb2xs
ZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hl
ZXRDU1NPTVdyYXBwZXJTZXQsIGZ1bGxzY3JlZW5TdHlsZVNoZWV0KTsKIAotICAgICAgICBjb2xs
ZWN0Q1NTT01XcmFwcGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBtX3N0eWxlU2hl
ZXRDU1NPTVdyYXBwZXJTZXQsIGRvY3VtZW50KCkpOworICAgICAgICBjb2xsZWN0Q1NTT01XcmFw
cGVycyhtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLCBkb2N1bWVudCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1fc3R5bGVSdWxlVG9DU1NPTVdyYXBwZXJNYXAuZ2V0KHJ1bGUpLmdldCgpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxMTUyMzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MDAsNyArNDAwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUq
IHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKLSAgICB2b2lkIGFkZEF1dGhvclJ1bGVzQW5kQ29s
bGVjdFVzZXJSdWxlc0Zyb21TaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOworICAgIHZvaWQgYWRkQXV0aG9yUnVsZXNB
bmRDb2xsZWN0VXNlclJ1bGVzRnJvbVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4qLCBSdWxlU2V0JiB1c2VyU3R5bGUpOwogCiAgICAgdm9pZCBjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAx
MTUyMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIyLDkgKzI2MjIsMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAg
ICAgaWYgKCFtX2Jhc2VVUkwuaXNWYWxpZCgpKQogICAgICAgICBtX2Jhc2VVUkwgPSBLVVJMKCk7
CiAKLSAgICBpZiAobV9lbGVtU2hlZXQpCi0gICAgICAgIG1fZWxlbVNoZWV0LT5pbnRlcm5hbCgp
LT5zZXRGaW5hbFVSTChtX2Jhc2VVUkwpOwotICAgIAorICAgIGlmIChtX2VsZW1TaGVldCkgewor
ICAgICAgICAvLyBFbGVtZW50IHNoZWV0IGlzIGEgc2lsbHkuIEl0IG5ldmVyIGNvbnRhaW5zIGFu
eXRoaW5nLgorICAgICAgICBBU1NFUlQoIW1fZWxlbVNoZWV0LT5pbnRlcm5hbCgpLT5ydWxlQ291
bnQoKSk7CisgICAgICAgIGJvb2wgdXNlc1JlbVVuaXRzID0gbV9lbGVtU2hlZXQtPmludGVybmFs
KCktPnVzZXNSZW1Vbml0cygpOworICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hlZXQ6
OmNyZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpOworICAgICAgICAvLyBGSVhNRTogU28gd2Ug
YXJlIG5vdCByZWFsbHkgdGhlIHBhcnNlci4gVGhlIHJpZ2h0IGZpeCBpcyB0byBlbGltaW5hdGUg
dGhlIGVsZW1lbnQgc2hlZXQgY29tcGxldGVseS4KKyAgICAgICAgbV9lbGVtU2hlZXQtPmludGVy
bmFsKCktPnBhcnNlclNldFVzZXNSZW1Vbml0cyh1c2VzUmVtVW5pdHMpOworICAgIH0KKwogICAg
IGlmICghZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VV
UkwpKSB7CiAgICAgICAgIC8vIEJhc2UgVVJMIGNoYW5nZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2
aXNpdGVkIGxpbmtzLgogICAgICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG90aGVyIFVSTHMgaW4g
dGhlIHRyZWUgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHJlLWV2YWx1YXRlZCBvbiBkeW5hbWljIGJh
c2UgVVJMIGNoYW5nZS4gU3R5bGUgc2hvdWxkIGJlIGludmFsaWRhdGVkIHRvby4KQEAgLTI3NTks
NyArMjc2NSw3IEBAIEZyYW1lKiBEb2N1bWVudDo6ZmluZFVuc2FmZVBhcmVudFNjcm9sbFAKICAg
ICByZXR1cm4gMDsKIH0KIAotU3R5bGVTaGVldEludGVybmFsKiBEb2N1bWVudDo6cGFnZVVzZXJT
aGVldCgpCitDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6cGFnZVVzZXJTaGVldCgpCiB7CiAgICAg
aWYgKG1fcGFnZVVzZXJTaGVldCkKICAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQo
KTsKQEAgLTI3NzMsOSArMjc3OSw5IEBAIFN0eWxlU2hlZXRJbnRlcm5hbCogRG9jdW1lbnQ6OnBh
Z2VVc2VyU2gKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhlIHNoZWV0
IGFuZCBjYWNoZSBpdC4KLSAgICBtX3BhZ2VVc2VyU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6
OmNyZWF0ZUlubGluZSh0aGlzLCBzZXR0aW5ncygpLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCkp
OwotICAgIG1fcGFnZVVzZXJTaGVldC0+c2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKLSAgICBt
X3BhZ2VVc2VyU2hlZXQtPnBhcnNlU3RyaW5nKHVzZXJTaGVldFRleHQpOworICAgIG1fcGFnZVVz
ZXJTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGluZSh0aGlzLCBzZXR0aW5ncygpLT51
c2VyU3R5bGVTaGVldExvY2F0aW9uKCkpOworICAgIG1fcGFnZVVzZXJTaGVldC0+aW50ZXJuYWwo
KS0+c2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKKyAgICBtX3BhZ2VVc2VyU2hlZXQtPmludGVy
bmFsKCktPnBhcnNlU3RyaW5nKHVzZXJTaGVldFRleHQpOwogICAgIHJldHVybiBtX3BhZ2VVc2Vy
U2hlZXQuZ2V0KCk7CiB9CiAKQEAgLTI3OTQsNyArMjgwMCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVw
ZGF0ZVBhZ2VVc2VyU2hlZXQoKQogICAgICAgICBzdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNT
dHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+ID4qIERvY3VtZW50OjpwYWdlR3JvdXBVc2VyU2hlZXRzKCkgY29uc3QKK2NvbnN0IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogRG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVl
dHMoKSBjb25zdAogewogICAgIGlmIChtX3BhZ2VHcm91cFVzZXJTaGVldENhY2hlVmFsaWQpCiAg
ICAgICAgIHJldHVybiBtX3BhZ2VHcm91cFVzZXJTaGVldHMuZ2V0KCk7CkBAIC0yODE5LDEyICsy
ODI1LDEyIEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiAKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0
ZXJuOjptYXRjaGVzUGF0dGVybnModXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJs
YWNrbGlzdCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFJlZlB0
cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHBhcnNlZFNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpj
cmVhdGVJbmxpbmUoY29uc3RfY2FzdDxEb2N1bWVudCo+KHRoaXMpLCBzaGVldC0+dXJsKCkpOwot
ICAgICAgICAgICAgcGFyc2VkU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQoc2hlZXQtPmxldmVs
KCkgPT0gVXNlclN0eWxlVXNlckxldmVsKTsKLSAgICAgICAgICAgIHBhcnNlZFNoZWV0LT5wYXJz
ZVN0cmluZyhzaGVldC0+c291cmNlKCkpOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hl
ZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29uc3RfY2FzdDxE
b2N1bWVudCo+KHRoaXMpLCBzaGVldC0+dXJsKCkpOwogICAgICAgICAgICAgaWYgKCFtX3BhZ2VH
cm91cFVzZXJTaGVldHMpCi0gICAgICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRzID0g
YWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+KTsKLSAgICAg
ICAgICAgIG1fcGFnZUdyb3VwVXNlclNoZWV0cy0+YXBwZW5kKHBhcnNlZFNoZWV0LnJlbGVhc2Uo
KSk7CisgICAgICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRzID0gYWRvcHRQdHIobmV3
IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPik7CisgICAgICAgICAgICBtX3BhZ2VHcm91
cFVzZXJTaGVldHMtPmFwcGVuZChncm91cFNoZWV0KTsKKyAgICAgICAgICAgIGdyb3VwU2hlZXQt
PmludGVybmFsKCktPnNldElzVXNlclN0eWxlU2hlZXQoc2hlZXQtPmxldmVsKCkgPT0gVXNlclN0
eWxlVXNlckxldmVsKTsKKyAgICAgICAgICAgIGdyb3VwU2hlZXQtPmludGVybmFsKCktPnBhcnNl
U3RyaW5nKHNoZWV0LT5zb3VyY2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4NTAsMTUg
KzI4NTYsMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUGFnZUdyb3VwVXNlclNoZWV0cwogdm9p
ZCBEb2N1bWVudDo6YWRkVXNlclNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiB1
c2VyU2hlZXQpCiB7CiAgICAgaWYgKCFtX3VzZXJTaGVldHMpCi0gICAgICAgIG1fdXNlclNoZWV0
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPik7Ci0g
ICAgbV91c2VyU2hlZXRzLT5hcHBlbmQodXNlclNoZWV0KTsKKyAgICAgICAgbV91c2VyU2hlZXRz
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPik7CisgICAgbV91
c2VyU2hlZXRzLT5hcHBlbmQoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHVzZXJTaGVldCwgdGhpcykp
OwogICAgIHN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQog
CiBDU1NTdHlsZVNoZWV0KiBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKIHsKICAgICBpZiAoIW1f
ZWxlbVNoZWV0KQotICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShT
dHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUlubGluZSh0aGlzLCBtX2Jhc2VVUkwpKTsKKyAgICAg
ICAgbV9lbGVtU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUodGhpcywgbV9iYXNl
VVJMKTsKICAgICByZXR1cm4gbV9lbGVtU2hlZXQuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiAxMTUyMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjM0LDE1ICs2MzQsMTUgQEAgcHVibGljOgogICAgIGJv
b2wgY2FuTmF2aWdhdGUoRnJhbWUqIHRhcmdldEZyYW1lKTsKICAgICBGcmFtZSogZmluZFVuc2Fm
ZVBhcmVudFNjcm9sbFByb3BhZ2F0aW9uQm91bmRhcnkoKTsKIAotICAgIFN0eWxlU2hlZXRJbnRl
cm5hbCogcGFnZVVzZXJTaGVldCgpOworICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQo
KTsKICAgICB2b2lkIGNsZWFyUGFnZVVzZXJTaGVldCgpOwogICAgIHZvaWQgdXBkYXRlUGFnZVVz
ZXJTaGVldCgpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+
ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdDsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMoKSBjb25zdDsKICAgICB2b2lk
IGNsZWFyUGFnZUdyb3VwVXNlclNoZWV0cygpOwogICAgIHZvaWQgdXBkYXRlUGFnZUdyb3VwVXNl
clNoZWV0cygpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+
ID4qIGRvY3VtZW50VXNlclNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclNoZWV0cy5nZXQo
KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRV
c2VyU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2hlZXRzLmdldCgpOyB9CiAgICAgdm9p
ZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHVzZXJTaGVldCk7
CiAKICAgICBDU1NTdHlsZVNoZWV0KiBlbGVtZW50U2hlZXQoKTsKQEAgLTEyNzIsOSArMTI3Miw5
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGU7CiAK
ICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9lbGVtU2hlZXQ7Ci0gICAgUmVmUHRyPFN0eWxl
U2hlZXRJbnRlcm5hbD4gbV9wYWdlVXNlclNoZWV0OwotICAgIG11dGFibGUgT3duUHRyPFZlY3Rv
cjxSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiA+ID4gbV9wYWdlR3JvdXBVc2VyU2hlZXRzOwot
ICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gPiA+IG1fdXNlclNo
ZWV0czsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlVXNlclNoZWV0OworICAgIG11
dGFibGUgT3duUHRyPFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiA+IG1fcGFnZUdyb3Vw
VXNlclNoZWV0czsKKyAgICBPd25QdHI8VmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+ID4g
bV91c2VyU2hlZXRzOwogICAgIG11dGFibGUgYm9vbCBtX3BhZ2VHcm91cFVzZXJTaGVldENhY2hl
VmFsaWQ7CiAKICAgICBib29sIG1fcHJpbnRpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMTE1MjM2KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxMSw4ICsyMTEsOSBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2V0Q1NTU3R5bGVT
CiAgICAgfQogCiAgICAgQVNTRVJUKG1faXNDU1MpOwotICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+IG5ld1NoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUodGhpcywgaHJlZiwg
YmFzZVVSTCwgY2hhcnNldCk7Ci0gICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShu
ZXdTaGVldCk7CisgICAgQ1NTUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KGRvY3VtZW50KCks
IGJhc2VVUkwsIGNoYXJzZXQpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG5ld1No
ZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGUoaHJlZiwgYmFzZVVSTCwgcGFyc2VyQ29u
dGV4dCk7CisgICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShuZXdTaGVldCwgdGhp
cyk7CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgY3Jvc3Mtb3JpZ2luIHNlY3VyaXR5IGNoZWNr
IGhlcmUgYmVjYXVzZSB3ZSBhcmUKICAgICAvLyBnZXR0aW5nIHRoZSBzaGVldCB0ZXh0IGluICJz
dHJpY3QiIG1vZGUuIFRoaXMgZW5mb3JjZXMgYSB2YWxpZCBDU1MgTUlNRQogICAgIC8vIHR5cGUu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTE1MjM2KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2OCwxMSArMTY4LDEzIEBAIHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVtZW50
KiAKICAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpIHx8IHBy
aW50RXZhbC5ldmFsKG1lZGlhUXVlcmllcy5nZXQoKSkpIHsKICAgICAgICAgICAgIGRvY3VtZW50
LT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAg
ICAgICAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBzdHlsZVNoZWV0ID0gU3R5bGVTaGVl
dEludGVybmFsOjpjcmVhdGUoZSwgU3RyaW5nKCksIEtVUkwoKSwgZG9jdW1lbnQtPmlucHV0RW5j
b2RpbmcoKSk7CisKKyAgICAgICAgICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJ
bmxpbmUoZSwgS1VSTCgpLCBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hlZXQgPSBtX3NoZWV0LT5pbnRlcm5h
bCgpOworCiAgICAgICAgICAgICBzdHlsZVNoZWV0LT5wYXJzZVN0cmluZ0F0TGluZSh0ZXh0LCBz
dGFydExpbmVOdW1iZXIpOwogICAgICAgICAgICAgc3R5bGVTaGVldC0+c2V0TWVkaWFRdWVyaWVz
KG1lZGlhUXVlcmllcy5yZWxlYXNlKCkpOwogICAgICAgICAgICAgc3R5bGVTaGVldC0+c2V0VGl0
bGUoZS0+dGl0bGUoKSk7Ci0gICAgICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3Jl
YXRlKHN0eWxlU2hlZXQpOwogICAgICAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMTUyMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQsOSBAQCB2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8U3R5bGVTaGVldEludGVybmFsPiBzdHlsZVNoZWV0ID0gU3R5bGVTaGVldEludGVybmFsOjpj
cmVhdGUodGhpcywgaHJlZiwgYmFzZVVSTCwgY2hhcnNldCk7CisgICAgQ1NTUGFyc2VyQ29udGV4
dCBwYXJzZXJDb250ZXh0KGRvY3VtZW50KCksIGJhc2VVUkwsIGNoYXJzZXQpOworICAgIFJlZlB0
cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNy
ZWF0ZShocmVmLCBiYXNlVVJMLCBwYXJzZXJDb250ZXh0KTsKKyAgICBtX3NoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRoaXMpOwogCiAgICAgc3R5bGVTaGVldC0+cGFy
c2VVc2VyU3R5bGVTaGVldChjYWNoZWRTdHlsZVNoZWV0LCBkb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpKTsKIApAQCAtMzAyLDggKzMwNCw2IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KGMKICAgICBzdHlsZVNoZWV0LT5zZXRNZWRpYVF1ZXJpZXMobWVkaWEucmVs
ZWFzZSgpKTsKICAgICBzdHlsZVNoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKIAotICAgIG1fc2hl
ZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldCk7Ci0KICAgICBtX2xvYWRpbmcg
PSBmYWxzZTsKICAgICBzdHlsZVNoZWV0LT5ub3RpZnlMb2FkZWRTaGVldChjYWNoZWRTdHlsZVNo
ZWV0KTsKICAgICBzdHlsZVNoZWV0LT5jaGVja0xvYWRlZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCShyZXZpc2lvbiAxMTUyMzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JQcm9maWxl
OjpzdGFydFNlbGVjdAogICAgIGlmIChzdHlsZVNoZWV0KSB7CiAgICAgICAgIHVybCA9IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoc3R5bGVTaGVldCk7CiAgICAgICAgIGlmICh1
cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAgdXJsID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3Vt
ZW50VVJMU3RyaW5nKHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpKTsKKyAgICAgICAgICAgIHVy
bCA9IEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhzdHlsZVNoZWV0LT5vd25l
ckRvY3VtZW50KCkpOwogICAgIH0KICAgICBtX2N1cnJlbnRNYXRjaERhdGEudXJsID0gdXJsOwog
ICAgIG1fY3VycmVudE1hdGNoRGF0YS5saW5lTnVtYmVyID0gcnVsZS0+c3R5bGVSdWxlKCktPnNv
dXJjZUxpbmUoKTsKQEAgLTg2OCw3ICs4NjgsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNw
ZWN0b3JDU1NBZ2VudDo6CiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3Rv
clN0eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KHN0
eWxlU2hlZXQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkgewogICAgICAgICBTdHJp
bmcgaWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RTdHlsZVNoZWV0SWQrKyk7Ci0gICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpOworICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7CiAgICAgICAg
IGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoaWQsIHN0
eWxlU2hlZXQsIGRldGVjdE9yaWdpbihzdHlsZVNoZWV0LCBkb2N1bWVudCksIEluc3BlY3RvckRP
TUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhkb2N1bWVudCksIHRoaXMpOwogICAgICAgICBtX2lk
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChpZCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CiAgICAg
ICAgIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQoc3R5bGVTaGVldCwg
aW5zcGVjdG9yU3R5bGVTaGVldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTUyMzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVs
ZSogCiAgICAgICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgICAgICBzb3VyY2VV
UkwgPSBwYXJlbnRTdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5maW5hbFVSTCgpOwogICAgICAgICAg
ICAgaWYgKHNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc291cmNlVVJMID0g
SW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKHBhcmVudFN0eWxlU2hlZXQtPmZp
bmREb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBJbnNwZWN0b3JET01B
Z2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcocGFyZW50U3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzb3VyY2VVUkwgPSAiIjsKIApAQCAtMjIy
LDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihDU1NSdWxlKiAKICAg
ICAgICAgICAgIHdoaWxlIChzdHlsZVNoZWV0KSB7CiAgICAgICAgICAgICAgICAgbWVkaWFMaXN0
ID0gc3R5bGVTaGVldC0+bWVkaWEoKTsKICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0ICYm
IG1lZGlhTGlzdC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRv
YyA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpOworICAgICAgICAgICAgICAgICAgICBEb2N1
bWVudCogZG9jID0gc3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZG9jKQogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gZG9jLT51
cmwoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0eWxlU2hlZXQtPmludGVybmFs
KCktPmZpbmFsVVJMKCkuaXNFbXB0eSgpKQpAQCAtMTAzOCw3ICsxMDM4LDcgQEAgSW5zcGVjdG9y
Q1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZQogCiBEb2N1bWVudCogSW5zcGVjdG9yU3R5
bGVTaGVldDo6b3duZXJEb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZVN0eWxl
U2hlZXQtPmZpbmREb2N1bWVudCgpOworICAgIHJldHVybiBtX3BhZ2VTdHlsZVNoZWV0LT5vd25l
ckRvY3VtZW50KCk7CiB9CiAKIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6cnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24g
MTE1MjM2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxp
emVDU1NTdHlsZVNoCiAgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0g
MSkKICAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOwogICAgICAgICB9Ci0g
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPmZpbmREb2N1bWVudCgpOwor
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7
CiAgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgogICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRS
dWxlKCkpIHsKICAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNf
Y2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSk7ICAgICAgICAgICAgCg==
</data>
<flag name="review"
          id="144360"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>