<?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>163615</bug_id>
          
          <creation_ts>2016-10-18 13:20:40 -0700</creation_ts>
          <short_desc>DFG worklist should use AutomaticThread</short_desc>
          <delta_ts>2016-10-19 10:50:52 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>163576</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1241582</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 13:20:40 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241602</commentid>
    <comment_count>1</comment_count>
      <attachid>291980</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 13:47:42 -0700</bug_when>
    <thetext>Created attachment 291980
maybe this will work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241783</commentid>
    <comment_count>2</comment_count>
      <attachid>292029</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 19:45:36 -0700</bug_when>
    <thetext>Created attachment 292029
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241826</commentid>
    <comment_count>3</comment_count>
      <attachid>292029</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-10-18 22:09:50 -0700</bug_when>
    <thetext>Comment on attachment 292029
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:78
&gt; +                m_plan = nullptr;

I think it might be cleaner to use an RAII object to (1) RELEASE_ASSERT(m_plan) above, and (2) nullify m_plan on return.

&gt; Source/WTF/wtf/AutomaticThread.h:150
&gt; +    // It&apos;s sometimes useful to allocate resources while the thread is running, and do destroy them

typo: /do destroy/to destroy/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241827</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 22:14:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 292029 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292029&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:78
&gt; &gt; +                m_plan = nullptr;
&gt; 
&gt; I think it might be cleaner to use an RAII object to (1)
&gt; RELEASE_ASSERT(m_plan) above, and (2) nullify m_plan on return.

I agree.  I will do that.

Also, I can use that scope to decrement m_numberOfActiveThreads.

&gt; 
&gt; &gt; Source/WTF/wtf/AutomaticThread.h:150
&gt; &gt; +    // It&apos;s sometimes useful to allocate resources while the thread is running, and do destroy them
&gt; 
&gt; typo: /do destroy/to destroy/

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241829</commentid>
    <comment_count>5</comment_count>
      <attachid>292029</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 22:16:03 -0700</bug_when>
    <thetext>Comment on attachment 292029
the patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:78
&gt;&gt;&gt; +                m_plan = nullptr;
&gt;&gt; 
&gt;&gt; I think it might be cleaner to use an RAII object to (1) RELEASE_ASSERT(m_plan) above, and (2) nullify m_plan on return.
&gt; 
&gt; I agree.  I will do that.
&gt; 
&gt; Also, I can use that scope to decrement m_numberOfActiveThreads.

Hmmm, but that requires some tricks - since that count must be decremented when the lock is held.  I&apos;ll come up with something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241832</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 22:17:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 292029 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292029&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:78
&gt; &gt;&gt;&gt; +                m_plan = nullptr;
&gt; &gt;&gt; 
&gt; &gt;&gt; I think it might be cleaner to use an RAII object to (1) RELEASE_ASSERT(m_plan) above, and (2) nullify m_plan on return.
&gt; &gt; 
&gt; &gt; I agree.  I will do that.
&gt; &gt; 
&gt; &gt; Also, I can use that scope to decrement m_numberOfActiveThreads.
&gt; 
&gt; Hmmm, but that requires some tricks - since that count must be decremented
&gt; when the lock is held.  I&apos;ll come up with something.

Oh it&apos;s easy!  The m_numberOfActiveThreads count is just for debugging.  So, although we want to hold the lock when decrementing it, we can do it in a separate critical section from everything else.  This means that the scoped idiom still works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241835</commentid>
    <comment_count>7</comment_count>
      <attachid>292044</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 22:21:54 -0700</bug_when>
    <thetext>Created attachment 292044
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241836</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 22:23:55 -0700</bug_when>
    <thetext>I&apos;m going to build the full stack so that I can run JetStream locally.  I&apos;m pretty sure that JetStream might thrash with the 1 second timeout.  My hope is that it won&apos;t matter because the cost of starting a thread is low enough that you can safely pay it once per second.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241839</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 22:26:40 -0700</bug_when>
    <thetext>Attachment 292044 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGWorklist.cpp:112:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241983</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-19 10:48:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I&apos;m going to build the full stack so that I can run JetStream locally.  I&apos;m
&gt; pretty sure that JetStream might thrash with the 1 second timeout.  My hope
&gt; is that it won&apos;t matter because the cost of starting a thread is low enough
&gt; that you can safely pay it once per second.

My experiments show that this patch might be a small JetStream progression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241986</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-19 10:50:52 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/207545</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291980</attachid>
            <date>2016-10-18 13:47:42 -0700</date>
            <delta_ts>2016-10-18 19:45:36 -0700</delta_ts>
            <desc>maybe this will work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18866</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJlYWREYXRhLmNwcAkocmV2
aXNpb24gMjA3NDc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJlYWREYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKIFRocmVhZERhdGE6OlRocmVhZERhdGEoV29ya2xpc3QqIHdvcmtsaXN0
KQogICAgIDogbV93b3JrbGlzdCh3b3JrbGlzdCkKLSAgICAsIG1faWRlbnRpZmllcigwKQogICAg
ICwgbV9zYWZlcG9pbnQobnVsbHB0cikKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGhyZWFkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAyMDc0NzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw4ICsy
Nyw4IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00Niw3ICs0Niw3IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdvcmtsaXN0OwogICAgIAogICAgIFdvcmtsaXN0
KiBtX3dvcmtsaXN0OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFJl
ZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExvY2sgbV9yaWdodFRvUnVuOwog
ICAgIFNhZmVwb2ludCogbV9zYWZlcG9pbnQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwNzQ3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogV29ya2xpc3Q6Oldvcmts
aXN0KENTdHJpbmcgd29ya2xpc3ROYW1lKQogICAgIDogbV90aHJlYWROYW1lKHRvQ1N0cmluZyh3
b3JrbGlzdE5hbWUsICIgV29ya2VyIFRocmVhZCIpKQorICAgICwgbV9sb2NrKEJveDxMb2NrPjo6
Y3JlYXRlKCkpCisgICAgLCBtX3BsYW5FbnF1ZXVlZChBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246
OmNyZWF0ZSgpKQogICAgICwgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMoMCkKIHsKIH0KQEAgLTQ2
LDI0ICs0OCwyMyBAQCBXb3JrbGlzdDo6V29ya2xpc3QoQ1N0cmluZyB3b3JrbGlzdE5hbWUpCiBX
b3JrbGlzdDo6fldvcmtsaXN0KCkKIHsKICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgbV9x
dWV1ZS5hcHBlbmQobnVsbHB0cik7IC8vIFVzZSBudWxsIHBsYW4gdG8gaW5kaWNhdGUgdGhhdCB3
ZSB3YW50IHRoZSB0aHJlYWQgdG8gdGVybWluYXRlLgotICAgICAgICBtX3BsYW5FbnF1ZXVlZC5u
b3RpZnlBbGwoKTsKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwog
ICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KQotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZHNbaV0tPm1faWRlbnRpZmllcik7
CisgICAgICAgIG1fdGhyZWFkc1tpXS0+am9pbigpOwogICAgIEFTU0VSVCghbV9udW1iZXJPZkFj
dGl2ZVRocmVhZHMpOwogfQogCiB2b2lkIFdvcmtsaXN0OjpmaW5pc2hDcmVhdGlvbih1bnNpZ25l
ZCBudW1iZXJPZlRocmVhZHMsIGludCByZWxhdGl2ZVByaW9yaXR5KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG51bWJlck9mVGhyZWFkcyk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZUaHJlYWRzOyBpLS07KSB7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWREYXRhPiBkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJl
YWREYXRhPih0aGlzKTsKLSAgICAgICAgZGF0YS0+bV9pZGVudGlmaWVyID0gY3JlYXRlVGhyZWFk
KHRocmVhZEZ1bmN0aW9uLCBkYXRhLmdldCgpLCBtX3RocmVhZE5hbWUuZGF0YSgpKTsKLSAgICAg
ICAgaWYgKHJlbGF0aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0
eShkYXRhLT5tX2lkZW50aWZpZXIsIHJlbGF0aXZlUHJpb3JpdHkpOworICAgICAgICBkYXRhLT5t
X3RocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWRCb2R5KGxvY2tlciwgKnRoaXMsICpkYXRhLCBt
X2xvY2ssIG1fcGxhbkVucXVldWVkLCByZWxhdGl2ZVByaW9yaXR5KSk7CiAgICAgICAgIG1fdGhy
ZWFkcy5hcHBlbmQoV1RGTW92ZShkYXRhKSk7CiAgICAgfQogfQpAQCAtNzcsNyArNzgsNyBAQCBS
ZWY8V29ya2xpc3Q+IFdvcmtsaXN0OjpjcmVhdGUoQ1N0cmluZyB3CiAKIGJvb2wgV29ya2xpc3Q6
OmlzQWN0aXZlRm9yVk0oVk0mIHZtKSBjb25zdAogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgUGxhbk1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbGFucy5lbmQoKTsKICAgICBmb3IgKFBsYW5NYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT52bSA9PSAmdm0pCkBAIC04OSw3ICs5MCw3IEBAIGJv
b2wgV29ya2xpc3Q6OmlzQWN0aXZlRm9yVk0oVk0mIHZtKSBjb24KIHZvaWQgV29ya2xpc3Q6OmVu
cXVldWUoUGFzc1JlZlB0cjxQbGFuPiBwYXNzZWRQbGFuKQogewogICAgIFJlZlB0cjxQbGFuPiBw
bGFuID0gcGFzc2VkUGxhbjsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGls
YXRpb25RdWV1ZSgpKSB7CiAgICAgICAgIGR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOwog
ICAgICAgICBkYXRhTG9nKCI6IEVucXVldWVpbmcgcGxhbiB0byBvcHRpbWl6ZSAiLCBwbGFuLT5r
ZXkoKSwgIlxuIik7CkBAIC05NywxMiArOTgsMTIgQEAgdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShQ
YXNzUmVmUHRyPFBsYW4+IAogICAgIEFTU0VSVChtX3BsYW5zLmZpbmQocGxhbi0+a2V5KCkpID09
IG1fcGxhbnMuZW5kKCkpOwogICAgIG1fcGxhbnMuYWRkKHBsYW4tPmtleSgpLCBwbGFuKTsKICAg
ICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKLSAgICBtX3BsYW5FbnF1ZXVlZC5ub3RpZnlPbmUoKTsK
KyAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7CiB9CiAKIFdvcmtsaXN0OjpT
dGF0ZSBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZShDb21waWxhdGlvbktleSBrZXkpCiB7Ci0g
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9s
b2NrKTsKICAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5maW5kKGtleSk7CiAg
ICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIE5vdEtub3duOwpA
QCAtMTE4LDcgKzExOSw3IEBAIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1B
cmUKICAgICAvLyBBZnRlciB3ZSByZWxlYXNlIHRoaXMgbG9jaywgd2Uga25vdyB0aGF0IGFsdGhv
dWdoIG90aGVyIFZNcyBtYXkgc3RpbGwKICAgICAvLyBiZSBhZGRpbmcgcGxhbnMsIG91ciBWTSB3
aWxsIG5vdCBiZS4KICAgICAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
Q29tcGlsYXRpb25RdWV1ZSgpKSB7CiAgICAgICAgIGR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxl
KCkpOwpAQCAtMTQwLDE0ICsxNDEsMTQgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxh
bnNGb3JWTUFyZQogICAgICAgICBpZiAoYWxsQXJlQ29tcGlsZWQpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgCi0gICAgICAgIG1fcGxhbkNvbXBpbGVkLndhaXQobV9sb2NrKTsKKyAgICAg
ICAgbV9wbGFuQ29tcGlsZWQud2FpdCgqbV9sb2NrKTsKICAgICB9CiB9CiAKIHZvaWQgV29ya2xp
c3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZlY3RvcjxSZWZQdHI8UGxhbj4s
IDg+JiBteVJlYWR5UGxhbnMpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAg
IGlmIChwbGFuLT52bSAhPSAmdm0pCkBAIC0xOTIsNyArMTkzLDcgQEAgV29ya2xpc3Q6OlN0YXRl
IFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYQogICAgIH0KICAgICAKICAgICBpZiAoISFyZXF1ZXN0
ZWRLZXkgJiYgcmVzdWx0aW5nU3RhdGUgPT0gTm90S25vd24pIHsKLSAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAg
ICAgICAgIGlmIChtX3BsYW5zLmNvbnRhaW5zKHJlcXVlc3RlZEtleSkpCiAgICAgICAgICAgICBy
ZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGluZzsKICAgICB9CkBAIC0yMDksNyArMjEwLDcgQEAgdm9p
ZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJgogCiB2b2lkIFdvcmtsaXN0Ojpy
ZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsr
aXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAg
IGlmIChwbGFuLT52bSAhPSAmdm0pCkBAIC0yMzYsNyArMjM3LDcgQEAgdm9pZCBXb3JrbGlzdDo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VgogewogICAgIFZNKiB2bSA9IHZpc2l0b3IuaGVhcCgp
LT52bSgpOwogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRl
cmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0
ZXIpIHsKICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChwbGFuLT52bSAhPSB2bSkKQEAgLTI1OSw3ICsyNjAsNyBAQCB2b2lkIFdvcmts
aXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFk
UGxhbnMoVk0mIHZtKQogewogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIEhhc2hTZXQ8
Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKICAgICAgICAgZm9yIChQbGFuTWFwOjppdGVy
YXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRl
cikgewogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwpAQCAtMzA2
LDcgKzMwNyw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAKIHZv
aWQgV29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mIHZtKQogewotICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7CiAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5LZXlzOwogICAgIFZlY3Rv
cjxSZWZQdHI8UGxhbj4+IGRlYWRQbGFuczsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wbGFu
cykgewpAQCAtMzM3LDEzICszMzgsMTMgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlTm9uQ29tcGls
aW5nUGxhbnNGbwogCiBzaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKIHsKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwog
ICAgIHJldHVybiBtX3F1ZXVlLnNpemUoKTsKIH0KIAogdm9pZCBXb3JrbGlzdDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZHVtcChsb2NrZXIsIG91dCk7CiB9
CiAKQEAgLTM1NSw4MiArMzU2LDExMyBAQCB2b2lkIFdvcmtsaXN0OjpkdW1wKGNvbnN0IExvY2tI
b2xkZXImLCBQCiAgICAgICAgICIsIE51bSBBY3RpdmUgVGhyZWFkcyA9ICIsIG1fbnVtYmVyT2ZB
Y3RpdmVUaHJlYWRzLCAiLyIsIG1fdGhyZWFkcy5zaXplKCksICJdIik7CiB9CiAKLXZvaWQgV29y
a2xpc3Q6OnJ1blRocmVhZChUaHJlYWREYXRhKiBkYXRhKQotewotICAgIENvbXBpbGF0aW9uU2Nv
cGUgY29tcGlsYXRpb25TY29wZTsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBp
bGF0aW9uUXVldWUoKSkKLSAgICAgICAgZGF0YUxvZygqdGhpcywgIjogVGhyZWFkIHN0YXJ0ZWRc
biIpOwotICAgIAotICAgIExvbmdMaXZlZFN0YXRlIGxvbmdMaXZlZFN0YXRlOworY2xhc3MgV29y
a2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAg
ICBUaHJlYWRCb2R5KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmtsaXN0
LCBUaHJlYWREYXRhJiBkYXRhLCBCb3g8TG9jaz4gbG9jaywgUmVmUHRyPEF1dG9tYXRpY1RocmVh
ZENvbmRpdGlvbj4gY29uZGl0aW9uLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKKyAgICAgICAgOiBB
dXRvbWF0aWNUaHJlYWQobG9ja2VyLCBsb2NrLCBjb25kaXRpb24pCisgICAgICAgICwgbV93b3Jr
bGlzdCh3b3JrbGlzdCkKKyAgICAgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3JlbGF0
aXZlUHJpb3JpdHkocmVsYXRpdmVQcmlvcml0eSkKKyAgICB7CisgICAgfQogICAgIAotICAgIGZv
ciAoOzspIHsKLSAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW47Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgICAgICB3aGlsZSAobV9xdWV1
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9wbGFuRW5xdWV1ZWQud2FpdChtX2xvY2sp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwbGFuID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsK
LSAgICAgICAgICAgIGlmIChwbGFuKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cGxhbi0+c3RhZ2UgPT0gUGxhbjo6UHJlcGFyaW5nKTsKLSAgICAgICAgICAgICAgICBtX251bWJl
ck9mQWN0aXZlVGhyZWFkcysrOwotICAgICAgICAgICAgfQotICAgICAgICB9Citwcm90ZWN0ZWQ6
CisgICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IExvY2tIb2xkZXImKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKG1fd29ya2xpc3QubV9xdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKICAgICAgICAgCisgICAgICAgIHBsYW4gPSBtX3dvcmts
aXN0Lm1fcXVldWUudGFrZUZpcnN0KCk7CiAgICAgICAgIGlmICghcGxhbikgewogICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZygqdGhpcywgIjogVGhyZWFkIHNodXR0aW5nIGRvd25cbiIpOwotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFk
IHNodXR0aW5nIGRvd25cbiIpOworICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OlN0b3A7
CiAgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPT0gUGxhbjo6
UHJlcGFyaW5nKTsKKyAgICAgICAgbV93b3JrbGlzdC5tX251bWJlck9mQWN0aXZlVGhyZWFkcysr
OworICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6Q29udGludWU7CisgICAgfQorICAgIAorICAg
IFdvcmtSZXN1bHQgd29yaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX3BsYW4pOwogICAgICAgICAKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhLm1f
cmlnaHRUb1J1bik7CiAgICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGRh
dGEtPm1fcmlnaHRUb1J1bik7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UgPT0g
UGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVU
aHJlYWRzLS07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwbGFuLT5ub3RpZnlDb21waWxpbmcoKTsKKyAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3Rh
Z2UgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5tX251
bWJlck9mQWN0aXZlVGhyZWFkcy0tOworICAgICAgICAgICAgICAgIG1fcGxhbiA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9wbGFuLT5ub3RpZnlDb21waWxpbmcoKTsKKyAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1
ZSgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IENvbXBpbGluZyAiLCBwbGFu
LT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlQ29tcGlsYXRpb25RdWV1ZSgpKQorICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAi
OiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7CiAgICAg
ICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXBsYW4tPnZtLT5oZWFwLmlzQ29sbGVj
dGluZygpKTsKLSAgICAgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChsb25nTGl2ZWRTdGF0
ZSwgZGF0YSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5zdGFnZSA9PSBQbGFu
OjpDYW5jZWxsZWQgfHwgIXBsYW4tPnZtLT5oZWFwLmlzQ29sbGVjdGluZygpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0tPmhlYXAuaXNDb2xsZWN0aW5nKCkpOworICAgICAg
ICBtX3BsYW4tPmNvbXBpbGVJblRocmVhZChtX2xvbmdMaXZlZFN0YXRlLCAmbV9kYXRhKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9wbGFuLT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQgfHwg
IW1fcGxhbi0+dm0tPmhlYXAuaXNDb2xsZWN0aW5nKCkpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAg
ICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFn
ZSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fbnVt
YmVyT2ZBY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICAgICAgbV9wbGFuID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcGxhbi0+bm90aWZ5UmVhZHko
KTsKKyAgICAgICAgICAgIG1fcGxhbi0+bm90aWZ5UmVhZHkoKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBkdW1wKGxvY2tlciwgV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiOiBDb21waWxlZCAiLCBwbGFuLT5rZXkoKSwgIiBh
c3luY2hyb25vdXNseVxuIik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3dv
cmtsaXN0LmR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAgICAgICAgIGRh
dGFMb2coIjogQ29tcGlsZWQgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fcmVhZHlQ
bGFucy5hcHBlbmQocGxhbik7CisgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fcmVhZHlQbGFucy5h
cHBlbmQobV9wbGFuKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3BsYW5D
b21waWxlZC5ub3RpZnlBbGwoKTsKLSAgICAgICAgICAgICAgICBtX251bWJlck9mQWN0aXZlVGhy
ZWFkcy0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXBsYW4t
PnZtLT5oZWFwLmlzQ29sbGVjdGluZygpKTsKKyAgICAgICAgICAgIG1fd29ya2xpc3QubV9wbGFu
Q29tcGlsZWQubm90aWZ5QWxsKCk7CisgICAgICAgICAgICBtX3dvcmtsaXN0Lm1fbnVtYmVyT2ZB
Y3RpdmVUaHJlYWRzLS07CiAgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxh
bi0+dm0tPmhlYXAuaXNDb2xsZWN0aW5nKCkpOworICAgICAgICAKKyAgICAgICAgbV9wbGFuID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KLX0K
LQotdm9pZCBXb3JrbGlzdDo6dGhyZWFkRnVuY3Rpb24odm9pZCogYXJndW1lbnQpCi17Ci0gICAg
VGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEqPihhcmd1bWVudCk7Ci0g
ICAgZGF0YS0+bV93b3JrbGlzdC0+cnVuVGhyZWFkKGRhdGEpOwotfQorICAgIAorICAgIHZvaWQg
dGhyZWFkRGlkU3RhcnQoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coKnRoaXMsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX3JlbGF0aXZlUHJpb3JpdHkpCisgICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0eShj
dXJyZW50VGhyZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgIAorICAgICAgICBt
X2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7
CisgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0
YXRlPigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRocmVhZFdpbGxTdG9wKGNvbnN0IExvY2tI
b2xkZXImKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21w
aWxhdGlvblF1ZXVlKCkpCisgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBUaHJlYWQgd2ls
bCBzdG9wXG4iKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9wbGFuKTsKKyAgICAgICAg
CisgICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IG51bGxwdHI7CisgICAgICAgIG1fbG9uZ0xp
dmVkU3RhdGUgPSBudWxscHRyOworICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgV29ya2xpc3QmIG1fd29ya2xpc3Q7CisgICAgVGhyZWFkRGF0YSYg
bV9kYXRhOworICAgIGludCBtX3JlbGF0aXZlUHJpb3JpdHk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENvbXBpbGF0aW9uU2NvcGU+IG1fY29tcGlsYXRpb25TY29wZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8TG9uZ0xpdmVkU3RhdGU+IG1fbG9uZ0xpdmVkU3RhdGU7CisgICAgUmVmUHRyPFBsYW4+IG1f
cGxhbjsKK307CiAKIHN0YXRpYyBXb3JrbGlzdCogdGhlR2xvYmFsREZHV29ya2xpc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDIwNzQ3
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUg
IkRGR1RocmVhZERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CkBAIC04Myw2ICs4NCw5IEBAIHByaXZhdGU6CiAgICAgV29ya2xpc3Qo
Q1N0cmluZyB3b3JrbGlzdE5hbWUpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24odW5zaWduZWQg
bnVtYmVyT2ZUaHJlYWRzLCBpbnQpOwogICAgIAorICAgIGNsYXNzIFRocmVhZEJvZHk7CisgICAg
ZnJpZW5kIGNsYXNzIFRocmVhZEJvZHk7CisgICAgCiAgICAgdm9pZCBydW5UaHJlYWQoVGhyZWFk
RGF0YSopOwogICAgIHN0YXRpYyB2b2lkIHRocmVhZEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50KTsK
ICAgICAKQEAgLTEwOCw4ICsxMTIsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX3N1c3BlbnNp
b25Mb2NrOwogICAgIAotICAgIG11dGFibGUgTG9jayBtX2xvY2s7Ci0gICAgQ29uZGl0aW9uIG1f
cGxhbkVucXVldWVkOworICAgIEJveDxMb2NrPiBtX2xvY2s7CisgICAgUmVmUHRyPEF1dG9tYXRp
Y1RocmVhZENvbmRpdGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgQ29uZGl0aW9uIG1fcGxhbkNv
bXBpbGVkOwogICAgIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRGF0YT4+IG1f
dGhyZWFkczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2aXNpb24gMjA3
NDgwKQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsMTcgQEAgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjp+QXV0b21hdGlj
VGhyZQogewogfQogCit2b2lkIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5T25lKGNv
bnN0IExvY2tIb2xkZXImIGxvY2tlcikKK3sKKyAgICBpZiAobV9jb25kaXRpb24ubm90aWZ5T25l
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV90aHJlYWRzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdGhyZWFkcy50YWtlTGFzdCgpLT5zdGFydChs
b2NrZXIpOworfQorCiB2b2lkIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5QWxsKGNv
bnN0IExvY2tIb2xkZXImIGxvY2tlcikKIHsKICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsK
QEAgLTEwOSw5ICsxMjAsMTEgQEAgdm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnN0YXJ0KGNvbnN0IExv
Y2tIbwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOwogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9jb25kaXRpb24tPmNvbnRhaW5zKGxv
Y2tlciwgdGhpcykpOworICAgICAgICAgICAgICAgIHRocmVhZERpZFN0YXJ0KGxvY2tlcik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gc3RvcCA9IFsmXSAo
Y29uc3QgTG9ja0hvbGRlciYpIHsKKyAgICAgICAgICAgIGF1dG8gc3RvcCA9IFsmXSAoY29uc3Qg
TG9ja0hvbGRlciYgbG9ja2VyKSB7CisgICAgICAgICAgICAgICAgdGhyZWFkV2lsbFN0b3AobG9j
a2VyKTsKICAgICAgICAgICAgICAgICBtX2lzUnVubmluZyA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIG1faXNSdW5uaW5nQ29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAgICAgICAgICAgfTsKQEAg
LTEzMyw2ICsxNDYsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hv
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3b2tlbkJ5Tm90aWZ5KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkdvaW5nIHRvIHNsZWVwIVxuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkV2lsbFN0b3AobG9ja2VyKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NvbmRpdGlvbi0+YWRkKGxvY2tlciwgdGhpcyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTUwLDUg
KzE2NCwxMyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvCiAgICAg
ZGV0YWNoVGhyZWFkKHRocmVhZCk7CiB9CiAKK3ZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJlYWRE
aWRTdGFydChjb25zdCBMb2NrSG9sZGVyJikKK3sKK30KKwordm9pZCBBdXRvbWF0aWNUaHJlYWQ6
OnRocmVhZFdpbGxTdG9wKGNvbnN0IExvY2tIb2xkZXImKQoreworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIApJbmRleDogU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmgJKHJldmlzaW9uIDIwNzQ4MCkK
KysrIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF1dG9t
YXRpY1RocmVhZENvbmRpdGlvbigpOwogICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IG5vdGlmeU9uZShjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgbm90aWZ5QWxsKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICAKIHByaXZhdGU6CkBAIC0xMDgs
NyArMTA5LDcgQEAgcHVibGljOgogICAgIAogcHJvdGVjdGVkOgogICAgIC8vIFRoaXMgbG9naWNh
bGx5IGNyZWF0ZXMgdGhlIHRocmVhZCwgYnV0IGluIHJlYWxpdHkgdGhlIHRocmVhZCB3b24ndCBi
ZSBjcmVhdGVkIHVudGlsIHNvbWVvbmUKLSAgICAvLyBjYWxscyBBdXRvbWF0aWNUaHJlYWRDb25k
aXRpb246Om5vdGlmeUFsbCgpLgorICAgIC8vIGNhbGxzIEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bjo6bm90aWZ5T25lKCkgb3Igbm90aWZ5QWxsKCkuCiAgICAgQXV0b21hdGljVGhyZWFkKGNvbnN0
IExvY2tIb2xkZXImLCBCb3g8TG9jaz4sIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+
KTsKICAgICAKICAgICAvLyBUbyB1bmRlcnN0YW5kIFBvbGxSZXN1bHQgYW5kIFdvcmtSZXN1bHQs
IGltYWdpbmUgdGhhdCBwb2xsKCkgYW5kIHdvcmsoKSBhcmUgYmVpbmcgY2FsbGVkIGxpa2UKQEAg
LTE0Myw2ICsxNDQsMTUgQEAgcHJvdGVjdGVkOgogICAgIGVudW0gY2xhc3MgV29ya1Jlc3VsdCB7
IENvbnRpbnVlLCBTdG9wIH07CiAgICAgdmlydHVhbCBXb3JrUmVzdWx0IHdvcmsoKSA9IDA7CiAg
ICAgCisgICAgY2xhc3MgVGhyZWFkU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZFNjb3Bl
OworICAgIAorICAgIC8vIEl0J3Mgc29tZXRpbWVzIHVzZWZ1bCB0byBhbGxvY2F0ZSByZXNvdXJj
ZXMgd2hpbGUgdGhlIHRocmVhZCBpcyBydW5uaW5nLCBhbmQgZG8gZGVzdHJveSB0aGVtCisgICAg
Ly8gd2hlbiB0aGUgdGhyZWFkIGRpZXMuIFRoZXNlIG1ldGhvZHMgbGV0IHlvdSBkbyB0aGlzLiBZ
b3UgY2FuIG92ZXJyaWRlIHRoZXNlIG1ldGhvZHMsIGFuZCB5b3UKKyAgICAvLyBjYW4gYmUgc3Vy
ZSB0aGF0IHRoZSBkZWZhdWx0IG9uZXMgZG9uJ3QgZG8gYW55dGhpbmcgKHNvIHlvdSBkb24ndCBu
ZWVkIGEgc3VwZXIgY2FsbCkuCisgICAgdmlydHVhbCB2b2lkIHRocmVhZERpZFN0YXJ0KGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhyZWFkV2lsbFN0b3AoY29uc3QgTG9j
a0hvbGRlciYpOworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXV0b21hdGljVGhy
ZWFkQ29uZGl0aW9uOwogICAgIApJbmRleDogU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJKHJldmlzaW9uIDIwNzQ3OSkK
KysrIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsMjMg
KzE2OCwyNyBAQCBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7CiAgICAgfQogCiAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgbWV0aG9kIGlzIGV4dHJlbWVseSBmYXN0IHdoZW4gbm9ib2R5IGlzIHdhaXRpbmcu
IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHJ5IHRvCi0gICAgLy8gYXZvaWQgY2FsbGluZyB0aGlz
IG1ldGhvZC4KLSAgICB2b2lkIG5vdGlmeU9uZSgpCisgICAgLy8gYXZvaWQgY2FsbGluZyB0aGlz
IG1ldGhvZC4gVGhpcyByZXR1cm5zIHRydWUgaWYgc29tZW9uZSB3YXMgYWN0dWFsbHkgd29rZW4g
dXAuCisgICAgYm9vbCBub3RpZnlPbmUoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2hhc1dhaXRl
cnMubG9hZCgpKSB7CiAgICAgICAgICAgICAvLyBBdCB0aGlzIGV4YWN0IGluc3RhbnQsIHRoZXJl
IGlzIG5vYm9keSB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiBUaGUgd2F5IHRvIHZpc3VhbGl6
ZQogICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGF0IGlmIHVucGFya09uZSgpIHJhbiB0byBjb21w
bGV0aW9uIHdpdGhvdXQgb2JzdHJ1Y3Rpb25zIGF0IHRoaXMgbW9tZW50LCBpdAogICAgICAgICAg
ICAgLy8gd291bGRuJ3Qgd2FrZSBhbnlvbmUgdXAuIEhlbmNlLCB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8hCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIFBh
cmtpbmdMb3Q6OnVucGFya09uZSgKICAgICAgICAgICAgICZtX2hhc1dhaXRlcnMsCiAgICAgICAg
ICAgICBbdGhpc10gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90
IHsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCiAgICAg
ICAgICAgICAgICAgICAgIG1faGFzV2FpdGVycy5zdG9yZShmYWxzZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBub3RpZnlBbGwoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292029</attachid>
            <date>2016-10-18 19:45:36 -0700</date>
            <delta_ts>2016-10-18 22:21:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23285</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHdvcmtsaXN0IHNob3VsZCB1c2UgQXV0b21hdGljVGhyZWFkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEF1dG9tYXRpY1RocmVhZCBp
cyBhIG5ldyBmZWF0dXJlIGluIFdURiB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNyZWF0ZSB3
b3JrZXIgdGhyZWFkcyB0aGF0CisgICAgICAgIHNodXQgZG93biBhdXRvbWF0aWNhbGx5LiBUaGlz
IGNoYW5nZXMgREZHOjpXb3JrbGlzdCB0byB1c2UgQXV0b21hdGljVGhyZWFkLCBzbyB0aGF0IGl0
cworICAgICAgICB0aHJlYWRzIHNodXQgZG93biBhdXRvbWF0aWNhbGx5LCB0b28uIFRoaXMgaGFz
IHRoZSBwb3RlbnRpYWwgdG8gc2F2ZSBhIGxvdCBvZiBtZW1vcnkuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHJlcXVpcmVkIHNvbWUgaW1wcm92ZW1lbnRzIHRvIEF1dG9tYXRpY1RocmVhZDogV29y
a2xpc3QgbGlrZXMgdG8gYmUgYWJsZSB0byBrZWVwIHN0YXRlCisgICAgICAgIGFyb3VuZCBmb3Ig
dGhlIHdob2xlIGxpZmV0aW1lIG9mIGEgdGhyZWFkLCBhbmQgc28gaXQgbGlrZXMga25vd2luZyB3
aGVuIHRocmVhZHMgYXJlIGJvcm4gYW5kCisgICAgICAgIHdoZW4gdGhleSBkaWUuIEkgYWRkZWQg
dmlydHVhbCBtZXRob2RzIGZvciB0aGF0LiBBbHNvLCBXb3JrbGlzdCB1c2VzIG5vdGlmeU9uZSgp
IHNvIEkgYWRkZWQKKyAgICAgICAgdGhhdCwgdG9vLgorCisgICAgICAgICogZGZnL0RGR1RocmVh
ZERhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRocmVhZERhdGE6OlRocmVhZERhdGEpOgor
ICAgICAgICAqIGRmZy9ERkdUaHJlYWREYXRhLmg6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6VGhyZWFkQm9keTo6VGhyZWFkQm9k
eSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlz
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojppc0FjdGl2
ZUZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkpOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAo
SlNDOjpERkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6
OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0
OjpyZW1vdmVOb25Db21waWxpbmdQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3Jr
bGlzdDo6cXVldWVMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpkdW1wKToK
KyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6dGhyZWFkRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdXb3JrbGlzdC5oOgorCiAyMDE2LTEwLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0
aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEdldEJ5VmFsIHRvIEdldEJ5SWQgY29udmVy
c2lvbiBpbiB0aGUgREZHIGlzIGluY29ycmVjdCBmb3IgZ2V0dGVycyB3aXRoIGNvbnRyb2wgZmxv
dwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHJlYWREYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuY3BwCShy
ZXZpc2lvbiAyMDc0NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogVGhyZWFkRGF0YTo6VGhyZWFkRGF0YShXb3JrbGlzdCogd29ya2xp
c3QpCiAgICAgOiBtX3dvcmtsaXN0KHdvcmtsaXN0KQotICAgICwgbV9pZGVudGlmaWVyKDApCiAg
ICAgLCBtX3NhZmVwb2ludChudWxscHRyKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHJlYWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHJlYWREYXRhLmgJKHJldmlzaW9uIDIwNzQ3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDgg
KzI3LDggQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRp
Y1RocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV29ya2xpc3Q7CiAgICAgCiAgICAgV29ya2xp
c3QqIG1fd29ya2xpc3Q7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAg
UmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX3JpZ2h0VG9SdW47
CiAgICAgU2FmZXBvaW50KiBtX3NhZmVwb2ludDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjA3NDc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDgg
KzM3LDEyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIFdv
cmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CitwdWJsaWM6Cisg
ICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlz
dCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCisgICAgICAgIDog
QXV0b21hdGljVGhyZWFkKGxvY2tlciwgbG9jaywgY29uZGl0aW9uKQorICAgICAgICAsIG1fd29y
a2xpc3Qod29ya2xpc3QpCisgICAgICAgICwgbV9kYXRhKGRhdGEpCisgICAgICAgICwgbV9yZWxh
dGl2ZVByaW9yaXR5KHJlbGF0aXZlUHJpb3JpdHkpCisgICAgeworICAgIH0KKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fd29ya2xpc3QubV9xdWV1ZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKKyAgICAgICAgCisgICAgICAgIG1f
cGxhbiA9IG1fd29ya2xpc3QubV9xdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFtX3Bs
YW4pIHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgp
KSB7CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5kdW1wKGxvY2tlciwgV1RGOjpkYXRhRmls
ZSgpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCI6IFRocmVhZCBzaHV0dGluZyBkb3duXG4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi0+c3RhZ2UgPT0gUGxhbjo6
UHJlcGFyaW5nKTsKKyAgICAgICAgbV93b3JrbGlzdC5tX251bWJlck9mQWN0aXZlVGhyZWFkcysr
OworICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKKyAgICB9CisgICAgCisgICAgV29y
a1Jlc3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
cGxhbik7CisgICAgICAgIAorICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RhdGEubV9yaWdo
dFRvUnVuKTsKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fd29y
a2xpc3QubV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlID09IFBsYW46OkNh
bmNlbGxlZCkgeworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QubV9udW1iZXJPZkFjdGl2ZVRo
cmVhZHMtLTsKKyAgICAgICAgICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgICAgICAgICAg
ICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fcGxhbi0+bm90aWZ5Q29tcGlsaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQorICAgICAgICAgICAg
ZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3lu
Y2hyb25vdXNseVxuIik7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wbGFu
LT52bS0+aGVhcC5pc0NvbGxlY3RpbmcoKSk7CisgICAgICAgIG1fcGxhbi0+Y29tcGlsZUluVGhy
ZWFkKCptX2xvbmdMaXZlZFN0YXRlLCAmbV9kYXRhKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9wbGFuLT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQgfHwgIW1fcGxhbi0+dm0tPmhlYXAuaXND
b2xsZWN0aW5nKCkpOworICAgICAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKCptX3dvcmtsaXN0Lm1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9wbGFu
LT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtsaXN0
Lm1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICAgICAgbV9wbGFuID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJl
YWR5KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QuZHVtcChs
b2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiOiBDb21w
aWxlZCAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBsYW5z
LmFwcGVuZChtX3BsYW4pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV93b3JrbGlz
dC5tX3BsYW5Db21waWxlZC5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIG1fd29ya2xpc3QubV9u
dW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9wbGFuLT52bS0+aGVhcC5pc0NvbGxlY3RpbmcoKSk7CisgICAgICAgIAorICAgICAgICBt
X3BsYW4gPSBudWxscHRyOworICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdGhyZWFkRGlkU3RhcnQoKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCisgICAgICAgICAg
ICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChtX3JlbGF0aXZlUHJpb3JpdHkpCisgICAgICAgICAgICBjaGFuZ2VUaHJlYWRQ
cmlvcml0eShjdXJyZW50VGhyZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgIAor
ICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9u
U2NvcGU+KCk7CisgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExv
bmdMaXZlZFN0YXRlPigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRocmVhZFdpbGxTdG9wKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25R
dWV1ZSgpKQorICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBUaHJlYWQgd2lsbCBz
dG9wXG4iKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9wbGFuKTsKKyAgICAgICAgCisg
ICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IG51bGxwdHI7CisgICAgICAgIG1fbG9uZ0xpdmVk
U3RhdGUgPSBudWxscHRyOworICAgICAgICBtX3BsYW4gPSBudWxscHRyOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgV29ya2xpc3QmIG1fd29ya2xpc3Q7CisgICAgVGhyZWFkRGF0YSYgbV9k
YXRhOworICAgIGludCBtX3JlbGF0aXZlUHJpb3JpdHk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENv
bXBpbGF0aW9uU2NvcGU+IG1fY29tcGlsYXRpb25TY29wZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TG9uZ0xpdmVkU3RhdGU+IG1fbG9uZ0xpdmVkU3RhdGU7CisgICAgUmVmUHRyPFBsYW4+IG1fcGxh
bjsKK307CisKIFdvcmtsaXN0OjpXb3JrbGlzdChDU3RyaW5nIHdvcmtsaXN0TmFtZSkKICAgICA6
IG1fdGhyZWFkTmFtZSh0b0NTdHJpbmcod29ya2xpc3ROYW1lLCAiIFdvcmtlciBUaHJlYWQiKSkK
KyAgICAsIG1fbG9jayhCb3g8TG9jaz46OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQo
QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKICAgICAsIG1fbnVtYmVyT2ZBY3Rp
dmVUaHJlYWRzKDApCiB7CiB9CkBAIC00NiwyNCArMTU4LDIzIEBAIFdvcmtsaXN0OjpXb3JrbGlz
dChDU3RyaW5nIHdvcmtsaXN0TmFtZSkKIFdvcmtsaXN0Ojp+V29ya2xpc3QoKQogewogICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXpl
KCk7IGktLTspCiAgICAgICAgICAgICBtX3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51
bGwgcGxhbiB0byBpbmRpY2F0ZSB0aGF0IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUu
Ci0gICAgICAgIG1fcGxhbkVucXVldWVkLm5vdGlmeUFsbCgpOworICAgICAgICBtX3BsYW5FbnF1
ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG1f
dGhyZWFkcy5zaXplKCk7IGktLTspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1f
dGhyZWFkc1tpXS0+bV9pZGVudGlmaWVyKTsKKyAgICAgICAgbV90aHJlYWRzW2ldLT5tX3RocmVh
ZC0+am9pbigpOwogICAgIEFTU0VSVCghbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpOwogfQogCiB2
b2lkIFdvcmtsaXN0OjpmaW5pc2hDcmVhdGlvbih1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMsIGlu
dCByZWxhdGl2ZVByaW9yaXR5KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mVGhyZWFk
cyk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtYmVyT2ZUaHJlYWRzOyBpLS07KSB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJl
YWREYXRhPiBkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWREYXRhPih0aGlzKTsKLSAgICAg
ICAgZGF0YS0+bV9pZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZEZ1bmN0aW9uLCBkYXRh
LmdldCgpLCBtX3RocmVhZE5hbWUuZGF0YSgpKTsKLSAgICAgICAgaWYgKHJlbGF0aXZlUHJpb3Jp
dHkpCi0gICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0eShkYXRhLT5tX2lkZW50aWZpZXIs
IHJlbGF0aXZlUHJpb3JpdHkpOworICAgICAgICBkYXRhLT5tX3RocmVhZCA9IGFkb3B0UmVmKG5l
dyBUaHJlYWRCb2R5KGxvY2tlciwgKnRoaXMsICpkYXRhLCBtX2xvY2ssIG1fcGxhbkVucXVldWVk
LCByZWxhdGl2ZVByaW9yaXR5KSk7CiAgICAgICAgIG1fdGhyZWFkcy5hcHBlbmQoV1RGTW92ZShk
YXRhKSk7CiAgICAgfQogfQpAQCAtNzcsNyArMTg4LDcgQEAgUmVmPFdvcmtsaXN0PiBXb3JrbGlz
dDo6Y3JlYXRlKENTdHJpbmcgdwogCiBib29sIFdvcmtsaXN0Ojppc0FjdGl2ZUZvclZNKFZNJiB2
bSkgY29uc3QKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCptX2xvY2spOwogICAgIFBsYW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGxhbnMuZW5kKCk7CiAgICAgZm9yIChQbGFuTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9w
bGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS0+dm0gPT0gJnZtKQpAQCAtODksNyArMjAwLDcgQEAgYm9vbCBXb3JrbGlzdDo6aXNBY3Rp
dmVGb3JWTShWTSYgdm0pIGNvbgogdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShQYXNzUmVmUHRyPFBs
YW4+IHBhc3NlZFBsYW4pCiB7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOwot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
bG9jayk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKICAg
ICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgIGRhdGFMb2coIjog
RW5xdWV1ZWluZyBwbGFuIHRvIG9wdGltaXplICIsIHBsYW4tPmtleSgpLCAiXG4iKTsKQEAgLTk3
LDEyICsyMDgsMTIgQEAgdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShQYXNzUmVmUHRyPFBsYW4+IAog
ICAgIEFTU0VSVChtX3BsYW5zLmZpbmQocGxhbi0+a2V5KCkpID09IG1fcGxhbnMuZW5kKCkpOwog
ICAgIG1fcGxhbnMuYWRkKHBsYW4tPmtleSgpLCBwbGFuKTsKICAgICBtX3F1ZXVlLmFwcGVuZChw
bGFuKTsKLSAgICBtX3BsYW5FbnF1ZXVlZC5ub3RpZnlPbmUoKTsKKyAgICBtX3BsYW5FbnF1ZXVl
ZC0+bm90aWZ5T25lKGxvY2tlcik7CiB9CiAKIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29t
cGlsYXRpb25TdGF0ZShDb21waWxhdGlvbktleSBrZXkpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBQbGFuTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9w
bGFucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIE5vdEtub3duOwpAQCAtMTE4LDcgKzIyOSw3IEBA
IHZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmUKICAgICAvLyBBZnRlciB3
ZSByZWxlYXNlIHRoaXMgbG9jaywgd2Uga25vdyB0aGF0IGFsdGhvdWdoIG90aGVyIFZNcyBtYXkg
c3RpbGwKICAgICAvLyBiZSBhZGRpbmcgcGxhbnMsIG91ciBWTSB3aWxsIG5vdCBiZS4KICAgICAK
LSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgp
KSB7CiAgICAgICAgIGR1bXAobG9ja2VyLCBXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTQwLDE0ICsy
NTEsMTQgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZQogICAgICAg
ICBpZiAoYWxsQXJlQ29tcGlsZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAg
ICAgIG1fcGxhbkNvbXBpbGVkLndhaXQobV9sb2NrKTsKKyAgICAgICAgbV9wbGFuQ29tcGlsZWQu
d2FpdCgqbV9sb2NrKTsKICAgICB9CiB9CiAKIHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5
UGxhbnNGb3JWTShWTSYgdm0sIFZlY3RvcjxSZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMp
CiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAm
dm0pCkBAIC0xOTIsNyArMzAzLDcgQEAgV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0
ZUFsbFJlYQogICAgIH0KICAgICAKICAgICBpZiAoISFyZXF1ZXN0ZWRLZXkgJiYgcmVzdWx0aW5n
U3RhdGUgPT0gTm90S25vd24pIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW5z
LmNvbnRhaW5zKHJlcXVlc3RlZEtleSkpCiAgICAgICAgICAgICByZXN1bHRpbmdTdGF0ZSA9IENv
bXBpbGluZzsKICAgICB9CkBAIC0yMDksNyArMzIwLDcgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxl
dGVBbGxQbGFuc0ZvclZNKFZNJgogCiB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3Mo
Vk0mIHZtKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9w
bGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQ
bGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAm
dm0pCkBAIC0yMzYsNyArMzQ3LDcgQEAgdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VgogewogICAgIFZNKiB2bSA9IHZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKLSAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxh
bnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAg
IFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52
bSAhPSB2bSkKQEAgLTI1OSw3ICszNzAsNyBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZl
cmVuY2VzKFNsb3RWCiB2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogewog
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRl
YWRQbGFuS2V5czsKICAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFu
cy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAg
UGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwpAQCAtMzA2LDcgKzQxNyw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAKIHZvaWQgV29ya2xpc3Q6OnJlbW92
ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0oVk0mIHZtKQogewotICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgSGFzaFNldDxD
b21waWxhdGlvbktleT4gZGVhZFBsYW5LZXlzOwogICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4+IGRl
YWRQbGFuczsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wbGFucykgewpAQCAtMzM3LDEzICs0
NDgsMTMgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGbwogCiBzaXpl
X3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3RoKCkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIHJldHVybiBtX3F1ZXVl
LnNpemUoKTsKIH0KIAogdm9pZCBXb3JrbGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgZHVtcChsb2NrZXIsIG91dCk7CiB9CiAKQEAgLTM1NSw4MyArNDY2
LDYgQEAgdm9pZCBXb3JrbGlzdDo6ZHVtcChjb25zdCBMb2NrSG9sZGVyJiwgUAogICAgICAgICAi
LCBOdW0gQWN0aXZlIFRocmVhZHMgPSAiLCBtX251bWJlck9mQWN0aXZlVGhyZWFkcywgIi8iLCBt
X3RocmVhZHMuc2l6ZSgpLCAiXSIpOwogfQogCi12b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoVGhy
ZWFkRGF0YSogZGF0YSkKLXsKLSAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7
Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCi0gICAg
ICAgIGRhdGFMb2coKnRoaXMsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKLSAgICAKLSAgICBMb25n
TGl2ZWRTdGF0ZSBsb25nTGl2ZWRTdGF0ZTsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAg
IFJlZlB0cjxQbGFuPiBwbGFuOwotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2xvY2spOwotICAgICAgICAgICAgd2hpbGUgKG1fcXVldWUuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIG1fcGxhbkVucXVldWVkLndhaXQobV9sb2NrKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICBpZiAo
cGxhbikgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlID09IFBs
YW46OlByZXBhcmluZyk7Ci0gICAgICAgICAgICAgICAgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMr
KzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFwbGFu
KSB7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBUaHJlYWQgc2h1dHRpbmcgZG93blxu
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHsK
LSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGRhdGEtPm1fcmlnaHRUb1J1bik7Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICAgICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwbGFu
LT5ub3RpZnlDb21waWxpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCp0aGlzLCAiOiBDb21waWxpbmcgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9u
b3VzbHlcbiIpOwotICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwbGFuLT52
bS0+aGVhcC5pc0NvbGxlY3RpbmcoKSk7Ci0gICAgICAgICAgICBwbGFuLT5jb21waWxlSW5UaHJl
YWQobG9uZ0xpdmVkU3RhdGUsIGRhdGEpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxh
bi0+c3RhZ2UgPT0gUGxhbjo6Q2FuY2VsbGVkIHx8ICFwbGFuLT52bS0+aGVhcC5pc0NvbGxlY3Rp
bmcoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgICAgICAgICAgICAgIGlmIChwbGFuLT5zdGFnZSA9
PSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9udW1iZXJPZkFjdGl2
ZVRocmVhZHMtLTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHBsYW4tPm5vdGlmeVJlYWR5
KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDb21waWxhdGlvblF1ZXVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZHVtcChsb2NrZXIs
IFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIjogQ29tcGls
ZWQgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3JlYWR5UGxhbnMuYXBwZW5k
KHBsYW4pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fcGxhbkNvbXBpbGVk
Lm5vdGlmeUFsbCgpOwotICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcGxhbi0+dm0tPmhl
YXAuaXNDb2xsZWN0aW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0
Ojp0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCkKLXsKLSAgICBUaHJlYWREYXRhKiBkYXRh
ID0gc3RhdGljX2Nhc3Q8VGhyZWFkRGF0YSo+KGFyZ3VtZW50KTsKLSAgICBkYXRhLT5tX3dvcmts
aXN0LT5ydW5UaHJlYWQoZGF0YSk7Ci19Ci0KIHN0YXRpYyBXb3JrbGlzdCogdGhlR2xvYmFsREZH
V29ya2xpc3Q7CiAKIFdvcmtsaXN0KiBlbnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDc0NzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdU
aHJlYWREYXRhLmgiCisjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgpAQCAtODMsNiArODQsOSBAQCBwcml2YXRlOgogICAgIFdvcmtsaXN0KENTdHJp
bmcgd29ya2xpc3ROYW1lKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJl
ck9mVGhyZWFkcywgaW50KTsKICAgICAKKyAgICBjbGFzcyBUaHJlYWRCb2R5OworICAgIGZyaWVu
ZCBjbGFzcyBUaHJlYWRCb2R5OworICAgIAogICAgIHZvaWQgcnVuVGhyZWFkKFRocmVhZERhdGEq
KTsKICAgICBzdGF0aWMgdm9pZCB0aHJlYWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCk7CiAgICAg
CkBAIC0xMDgsOCArMTEyLDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9zdXNwZW5zaW9uTG9j
azsKICAgICAKLSAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwotICAgIENvbmRpdGlvbiBtX3BsYW5F
bnF1ZXVlZDsKKyAgICBCb3g8TG9jaz4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb24+IG1fcGxhbkVucXVldWVkOwogICAgIENvbmRpdGlvbiBtX3BsYW5Db21waWxl
ZDsKICAgICAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRocmVhZERhdGE+PiBtX3RocmVh
ZHM7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NDgwKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxNi0xMC0xOCAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyB3b3JrbGlzdCBzaG91bGQgdXNlIEF1dG9t
YXRpY1RocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYzNjE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBUaGlzIGFkZHMgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gQXV0b21hdGljVGhyZWFk
IHRvIHN1cHBvcnQgREZHOjpXb3JrbGlzdDoKKyAgICAgICAgCisgICAgICAgIC0gQXV0b21hdGlj
VGhyZWFkOjp0aHJlYWREaWRTdGFydC90aHJlYWRXaWxsU3RvcCB2aXJ0dWFsIG1ldGhvZHMgY2Fs
bGVkIGF0IHRoZSBzdGFydCBhbmQgZW5kCisgICAgICAgICAgb2YgYSB0aHJlYWQncyBsaWZldGlt
ZS4gVGhpcyBhbGxvd3MgV29ya2xpc3QgdG8gdGllIHNvbWUgcmVzb3VyY2VzIHRvIHRoZSBsaWZl
IG9mIHRoZQorICAgICAgICAgIHRocmVhZCwgYW5kIGFsc28gbWVhbnMgdGhhdCBub3cgdGhvc2Ug
cmVzb3VyY2VzIHdpbGwgbmF0dXJhbGx5IGZyZWUgdXAgd2hlbiB0aGUgV29ya2xpc3QgaXMKKyAg
ICAgICAgICBub3QgaW4gdXNlLgorICAgICAgICAKKyAgICAgICAgLSBBdXRvbWF0aWNUaHJlYWRD
b25kaXRpb246Om5vdGlmeU9uZSgpLiBUaGlzIHJlcXVpcmVkIGNoYW5nZXMgdG8gQ29uZGl0aW9u
Ojpub3RpZnlPbmUoKS4gV2UKKyAgICAgICAgICBuZWVkIHRvIGtub3cgaWYgdGhlIENvbmRpdGlv
biB3b2tlIHVwIGFueW9uZS4gSWYgaXQgZGlkbid0LCB0aGVuIHdlIG5lZWQgdG8gbGF1bmNoIG9u
ZSBvZgorICAgICAgICAgIG91ciB0aHJlYWRzLgorCisgICAgICAgICogd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5
T25lKToKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpUaHJlYWRTY29wZTo6VGhyZWFk
U2NvcGUpOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJlYWQ6OlRocmVhZFNjb3BlOjp+VGhy
ZWFkU2NvcGUpOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJlYWQ6OnN0YXJ0KToKKyAgICAg
ICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCk6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6dGhyZWFkV2lsbFN0b3ApOgorICAgICAgICAqIHd0Zi9BdXRvbWF0
aWNUaHJlYWQuaDoKKyAgICAgICAgKiB3dGYvQ29uZGl0aW9uLmg6CisgICAgICAgIChXVEY6OkNv
bmRpdGlvbkJhc2U6Om5vdGlmeU9uZSk6CisKIDIwMTYtMTAtMTggIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBXVEYgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGNy
ZWF0ZSB0aHJlYWRzIHRoYXQgZGllIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaW5hY3Rpdml0eQpJbmRl
eDogU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDc0ODApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSwxNyBAQCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246On5BdXRvbWF0aWNUaHJlCiB7CiB9CiAK
K3ZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlPbmUoY29uc3QgTG9ja0hvbGRl
ciYgbG9ja2VyKQoreworICAgIGlmIChtX2NvbmRpdGlvbi5ub3RpZnlPbmUoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChtX3RocmVhZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbV90aHJlYWRzLnRha2VMYXN0KCktPnN0YXJ0KGxvY2tlcik7Cit9CisK
IHZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlBbGwoY29uc3QgTG9ja0hvbGRl
ciYgbG9ja2VyKQogewogICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwpAQCAtOTUsNiArMTA2
LDIzIEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpqb2luKCkKICAgICAgICAgbV9pc1J1bm5pbmdD
b25kaXRpb24ud2FpdCgqbV9sb2NrKTsKIH0KIAorY2xhc3MgQXV0b21hdGljVGhyZWFkOjpUaHJl
YWRTY29wZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2NvcGUoQXV0b21hdGljVGhyZWFkJiB0aHJl
YWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgIHsKKyAgICAgICAgbV90aHJlYWQu
dGhyZWFkRGlkU3RhcnQoKTsKKyAgICB9CisgICAgCisgICAgflRocmVhZFNjb3BlKCkKKyAgICB7
CisgICAgICAgIG1fdGhyZWFkLnRocmVhZFdpbGxTdG9wKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEF1dG9tYXRpY1RocmVhZCYgbV90aHJlYWQ7Cit9OworCiB2b2lkIEF1dG9tYXRpY1RocmVh
ZDo6c3RhcnQoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVh
ZD4gcHJlc2VydmVUaGlzRm9yVGhyZWFkID0gdGhpczsKQEAgLTExMSw2ICsxMzksOCBAQCB2b2lk
IEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvCiAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX2NvbmRpdGlvbi0+Y29udGFpbnMobG9ja2VyLCB0aGlzKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIFRocmVhZFNjb3BlIHRocmVhZFNjb3BlKCp0aGlz
KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgYXV0byBzdG9wID0gWyZdIChjb25zdCBMb2Nr
SG9sZGVyJikgewogICAgICAgICAgICAgICAgIG1faXNSdW5uaW5nID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgbV9pc1J1bm5pbmdDb25kaXRpb24ubm90aWZ5QWxsKCk7CkBAIC0xNTAsNSArMTgw
LDEzIEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBMb2NrSG8KICAgICBkZXRh
Y2hUaHJlYWQodGhyZWFkKTsKIH0KIAordm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVhZERpZFN0
YXJ0KCkKK3sKK30KKwordm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVhZFdpbGxTdG9wKCkKK3sK
K30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRp
Y1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5o
CShyZXZpc2lvbiAyMDc0ODApCisrKyBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIH5BdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKTsKICAgICAKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlPbmUoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGlmeUFsbChjb25zdCBMb2NrSG9sZGVyJik7CiAgICAg
CiBwcml2YXRlOgpAQCAtMTA4LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAKIHByb3RlY3RlZDoK
ICAgICAvLyBUaGlzIGxvZ2ljYWxseSBjcmVhdGVzIHRoZSB0aHJlYWQsIGJ1dCBpbiByZWFsaXR5
IHRoZSB0aHJlYWQgd29uJ3QgYmUgY3JlYXRlZCB1bnRpbCBzb21lb25lCi0gICAgLy8gY2FsbHMg
QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlBbGwoKS4KKyAgICAvLyBjYWxscyBBdXRv
bWF0aWNUaHJlYWRDb25kaXRpb246Om5vdGlmeU9uZSgpIG9yIG5vdGlmeUFsbCgpLgogICAgIEF1
dG9tYXRpY1RocmVhZChjb25zdCBMb2NrSG9sZGVyJiwgQm94PExvY2s+LCBSZWZQdHI8QXV0b21h
dGljVGhyZWFkQ29uZGl0aW9uPik7CiAgICAgCiAgICAgLy8gVG8gdW5kZXJzdGFuZCBQb2xsUmVz
dWx0IGFuZCBXb3JrUmVzdWx0LCBpbWFnaW5lIHRoYXQgcG9sbCgpIGFuZCB3b3JrKCkgYXJlIGJl
aW5nIGNhbGxlZCBsaWtlCkBAIC0xNDMsNiArMTQ0LDE1IEBAIHByb3RlY3RlZDoKICAgICBlbnVt
IGNsYXNzIFdvcmtSZXN1bHQgeyBDb250aW51ZSwgU3RvcCB9OwogICAgIHZpcnR1YWwgV29ya1Jl
c3VsdCB3b3JrKCkgPSAwOwogICAgIAorICAgIGNsYXNzIFRocmVhZFNjb3BlOworICAgIGZyaWVu
ZCBjbGFzcyBUaHJlYWRTY29wZTsKKyAgICAKKyAgICAvLyBJdCdzIHNvbWV0aW1lcyB1c2VmdWwg
dG8gYWxsb2NhdGUgcmVzb3VyY2VzIHdoaWxlIHRoZSB0aHJlYWQgaXMgcnVubmluZywgYW5kIGRv
IGRlc3Ryb3kgdGhlbQorICAgIC8vIHdoZW4gdGhlIHRocmVhZCBkaWVzLiBUaGVzZSBtZXRob2Rz
IGxldCB5b3UgZG8gdGhpcy4gWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzLCBhbmQgeW91
CisgICAgLy8gY2FuIGJlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCBvbmVzIGRvbid0IGRvIGFueXRo
aW5nIChzbyB5b3UgZG9uJ3QgbmVlZCBhIHN1cGVyIGNhbGwpLgorICAgIHZpcnR1YWwgdm9pZCB0
aHJlYWREaWRTdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCB0aHJlYWRXaWxsU3RvcCgpOworICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOwog
ICAgIApAQCAtMTU3LDYgKzE2Nyw3IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpBdXRvbWF0aWNUaHJlYWQ7Cit1c2luZyBXVEY6OkF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjsKIAogI2VuZGlmIC8vIFdURl9BdXRvbWF0aWNUaHJlYWRfaAogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25k
aXRpb24uaAkocmV2aXNpb24gMjA3NDc5KQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OCwyMyArMTY4LDI2IEBAIHN0cnVjdCBDb25kaXRpb25CYXNl
IHsKICAgICB9CiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5IGZh
c3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cnkgdG8K
LSAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLgotICAgIHZvaWQgbm90aWZ5T25lKCkK
KyAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiBz
b21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KKyAgICBib29sIG5vdGlmeU9uZSgpCiAgICAg
ewogICAgICAgICBpZiAoIW1faGFzV2FpdGVycy5sb2FkKCkpIHsKICAgICAgICAgICAgIC8vIEF0
IHRoaXMgZXhhY3QgaW5zdGFudCwgdGhlcmUgaXMgbm9ib2R5IHdhaXRpbmcgb24gdGhpcyBjb25k
aXRpb24uIFRoZSB3YXkgdG8gdmlzdWFsaXplCiAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoYXQg
aWYgdW5wYXJrT25lKCkgcmFuIHRvIGNvbXBsZXRpb24gd2l0aG91dCBvYnN0cnVjdGlvbnMgYXQg
dGhpcyBtb21lbnQsIGl0CiAgICAgICAgICAgICAvLyB3b3VsZG4ndCB3YWtlIGFueW9uZSB1cC4g
SGVuY2UsIHdlIGhhdmUgbm90aGluZyB0byBkbyEKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgYm9vbCBk
aWROb3RpZnlUaHJlYWQgPSBmYWxzZTsKICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAog
ICAgICAgICAgICAgJm1faGFzV2FpdGVycywKLSAgICAgICAgICAgIFt0aGlzXSAoUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgeworICAgICAgICAgICAgWyZdIChQ
YXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAgICAgICAg
ICBtX2hhc1dhaXRlcnMuc3RvcmUoZmFsc2UpOworICAgICAgICAgICAgICAgIGRpZE5vdGlmeVRo
cmVhZCA9IHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQ7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGRpZE5vdGlmeVRocmVhZDsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBub3RpZnlBbGwoKQo=
</data>
<flag name="review"
          id="315134"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292044</attachid>
            <date>2016-10-18 22:21:54 -0700</date>
            <delta_ts>2016-10-18 22:21:54 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23519</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHdvcmtsaXN0IHNob3VsZCB1c2UgQXV0b21hdGljVGhyZWFkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBNYXJrIExhbS4KKyAgICAgICAgCisgICAgICAgIEF1dG9tYXRpY1RocmVhZCBpcyBhIG5l
dyBmZWF0dXJlIGluIFdURiB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNyZWF0ZSB3b3JrZXIg
dGhyZWFkcyB0aGF0CisgICAgICAgIHNodXQgZG93biBhdXRvbWF0aWNhbGx5LiBUaGlzIGNoYW5n
ZXMgREZHOjpXb3JrbGlzdCB0byB1c2UgQXV0b21hdGljVGhyZWFkLCBzbyB0aGF0IGl0cworICAg
ICAgICB0aHJlYWRzIHNodXQgZG93biBhdXRvbWF0aWNhbGx5LCB0b28uIFRoaXMgaGFzIHRoZSBw
b3RlbnRpYWwgdG8gc2F2ZSBhIGxvdCBvZiBtZW1vcnkuCisgICAgICAgIAorICAgICAgICBUaGlz
IHJlcXVpcmVkIHNvbWUgaW1wcm92ZW1lbnRzIHRvIEF1dG9tYXRpY1RocmVhZDogV29ya2xpc3Qg
bGlrZXMgdG8gYmUgYWJsZSB0byBrZWVwIHN0YXRlCisgICAgICAgIGFyb3VuZCBmb3IgdGhlIHdo
b2xlIGxpZmV0aW1lIG9mIGEgdGhyZWFkLCBhbmQgc28gaXQgbGlrZXMga25vd2luZyB3aGVuIHRo
cmVhZHMgYXJlIGJvcm4gYW5kCisgICAgICAgIHdoZW4gdGhleSBkaWUuIEkgYWRkZWQgdmlydHVh
bCBtZXRob2RzIGZvciB0aGF0LiBBbHNvLCBXb3JrbGlzdCB1c2VzIG5vdGlmeU9uZSgpIHNvIEkg
YWRkZWQKKyAgICAgICAgdGhhdCwgdG9vLgorCisgICAgICAgICogZGZnL0RGR1RocmVhZERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlRocmVhZERhdGE6OlRocmVhZERhdGEpOgorICAgICAg
ICAqIGRmZy9ERkdUaHJlYWREYXRhLmg6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6VGhyZWFkQm9keTo6VGhyZWFkQm9keSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpXb3JrbGlzdDo6fldvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojppc0FjdGl2ZUZvclZN
KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6V29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6Oldv
cmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6
OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6Oldvcmts
aXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1v
dmVOb25Db21waWxpbmdQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6
cXVldWVMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpXb3JrbGlzdDo6dGhyZWFkRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdXb3JrbGlzdC5oOgorCiAyMDE2LTEwLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVwbGFjZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCB3aXRoIFdU
Rjo6VmFyaWFudCAob3Igc2ltaWxhcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHJlYWREYXRhLmNwcAkocmV2aXNpb24gMjA3NTE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHJlYWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIFRocmVhZERhdGE6OlRocmVh
ZERhdGEoV29ya2xpc3QqIHdvcmtsaXN0KQogICAgIDogbV93b3JrbGlzdCh3b3JrbGlzdCkKLSAg
ICAsIG1faWRlbnRpZmllcigwKQogICAgICwgbV9zYWZlcG9pbnQobnVsbHB0cikKIHsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAy
MDc1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RocmVhZERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAor
I2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCkBAIC00Niw3ICs0Niw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdvcmts
aXN0OwogICAgIAogICAgIFdvcmtsaXN0KiBtX3dvcmtsaXN0OwotICAgIFRocmVhZElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IG1fdGhyZWFkOwog
ICAgIExvY2sgbV9yaWdodFRvUnVuOwogICAgIFNhZmVwb2ludCogbV9zYWZlcG9pbnQ7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9u
IDIwNzUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCitjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0
aWNUaHJlYWQgeworcHVibGljOgorICAgIFRocmVhZEJvZHkoY29uc3QgTG9ja0hvbGRlciYgbG9j
a2VyLCBXb3JrbGlzdCYgd29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxMb2NrPiBsb2Nr
LCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24sIGludCByZWxhdGl2
ZVByaW9yaXR5KQorICAgICAgICA6IEF1dG9tYXRpY1RocmVhZChsb2NrZXIsIGxvY2ssIGNvbmRp
dGlvbikKKyAgICAgICAgLCBtX3dvcmtsaXN0KHdvcmtsaXN0KQorICAgICAgICAsIG1fZGF0YShk
YXRhKQorICAgICAgICAsIG1fcmVsYXRpdmVQcmlvcml0eShyZWxhdGl2ZVByaW9yaXR5KQorICAg
IHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IExv
Y2tIb2xkZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX3dvcmtsaXN0
Lm1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7
CisgICAgICAgIAorICAgICAgICBtX3BsYW4gPSBtX3dvcmtsaXN0Lm1fcXVldWUudGFrZUZpcnN0
KCk7CisgICAgICAgIGlmICghbV9wbGFuKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZUNvbXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QuZHVt
cChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiOiBU
aHJlYWQgc2h1dHRpbmcgZG93blxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gUG9sbFJlc3VsdDo6U3RvcDsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X3BsYW4tPnN0YWdlID09IFBsYW46OlByZXBhcmluZyk7CisgICAgICAgIG1fd29ya2xpc3QubV9u
dW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKKyAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7
CisgICAgfQorICAgIAorICAgIGNsYXNzIFdvcmtTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgV29y
a1Njb3BlOworICAgIGNsYXNzIFdvcmtTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBXb3Jr
U2NvcGUoVGhyZWFkQm9keSYgdGhyZWFkKQorICAgICAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGhyZWFkLm1fcGxhbik7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3RocmVhZC5tX3dvcmtsaXN0Lm1fbnVtYmVy
T2ZBY3RpdmVUaHJlYWRzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgfldvcmtTY29w
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3RocmVhZC5t
X3dvcmtsaXN0Lm1fbG9jayk7CisgICAgICAgICAgICBtX3RocmVhZC5tX3BsYW4gPSBudWxscHRy
OworICAgICAgICAgICAgbV90aHJlYWQubV93b3JrbGlzdC5tX251bWJlck9mQWN0aXZlVGhyZWFk
cy0tOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFRocmVhZEJv
ZHkmIG1fdGhyZWFkOworICAgIH07CisgICAgCisgICAgV29ya1Jlc3VsdCB3b3JrKCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIFdvcmtTY29wZSB3b3JrU2NvcGUoKnRoaXMpOworICAgICAgICAK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhLm1fcmlnaHRUb1J1bik7CisgICAgICAg
IHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3dvcmtsaXN0Lm1fbG9jayk7Cisg
ICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAgICAgbV9wbGFu
LT5ub3RpZnlDb21waWxpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1f
d29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5
XG4iKTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFw
LmlzQ29sbGVjdGluZygpKTsKKyAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJlYWQoKm1fbG9u
Z0xpdmVkU3RhdGUsICZtX2RhdGEpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4tPnN0
YWdlID09IFBsYW46OkNhbmNlbGxlZCB8fCAhbV9wbGFuLT52bS0+aGVhcC5pc0NvbGxlY3Rpbmco
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fd29ya2xpc3QubV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlID09
IFBsYW46OkNhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeVJlYWR5
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNv
bXBpbGF0aW9uUXVldWUoKSkgeworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QuZHVtcChsb2Nr
ZXIsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiOiBDb21waWxl
ZCAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fd29ya2xpc3QubV9yZWFkeVBsYW5zLmFw
cGVuZChtX3BsYW4pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV93b3JrbGlzdC5t
X3BsYW5Db21waWxlZC5ub3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9wbGFuLT52bS0+aGVhcC5pc0NvbGxlY3RpbmcoKSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CisgICAgfQorICAgIAorICAgIHZvaWQgdGhy
ZWFkRGlkU3RhcnQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VDb21waWxhdGlvblF1ZXVlKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6
IFRocmVhZCBzdGFydGVkXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3JlbGF0aXZlUHJp
b3JpdHkpCisgICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0eShjdXJyZW50VGhyZWFkKCks
IG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgIAorICAgICAgICBtX2NvbXBpbGF0aW9uU2Nv
cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CisgICAgICAgIG1fbG9u
Z0xpdmVkU3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0YXRlPigpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHRocmVhZFdpbGxTdG9wKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQorICAgICAgICAgICAgZGF0
YUxvZyhtX3dvcmtsaXN0LCAiOiBUaHJlYWQgd2lsbCBzdG9wXG4iKTsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVCghbV9wbGFuKTsKKyAgICAgICAgCisgICAgICAgIG1fY29tcGlsYXRpb25TY29w
ZSA9IG51bGxwdHI7CisgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUgPSBudWxscHRyOworICAgICAg
ICBtX3BsYW4gPSBudWxscHRyOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgV29ya2xpc3Qm
IG1fd29ya2xpc3Q7CisgICAgVGhyZWFkRGF0YSYgbV9kYXRhOworICAgIGludCBtX3JlbGF0aXZl
UHJpb3JpdHk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uU2NvcGU+IG1fY29tcGls
YXRpb25TY29wZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9uZ0xpdmVkU3RhdGU+IG1fbG9uZ0xp
dmVkU3RhdGU7CisgICAgUmVmUHRyPFBsYW4+IG1fcGxhbjsKK307CisKIFdvcmtsaXN0OjpXb3Jr
bGlzdChDU3RyaW5nIHdvcmtsaXN0TmFtZSkKICAgICA6IG1fdGhyZWFkTmFtZSh0b0NTdHJpbmco
d29ya2xpc3ROYW1lLCAiIFdvcmtlciBUaHJlYWQiKSkKKyAgICAsIG1fbG9jayhCb3g8TG9jaz46
OmNyZWF0ZSgpKQorICAgICwgbV9wbGFuRW5xdWV1ZWQoQXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
OjpjcmVhdGUoKSkKICAgICAsIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzKDApCiB7CiB9CkBAIC00
NiwyNCArMTcyLDIzIEBAIFdvcmtsaXN0OjpXb3JrbGlzdChDU3RyaW5nIHdvcmtsaXN0TmFtZSkK
IFdvcmtsaXN0Ojp+V29ya2xpc3QoKQogewogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBt
X3F1ZXVlLmFwcGVuZChudWxscHRyKTsgLy8gVXNlIG51bGwgcGxhbiB0byBpbmRpY2F0ZSB0aGF0
IHdlIHdhbnQgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgICAgIG1fcGxhbkVucXVldWVk
Lm5vdGlmeUFsbCgpOworICAgICAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7
CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGktLTspCi0g
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkc1tpXS0+bV9pZGVudGlmaWVy
KTsKKyAgICAgICAgbV90aHJlYWRzW2ldLT5tX3RocmVhZC0+am9pbigpOwogICAgIEFTU0VSVCgh
bV9udW1iZXJPZkFjdGl2ZVRocmVhZHMpOwogfQogCiB2b2lkIFdvcmtsaXN0OjpmaW5pc2hDcmVh
dGlvbih1bnNpZ25lZCBudW1iZXJPZlRocmVhZHMsIGludCByZWxhdGl2ZVByaW9yaXR5KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mVGhyZWFkcyk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZUaHJlYWRzOyBpLS07
KSB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWREYXRhPiBkYXRhID0gc3RkOjptYWtl
X3VuaXF1ZTxUaHJlYWREYXRhPih0aGlzKTsKLSAgICAgICAgZGF0YS0+bV9pZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKHRocmVhZEZ1bmN0aW9uLCBkYXRhLmdldCgpLCBtX3RocmVhZE5hbWUuZGF0
YSgpKTsKLSAgICAgICAgaWYgKHJlbGF0aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBjaGFuZ2VU
aHJlYWRQcmlvcml0eShkYXRhLT5tX2lkZW50aWZpZXIsIHJlbGF0aXZlUHJpb3JpdHkpOworICAg
ICAgICBkYXRhLT5tX3RocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWRCb2R5KGxvY2tlciwgKnRo
aXMsICpkYXRhLCBtX2xvY2ssIG1fcGxhbkVucXVldWVkLCByZWxhdGl2ZVByaW9yaXR5KSk7CiAg
ICAgICAgIG1fdGhyZWFkcy5hcHBlbmQoV1RGTW92ZShkYXRhKSk7CiAgICAgfQogfQpAQCAtNzcs
NyArMjAyLDcgQEAgUmVmPFdvcmtsaXN0PiBXb3JrbGlzdDo6Y3JlYXRlKENTdHJpbmcgdwogCiBi
b29sIFdvcmtsaXN0Ojppc0FjdGl2ZUZvclZNKFZNJiB2bSkgY29uc3QKIHsKLSAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAg
IFBsYW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7CiAgICAgZm9yIChQ
bGFuTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CiAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+dm0gPT0gJnZtKQpAQCAtODks
NyArMjE0LDcgQEAgYm9vbCBXb3JrbGlzdDo6aXNBY3RpdmVGb3JWTShWTSYgdm0pIGNvbgogdm9p
ZCBXb3JrbGlzdDo6ZW5xdWV1ZShQYXNzUmVmUHRyPFBsYW4+IHBhc3NlZFBsYW4pCiB7CiAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsKICAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6
ZGF0YUZpbGUoKSk7CiAgICAgICAgIGRhdGFMb2coIjogRW5xdWV1ZWluZyBwbGFuIHRvIG9wdGlt
aXplICIsIHBsYW4tPmtleSgpLCAiXG4iKTsKQEAgLTk3LDEyICsyMjIsMTIgQEAgdm9pZCBXb3Jr
bGlzdDo6ZW5xdWV1ZShQYXNzUmVmUHRyPFBsYW4+IAogICAgIEFTU0VSVChtX3BsYW5zLmZpbmQo
cGxhbi0+a2V5KCkpID09IG1fcGxhbnMuZW5kKCkpOwogICAgIG1fcGxhbnMuYWRkKHBsYW4tPmtl
eSgpLCBwbGFuKTsKICAgICBtX3F1ZXVlLmFwcGVuZChwbGFuKTsKLSAgICBtX3BsYW5FbnF1ZXVl
ZC5ub3RpZnlPbmUoKTsKKyAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7CiB9
CiAKIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZShDb21waWxhdGlv
bktleSBrZXkpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBMb2NrSG9s
ZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFu
cy5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKICAgICAgICAgcmV0
dXJuIE5vdEtub3duOwpAQCAtMTE4LDcgKzI0Myw3IEBAIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRp
bEFsbFBsYW5zRm9yVk1BcmUKICAgICAvLyBBZnRlciB3ZSByZWxlYXNlIHRoaXMgbG9jaywgd2Ug
a25vdyB0aGF0IGFsdGhvdWdoIG90aGVyIFZNcyBtYXkgc3RpbGwKICAgICAvLyBiZSBhZGRpbmcg
cGxhbnMsIG91ciBWTSB3aWxsIG5vdCBiZS4KICAgICAKLSAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIAogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKSB7CiAgICAgICAgIGR1bXAobG9ja2Vy
LCBXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMTQwLDE0ICsyNjUsMTQgQEAgdm9pZCBXb3JrbGlzdDo6
d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZQogICAgICAgICBpZiAoYWxsQXJlQ29tcGlsZWQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIG1fcGxhbkNvbXBpbGVkLndhaXQo
bV9sb2NrKTsKKyAgICAgICAgbV9wbGFuQ29tcGlsZWQud2FpdCgqbV9sb2NrKTsKICAgICB9CiB9
CiAKIHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTShWTSYgdm0sIFZlY3Rv
cjxSZWZQdHI8UGxhbj4sIDg+JiBteVJlYWR5UGxhbnMpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlYWR5UGxh
bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxh
bnNbaV07CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCkBAIC0xOTIsNyArMzE3LDcgQEAg
V29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYQogICAgIH0KICAgICAKICAg
ICBpZiAoISFyZXF1ZXN0ZWRLZXkgJiYgcmVzdWx0aW5nU3RhdGUgPT0gTm90S25vd24pIHsKLSAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgICAgIGlmIChtX3BsYW5zLmNvbnRhaW5zKHJlcXVlc3RlZEtleSkp
CiAgICAgICAgICAgICByZXN1bHRpbmdTdGF0ZSA9IENvbXBpbGluZzsKICAgICB9CkBAIC0yMDks
NyArMzM0LDcgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJgogCiB2
b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAg
Zm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1f
cGxhbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCkBAIC0yMzYsNyArMzYxLDcgQEAg
dm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VgogewogICAgIFZNKiB2bSA9
IHZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1
ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChwbGFuLT52bSAhPSB2bSkKQEAgLTI1OSw3ICszODQs
NyBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWCiB2b2lkIFdvcmts
aXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogewogICAgIHsKLSAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAg
ICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKICAgICAgICAgZm9y
IChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxh
bnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVl
LmdldCgpOwpAQCAtMzA2LDcgKzQzMSw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFu
cyhWTSYgdm0pCiAKIHZvaWQgV29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0o
Vk0mIHZtKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CiAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5L
ZXlzOwogICAgIFZlY3RvcjxSZWZQdHI8UGxhbj4+IGRlYWRQbGFuczsKICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9wbGFucykgewpAQCAtMzM3LDEzICs0NjIsMTMgQEAgdm9pZCBXb3JrbGlzdDo6
cmVtb3ZlTm9uQ29tcGlsaW5nUGxhbnNGbwogCiBzaXplX3QgV29ya2xpc3Q6OnF1ZXVlTGVuZ3Ro
KCkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOwogICAgIHJldHVybiBtX3F1ZXVlLnNpemUoKTsKIH0KIAogdm9pZCBXb3Jr
bGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgZHVtcChs
b2NrZXIsIG91dCk7CiB9CiAKQEAgLTM1NSw4MyArNDgwLDYgQEAgdm9pZCBXb3JrbGlzdDo6ZHVt
cChjb25zdCBMb2NrSG9sZGVyJiwgUAogICAgICAgICAiLCBOdW0gQWN0aXZlIFRocmVhZHMgPSAi
LCBtX251bWJlck9mQWN0aXZlVGhyZWFkcywgIi8iLCBtX3RocmVhZHMuc2l6ZSgpLCAiXSIpOwog
fQogCi12b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoVGhyZWFkRGF0YSogZGF0YSkKLXsKLSAgICBD
b21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCi0gICAgICAgIGRhdGFMb2coKnRoaXMsICI6IFRo
cmVhZCBzdGFydGVkXG4iKTsKLSAgICAKLSAgICBMb25nTGl2ZWRTdGF0ZSBsb25nTGl2ZWRTdGF0
ZTsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuOwotICAg
ICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgICAgICAg
ICAgd2hpbGUgKG1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1fcGxhbkVucXVl
dWVkLndhaXQobV9sb2NrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcGxhbiA9IG1fcXVl
dWUudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICBpZiAocGxhbikgewotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlID09IFBsYW46OlByZXBhcmluZyk7Ci0gICAgICAg
ICAgICAgICAgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMrKzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFwbGFuKSB7Ci0gICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCp0aGlzLCAiOiBUaHJlYWQgc2h1dHRpbmcgZG93blxuIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGRhdGEtPm1fcmlnaHRUb1J1bik7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAocGxhbi0+
c3RhZ2UgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbnVtYmVy
T2ZBY3RpdmVUaHJlYWRzLS07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwbGFuLT5ub3RpZnlDb21waWxpbmcoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNv
bXBpbGF0aW9uUXVldWUoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBDb21w
aWxpbmcgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwotICAgICAgICAKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwbGFuLT52bS0+aGVhcC5pc0NvbGxlY3RpbmcoKSk7
Ci0gICAgICAgICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQobG9uZ0xpdmVkU3RhdGUsIGRhdGEp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPT0gUGxhbjo6Q2FuY2Vs
bGVkIHx8ICFwbGFuLT52bS0+aGVhcC5pc0NvbGxlY3RpbmcoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICAgICAgICAgIGlmIChwbGFuLT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMtLTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHBsYW4tPm5vdGlmeVJlYWR5KCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgZHVtcChsb2NrZXIsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIjogQ29tcGlsZWQgIiwgcGxhbi0+a2V5KCksICIgYXN5
bmNocm9ub3VzbHlcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX3JlYWR5UGxhbnMuYXBwZW5kKHBsYW4pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fcGxhbkNvbXBpbGVkLm5vdGlmeUFsbCgpOwotICAgICAgICAg
ICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghcGxhbi0+dm0tPmhlYXAuaXNDb2xsZWN0aW5nKCkpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIFdvcmtsaXN0Ojp0aHJlYWRGdW5jdGlvbih2b2lkKiBh
cmd1bWVudCkKLXsKLSAgICBUaHJlYWREYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkRGF0
YSo+KGFyZ3VtZW50KTsKLSAgICBkYXRhLT5tX3dvcmtsaXN0LT5ydW5UaHJlYWQoZGF0YSk7Ci19
Ci0KIHN0YXRpYyBXb3JrbGlzdCogdGhlR2xvYmFsREZHV29ya2xpc3Q7CiAKIFdvcmtsaXN0KiBl
bnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDc1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCisjaW5jbHVkZSA8
d3RmL0F1dG9tYXRpY1RocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtODMsNiArODQs
OSBAQCBwcml2YXRlOgogICAgIFdvcmtsaXN0KENTdHJpbmcgd29ya2xpc3ROYW1lKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcywgaW50KTsKICAgICAK
KyAgICBjbGFzcyBUaHJlYWRCb2R5OworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRCb2R5OworICAg
IAogICAgIHZvaWQgcnVuVGhyZWFkKFRocmVhZERhdGEqKTsKICAgICBzdGF0aWMgdm9pZCB0aHJl
YWRGdW5jdGlvbih2b2lkKiBhcmd1bWVudCk7CiAgICAgCkBAIC0xMDgsOCArMTEyLDggQEAgcHJp
dmF0ZToKIAogICAgIExvY2sgbV9zdXNwZW5zaW9uTG9jazsKICAgICAKLSAgICBtdXRhYmxlIExv
Y2sgbV9sb2NrOwotICAgIENvbmRpdGlvbiBtX3BsYW5FbnF1ZXVlZDsKKyAgICBCb3g8TG9jaz4g
bV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fcGxhbkVucXVl
dWVkOwogICAgIENvbmRpdGlvbiBtX3BsYW5Db21waWxlZDsKICAgICAKICAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFRocmVhZERhdGE+PiBtX3RocmVhZHM7CkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3
NTE3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MiBAQAorMjAxNi0xMC0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyB3b3JrbGlzdCBzaG91bGQgdXNlIEF1dG9tYXRpY1RocmVhZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNjE1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTWFyayBMYW0uCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgbmV3IGZ1bmN0
aW9uYWxpdHkgdG8gQXV0b21hdGljVGhyZWFkIHRvIHN1cHBvcnQgREZHOjpXb3JrbGlzdDoKKyAg
ICAgICAgCisgICAgICAgIC0gQXV0b21hdGljVGhyZWFkOjp0aHJlYWREaWRTdGFydC90aHJlYWRX
aWxsU3RvcCB2aXJ0dWFsIG1ldGhvZHMgY2FsbGVkIGF0IHRoZSBzdGFydCBhbmQgZW5kCisgICAg
ICAgICAgb2YgYSB0aHJlYWQncyBsaWZldGltZS4gVGhpcyBhbGxvd3MgV29ya2xpc3QgdG8gdGll
IHNvbWUgcmVzb3VyY2VzIHRvIHRoZSBsaWZlIG9mIHRoZQorICAgICAgICAgIHRocmVhZCwgYW5k
IGFsc28gbWVhbnMgdGhhdCBub3cgdGhvc2UgcmVzb3VyY2VzIHdpbGwgbmF0dXJhbGx5IGZyZWUg
dXAgd2hlbiB0aGUgV29ya2xpc3QgaXMKKyAgICAgICAgICBub3QgaW4gdXNlLgorICAgICAgICAK
KyAgICAgICAgLSBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246Om5vdGlmeU9uZSgpLiBUaGlzIHJl
cXVpcmVkIGNoYW5nZXMgdG8gQ29uZGl0aW9uOjpub3RpZnlPbmUoKS4gV2UKKyAgICAgICAgICBu
ZWVkIHRvIGtub3cgaWYgdGhlIENvbmRpdGlvbiB3b2tlIHVwIGFueW9uZS4gSWYgaXQgZGlkbid0
LCB0aGVuIHdlIG5lZWQgdG8gbGF1bmNoIG9uZSBvZgorICAgICAgICAgIG91ciB0aHJlYWRzLgor
CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9t
YXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5T25lKToKKyAgICAgICAgKFdURjo6QXV0b21hdGlj
VGhyZWFkOjpUaHJlYWRTY29wZTo6VGhyZWFkU2NvcGUpOgorICAgICAgICAoV1RGOjpBdXRvbWF0
aWNUaHJlYWQ6OlRocmVhZFNjb3BlOjp+VGhyZWFkU2NvcGUpOgorICAgICAgICAoV1RGOjpBdXRv
bWF0aWNUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjp0aHJl
YWREaWRTdGFydCk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6dGhyZWFkV2lsbFN0
b3ApOgorICAgICAgICAqIHd0Zi9BdXRvbWF0aWNUaHJlYWQuaDoKKyAgICAgICAgKiB3dGYvQ29u
ZGl0aW9uLmg6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6Om5vdGlmeU9uZSk6CisKIDIw
MTYtMTAtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXBsYWNl
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdpdGggV1RGOjpWYXJpYW50IChvciBzaW1pbGFy
KQpJbmRleDogU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDc1MTcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw2ICs0NSwxNyBAQCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246On5BdXRvbWF0aWNUaHJlCiB7
CiB9CiAKK3ZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlPbmUoY29uc3QgTG9j
a0hvbGRlciYgbG9ja2VyKQoreworICAgIGlmIChtX2NvbmRpdGlvbi5ub3RpZnlPbmUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX3RocmVhZHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV90aHJlYWRzLnRha2VMYXN0KCktPnN0YXJ0KGxvY2tlcik7
Cit9CisKIHZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlBbGwoY29uc3QgTG9j
a0hvbGRlciYgbG9ja2VyKQogewogICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwpAQCAtOTUs
NiArMTA2LDIzIEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpqb2luKCkKICAgICAgICAgbV9pc1J1
bm5pbmdDb25kaXRpb24ud2FpdCgqbV9sb2NrKTsKIH0KIAorY2xhc3MgQXV0b21hdGljVGhyZWFk
OjpUaHJlYWRTY29wZSB7CitwdWJsaWM6CisgICAgVGhyZWFkU2NvcGUoQXV0b21hdGljVGhyZWFk
JiB0aHJlYWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgIHsKKyAgICAgICAgbV90
aHJlYWQudGhyZWFkRGlkU3RhcnQoKTsKKyAgICB9CisgICAgCisgICAgflRocmVhZFNjb3BlKCkK
KyAgICB7CisgICAgICAgIG1fdGhyZWFkLnRocmVhZFdpbGxTdG9wKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEF1dG9tYXRpY1RocmVhZCYgbV90aHJlYWQ7Cit9OworCiB2b2lkIEF1dG9tYXRp
Y1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgUmVmUHRyPEF1dG9tYXRp
Y1RocmVhZD4gcHJlc2VydmVUaGlzRm9yVGhyZWFkID0gdGhpczsKQEAgLTExMSw2ICsxMzksOCBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvCiAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFtX2NvbmRpdGlvbi0+Y29udGFpbnMobG9ja2VyLCB0aGlzKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIFRocmVhZFNjb3BlIHRocmVhZFNjb3Bl
KCp0aGlzKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgYXV0byBzdG9wID0gWyZdIChjb25z
dCBMb2NrSG9sZGVyJikgewogICAgICAgICAgICAgICAgIG1faXNSdW5uaW5nID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgbV9pc1J1bm5pbmdDb25kaXRpb24ubm90aWZ5QWxsKCk7CkBAIC0xNTAs
NSArMTgwLDEzIEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBMb2NrSG8KICAg
ICBkZXRhY2hUaHJlYWQodGhyZWFkKTsKIH0KIAordm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVh
ZERpZFN0YXJ0KCkKK3sKK30KKwordm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVhZFdpbGxTdG9w
KCkKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1
dG9tYXRpY1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1Ro
cmVhZC5oCShyZXZpc2lvbiAyMDc1MTcpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJl
YWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIH5BdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKTsKICAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlPbmUoY29uc3QgTG9ja0hvbGRlciYpOwog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGlmeUFsbChjb25zdCBMb2NrSG9sZGVyJik7
CiAgICAgCiBwcml2YXRlOgpAQCAtMTA4LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAKIHByb3Rl
Y3RlZDoKICAgICAvLyBUaGlzIGxvZ2ljYWxseSBjcmVhdGVzIHRoZSB0aHJlYWQsIGJ1dCBpbiBy
ZWFsaXR5IHRoZSB0aHJlYWQgd29uJ3QgYmUgY3JlYXRlZCB1bnRpbCBzb21lb25lCi0gICAgLy8g
Y2FsbHMgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlBbGwoKS4KKyAgICAvLyBjYWxs
cyBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246Om5vdGlmeU9uZSgpIG9yIG5vdGlmeUFsbCgpLgog
ICAgIEF1dG9tYXRpY1RocmVhZChjb25zdCBMb2NrSG9sZGVyJiwgQm94PExvY2s+LCBSZWZQdHI8
QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPik7CiAgICAgCiAgICAgLy8gVG8gdW5kZXJzdGFuZCBQ
b2xsUmVzdWx0IGFuZCBXb3JrUmVzdWx0LCBpbWFnaW5lIHRoYXQgcG9sbCgpIGFuZCB3b3JrKCkg
YXJlIGJlaW5nIGNhbGxlZCBsaWtlCkBAIC0xNDMsNiArMTQ0LDE1IEBAIHByb3RlY3RlZDoKICAg
ICBlbnVtIGNsYXNzIFdvcmtSZXN1bHQgeyBDb250aW51ZSwgU3RvcCB9OwogICAgIHZpcnR1YWwg
V29ya1Jlc3VsdCB3b3JrKCkgPSAwOwogICAgIAorICAgIGNsYXNzIFRocmVhZFNjb3BlOworICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWRTY29wZTsKKyAgICAKKyAgICAvLyBJdCdzIHNvbWV0aW1lcyB1
c2VmdWwgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIHdoaWxlIHRoZSB0aHJlYWQgaXMgcnVubmluZywg
YW5kIHRvIGRlc3Ryb3kgdGhlbQorICAgIC8vIHdoZW4gdGhlIHRocmVhZCBkaWVzLiBUaGVzZSBt
ZXRob2RzIGxldCB5b3UgZG8gdGhpcy4gWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzLCBh
bmQgeW91CisgICAgLy8gY2FuIGJlIHN1cmUgdGhhdCB0aGUgZGVmYXVsdCBvbmVzIGRvbid0IGRv
IGFueXRoaW5nIChzbyB5b3UgZG9uJ3QgbmVlZCBhIHN1cGVyIGNhbGwpLgorICAgIHZpcnR1YWwg
dm9pZCB0aHJlYWREaWRTdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCB0aHJlYWRXaWxsU3RvcCgp
OworICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOwogICAgIApAQCAtMTU3LDYgKzE2Nyw3IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogdXNpbmcgV1RGOjpBdXRvbWF0aWNUaHJlYWQ7Cit1c2luZyBXVEY6OkF1dG9tYXRpY1Ro
cmVhZENvbmRpdGlvbjsKIAogI2VuZGlmIC8vIFdURl9BdXRvbWF0aWNUaHJlYWRfaAogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA3NTE3KQorKysgU291cmNlL1dURi93dGYvQ29uZGl0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwyMyArMTY4LDI2IEBAIHN0cnVjdCBDb25kaXRp
b25CYXNlIHsKICAgICB9CiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVt
ZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0
cnkgdG8KLSAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLgotICAgIHZvaWQgbm90aWZ5
T25lKCkKKyAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1
ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KKyAgICBib29sIG5vdGlmeU9uZSgp
CiAgICAgewogICAgICAgICBpZiAoIW1faGFzV2FpdGVycy5sb2FkKCkpIHsKICAgICAgICAgICAg
IC8vIEF0IHRoaXMgZXhhY3QgaW5zdGFudCwgdGhlcmUgaXMgbm9ib2R5IHdhaXRpbmcgb24gdGhp
cyBjb25kaXRpb24uIFRoZSB3YXkgdG8gdmlzdWFsaXplCiAgICAgICAgICAgICAvLyB0aGlzIGlz
IHRoYXQgaWYgdW5wYXJrT25lKCkgcmFuIHRvIGNvbXBsZXRpb24gd2l0aG91dCBvYnN0cnVjdGlv
bnMgYXQgdGhpcyBtb21lbnQsIGl0CiAgICAgICAgICAgICAvLyB3b3VsZG4ndCB3YWtlIGFueW9u
ZSB1cC4gSGVuY2UsIHdlIGhhdmUgbm90aGluZyB0byBkbyEKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAg
Ym9vbCBkaWROb3RpZnlUaHJlYWQgPSBmYWxzZTsKICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJr
T25lKAogICAgICAgICAgICAgJm1faGFzV2FpdGVycywKLSAgICAgICAgICAgIFt0aGlzXSAoUGFy
a2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgeworICAgICAgICAgICAg
WyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQogICAgICAgICAgICAg
ICAgICAgICBtX2hhc1dhaXRlcnMuc3RvcmUoZmFsc2UpOworICAgICAgICAgICAgICAgIGRpZE5v
dGlmeVRocmVhZCA9IHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQ7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGRpZE5vdGlmeVRocmVhZDsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBub3RpZnlBbGwoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>