<?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>158539</bug_id>
          
          <creation_ts>2016-06-08 13:52:14 -0700</creation_ts>
          <short_desc>Modernize WebSocket code</short_desc>
          <delta_ts>2016-06-08 15:26:36 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1200576</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-08 13:52:14 -0700</bug_when>
    <thetext>Modernize WebSocket code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200582</commentid>
    <comment_count>1</comment_count>
      <attachid>280835</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-08 14:04:38 -0700</bug_when>
    <thetext>Created attachment 280835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200583</commentid>
    <comment_count>2</comment_count>
      <attachid>280835</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-08 14:05:56 -0700</bug_when>
    <thetext>Comment on attachment 280835
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests (OOPS!).

I&apos;ll put &quot;no change in behavior&quot; here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200585</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-08 14:06:17 -0700</bug_when>
    <thetext>Attachment 280835 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 10 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>1200600</commentid>
    <comment_count>4</comment_count>
      <attachid>280840</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-08 14:31:11 -0700</bug_when>
    <thetext>Created attachment 280840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200616</commentid>
    <comment_count>5</comment_count>
      <attachid>280840</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-08 14:58:45 -0700</bug_when>
    <thetext>Comment on attachment 280840
Patch

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

&gt; Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:175
&gt; -    RefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper = m_workerClientWrapper;
&gt; +    RefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper = m_workerClientWrapper.copyRef();
&gt;      m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), sendRequestResult] (ScriptExecutionContext&amp;) {

This can be written as 1 line.

m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = Ref&lt;ThreadableWebSocketChannelClientWrapper&gt;(*m_workerClientWrapper), sendRequestResult] (ScriptExecutionContext&amp;) mutable {

All the other ones like it, too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200617</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-08 14:59:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 280840 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280840&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:175
&gt; &gt; -    RefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper = m_workerClientWrapper;
&gt; &gt; +    RefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper = m_workerClientWrapper.copyRef();
&gt; &gt;      m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), sendRequestResult] (ScriptExecutionContext&amp;) {
&gt; 
&gt; This can be written as 1 line.
&gt; 
&gt; m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper =
&gt; Ref&lt;ThreadableWebSocketChannelClientWrapper&gt;(*m_workerClientWrapper),
&gt; sendRequestResult] (ScriptExecutionContext&amp;) mutable {
&gt; 
&gt; All the other ones like it, too!

Also, there should be no space between the capture list and the open paren:

m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper =
&gt; Ref&lt;ThreadableWebSocketChannelClientWrapper&gt;(*m_workerClientWrapper),
&gt; sendRequestResult](ScriptExecutionContext&amp;) mutable {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200619</commentid>
    <comment_count>7</comment_count>
      <attachid>280845</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-08 15:03:42 -0700</bug_when>
    <thetext>Created attachment 280845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200623</commentid>
    <comment_count>8</comment_count>
      <attachid>280845</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-08 15:12:19 -0700</bug_when>
    <thetext>Comment on attachment 280845
Patch

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

&gt; Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:355
&gt; +    auto peer = std::make_unique&lt;Peer&gt;(clientWrapper.copyRef(), loaderProxy, context, taskMode);
&gt; +    bool sent = loaderProxy.postTaskForModeToWorkerGlobalScope({
&gt;          ScriptExecutionContext::Task::CleanupTask,
&gt; -        [clientWrapper, loaderProxy, peer = WTFMove(peer)] (ScriptExecutionContext&amp; context) mutable {
&gt; +        [clientWrapper = clientWrapper.copyRef(), &amp;loaderProxy, peer = WTFMove(peer)] (ScriptExecutionContext&amp; context) mutable {

You could move the peer creation into the capture list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200630</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-06-08 15:26:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/201837</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280835</attachid>
            <date>2016-06-08 14:04:38 -0700</date>
            <delta_ts>2016-06-08 14:31:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158539-20160608140605.patch</filename>
            <type>text/plain</type>
            <size>36821</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE2LTA2LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IFdlYlNvY2tldCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTg1MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI6OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI6OnByb2Nlc3NQZW5kaW5nVGFza3MpOgorICAgICAgICAqIE1v
ZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hh
bm5lbDo6V2ViU29ja2V0Q2hhbm5lbCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmNy
ZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c3VicHJvdG9jb2wp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6UGVlcjo6UGVlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6YnVmZmVyZWRBbW91bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRp
ZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlQmluYXJ5RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVl
cjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFN0YXJ0Q2xvc2luZ0hhbmRzaGFrZSk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVl
cjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6QnJpZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6
On5CcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdl
Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpCcmlkZ2U6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6YnVmZmVyZWRBbW91bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y2xvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRn
ZTo6c2V0TWV0aG9kTm90Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OndhaXRGb3JNZXRob2RDb21wbGV0aW9uKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OkJyaWRnZTo6Y3JlYXRlKToKKwogMjAxNi0wNi0wNyAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjAxNjY3KTogQVNTRVJU
SU9OIEZBSUxFRDogIW1fYW5jaG9yTm9kZSB8fCAhZWRpdGluZ0lnbm9yZXNDb250ZW50KCptX2Fu
Y2hvck5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9u
IDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI1ICs0MywyMSBAQAog
I2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNp
bmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHdlYlNvY2tldENoYW5uZWxN
b2RlW10gPSAid2ViU29ja2V0Q2hhbm5lbE1vZGUiOwogCi1QYXNzUmVmUHRyPFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVu
dCkKK1JlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIEFTU0VS
VChjbGllbnQpOwotCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqY29udGV4dCkpIHsK
LSAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlID0gZG93bmNhc3Q8
V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KTsKKyAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2Nv
cGU+KGNvbnRleHQpKSB7CisgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxT
Y29wZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KTsKICAgICAgICAgV29y
a2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlckdsb2JhbFNjb3BlLnRocmVhZCgpLnJ1bkxvb3Ao
KTsKICAgICAgICAgU3RyaW5nQnVpbGRlciBtb2RlOwogICAgICAgICBtb2RlLmFwcGVuZExpdGVy
YWwod2ViU29ja2V0Q2hhbm5lbE1vZGUpOwogICAgICAgICBtb2RlLmFwcGVuZE51bWJlcihydW5M
b29wLmNyZWF0ZVVuaXF1ZUlkKCkpOwotICAgICAgICByZXR1cm4gV29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OmNyZWF0ZSgmd29ya2VyR2xvYmFsU2NvcGUsIGNsaWVudCwgbW9kZS50
b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpjcmVhdGUod29ya2VyR2xvYmFsU2NvcGUsIGNsaWVudCwgbW9kZS50b1N0cmluZygpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKGRvd25jYXN0PERv
Y3VtZW50Pihjb250ZXh0KSwgY2xpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5oCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQg
KzI4LDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxfaAotI2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisjcHJh
Z21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBcnJheUJ1ZmZlcjsKQEAgLTUzLDcg
KzUxLDcgQEAgY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKTsKIHB1YmxpYzoKICAgICBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIHsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsKKyAgICBzdGF0aWMgUmVmPFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYlNvY2tldENo
YW5uZWxDbGllbnQmKTsKIAogICAgIGVudW0gU2VuZFJlc3VsdCB7CiAgICAgICAgIFNlbmRTdWNj
ZXNzLApAQCAtODgsNSArODYsMyBAQCBwcm90ZWN0ZWQ6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0KLSNlbmRpZiAvLyBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyLmNwcAkocmV2aXNpb24gMjAxODIwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE1ICszNCwxNCBAQAogCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxD
bGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQorVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV2ViU29ja2V0Q2hhbm5l
bENsaWVudCYgY2xpZW50KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2NsaWVu
dChjbGllbnQpCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQogICAgICwgbV9wZWVyKG51bGxwdHIp
CiAgICAgLCBtX2ZhaWxlZFdlYlNvY2tldENoYW5uZWxDcmVhdGlvbihmYWxzZSkKICAgICAsIG1f
c3luY01ldGhvZERvbmUodHJ1ZSkKQEAgLTUyLDcgKzUxLDcgQEAgVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyOgogewogfQogCi1SZWY8VGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50KiBjbGllbnQpCitSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBj
bGllbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyKGNvbnRleHQsIGNsaWVudCkpOwogfQpAQCAtMjQ4LDcgKzI0Nyw3
IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmEKICAgICBpZiAoIW1f
c3luY01ldGhvZERvbmUpIHsKICAgICAgICAgLy8gV2hlbiBhIHN5bmNocm9ub3VzIG9wZXJhdGlv
biBpcyBpbiBwcm9ncmVzcyAoaS5lLiB0aGUgZXhlY3V0aW9uIHN0YWNrIGNvbnRhaW5zCiAgICAg
ICAgIC8vIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjp3YWl0Rm9yTWV0aG9kQ29t
cGxldGlvbigpKSwgd2UgY2Fubm90IGludm9rZSBjYWxsYmFja3MgaW4gdGhpcyBydW4gbG9vcC4K
LSAgICAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZjxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+KCp0aGlzKV0gKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgbV9jb250ZXh0LnBvc3RUYXNrKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4oKnRoaXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2Nv
cGUoKSk7CiAgICAgICAgICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tzKCk7CiAgICAgICAgIH0pOwpA
QCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmEKIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4+IHBlbmRpbmdUYXNrcyA9IFdURk1vdmUobV9wZW5kaW5nVGFza3MpOwogICAgIGZvciAo
YXV0byYgdGFzayA6IHBlbmRpbmdUYXNrcykKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKm1f
Y29udGV4dCk7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKG1fY29udGV4dCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyLmgJKHJldmlzaW9uIDIwMTgyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9o
Ci0jZGVmaW5lIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCisjcHJh
Z21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIApAQCAtNTAsNyArNDksNyBAQCBj
bGFzcyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50OwogCiBjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCopOworICAgIHN0YXRp
YyBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKIAogICAgIHZv
aWQgY2xlYXJTeW5jTWV0aG9kRG9uZSgpOwogICAgIHZvaWQgc2V0U3luY01ldGhvZERvbmUoKTsK
QEAgLTg5LDExICs4OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWUoKTsKIAogcHJpdmF0
ZToKLSAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsKKyAgICBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdl
YlNvY2tldENoYW5uZWxDbGllbnQmKTsKIAogICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdUYXNrcygp
OwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OworICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIG1fY29udGV4dDsKICAgICBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBt
X2NsaWVudDsKICAgICBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlciogbV9w
ZWVyOwogICAgIGJvb2wgbV9mYWlsZWRXZWJTb2NrZXRDaGFubmVsQ3JlYXRpb247CkBAIC0xMTAs
NSArMTA5LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJfU09DS0VUUykKLQotI2VuZGlmIC8vIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50V3JhcHBlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2aXNpb24gMjAxODIwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MCw3ICsyNTAsNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVyCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NoYW5uZWwgPSBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcyk7CisgICAg
bV9jaGFubmVsID0gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZSgqc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCAqdGhpcyk7CiAKICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBkaXNh
Z3JlZW1lbnQgYWJvdXQgcmVzdHJpY3Rpb24gb2Ygc3VicHJvdG9jb2xzIGJldHdlZW4gV2ViU29j
a2V0IEFQSSBhbmQgaHliaS0xMCBwcm90b2NvbAogICAgIC8vIGRyYWZ0LiBUaGUgZm9ybWVyIHNp
bXBseSBzYXlzICJvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0byBVKzAwN0Ug
YXJlIGFsbG93ZWQsIiB3aGlsZSB0aGUgbGF0dGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lv
biAyMDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjb25zdCBkb3VibGUgVENQTWF4aW11bVNlZ21lbnRMaWZldGltZSA9IDIgKiA2
MC4wOwogCi1XZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVsKERvY3VtZW50KiBkb2N1
bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQotICAgIDogbV9kb2N1bWVudChk
b2N1bWVudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKK1dlYlNvY2tldENoYW5uZWw6OldlYlNv
Y2tldENoYW5uZWwoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBj
bGllbnQpCisgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKKyAgICAsIG1fY2xpZW50KCZjbGll
bnQpCiAgICAgLCBtX3Jlc3VtZVRpbWVyKCp0aGlzLCAmV2ViU29ja2V0Q2hhbm5lbDo6cmVzdW1l
VGltZXJGaXJlZCkKICAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9jbG9zaW5nKGZh
bHNlKQpAQCAtODEsOSArODEsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVs
KERvY3VtCiAgICAgLCBtX291dGdvaW5nRnJhbWVRdWV1ZVN0YXR1cyhPdXRnb2luZ0ZyYW1lUXVl
dWVPcGVuKQogICAgICwgbV9ibG9iTG9hZGVyU3RhdHVzKEJsb2JMb2FkZXJOb3RTdGFydGVkKQog
ewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV9kb2N1
bWVudC0+cGFnZSgpKQorICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAg
ICAgICBtX2lkZW50aWZpZXIgPSBwYWdlLT5wcm9ncmVzcygpLmNyZWF0ZVVuaXF1ZUlkZW50aWZp
ZXIoKTsKIAogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBjdG9yLCBpZGVu
dGlmaWVyICVsdSIsIHRoaXMsIG1faWRlbnRpZmllcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgJKHJldmlzaW9u
IDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRD
aGFubmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgY2xhc3MgV2ViU29ja2V0
Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudAogewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYlNvY2tldENoYW5uZWwoZG9jdW1lbnQsIGNsaWVudCkpOyB9CisgICAg
c3RhdGljIFJlZjxXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
U29ja2V0Q2hhbm5lbChkb2N1bWVudCwgY2xpZW50KSk7IH0KICAgICB2aXJ0dWFsIH5XZWJTb2Nr
ZXRDaGFubmVsKCk7CiAKICAgICBib29sIHNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVyZWZUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQogCiBwcml2YXRlOgot
ICAgIFdlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQqLCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50Kik7
CisgICAgV2ViU29ja2V0Q2hhbm5lbChEb2N1bWVudCYsIFdlYlNvY2tldENoYW5uZWxDbGllbnQm
KTsKIAogICAgIGJvb2wgYXBwZW5kVG9CdWZmZXIoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bik7CiAgICAgdm9pZCBza2lwQnVmZmVyKHNpemVfdCBsZW4pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNSArNDYsMTQgQEAKICNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbChXb3JrZXJHbG9iYWxTY29wZSogY29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCog
Y2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQorV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKFdvcmtlckdsb2JhbFNj
b3BlJiBjb250ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQsIGNvbnN0IFN0cmlu
ZyYgdGFza01vZGUpCiAgICAgOiBtX3dvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQpCiAgICAgLCBt
X3dvcmtlckNsaWVudFdyYXBwZXIoVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyOjpjcmVhdGUoY29udGV4dCwgY2xpZW50KSkKLSAgICAsIG1fYnJpZGdlKEJyaWRnZTo6Y3Jl
YXRlKG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJHbG9iYWxTY29wZSwgdGFza01vZGUp
KQorICAgICwgbV9icmlkZ2UoQnJpZGdlOjpjcmVhdGUobV93b3JrZXJDbGllbnRXcmFwcGVyLmNv
cHlSZWYoKSwgbV93b3JrZXJHbG9iYWxTY29wZS5jb3B5UmVmKCksIHRhc2tNb2RlKSkKIHsKICAg
ICBtX2JyaWRnZS0+aW5pdGlhbGl6ZSgpOwogfQpAQCAtNzMsMTMgKzcyLDExIEBAIHZvaWQgV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmMKIAogU3RyaW5nIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpzdWJwcm90b2NvbCgpCiB7Ci0gICAgQVNTRVJUKG1fd29ya2Vy
Q2xpZW50V3JhcHBlcik7CiAgICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+c3VicHJv
dG9jb2woKTsKIH0KIAogU3RyaW5nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpl
eHRlbnNpb25zKCkKIHsKLSAgICBBU1NFUlQobV93b3JrZXJDbGllbnRXcmFwcGVyKTsKICAgICBy
ZXR1cm4gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5leHRlbnNpb25zKCk7CiB9CiAKQEAgLTE0Mywx
MCArMTQwLDEwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OnIKICAg
ICAgICAgbV9icmlkZ2UtPnJlc3VtZSgpOwogfQogCi1Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6UGVlcjo6UGVlcihSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGll
bnRXcmFwcGVyPiYmIGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94
eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9k
ZSkKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpQZWVyKFJlZjxUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgY2xpZW50V3JhcHBlciwgV29y
a2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQogICAgIDogbV93b3JrZXJDbGllbnRXcmFwcGVy
KFdURk1vdmUoY2xpZW50V3JhcHBlcikpCiAgICAgLCBtX2xvYWRlclByb3h5KGxvYWRlclByb3h5
KQotICAgICwgbV9tYWluV2ViU29ja2V0Q2hhbm5lbChXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUo
ZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCB0aGlzKSkKKyAgICAsIG1fbWFpbldlYlNvY2tl
dENoYW5uZWwoV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KSwgKnRoaXMpKQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwpAQCAtMTcwLDExICsxNjcsMTEgQEAgdm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6UGVlcjo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwgfHwgIW1fd29y
a2VyQ2xpZW50V3JhcHBlcikKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0
IHNlbmRSZXF1ZXN0UmVzdWx0ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c2VuZChtZXNzYWdl
KTsKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBw
ZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9
IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHNlbmRSZXF1ZXN0UmVzdWx0XSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+c2V0U2Vu
ZFJlcXVlc3RSZXN1bHQoc2VuZFJlcXVlc3RSZXN1bHQpOwogICAgIH0sIG1fdGFza01vZGUpOwpA
QCAtMTgzLDExICsxODAsMTEgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6UAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChj
b25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAhbV93b3JrZXJDbGllbnRX
cmFwcGVyKQorICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgc2VuZFJlcXVl
c3RSZXN1bHQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5zZW5kKGJpbmFyeURhdGEsIDAsIGJp
bmFyeURhdGEuYnl0ZUxlbmd0aCgpKTsKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRX
cmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigp
OwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShb
d29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHNlbmRS
ZXF1ZXN0UmVzdWx0XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgd29ya2Vy
Q2xpZW50V3JhcHBlci0+c2V0U2VuZFJlcXVlc3RSZXN1bHQoc2VuZFJlcXVlc3RSZXN1bHQpOwog
ICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMTk2LDExICsxOTMsMTEgQEAgdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6UGVlcjo6c2VuZChCbG9iJiBiaW5hcnlEYXRhKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFtX3dvcmtl
ckNsaWVudFdyYXBwZXIpCisgICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsKQogICAgICAg
ICByZXR1cm47CiAKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBz
ZW5kUmVxdWVzdFJlc3VsdCA9IG1fbWFpbldlYlNvY2tldENoYW5uZWwtPnNlbmQoYmluYXJ5RGF0
YSk7Ci0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
d29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICBSZWZQdHI8
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFw
cGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmNvcHlSZWYoKTsKICAgICBtX2xvYWRlclByb3h5
LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIg
PSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCBzZW5kUmVxdWVzdFJlc3VsdF0gKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXItPnNldFNl
bmRSZXF1ZXN0UmVzdWx0KHNlbmRSZXF1ZXN0UmVzdWx0KTsKICAgICB9LCBtX3Rhc2tNb2RlKTsK
QEAgLTIwOSwxMCArMjA2LDEwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OlAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmJ1ZmZl
cmVkQW1vdW50KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9t
YWluV2ViU29ja2V0Q2hhbm5lbCB8fCAhbV93b3JrZXJDbGllbnRXcmFwcGVyKQorICAgIGlmICgh
bV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBl
ciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGll
bnRXcmFwcGVyLmNvcHlSZWYoKTsKICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50ID0g
bV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+YnVmZmVyZWRBbW91bnQoKTsKICAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBw
ZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCBidWZmZXJlZEFtb3VudF0gKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250
ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7CkBAIC0yNjUsNyArMjYyLDcgQEAg
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
OworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdv
cmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpOwogICAg
IFN0cmluZyBzdWJwcm90b2NvbCA9IG1fbWFpbldlYlNvY2tldENoYW5uZWwtPnN1YnByb3RvY29s
KCk7CiAgICAgU3RyaW5nIGV4dGVuc2lvbnMgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5leHRl
bnNpb25zKCk7CiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2Jh
bFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyID0gV1RGTW92ZSh3b3JrZXJDbGllbnRXcmFwcGVy
KSwgc3VicHJvdG9jb2wgPSBzdWJwcm90b2NvbC5pc29sYXRlZENvcHkoKSwgZXh0ZW5zaW9ucyA9
IGV4dGVuc2lvbnMuaXNvbGF0ZWRDb3B5KCldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSB7CkBAIC0yODAsNyArMjc3LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFw
cGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNs
aWVudFdyYXBwZXIuY29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2Rl
VG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2Vy
Q2xpZW50V3JhcHBlciksIG1lc3NhZ2UgPSBtZXNzYWdlLmlzb2xhdGVkQ29weSgpXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRl
eHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50
V3JhcHBlci0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7CkBAIC0yOTEsNyArMjg4LDcgQEAg
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
OworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdv
cmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpOwogICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2Vy
Q2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIGJpbmFyeURhdGEg
PSBXVEZNb3ZlKGJpbmFyeURhdGEpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkg
bXV0YWJsZSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtl
ckdsb2JhbFNjb3BlKCkpOwogICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRSZWNlaXZl
QmluYXJ5RGF0YShXVEZNb3ZlKGJpbmFyeURhdGEpKTsKQEAgLTMwMiw3ICsyOTksNyBAQCB2b2lk
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAotICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7Cisg
ICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2Vy
Q2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5jb3B5UmVmKCk7CiAgICAgbV9s
b2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGll
bnRXcmFwcGVyID0gV1RGTW92ZSh3b3JrZXJDbGllbnRXcmFwcGVyKSwgYnVmZmVyZWRBbW91bnRd
IChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwogICAgICAgICB3b3Jr
ZXJDbGllbnRXcmFwcGVyLT5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChidWZmZXJlZEFtb3VudCk7
CkBAIC0zMTMsNyArMzEwLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6UAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0g
bV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdy
YXBwZXIuY29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50
V3JhcHBlcildIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwogICAg
ICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRTdGFydENsb3NpbmdIYW5kc2hha2UoKTsKQEAg
LTMyNSw3ICszMjIsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQ
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX21haW5XZWJTb2NrZXRDaGFubmVs
ID0gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7Cisg
ICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2Vy
Q2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5jb3B5UmVmKCk7CiAgICAgbV9s
b2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGll
bnRXcmFwcGVyID0gV1RGTW92ZSh3b3JrZXJDbGllbnRXcmFwcGVyKSwgdW5oYW5kbGVkQnVmZmVy
ZWRBbW91bnQsIGNsb3NpbmdIYW5kc2hha2VDb21wbGV0aW9uLCBjb2RlLCByZWFzb24gPSByZWFz
b24uaXNvbGF0ZWRDb3B5KCldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxT
Y29wZSgpKTsKICAgICAgICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZENsb3NlKHVuaGFu
ZGxlZEJ1ZmZlcmVkQW1vdW50LCBjbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvbiwgY29kZSwgcmVh
c29uKTsKQEAgLTMzNiwyMSArMzMzLDIwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OlAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgUmVmUHRy
PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3Jh
cHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJD
bGllbnRXcmFwcGVyLmNvcHlSZWYoKTsKICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9k
ZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtl
ckNsaWVudFdyYXBwZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgp
KTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigp
OwogICAgIH0sIG1fdGFza01vZGUpOwogfQogCi1Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6QnJpZGdlOjpCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBhc3NSZWZQdHI8V29ya2VyR2xv
YmFsU2NvcGU+IHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQotICAg
IDogbV93b3JrZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCi0gICAgLCBtX3dv
cmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKQorV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OkJyaWRnZTo6QnJpZGdlKFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+JiYgd29ya2VyQ2xpZW50V3JhcHBlciwgUmVmPFdvcmtlckdsb2JhbFNj
b3BlPiYmIHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQorICAgIDog
bV93b3JrZXJDbGllbnRXcmFwcGVyKFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlcikpCisgICAg
LCBtX3dvcmtlckdsb2JhbFNjb3BlKFdURk1vdmUod29ya2VyR2xvYmFsU2NvcGUpKQogICAgICwg
bV9sb2FkZXJQcm94eShtX3dvcmtlckdsb2JhbFNjb3BlLT50aHJlYWQoKS53b3JrZXJMb2FkZXJQ
cm94eSgpKQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKICAgICAsIG1fcGVlcihudWxscHRy
KQogewotICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOwogfQogCiBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjp+QnJpZGdlKCkKQEAgLTM1OCwy
MSArMzU0LDIwIEBAIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2UKICAg
ICBkaXNjb25uZWN0KCk7CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgV29ya2VyTG9hZGVyUHJveHkqIGxvYWRlclByb3h5LCBSZWZQdHI8VGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIHBhc3NlZENsaWVudFdyYXBwZXIsIGNv
bnN0IFN0cmluZyYgdGFza01vZGUpCisgICAgLy8gbG9hZGVyUHJveHkgc2hvdWxkIGJlIGEgV29y
a2VyTG9hZGVyUHJveHkmLgordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
QnJpZGdlOjptYWluVGhyZWFkSW5pdGlhbGl6ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrZXJMb2FkZXJQcm94eSYgbG9hZGVyUHJveHksIFJlZjxUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgY2xpZW50V3JhcHBlciwgY29uc3QgU3RyaW5nJiB0
YXNrTW9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVF9VTlVT
RUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogCi0gICAgUmVmUHRyPFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gY2xpZW50V3JhcHBlciA9IFdURk1vdmUo
cGFzc2VkQ2xpZW50V3JhcHBlcik7Ci0KLSAgICBhdXRvIHBlZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFBlZXI+KGNsaWVudFdyYXBwZXIuY29weVJlZigpLCAqbG9hZGVyUHJveHksICZjb250ZXh0LCB0
YXNrTW9kZSk7Ci0gICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyR2xvYmFsU2NvcGUoeworICAgIGF1dG8gcGVlciA9IHN0ZDo6bWFrZV91bmlxdWU8UGVl
cj4oY2xpZW50V3JhcHBlci5jb3B5UmVmKCksIGxvYWRlclByb3h5LCBjb250ZXh0LCB0YXNrTW9k
ZSk7CisgICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJH
bG9iYWxTY29wZSh7CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s6OkNsZWFu
dXBUYXNrLAotICAgICAgICBbY2xpZW50V3JhcHBlciwgbG9hZGVyUHJveHksIHBlZXIgPSBXVEZN
b3ZlKHBlZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Cisg
ICAgICAgIFtjbGllbnRXcmFwcGVyID0gY2xpZW50V3JhcHBlci5jb3B5UmVmKCksICZsb2FkZXJQ
cm94eSwgcGVlciA9IFdURk1vdmUocGVlcildIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4
dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwogICAgICAgICAgICAgaWYgKGNsaWVudFdyYXBwZXIt
PmZhaWxlZFdlYlNvY2tldENoYW5uZWxDcmVhdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgLy8g
SWYgQnJpZGdlOjppbml0aWFsaXplKCkgcXVpdHRlZCBlYXJsaWVyLCB3ZSBuZWVkIHRvIGtpY2sg
bWFpblRocmVhZERlc3Ryb3koKSB0byBkZWxldGUgdGhlIHBlZXIuCi0gICAgICAgICAgICAgICAg
bG9hZGVyUHJveHktPnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIgPSBXVEZNb3ZlKHBlZXIpXSAoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgIGxvYWRlclBy
b3h5LnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIgPSBXVEZNb3ZlKHBlZXIpXSAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNv
bnRleHQuaXNEb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTM5MSw4ICszODYs
OCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCCiAgICAgc2V0TWV0
aG9kTm90Q29tcGxldGVkKCk7CiAgICAgUmVmPEJyaWRnZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7
CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOwotICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tUb0xvYWRlcihbbG9hZGVyUHJveHkgPSAmbV9sb2FkZXJQcm94eSwgd29y
a2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHRhc2tNb2Rl
ID0gbV90YXNrTW9kZS5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIG11dGFibGUgeworICAgIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29w
eVJlZigpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbbG9hZGVyUHJveHkg
PSBtX2xvYWRlclByb3h5LCB3b3JrZXJDbGllbnRXcmFwcGVyID0gV1RGTW92ZSh3b3JrZXJDbGll
bnRXcmFwcGVyKSwgdGFza01vZGUgPSBtX3Rhc2tNb2RlLmlzb2xhdGVkQ29weSgpXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CiAgICAgICAgIG1haW5UaHJlYWRJ
bml0aWFsaXplKGNvbnRleHQsIGxvYWRlclByb3h5LCBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBw
ZXIpLCB0YXNrTW9kZSk7CiAgICAgfSk7CiAgICAgd2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsK
QEAgLTQwNSw3ICs0MDAsNiBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCCiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y29u
bmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKIHsKLSAgICBBU1NF
UlQobV93b3JrZXJDbGllbnRXcmFwcGVyKTsKICAgICBpZiAoIW1fcGVlcikKICAgICAgICAgcmV0
dXJuOwogCkBAIC00MjAsNyArNDE0LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6QgogCiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKLSAgICBpZiAoIW1fd29ya2VyQ2xpZW50V3JhcHBlciB8fCAhbV9wZWVyKQor
ICAgIGlmICghbV9wZWVyKQogICAgICAgICByZXR1cm4gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OlNlbmRGYWlsOwogICAgIHNldE1ldGhvZE5vdENvbXBsZXRlZCgpOwogCkBAIC00MzQsMTUg
KzQyOCwxMiBAQCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXCiAKICAg
ICBSZWY8QnJpZGdlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICB3YWl0Rm9yTWV0aG9kQ29t
cGxldGlvbigpOwotICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciog
Y2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKLSAgICBpZiAoIWNs
aWVudFdyYXBwZXIpCi0gICAgICAgIHJldHVybiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
U2VuZEZhaWw7Ci0gICAgcmV0dXJuIGNsaWVudFdyYXBwZXItPnNlbmRSZXF1ZXN0UmVzdWx0KCk7
CisgICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+c2VuZFJlcXVlc3RSZXN1bHQoKTsK
IH0KIAogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBBcnJheUJ1ZmZlciYgYmlu
YXJ5RGF0YSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAg
ICBpZiAoIW1fd29ya2VyQ2xpZW50V3JhcHBlciB8fCAhbV9wZWVyKQorICAgIGlmICghbV9wZWVy
KQogICAgICAgICByZXR1cm4gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRGYWlsOwog
CiAgICAgLy8gQXJyYXlCdWZmZXIgaXNuJ3QgdGhyZWFkLXNhZmUsIGhlbmNlIHRoZSBjb250ZW50
IG9mIEFycmF5QnVmZmVyIGlzIGNvcGllZCBpbnRvIFZlY3RvcjxjaGFyPi4KQEAgLTQ2MiwxNSAr
NDUzLDEyIEBAIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFcKIAogICAg
IFJlZjxCcmlkZ2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogICAgIHdhaXRGb3JNZXRob2RDb21w
bGV0aW9uKCk7Ci0gICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBj
bGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOwotICAgIGlmICghY2xp
ZW50V3JhcHBlcikKLSAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpT
ZW5kRmFpbDsKLSAgICByZXR1cm4gY2xpZW50V3JhcHBlci0+c2VuZFJlcXVlc3RSZXN1bHQoKTsK
KyAgICByZXR1cm4gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5zZW5kUmVxdWVzdFJlc3VsdCgpOwog
fQogCiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzZW5kKEJsb2ImIGJpbmFyeURhdGEpCiB7Ci0g
ICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIgfHwgIW1fcGVlcikKKyAgICBpZiAoIW1fcGVl
cikKICAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kRmFpbDsK
ICAgICBzZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKIApAQCAtNDg0LDE1ICs0NzIsMTIgQEAgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgVwogCiAgICAgUmVmPEJyaWRnZT4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CiAgICAgd2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKLSAg
ICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIg
PSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCk7Ci0gICAgaWYgKCFjbGllbnRXcmFwcGVyKQot
ICAgICAgICByZXR1cm4gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRGYWlsOwotICAg
IHJldHVybiBjbGllbnRXcmFwcGVyLT5zZW5kUmVxdWVzdFJlc3VsdCgpOworICAgIHJldHVybiBt
X3dvcmtlckNsaWVudFdyYXBwZXItPnNlbmRSZXF1ZXN0UmVzdWx0KCk7CiB9CiAKIHVuc2lnbmVk
IGxvbmcgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6YnVmZmVyZWRB
bW91bnQoKQogewotICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyIHx8ICFtX3BlZXIpCisg
ICAgaWYgKCFtX3BlZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIHNldE1ldGhvZE5vdENvbXBs
ZXRlZCgpOwogCkBAIC01MDYsMTAgKzQ5MSw3IEBAIHVuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldEMKIAogICAgIFJlZjxCcmlkZ2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwog
ICAgIHdhaXRGb3JNZXRob2RDb21wbGV0aW9uKCk7Ci0gICAgVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyKiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
LmdldCgpOwotICAgIGlmIChjbGllbnRXcmFwcGVyKQotICAgICAgICByZXR1cm4gY2xpZW50V3Jh
cHBlci0+YnVmZmVyZWRBbW91bnQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV93b3Jr
ZXJDbGllbnRXcmFwcGVyLT5idWZmZXJlZEFtb3VudCgpOwogfQogCiB2b2lkIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJp
bmcmIHJlYXNvbikKQEAgLTU4OCw3ICs1NzAsNiBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpCCiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OkJyaWRnZTo6c2V0TWV0aG9kTm90Q29tcGxldGVkKCkKIHsKLSAgICBBU1NFUlQobV93b3JrZXJD
bGllbnRXcmFwcGVyKTsKICAgICBtX3dvcmtlckNsaWVudFdyYXBwZXItPmNsZWFyU3luY01ldGhv
ZERvbmUoKTsKIH0KIApAQCAtNjAwLDEwICs1ODEsMTAgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QgogICAgICAgICByZXR1cm47CiAgICAgV29ya2VyUnVuTG9vcCYg
cnVuTG9vcCA9IG1fd29ya2VyR2xvYmFsU2NvcGUtPnRocmVhZCgpLnJ1bkxvb3AoKTsKICAgICBN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZl
ZDsKLSAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdy
YXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCk7CisgICAgVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRX
cmFwcGVyLnB0cigpOwogICAgIHdoaWxlIChtX3dvcmtlckdsb2JhbFNjb3BlICYmIGNsaWVudFdy
YXBwZXIgJiYgIWNsaWVudFdyYXBwZXItPnN5bmNNZXRob2REb25lKCkgJiYgcmVzdWx0ICE9IE1l
c3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsKICAgICAgICAgcmVzdWx0ID0gcnVuTG9vcC5ydW5Jbk1v
ZGUobV93b3JrZXJHbG9iYWxTY29wZS5nZXQoKSwgbV90YXNrTW9kZSk7IC8vIE1heSBjYXVzZSB0
aGlzIGJyaWRnZSB0byBnZXQgZGlzY29ubmVjdGVkLCB3aGljaCBtYWtlcyBtX3dvcmtlckdsb2Jh
bFNjb3BlIGJlY29tZSBudWxsLgotICAgICAgICBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGll
bnRXcmFwcGVyLmdldCgpOworICAgICAgICBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRX
cmFwcGVyLnB0cigpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmgJKHJldmlzaW9uIDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAotI2RlZmluZSBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09D
S0VUUykKIApAQCAtMzcsNyArMzYsNiBAQAogI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGll
bnQuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogCi0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC01NSw3ICs1Myw3IEBAIGNs
YXNzIFdvcmtlclJ1bkxvb3A7CiBjbGFzcyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiwg
cHVibGljIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsPiBjcmVhdGUoV29ya2VyR2xvYmFsU2NvcGUqIHdvcmtlckdsb2JhbFNjb3BlLCBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpCisgICAgc3Rh
dGljIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdvcmtlckdsb2JhbFNj
b3BlJiB3b3JrZXJHbG9iYWxTY29wZSwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCYgY2xpZW50LCBj
b25zdCBTdHJpbmcmIHRhc2tNb2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwod29ya2VyR2xvYmFsU2NvcGUsIGNs
aWVudCwgdGFza01vZGUpKTsKICAgICB9CkBAIC04MCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBj
bGFzcyBQZWVyIDogcHVibGljIFdlYlNvY2tldENoYW5uZWxDbGllbnQgewogICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQZWVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVi
bGljOgotICAgICAgICBQZWVyKFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI+JiYsIFdvcmtlckxvYWRlclByb3h5JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgICAgICBQZWVyKFJlZjxUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYsIFdvcmtlckxvYWRlclByb3h5JiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOwogICAgICAgICB+UGVl
cigpOwogCiAgICAgICAgIHZvaWQgY29ubmVjdChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKTsKQEAgLTEwNCw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2VFcnJvcigpIG92ZXJyaWRlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVm
UHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gbV93b3JrZXJDbGll
bnRXcmFwcGVyOworICAgICAgICBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5
JiBtX2xvYWRlclByb3h5OwogICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw+IG1fbWFpbldlYlNvY2tldENoYW5uZWw7CiAgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOwpA
QCAtMTIxLDkgKzExOSw5IEBAIHByaXZhdGU6CiAgICAgLy8gQnJpZGdlIGZvciBQZWVyLiAgUnVu
bmluZyBvbiB0aGUgd29ya2VyIHRocmVhZC4KICAgICBjbGFzcyBCcmlkZ2UgOiBwdWJsaWMgUmVm
Q291bnRlZDxCcmlkZ2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8QnJpZGdl
PiBjcmVhdGUoUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBhc3NSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IHdv
cmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQorICAgICAgICBzdGF0aWMg
UmVmPEJyaWRnZT4gY3JlYXRlKFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI+JiYgd29ya2VyQ2xpZW50V3JhcHBlciwgUmVmPFdvcmtlckdsb2JhbFNjb3BlPiYmIHdv
cmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCcmlkZ2Uod29ya2VyQ2xpZW50V3JhcHBlciwg
d29ya2VyR2xvYmFsU2NvcGUsIHRhc2tNb2RlKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCcmlkZ2UoV1RGTW92ZSh3b3JrZXJDbGllbnRXcmFwcGVyKSwgV1RGTW92ZSh3b3Jr
ZXJHbG9iYWxTY29wZSksIHRhc2tNb2RlKSk7CiAgICAgICAgIH0KICAgICAgICAgfkJyaWRnZSgp
OwogICAgICAgICB2b2lkIGluaXRpYWxpemUoKTsKQEAgLTE0MiwxMiArMTQwLDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8QnJpZGdlPjo6ZGVyZWY7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+LCBQYXNzUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiwgY29uc3QgU3Ry
aW5nJiB0YXNrTW9kZSk7CisgICAgICAgIEJyaWRnZShSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyPiYmLCBSZWY8V29ya2VyR2xvYmFsU2NvcGU+JiYsIGNvbnN0IFN0
cmluZyYgdGFza01vZGUpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldFdlYlNvY2tldENoYW5u
ZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJyaWRnZSogdGhpc1B0ciwgUGVlciosIFBhc3NS
ZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPik7CisgICAgICAg
IHN0YXRpYyB2b2lkIHNldFdlYlNvY2tldENoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEJyaWRnZSogdGhpc1B0ciwgUGVlciosIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI+JiYpOwogCiAgICAgICAgIC8vIEV4ZWN1dGVkIG9uIHRoZSBtYWluIHRocmVh
ZCB0byBjcmVhdGUgYSBQZWVyIGZvciB0aGlzIGJyaWRnZS4KLSAgICAgICAgc3RhdGljIHZvaWQg
bWFpblRocmVhZEluaXRpYWxpemUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtlckxvYWRl
clByb3h5KiwgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4m
JiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJl
YWRJbml0aWFsaXplKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrZXJMb2FkZXJQcm94eSYs
IFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYsIGNvbnN0IFN0
cmluZyYgdGFza01vZGUpOwogCiAgICAgICAgIC8vIEV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29u
dGV4dCdzIHRocmVhZC4KICAgICAgICAgdm9pZCBjbGVhckNsaWVudFdyYXBwZXIoKTsKQEAgLTE1
NSwyNCArMTUzLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0TWV0aG9kTm90Q29tcGxl
dGVkKCk7CiAgICAgICAgIHZvaWQgd2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKIAotICAgICAg
ICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBtX3dvcmtl
ckNsaWVudFdyYXBwZXI7CisgICAgICAgIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKICAgICAgICAgUmVmUHRyPFdvcmtl
ckdsb2JhbFNjb3BlPiBtX3dvcmtlckdsb2JhbFNjb3BlOwogICAgICAgICBXb3JrZXJMb2FkZXJQ
cm94eSYgbV9sb2FkZXJQcm94eTsKICAgICAgICAgU3RyaW5nIG1fdGFza01vZGU7CiAgICAgICAg
IFBlZXIqIG1fcGVlcjsKICAgICB9OwogCi0gICAgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwoV29ya2VyR2xvYmFsU2NvcGUqLCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiwgY29uc3Qg
U3RyaW5nJiB0YXNrTW9kZSk7CisgICAgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwo
V29ya2VyR2xvYmFsU2NvcGUmLCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiwgY29uc3QgU3RyaW5n
JiB0YXNrTW9kZSk7CiAKICAgICBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZURpZEluaXRpYWxpemVU
YXNrOwogCi0gICAgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiBtX3dvcmtlckdsb2JhbFNjb3Bl
OwotICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IG1f
d29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICBSZWY8V29ya2VyR2xvYmFsU2NvcGU+IG1fd29ya2Vy
R2xvYmFsU2NvcGU7CisgICAgUmVmPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOwogICAgIFJlZlB0cjxCcmlkZ2U+IG1fYnJpZGdl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9T
T0NLRVRTKQotCi0jZW5kaWYgLy8gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280840</attachid>
            <date>2016-06-08 14:31:11 -0700</date>
            <delta_ts>2016-06-08 15:03:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158539-20160608143238.patch</filename>
            <type>text/plain</type>
            <size>36837</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE2LTA2LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IFdlYlNvY2tldCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTg1MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAq
IE1vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OlRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsQ2xpZW50V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OnByb2Nlc3NQZW5kaW5nVGFza3Mp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0Q2hhbm5lbDo6V2ViU29ja2V0Q2hhbm5lbCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldENoYW5uZWw6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6c3VicHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OmV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6UGVlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6YnVmZmVy
ZWRBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OlBlZXI6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNl
aXZlQmluYXJ5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6UGVlcjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFN0YXJ0Q2xv
c2luZ0hhbmRzaGFrZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6UGVlcjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRn
ZTo6QnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpCcmlkZ2U6On5CcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6QnJpZGdlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6YnVmZmVyZWRBbW91bnQp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJy
aWRnZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OkJyaWRnZTo6c2V0TWV0aG9kTm90Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OndhaXRGb3JNZXRo
b2RDb21wbGV0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y3JlYXRlKToKKwogMjAxNi0wNi0wNyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MjAxNjY3KTogQVNTRVJUSU9OIEZBSUxFRDogIW1fYW5jaG9yTm9kZSB8fCAhZWRpdGluZ0lnbm9y
ZXNDb250ZW50KCptX2FuY2hvck5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5jcHAJKHJldmlzaW9uIDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDI1ICs0MywyMSBAQAogI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKICNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHdl
YlNvY2tldENoYW5uZWxNb2RlW10gPSAid2ViU29ja2V0Q2hhbm5lbE1vZGUiOwogCi1QYXNzUmVm
UHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5u
ZWxDbGllbnQqIGNsaWVudCkKK1JlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgQVNTRVJUKGNvbnRl
eHQpOwotICAgIEFTU0VSVChjbGllbnQpOwotCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3Bl
PigqY29udGV4dCkpIHsKLSAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNj
b3BlID0gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KTsKKyAgICBpZiAoaXM8
V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKSB7CisgICAgICAgIFdvcmtlckdsb2JhbFNjb3Bl
JiB3b3JrZXJHbG9iYWxTY29wZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0
KTsKICAgICAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlckdsb2JhbFNjb3BlLnRo
cmVhZCgpLnJ1bkxvb3AoKTsKICAgICAgICAgU3RyaW5nQnVpbGRlciBtb2RlOwogICAgICAgICBt
b2RlLmFwcGVuZExpdGVyYWwod2ViU29ja2V0Q2hhbm5lbE1vZGUpOwogICAgICAgICBtb2RlLmFw
cGVuZE51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpOwotICAgICAgICByZXR1cm4gV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZSgmd29ya2VyR2xvYmFsU2NvcGUs
IGNsaWVudCwgbW9kZS50b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUod29ya2VyR2xvYmFsU2NvcGUsIGNsaWVudCwgbW9k
ZS50b1N0cmluZygpKTsKICAgICB9CiAKICAgICByZXR1cm4gV2ViU29ja2V0Q2hhbm5lbDo6Y3Jl
YXRlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgY2xpZW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTQgKzI4LDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAotI2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBcnJheUJ1
ZmZlcjsKQEAgLTUzLDcgKzUxLDcgQEAgY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKTsK
IHB1YmxpYzoKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIHsgfQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsKKyAgICBzdGF0aWMgUmVm
PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKIAogICAgIGVudW0gU2VuZFJlc3VsdCB7CiAg
ICAgICAgIFNlbmRTdWNjZXNzLApAQCAtODgsNSArODYsMyBAQCBwcm90ZWN0ZWQ6CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0KLSNlbmRp
ZiAvLyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmNwcAkocmV2aXNpb24gMjAxODIw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE1ICszNCwx
NCBAQAogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YlNvY2tldENoYW5uZWxDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQor
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V2ViU29ja2V0Q2hhbm5lbENsaWVudCYgY2xpZW50KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQogICAgICwg
bV9wZWVyKG51bGxwdHIpCiAgICAgLCBtX2ZhaWxlZFdlYlNvY2tldENoYW5uZWxDcmVhdGlvbihm
YWxzZSkKICAgICAsIG1fc3luY01ldGhvZERvbmUodHJ1ZSkKQEAgLTUyLDcgKzUxLDcgQEAgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOgogewogfQogCi1SZWY8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGllbnQpCitSZWY8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKGNvbnRleHQsIGNsaWVudCkpOwogfQpA
QCAtMjQ4LDcgKzI0Nyw3IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmEKICAgICBpZiAoIW1fc3luY01ldGhvZERvbmUpIHsKICAgICAgICAgLy8gV2hlbiBhIHN5bmNo
cm9ub3VzIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAoaS5lLiB0aGUgZXhlY3V0aW9uIHN0YWNr
IGNvbnRhaW5zCiAgICAgICAgIC8vIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjp3
YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpKSwgd2UgY2Fubm90IGludm9rZSBjYWxsYmFja3MgaW4g
dGhpcyBydW4gbG9vcC4KLSAgICAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+KCp0
aGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgbV9jb250
ZXh0LnBvc3RUYXNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmPFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4oKnRoaXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgewogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0Lmlz
V29ya2VyR2xvYmFsU2NvcGUoKSk7CiAgICAgICAgICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tzKCk7
CiAgICAgICAgIH0pOwpAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmEKIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4+IHBlbmRpbmdUYXNrcyA9IFdURk1vdmUobV9wZW5kaW5nVGFz
a3MpOwogICAgIGZvciAoYXV0byYgdGFzayA6IHBlbmRpbmdUYXNrcykKLSAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2soKm1fY29udGV4dCk7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKG1fY29u
dGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgJKHJldmlzaW9uIDIwMTgyMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlcl9oCi0jZGVmaW5lIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIApAQCAt
NTAsNyArNDksNyBAQCBjbGFzcyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50OwogCiBjbGFzcyBUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dCopOworICAgIHN0YXRpYyBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYlNvY2tldENoYW5uZWxDbGll
bnQmKTsKIAogICAgIHZvaWQgY2xlYXJTeW5jTWV0aG9kRG9uZSgpOwogICAgIHZvaWQgc2V0U3lu
Y01ldGhvZERvbmUoKTsKQEAgLTg5LDExICs4OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1
bWUoKTsKIAogcHJpdmF0ZToKLSAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsK
KyAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKIAogICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdUYXNrcygpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0
OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIG1fY29udGV4dDsKICAgICBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50KiBtX2NsaWVudDsKICAgICBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6UGVlciogbV9wZWVyOwogICAgIGJvb2wgbV9mYWlsZWRXZWJTb2NrZXRDaGFubmVsQ3Jl
YXRpb247CkBAIC0xMTAsNSArMTA5LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKLQotI2VuZGlmIC8vIFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2aXNpb24gMjAxODIwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25z
dCBTdHJpbmcmIHVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NoYW5uZWwgPSBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgdGhpcyk7CisgICAgbV9jaGFubmVsID0gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmNy
ZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqdGhpcyk7CiAKICAgICAvLyBGSVhNRTog
VGhlcmUgaXMgYSBkaXNhZ3JlZW1lbnQgYWJvdXQgcmVzdHJpY3Rpb24gb2Ygc3VicHJvdG9jb2xz
IGJldHdlZW4gV2ViU29ja2V0IEFQSSBhbmQgaHliaS0xMCBwcm90b2NvbAogICAgIC8vIGRyYWZ0
LiBUaGUgZm9ybWVyIHNpbXBseSBzYXlzICJvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUr
MDAyMSB0byBVKzAwN0UgYXJlIGFsbG93ZWQsIiB3aGlsZSB0aGUgbGF0dGVyCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5u
ZWwuY3BwCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBkb3VibGUgVENQTWF4aW11bVNlZ21lbnRM
aWZldGltZSA9IDIgKiA2MC4wOwogCi1XZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVs
KERvY3VtZW50KiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQotICAg
IDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKK1dlYlNvY2tl
dENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKKyAgICAs
IG1fY2xpZW50KCZjbGllbnQpCiAgICAgLCBtX3Jlc3VtZVRpbWVyKCp0aGlzLCAmV2ViU29ja2V0
Q2hhbm5lbDo6cmVzdW1lVGltZXJGaXJlZCkKICAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQogICAg
ICwgbV9jbG9zaW5nKGZhbHNlKQpAQCAtODEsOSArODEsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpX
ZWJTb2NrZXRDaGFubmVsKERvY3VtCiAgICAgLCBtX291dGdvaW5nRnJhbWVRdWV1ZVN0YXR1cyhP
dXRnb2luZ0ZyYW1lUXVldWVPcGVuKQogICAgICwgbV9ibG9iTG9hZGVyU3RhdHVzKEJsb2JMb2Fk
ZXJOb3RTdGFydGVkKQogewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLQotICAgIGlmIChQYWdl
KiBwYWdlID0gbV9kb2N1bWVudC0+cGFnZSgpKQorICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1l
bnQucGFnZSgpKQogICAgICAgICBtX2lkZW50aWZpZXIgPSBwYWdlLT5wcm9ncmVzcygpLmNyZWF0
ZVVuaXF1ZUlkZW50aWZpZXIoKTsKIAogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5l
bCAlcCBjdG9yLCBpZGVudGlmaWVyICVsdSIsIHRoaXMsIG1faWRlbnRpZmllcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFu
bmVsLmgJKHJldmlzaW9uIDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
Y2xhc3MgV2ViU29ja2V0Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudAogewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViU29ja2V0Q2hhbm5l
bD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xp
ZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlNvY2tldENoYW5uZWwoZG9jdW1lbnQsIGNs
aWVudCkpOyB9CisgICAgc3RhdGljIFJlZjxXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViU29ja2V0Q2hhbm5lbChkb2N1bWVudCwgY2xpZW50KSk7IH0KICAgICB2
aXJ0dWFsIH5XZWJTb2NrZXRDaGFubmVsKCk7CiAKICAgICBib29sIHNlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgZGVyZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsg
fQogCiBwcml2YXRlOgotICAgIFdlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQqLCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50Kik7CisgICAgV2ViU29ja2V0Q2hhbm5lbChEb2N1bWVudCYsIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQmKTsKIAogICAgIGJvb2wgYXBwZW5kVG9CdWZmZXIoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbik7CiAgICAgdm9pZCBza2lwQnVmZmVyKHNpemVfdCBsZW4pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAy
MDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNSArNDYsMTQg
QEAKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVm
ZmVyLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbChXb3JrZXJHbG9iYWxTY29wZSogY29udGV4dCwgV2ViU29ja2V0
Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQorV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
KFdvcmtlckdsb2JhbFNjb3BlJiBjb250ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGll
bnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpCiAgICAgOiBtX3dvcmtlckdsb2JhbFNjb3BlKGNv
bnRleHQpCiAgICAgLCBtX3dvcmtlckNsaWVudFdyYXBwZXIoVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyOjpjcmVhdGUoY29udGV4dCwgY2xpZW50KSkKLSAgICAsIG1fYnJp
ZGdlKEJyaWRnZTo6Y3JlYXRlKG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJHbG9iYWxT
Y29wZSwgdGFza01vZGUpKQorICAgICwgbV9icmlkZ2UoQnJpZGdlOjpjcmVhdGUobV93b3JrZXJD
bGllbnRXcmFwcGVyLmNvcHlSZWYoKSwgbV93b3JrZXJHbG9iYWxTY29wZS5jb3B5UmVmKCksIHRh
c2tNb2RlKSkKIHsKICAgICBtX2JyaWRnZS0+aW5pdGlhbGl6ZSgpOwogfQpAQCAtNzMsMTMgKzcy
LDExIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmMKIAogU3RyaW5n
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpzdWJwcm90b2NvbCgpCiB7Ci0gICAg
QVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50
V3JhcHBlci0+c3VicHJvdG9jb2woKTsKIH0KIAogU3RyaW5nIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpleHRlbnNpb25zKCkKIHsKLSAgICBBU1NFUlQobV93b3JrZXJDbGllbnRX
cmFwcGVyKTsKICAgICByZXR1cm4gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5leHRlbnNpb25zKCk7
CiB9CiAKQEAgLTE0MywxMCArMTQwLDEwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OnIKICAgICAgICAgbV9icmlkZ2UtPnJlc3VtZSgpOwogfQogCi1Xb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6UGVlcihSZWZQdHI8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclBy
b3h5JiBsb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiB0YXNrTW9kZSkKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVy
OjpQZWVyKFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgY2xp
ZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQogICAgIDogbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKFdURk1vdmUoY2xpZW50V3JhcHBlcikpCiAgICAgLCBtX2xvYWRlclBy
b3h5KGxvYWRlclByb3h5KQotICAgICwgbV9tYWluV2ViU29ja2V0Q2hhbm5lbChXZWJTb2NrZXRD
aGFubmVsOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCB0aGlzKSkKKyAgICAs
IG1fbWFpbldlYlNvY2tldENoYW5uZWwoV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKGRvd25jYXN0
PERvY3VtZW50Pihjb250ZXh0KSwgKnRoaXMpKQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTcwLDExICsxNjcsMTEgQEAgdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbWFpbldlYlNvY2tldENo
YW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tl
dENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpTZW5kUmVzdWx0IHNlbmRSZXF1ZXN0UmVzdWx0ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5l
bC0+c2VuZChtZXNzYWdlKTsKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
OworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdv
cmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpOwogICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2Vy
Q2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHNlbmRSZXF1ZXN0
UmVzdWx0XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgd29ya2VyQ2xpZW50
V3JhcHBlci0+c2V0U2VuZFJlcXVlc3RSZXN1bHQoc2VuZFJlcXVlc3RSZXN1bHQpOwogICAgIH0s
IG1fdGFza01vZGUpOwpAQCAtMTgzLDExICsxODAsMTEgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6UGVlcjo6c2VuZChjb25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAh
bV93b3JrZXJDbGllbnRXcmFwcGVyKQorICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRS
ZXN1bHQgc2VuZFJlcXVlc3RSZXN1bHQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5zZW5kKGJp
bmFyeURhdGEsIDAsIGJpbmFyeURhdGEuYnl0ZUxlbmd0aCgpKTsKLSAgICBSZWZQdHI8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0g
bV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdy
YXBwZXIuY29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50
V3JhcHBlciksIHNlbmRSZXF1ZXN0UmVzdWx0XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsK
ICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+c2V0U2VuZFJlcXVlc3RSZXN1bHQoc2VuZFJl
cXVlc3RSZXN1bHQpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMTk2LDExICsxOTMsMTEgQEAg
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChCbG9iJiBiaW5hcnlEYXRhKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFu
bmVsIHx8ICFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgaWYgKCFtX21haW5XZWJTb2NrZXRD
aGFubmVsKQogICAgICAgICByZXR1cm47CiAKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6U2VuZFJlc3VsdCBzZW5kUmVxdWVzdFJlc3VsdCA9IG1fbWFpbldlYlNvY2tldENoYW5uZWwt
PnNlbmQoYmluYXJ5RGF0YSk7Ci0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBl
cjsKKyAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmNvcHlSZWYoKTsKICAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtl
ckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCBzZW5kUmVxdWVz
dFJlc3VsdF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIHdvcmtlckNsaWVu
dFdyYXBwZXItPnNldFNlbmRSZXF1ZXN0UmVzdWx0KHNlbmRSZXF1ZXN0UmVzdWx0KTsKICAgICB9
LCBtX3Rhc2tNb2RlKTsKQEAgLTIwOSwxMCArMjA2LDEwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OlAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OlBlZXI6OmJ1ZmZlcmVkQW1vdW50KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAhbV93b3JrZXJDbGllbnRXcmFw
cGVyKQorICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29y
a2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICBSZWZQdHI8VGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVy
ID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmNvcHlSZWYoKTsKICAgICB1bnNpZ25lZCBsb25nIGJ1
ZmZlcmVkQW1vdW50ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+YnVmZmVyZWRBbW91bnQoKTsK
ICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dv
cmtlckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCBidWZmZXJl
ZEFtb3VudF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7CkBAIC0y
NjUsNyArMjYyLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3Jr
ZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIu
Y29weVJlZigpOwogICAgIFN0cmluZyBzdWJwcm90b2NvbCA9IG1fbWFpbldlYlNvY2tldENoYW5u
ZWwtPnN1YnByb3RvY29sKCk7CiAgICAgU3RyaW5nIGV4dGVuc2lvbnMgPSBtX21haW5XZWJTb2Nr
ZXRDaGFubmVsLT5leHRlbnNpb25zKCk7CiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyID0gV1RGTW92ZSh3b3Jr
ZXJDbGllbnRXcmFwcGVyKSwgc3VicHJvdG9jb2wgPSBzdWJwcm90b2NvbC5pc29sYXRlZENvcHko
KSwgZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMuaXNvbGF0ZWRDb3B5KCldIChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7CkBAIC0yODAsNyArMjc3LDcgQEAgdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBw
ZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9
IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIG1lc3NhZ2UgPSBtZXNzYWdlLmlzb2xhdGVk
Q29weSgpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NF
UlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAg
ICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7CkBAIC0y
OTEsNyArMjg4LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3Jr
ZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIu
Y29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9i
YWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBl
ciksIGJpbmFyeURhdGEgPSBXVEZNb3ZlKGJpbmFyeURhdGEpXSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwg
Y29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwogICAgICAgICB3b3JrZXJDbGllbnRXcmFw
cGVyLT5kaWRSZWNlaXZlQmluYXJ5RGF0YShXVEZNb3ZlKGJpbmFyeURhdGEpKTsKQEAgLTMwMiw3
ICsyOTksNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNs
aWVudFdyYXBwZXI7CisgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5jb3B5
UmVmKCk7CiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNj
b3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyID0gV1RGTW92ZSh3b3JrZXJDbGllbnRXcmFwcGVyKSwg
YnVmZmVyZWRBbW91bnRdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkp
OwogICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChi
dWZmZXJlZEFtb3VudCk7CkBAIC0zMTMsNyArMzEwLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAg
ICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJD
bGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBt
X3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpOwogICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1v
dmUod29ya2VyQ2xpZW50V3JhcHBlcildIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2Jh
bFNjb3BlKCkpOwogICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRTdGFydENsb3NpbmdI
YW5kc2hha2UoKTsKQEAgLTMyNSw3ICszMjIsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpQCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX21haW5X
ZWJTb2NrZXRDaGFubmVsID0gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNs
aWVudFdyYXBwZXI7CisgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5jb3B5
UmVmKCk7CiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNj
b3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyID0gV1RGTW92ZSh3b3JrZXJDbGllbnRXcmFwcGVyKSwg
dW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIGNsb3NpbmdIYW5kc2hha2VDb21wbGV0aW9uLCBjb2Rl
LCByZWFzb24gPSByZWFzb24uaXNvbGF0ZWRDb3B5KCldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSB7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQu
aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXIt
PmRpZENsb3NlKHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50LCBjbG9zaW5nSGFuZHNoYWtlQ29tcGxl
dGlvbiwgY29kZSwgcmVhc29uKTsKQEAgLTMzNiwyMSArMzMzLDIwIEBAIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
d29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICBSZWZQdHI8
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFw
cGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmNvcHlSZWYoKTsKICAgICBtX2xvYWRlclByb3h5
LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIg
PSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3Jr
ZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2
ZU1lc3NhZ2VFcnJvcigpOwogICAgIH0sIG1fdGFza01vZGUpOwogfQogCi1Xb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBhc3NS
ZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcm
IHRhc2tNb2RlKQotICAgIDogbV93b3JrZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBw
ZXIpCi0gICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKQorV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6QnJpZGdlKFJlZjxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgd29ya2VyQ2xpZW50V3JhcHBlciwgUmVm
PFdvcmtlckdsb2JhbFNjb3BlPiYmIHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRh
c2tNb2RlKQorICAgIDogbV93b3JrZXJDbGllbnRXcmFwcGVyKFdURk1vdmUod29ya2VyQ2xpZW50
V3JhcHBlcikpCisgICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKFdURk1vdmUod29ya2VyR2xvYmFs
U2NvcGUpKQogICAgICwgbV9sb2FkZXJQcm94eShtX3dvcmtlckdsb2JhbFNjb3BlLT50aHJlYWQo
KS53b3JrZXJMb2FkZXJQcm94eSgpKQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKICAgICAs
IG1fcGVlcihudWxscHRyKQogewotICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0
KCkpOwogfQogCiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjp+QnJp
ZGdlKCkKQEAgLTM1OCwyMSArMzU0LDIwIEBAIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpCcmlkZ2UKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya2VyTG9hZGVyUHJveHkqIGxvYWRlclByb3h5LCBS
ZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIHBhc3NlZENs
aWVudFdyYXBwZXIsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpCisgICAgLy8gbG9hZGVyUHJveHkg
c2hvdWxkIGJlIGEgV29ya2VyTG9hZGVyUHJveHkmLgordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6QnJpZGdlOjptYWluVGhyZWFkSW5pdGlhbGl6ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBXb3JrZXJMb2FkZXJQcm94eSYgbG9hZGVyUHJveHksIFJlZjxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgY2xpZW50V3JhcHBlciwg
Y29uc3QgU3RyaW5nJiB0YXNrTW9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogCi0gICAg
UmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gY2xpZW50V3Jh
cHBlciA9IFdURk1vdmUocGFzc2VkQ2xpZW50V3JhcHBlcik7Ci0KLSAgICBhdXRvIHBlZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFBlZXI+KGNsaWVudFdyYXBwZXIuY29weVJlZigpLCAqbG9hZGVyUHJv
eHksICZjb250ZXh0LCB0YXNrTW9kZSk7Ci0gICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHktPnBv
c3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoeworICAgIGF1dG8gcGVlciA9IHN0ZDo6
bWFrZV91bmlxdWU8UGVlcj4oY2xpZW50V3JhcHBlci5jb3B5UmVmKCksIGxvYWRlclByb3h5LCBj
b250ZXh0LCB0YXNrTW9kZSk7CisgICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHkucG9zdFRhc2tG
b3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZSh7CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s6OkNsZWFudXBUYXNrLAotICAgICAgICBbY2xpZW50V3JhcHBlciwgbG9hZGVyUHJv
eHksIHBlZXIgPSBXVEZNb3ZlKHBlZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgbXV0YWJsZSB7CisgICAgICAgIFtjbGllbnRXcmFwcGVyID0gY2xpZW50V3JhcHBlci5jb3B5
UmVmKCksICZsb2FkZXJQcm94eSwgcGVlciA9IFdURk1vdmUocGVlcildIChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwogICAgICAgICAgICAgaWYg
KGNsaWVudFdyYXBwZXItPmZhaWxlZFdlYlNvY2tldENoYW5uZWxDcmVhdGlvbigpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgQnJpZGdlOjppbml0aWFsaXplKCkgcXVpdHRlZCBlYXJsaWVyLCB3
ZSBuZWVkIHRvIGtpY2sgbWFpblRocmVhZERlc3Ryb3koKSB0byBkZWxldGUgdGhlIHBlZXIuCi0g
ICAgICAgICAgICAgICAgbG9hZGVyUHJveHktPnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIgPSBXVEZN
b3ZlKHBlZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAg
ICAgICAgIGxvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIgPSBXVEZNb3ZlKHBlZXIp
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICB9KTsK
QEAgLTM5MSw4ICszODYsOCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCCiAgICAgc2V0TWV0aG9kTm90Q29tcGxldGVkKCk7CiAgICAgUmVmPEJyaWRnZT4gcHJvdGVj
dGVkVGhpcygqdGhpcyk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
OwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbbG9hZGVyUHJveHkgPSAmbV9s
b2FkZXJQcm94eSwgd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3Jh
cHBlciksIHRhc2tNb2RlID0gbV90YXNrTW9kZS5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgIFJlZjxUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNs
aWVudFdyYXBwZXIuY29weVJlZigpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRl
cihbJmxvYWRlclByb3h5ID0gbV9sb2FkZXJQcm94eSwgd29ya2VyQ2xpZW50V3JhcHBlciA9IFdU
Rk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHRhc2tNb2RlID0gbV90YXNrTW9kZS5pc29sYXRl
ZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewogICAg
ICAgICBtYWluVGhyZWFkSW5pdGlhbGl6ZShjb250ZXh0LCBsb2FkZXJQcm94eSwgV1RGTW92ZSh3
b3JrZXJDbGllbnRXcmFwcGVyKSwgdGFza01vZGUpOwogICAgIH0pOwogICAgIHdhaXRGb3JNZXRo
b2RDb21wbGV0aW9uKCk7CkBAIC00MDUsNyArNDAwLDYgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpCcmlkZ2U6OmNvbm5lY3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wpCiB7Ci0gICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgaWYgKCFtX3Bl
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDIwLDcgKzQxNCw3IEBAIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkIKIAogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OlNlbmRSZXN1bHQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBw
ZXIgfHwgIW1fcGVlcikKKyAgICBpZiAoIW1fcGVlcikKICAgICAgICAgcmV0dXJuIFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kRmFpbDsKICAgICBzZXRNZXRob2ROb3RDb21wbGV0ZWQo
KTsKIApAQCAtNDM0LDE1ICs0MjgsMTIgQEAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNl
bmRSZXN1bHQgVwogCiAgICAgUmVmPEJyaWRnZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAgICAg
d2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKLSAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0
KCk7Ci0gICAgaWYgKCFjbGllbnRXcmFwcGVyKQotICAgICAgICByZXR1cm4gVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OlNlbmRGYWlsOwotICAgIHJldHVybiBjbGllbnRXcmFwcGVyLT5zZW5k
UmVxdWVzdFJlc3VsdCgpOworICAgIHJldHVybiBtX3dvcmtlckNsaWVudFdyYXBwZXItPnNlbmRS
ZXF1ZXN0UmVzdWx0KCk7CiB9CiAKIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVz
dWx0IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQoY29uc3Qg
QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpCiB7Ci0gICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIgfHwgIW1fcGVlcikK
KyAgICBpZiAoIW1fcGVlcikKICAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpTZW5kRmFpbDsKIAogICAgIC8vIEFycmF5QnVmZmVyIGlzbid0IHRocmVhZC1zYWZlLCBo
ZW5jZSB0aGUgY29udGVudCBvZiBBcnJheUJ1ZmZlciBpcyBjb3BpZWQgaW50byBWZWN0b3I8Y2hh
cj4uCkBAIC00NjIsMTUgKzQ1MywxMiBAQCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2Vu
ZFJlc3VsdCBXCiAKICAgICBSZWY8QnJpZGdlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICB3
YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOwotICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQo
KTsKLSAgICBpZiAoIWNsaWVudFdyYXBwZXIpCi0gICAgICAgIHJldHVybiBUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6U2VuZEZhaWw7Ci0gICAgcmV0dXJuIGNsaWVudFdyYXBwZXItPnNlbmRS
ZXF1ZXN0UmVzdWx0KCk7CisgICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+c2VuZFJl
cXVlc3RSZXN1bHQoKTsKIH0KIAogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1
bHQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChCbG9iJiBi
aW5hcnlEYXRhKQogewotICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyIHx8ICFtX3BlZXIp
CisgICAgaWYgKCFtX3BlZXIpCiAgICAgICAgIHJldHVybiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6U2VuZEZhaWw7CiAgICAgc2V0TWV0aG9kTm90Q29tcGxldGVkKCk7CiAKQEAgLTQ4NCwx
NSArNDcyLDEyIEBAIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFcKIAog
ICAgIFJlZjxCcmlkZ2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogICAgIHdhaXRGb3JNZXRob2RD
b21wbGV0aW9uKCk7Ci0gICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
KiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOwotICAgIGlmICgh
Y2xpZW50V3JhcHBlcikKLSAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpTZW5kRmFpbDsKLSAgICByZXR1cm4gY2xpZW50V3JhcHBlci0+c2VuZFJlcXVlc3RSZXN1bHQo
KTsKKyAgICByZXR1cm4gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5zZW5kUmVxdWVzdFJlc3VsdCgp
OwogfQogCiB1bnNpZ25lZCBsb25nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpC
cmlkZ2U6OmJ1ZmZlcmVkQW1vdW50KCkKIHsKLSAgICBpZiAoIW1fd29ya2VyQ2xpZW50V3JhcHBl
ciB8fCAhbV9wZWVyKQorICAgIGlmICghbV9wZWVyKQogICAgICAgICByZXR1cm4gMDsKICAgICBz
ZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKIApAQCAtNTA2LDEwICs0OTEsNyBAQCB1bnNpZ25lZCBs
b25nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDCiAKICAgICBSZWY8QnJpZGdlPiBwcm90ZWN0
ZWRUaGlzKCp0aGlzKTsKICAgICB3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOwotICAgIFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9IG1fd29y
a2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKLSAgICBpZiAoY2xpZW50V3JhcHBlcikKLSAgICAgICAg
cmV0dXJuIGNsaWVudFdyYXBwZXItPmJ1ZmZlcmVkQW1vdW50KCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+YnVmZmVyZWRBbW91bnQoKTsKIH0KIAog
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpjbG9zZShpbnQg
Y29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCkBAIC01ODgsNyArNTcwLDYgQEAgdm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNldE1ldGhvZE5vdENvbXBsZXRlZCgpCiB7Ci0gICAg
QVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgbV93b3JrZXJDbGllbnRXcmFwcGVy
LT5jbGVhclN5bmNNZXRob2REb25lKCk7CiB9CiAKQEAgLTYwMCwxMCArNTgxLDEwIEBAIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkIKICAgICAgICAgcmV0dXJuOwogICAg
IFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlckdsb2JhbFNjb3BlLT50aHJlYWQoKS5y
dW5Mb29wKCk7CiAgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQgPSBNZXNzYWdlUXVl
dWVNZXNzYWdlUmVjZWl2ZWQ7Ci0gICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyKiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOworICAg
IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9
IG1fd29ya2VyQ2xpZW50V3JhcHBlci5wdHIoKTsKICAgICB3aGlsZSAobV93b3JrZXJHbG9iYWxT
Y29wZSAmJiBjbGllbnRXcmFwcGVyICYmICFjbGllbnRXcmFwcGVyLT5zeW5jTWV0aG9kRG9uZSgp
ICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7CiAgICAgICAgIHJlc3VsdCA9
IHJ1bkxvb3AucnVuSW5Nb2RlKG1fd29ya2VyR2xvYmFsU2NvcGUuZ2V0KCksIG1fdGFza01vZGUp
OyAvLyBNYXkgY2F1c2UgdGhpcyBicmlkZ2UgdG8gZ2V0IGRpc2Nvbm5lY3RlZCwgd2hpY2ggbWFr
ZXMgbV93b3JrZXJHbG9iYWxTY29wZSBiZWNvbWUgbnVsbC4KLSAgICAgICAgY2xpZW50V3JhcHBl
ciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKKyAgICAgICAgY2xpZW50V3JhcHBlciA9
IG1fd29ya2VyQ2xpZW50V3JhcHBlci5wdHIoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsX2gKLSNkZWZp
bmUgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAKQEAgLTM3LDcgKzM2LDYgQEAKICNpbmNsdWRlICJXZWJT
b2NrZXRDaGFubmVsQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKIAot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAt
NTUsNyArNTMsNyBAQCBjbGFzcyBXb3JrZXJSdW5Mb29wOwogY2xhc3MgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbD4sIHB1YmxpYyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9i
YWxTY29wZSwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRh
c2tNb2RlKQorICAgIHN0YXRpYyBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IGNyZWF0
ZShXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIFdlYlNvY2tldENoYW5uZWxD
bGllbnQmIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKHdvcmtl
ckdsb2JhbFNjb3BlLCBjbGllbnQsIHRhc2tNb2RlKSk7CiAgICAgfQpAQCAtODAsNyArNzgsNyBA
QCBwdWJsaWM6CiAgICAgY2xhc3MgUGVlciA6IHB1YmxpYyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVlcik7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgUGVlcihSZWZQdHI8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmLCBXb3JrZXJMb2FkZXJQcm94eSYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKTsKKyAgICAgICAgUGVlcihS
ZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmLCBXb3JrZXJMb2Fk
ZXJQcm94eSYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2Rl
KTsKICAgICAgICAgflBlZXIoKTsKIAogICAgICAgICB2b2lkIGNvbm5lY3QoY29uc3QgVVJMJiwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CkBAIC0xMDQsNyArMTAyLDcgQEAgcHVibGljOgogICAg
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKSBvdmVycmlkZTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICAgICAgUmVmPFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOwogICAgICAgICBX
b3JrZXJMb2FkZXJQcm94eSYgbV9sb2FkZXJQcm94eTsKICAgICAgICAgUmVmUHRyPFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsPiBtX21haW5XZWJTb2NrZXRDaGFubmVsOwogICAgICAgICBTdHJp
bmcgbV90YXNrTW9kZTsKQEAgLTEyMSw5ICsxMTksOSBAQCBwcml2YXRlOgogICAgIC8vIEJyaWRn
ZSBmb3IgUGVlci4gIFJ1bm5pbmcgb24gdGhlIHdvcmtlciB0aHJlYWQuCiAgICAgY2xhc3MgQnJp
ZGdlIDogcHVibGljIFJlZkNvdW50ZWQ8QnJpZGdlPiB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUmVmPEJyaWRnZT4gY3JlYXRlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBQYXNzUmVmUHRyPFdvcmtl
ckdsb2JhbFNjb3BlPiB3b3JrZXJHbG9iYWxTY29wZSwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSkK
KyAgICAgICAgc3RhdGljIFJlZjxCcmlkZ2U+IGNyZWF0ZShSZWY8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIHdvcmtlckNsaWVudFdyYXBwZXIsIFJlZjxXb3JrZXJH
bG9iYWxTY29wZT4mJiB3b3JrZXJHbG9iYWxTY29wZSwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQnJpZGdlKHdvcmtl
ckNsaWVudFdyYXBwZXIsIHdvcmtlckdsb2JhbFNjb3BlLCB0YXNrTW9kZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQnJpZGdlKFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBl
ciksIFdURk1vdmUod29ya2VyR2xvYmFsU2NvcGUpLCB0YXNrTW9kZSkpOwogICAgICAgICB9CiAg
ICAgICAgIH5CcmlkZ2UoKTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplKCk7CkBAIC0xNDIsMTIg
KzE0MCwxMiBAQCBwcml2YXRlOgogICAgICAgICB1c2luZyBSZWZDb3VudGVkPEJyaWRnZT46OmRl
cmVmOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiwgUGFzc1JlZlB0cjxXb3JrZXJHbG9iYWxT
Y29wZT4sIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgICAgICBCcmlkZ2UoUmVmPFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4mJiwgUmVmPFdvcmtlckdsb2JhbFNj
b3BlPiYmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCcmlkZ2UqIHRoaXNQ
dHIsIFBlZXIqLCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4pOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBCcmlkZ2UqIHRoaXNQdHIsIFBlZXIqLCBSZWY8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmKTsKIAogICAgICAgICAvLyBFeGVjdXRlZCBv
biB0aGUgbWFpbiB0aHJlYWQgdG8gY3JlYXRlIGEgUGVlciBmb3IgdGhpcyBicmlkZ2UuCi0gICAg
ICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRJbml0aWFsaXplKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBXb3JrZXJMb2FkZXJQcm94eSosIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+JiYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgICAgICBzdGF0
aWMgdm9pZCBtYWluVGhyZWFkSW5pdGlhbGl6ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29y
a2VyTG9hZGVyUHJveHkmLCBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyPiYmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKTsKIAogICAgICAgICAvLyBFeGVjdXRlZCBv
biB0aGUgd29ya2VyIGNvbnRleHQncyB0aHJlYWQuCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnRX
cmFwcGVyKCk7CkBAIC0xNTUsMjQgKzE1MywyMiBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNl
dE1ldGhvZE5vdENvbXBsZXRlZCgpOwogICAgICAgICB2b2lkIHdhaXRGb3JNZXRob2RDb21wbGV0
aW9uKCk7CiAKLSAgICAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgICAgICBSZWY8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CiAgICAg
ICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93b3JrZXJHbG9iYWxTY29wZTsKICAgICAg
ICAgV29ya2VyTG9hZGVyUHJveHkmIG1fbG9hZGVyUHJveHk7CiAgICAgICAgIFN0cmluZyBtX3Rh
c2tNb2RlOwogICAgICAgICBQZWVyKiBtX3BlZXI7CiAgICAgfTsKIAotICAgIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlKiwgV2ViU29ja2V0Q2hhbm5l
bENsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlJiwgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dCYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOwogCiAgICAgY2xhc3MgV29ya2VyR2xvYmFsU2Nv
cGVEaWRJbml0aWFsaXplVGFzazsKIAotICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93
b3JrZXJHbG9iYWxTY29wZTsKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CisgICAgUmVmPFdvcmtlckdsb2Jh
bFNjb3BlPiBtX3dvcmtlckdsb2JhbFNjb3BlOworICAgIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKICAgICBSZWZQdHI8
QnJpZGdlPiBtX2JyaWRnZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJfU09DS0VUUykKLQotI2VuZGlmIC8vIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280845</attachid>
            <date>2016-06-08 15:03:42 -0700</date>
            <delta_ts>2016-06-08 15:12:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158539-20160608150510.patch</filename>
            <type>text/plain</type>
            <size>38034</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE2LTA2LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IFdlYlNvY2tldCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTg1MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAq
IE1vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OlRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsQ2xpZW50V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OnByb2Nlc3NQZW5kaW5nVGFza3Mp
OgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0Q2hhbm5lbDo6V2ViU29ja2V0Q2hhbm5lbCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldENoYW5uZWw6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6c3VicHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OmV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6UGVlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6YnVmZmVy
ZWRBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OlBlZXI6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNl
aXZlQmluYXJ5RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6UGVlcjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFN0YXJ0Q2xv
c2luZ0hhbmRzaGFrZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6UGVlcjo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRn
ZTo6QnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpCcmlkZ2U6On5CcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6QnJpZGdlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6YnVmZmVyZWRBbW91bnQp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJy
aWRnZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OkJyaWRnZTo6c2V0TWV0aG9kTm90Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OndhaXRGb3JNZXRo
b2RDb21wbGV0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y3JlYXRlKToKKwogMjAxNi0wNi0wNyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MjAxNjY3KTogQVNTRVJUSU9OIEZBSUxFRDogIW1fYW5jaG9yTm9kZSB8fCAhZWRpdGluZ0lnbm9y
ZXNDb250ZW50KCptX2FuY2hvck5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5jcHAJKHJldmlzaW9uIDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDI1ICs0MywyMSBAQAogI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKICNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHdl
YlNvY2tldENoYW5uZWxNb2RlW10gPSAid2ViU29ja2V0Q2hhbm5lbE1vZGUiOwogCi1QYXNzUmVm
UHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5u
ZWxDbGllbnQqIGNsaWVudCkKK1JlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgQVNTRVJUKGNvbnRl
eHQpOwotICAgIEFTU0VSVChjbGllbnQpOwotCi0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3Bl
PigqY29udGV4dCkpIHsKLSAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNj
b3BlID0gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KTsKKyAgICBpZiAoaXM8
V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKSB7CisgICAgICAgIFdvcmtlckdsb2JhbFNjb3Bl
JiB3b3JrZXJHbG9iYWxTY29wZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0
KTsKICAgICAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlckdsb2JhbFNjb3BlLnRo
cmVhZCgpLnJ1bkxvb3AoKTsKICAgICAgICAgU3RyaW5nQnVpbGRlciBtb2RlOwogICAgICAgICBt
b2RlLmFwcGVuZExpdGVyYWwod2ViU29ja2V0Q2hhbm5lbE1vZGUpOwogICAgICAgICBtb2RlLmFw
cGVuZE51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpOwotICAgICAgICByZXR1cm4gV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZSgmd29ya2VyR2xvYmFsU2NvcGUs
IGNsaWVudCwgbW9kZS50b1N0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUod29ya2VyR2xvYmFsU2NvcGUsIGNsaWVudCwgbW9k
ZS50b1N0cmluZygpKTsKICAgICB9CiAKICAgICByZXR1cm4gV2ViU29ja2V0Q2hhbm5lbDo6Y3Jl
YXRlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgY2xpZW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTQgKzI4LDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAotI2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBcnJheUJ1
ZmZlcjsKQEAgLTUzLDcgKzUxLDcgQEAgY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKTsK
IHB1YmxpYzoKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIHsgfQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsKKyAgICBzdGF0aWMgUmVm
PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKIAogICAgIGVudW0gU2VuZFJlc3VsdCB7CiAg
ICAgICAgIFNlbmRTdWNjZXNzLApAQCAtODgsNSArODYsMyBAQCBwcm90ZWN0ZWQ6CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0KLSNlbmRp
ZiAvLyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmNwcAkocmV2aXNpb24gMjAxODIw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE1ICszNCwx
NCBAQAogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YlNvY2tldENoYW5uZWxDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQor
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V2ViU29ja2V0Q2hhbm5lbENsaWVudCYgY2xpZW50KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQogICAgICwg
bV9wZWVyKG51bGxwdHIpCiAgICAgLCBtX2ZhaWxlZFdlYlNvY2tldENoYW5uZWxDcmVhdGlvbihm
YWxzZSkKICAgICAsIG1fc3luY01ldGhvZERvbmUodHJ1ZSkKQEAgLTUyLDcgKzUxLDcgQEAgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOgogewogfQogCi1SZWY8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGllbnQpCitSZWY8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKGNvbnRleHQsIGNsaWVudCkpOwogfQpA
QCAtMjQ4LDcgKzI0Nyw3IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmEKICAgICBpZiAoIW1fc3luY01ldGhvZERvbmUpIHsKICAgICAgICAgLy8gV2hlbiBhIHN5bmNo
cm9ub3VzIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAoaS5lLiB0aGUgZXhlY3V0aW9uIHN0YWNr
IGNvbnRhaW5zCiAgICAgICAgIC8vIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjp3
YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpKSwgd2UgY2Fubm90IGludm9rZSBjYWxsYmFja3MgaW4g
dGhpcyBydW4gbG9vcC4KLSAgICAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+KCp0
aGlzKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgbV9jb250
ZXh0LnBvc3RUYXNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmPFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4oKnRoaXMpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgewogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0Lmlz
V29ya2VyR2xvYmFsU2NvcGUoKSk7CiAgICAgICAgICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tzKCk7
CiAgICAgICAgIH0pOwpAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmEKIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4+IHBlbmRpbmdUYXNrcyA9IFdURk1vdmUobV9wZW5kaW5nVGFz
a3MpOwogICAgIGZvciAoYXV0byYgdGFzayA6IHBlbmRpbmdUYXNrcykKLSAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2soKm1fY29udGV4dCk7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKG1fY29u
dGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgJKHJldmlzaW9uIDIwMTgyMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlcl9oCi0jZGVmaW5lIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIApAQCAt
NTAsNyArNDksNyBAQCBjbGFzcyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50OwogCiBjbGFzcyBUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dCopOworICAgIHN0YXRpYyBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYlNvY2tldENoYW5uZWxDbGll
bnQmKTsKIAogICAgIHZvaWQgY2xlYXJTeW5jTWV0aG9kRG9uZSgpOwogICAgIHZvaWQgc2V0U3lu
Y01ldGhvZERvbmUoKTsKQEAgLTg5LDExICs4OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1
bWUoKTsKIAogcHJpdmF0ZToKLSAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqKTsK
KyAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKIAogICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdUYXNrcygpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0
OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIG1fY29udGV4dDsKICAgICBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50KiBtX2NsaWVudDsKICAgICBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6UGVlciogbV9wZWVyOwogICAgIGJvb2wgbV9mYWlsZWRXZWJTb2NrZXRDaGFubmVsQ3Jl
YXRpb247CkBAIC0xMTAsNSArMTA5LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKLQotI2VuZGlmIC8vIFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2aXNpb24gMjAxODIwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25z
dCBTdHJpbmcmIHVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NoYW5uZWwgPSBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgdGhpcyk7CisgICAgbV9jaGFubmVsID0gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmNy
ZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqdGhpcyk7CiAKICAgICAvLyBGSVhNRTog
VGhlcmUgaXMgYSBkaXNhZ3JlZW1lbnQgYWJvdXQgcmVzdHJpY3Rpb24gb2Ygc3VicHJvdG9jb2xz
IGJldHdlZW4gV2ViU29ja2V0IEFQSSBhbmQgaHliaS0xMCBwcm90b2NvbAogICAgIC8vIGRyYWZ0
LiBUaGUgZm9ybWVyIHNpbXBseSBzYXlzICJvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUr
MDAyMSB0byBVKzAwN0UgYXJlIGFsbG93ZWQsIiB3aGlsZSB0aGUgbGF0dGVyCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5u
ZWwuY3BwCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBkb3VibGUgVENQTWF4aW11bVNlZ21lbnRM
aWZldGltZSA9IDIgKiA2MC4wOwogCi1XZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVs
KERvY3VtZW50KiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQotICAg
IDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKK1dlYlNvY2tl
dENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQmIGRvY3VtZW50LCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKKyAgICAs
IG1fY2xpZW50KCZjbGllbnQpCiAgICAgLCBtX3Jlc3VtZVRpbWVyKCp0aGlzLCAmV2ViU29ja2V0
Q2hhbm5lbDo6cmVzdW1lVGltZXJGaXJlZCkKICAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQogICAg
ICwgbV9jbG9zaW5nKGZhbHNlKQpAQCAtODEsOSArODEsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpX
ZWJTb2NrZXRDaGFubmVsKERvY3VtCiAgICAgLCBtX291dGdvaW5nRnJhbWVRdWV1ZVN0YXR1cyhP
dXRnb2luZ0ZyYW1lUXVldWVPcGVuKQogICAgICwgbV9ibG9iTG9hZGVyU3RhdHVzKEJsb2JMb2Fk
ZXJOb3RTdGFydGVkKQogewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLQotICAgIGlmIChQYWdl
KiBwYWdlID0gbV9kb2N1bWVudC0+cGFnZSgpKQorICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1l
bnQucGFnZSgpKQogICAgICAgICBtX2lkZW50aWZpZXIgPSBwYWdlLT5wcm9ncmVzcygpLmNyZWF0
ZVVuaXF1ZUlkZW50aWZpZXIoKTsKIAogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5l
bCAlcCBjdG9yLCBpZGVudGlmaWVyICVsdSIsIHRoaXMsIG1faWRlbnRpZmllcik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFu
bmVsLmgJKHJldmlzaW9uIDIwMTgyMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
Y2xhc3MgV2ViU29ja2V0Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudAogewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViU29ja2V0Q2hhbm5l
bD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xp
ZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlNvY2tldENoYW5uZWwoZG9jdW1lbnQsIGNs
aWVudCkpOyB9CisgICAgc3RhdGljIFJlZjxXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGllbnQpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViU29ja2V0Q2hhbm5lbChkb2N1bWVudCwgY2xpZW50KSk7IH0KICAgICB2
aXJ0dWFsIH5XZWJTb2NrZXRDaGFubmVsKCk7CiAKICAgICBib29sIHNlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgZGVyZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsg
fQogCiBwcml2YXRlOgotICAgIFdlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQqLCBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50Kik7CisgICAgV2ViU29ja2V0Q2hhbm5lbChEb2N1bWVudCYsIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQmKTsKIAogICAgIGJvb2wgYXBwZW5kVG9CdWZmZXIoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbik7CiAgICAgdm9pZCBza2lwQnVmZmVyKHNpemVfdCBsZW4pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAy
MDE4MjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNSArNDYsMTQg
QEAKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVm
ZmVyLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbChXb3JrZXJHbG9iYWxTY29wZSogY29udGV4dCwgV2ViU29ja2V0
Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQorV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
KFdvcmtlckdsb2JhbFNjb3BlJiBjb250ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50JiBjbGll
bnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpCiAgICAgOiBtX3dvcmtlckdsb2JhbFNjb3BlKGNv
bnRleHQpCiAgICAgLCBtX3dvcmtlckNsaWVudFdyYXBwZXIoVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyOjpjcmVhdGUoY29udGV4dCwgY2xpZW50KSkKLSAgICAsIG1fYnJp
ZGdlKEJyaWRnZTo6Y3JlYXRlKG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJHbG9iYWxT
Y29wZSwgdGFza01vZGUpKQorICAgICwgbV9icmlkZ2UoQnJpZGdlOjpjcmVhdGUobV93b3JrZXJD
bGllbnRXcmFwcGVyLmNvcHlSZWYoKSwgbV93b3JrZXJHbG9iYWxTY29wZS5jb3B5UmVmKCksIHRh
c2tNb2RlKSkKIHsKICAgICBtX2JyaWRnZS0+aW5pdGlhbGl6ZSgpOwogfQpAQCAtNzMsMTMgKzcy
LDExIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmMKIAogU3RyaW5n
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpzdWJwcm90b2NvbCgpCiB7Ci0gICAg
QVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50
V3JhcHBlci0+c3VicHJvdG9jb2woKTsKIH0KIAogU3RyaW5nIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpleHRlbnNpb25zKCkKIHsKLSAgICBBU1NFUlQobV93b3JrZXJDbGllbnRX
cmFwcGVyKTsKICAgICByZXR1cm4gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5leHRlbnNpb25zKCk7
CiB9CiAKQEAgLTE0MywxMCArMTQwLDEwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OnIKICAgICAgICAgbV9icmlkZ2UtPnJlc3VtZSgpOwogfQogCi1Xb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6UGVlcihSZWZQdHI8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclBy
b3h5JiBsb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiB0YXNrTW9kZSkKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVy
OjpQZWVyKFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgY2xp
ZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKQogICAgIDogbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKFdURk1vdmUoY2xpZW50V3JhcHBlcikpCiAgICAgLCBtX2xvYWRlclBy
b3h5KGxvYWRlclByb3h5KQotICAgICwgbV9tYWluV2ViU29ja2V0Q2hhbm5lbChXZWJTb2NrZXRD
aGFubmVsOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCB0aGlzKSkKKyAgICAs
IG1fbWFpbldlYlNvY2tldENoYW5uZWwoV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKGRvd25jYXN0
PERvY3VtZW50Pihjb250ZXh0KSwgKnRoaXMpKQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTcwLDEyICsxNjcsMTEgQEAgdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbWFpbldlYlNvY2tldENo
YW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tl
dENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpTZW5kUmVzdWx0IHNlbmRSZXF1ZXN0UmVzdWx0ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5l
bC0+c2VuZChtZXNzYWdlKTsKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
OwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShb
d29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHNlbmRS
ZXF1ZXN0UmVzdWx0XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBw
ZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpLCBzZW5kUmVxdWVzdFJlc3VsdF0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBtdXRhYmxlIHsKICAgICAgICAgd29ya2VyQ2xpZW50
V3JhcHBlci0+c2V0U2VuZFJlcXVlc3RSZXN1bHQoc2VuZFJlcXVlc3RSZXN1bHQpOwogICAgIH0s
IG1fdGFza01vZGUpOwogfQpAQCAtMTgzLDEyICsxNzksMTEgQEAgdm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6UGVlcjo6c2VuZChjb25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8
fCAhbV93b3JrZXJDbGllbnRXcmFwcGVyKQorICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5l
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNl
bmRSZXN1bHQgc2VuZFJlcXVlc3RSZXN1bHQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5zZW5k
KGJpbmFyeURhdGEsIDAsIGJpbmFyeURhdGEuYnl0ZUxlbmd0aCgpKTsKLSAgICBSZWZQdHI8VGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVy
ID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29y
a2VyQ2xpZW50V3JhcHBlciksIHNlbmRSZXF1ZXN0UmVzdWx0XSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpIHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFs
U2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJl
ZigpLCBzZW5kUmVxdWVzdFJlc3VsdF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBtdXRhYmxl
IHsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+c2V0U2VuZFJlcXVlc3RSZXN1bHQoc2Vu
ZFJlcXVlc3RSZXN1bHQpOwogICAgIH0sIG1fdGFza01vZGUpOwogfQpAQCAtMTk2LDEyICsxOTEs
MTEgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogdm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChCbG9iJiBiaW5hcnlEYXRh
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX21haW5XZWJTb2Nr
ZXRDaGFubmVsIHx8ICFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgaWYgKCFtX21haW5XZWJT
b2NrZXRDaGFubmVsKQogICAgICAgICByZXR1cm47CiAKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6U2VuZFJlc3VsdCBzZW5kUmVxdWVzdFJlc3VsdCA9IG1fbWFpbldlYlNvY2tldENo
YW5uZWwtPnNlbmQoYmluYXJ5RGF0YSk7Ci0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50
V3JhcHBlcjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFs
U2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIp
LCBzZW5kUmVxdWVzdFJlc3VsdF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgbV9s
b2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGll
bnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmNvcHlSZWYoKSwgc2VuZFJlcXVlc3RS
ZXN1bHRdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgbXV0YWJsZSB7CiAgICAgICAgIHdvcmtl
ckNsaWVudFdyYXBwZXItPnNldFNlbmRSZXF1ZXN0UmVzdWx0KHNlbmRSZXF1ZXN0UmVzdWx0KTsK
ICAgICB9LCBtX3Rhc2tNb2RlKTsKIH0KQEAgLTIwOSwxMiArMjAzLDExIEBAIHZvaWQgV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OlBlZXI6OmJ1ZmZlcmVkQW1vdW50KCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAhbV93b3JrZXJD
bGllbnRXcmFwcGVyKQorICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKICAgICB1
bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+YnVm
ZmVyZWRBbW91bnQoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
R2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdy
YXBwZXIpLCBidWZmZXJlZEFtb3VudF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUo
W3dvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpLCBi
dWZmZXJlZEFtb3VudF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUg
ewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxT
Y29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+c2V0QnVmZmVyZWRBbW91bnQo
YnVmZmVyZWRBbW91bnQpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMjY1LDEwICsyNTgsOSBA
QCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKIAotICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBw
ZXI7CiAgICAgU3RyaW5nIHN1YnByb3RvY29sID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c3Vi
cHJvdG9jb2woKTsKICAgICBTdHJpbmcgZXh0ZW5zaW9ucyA9IG1fbWFpbldlYlNvY2tldENoYW5u
ZWwtPmV4dGVuc2lvbnMoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29y
a2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVu
dFdyYXBwZXIpLCBzdWJwcm90b2NvbCA9IHN1YnByb3RvY29sLmlzb2xhdGVkQ29weSgpLCBleHRl
bnNpb25zID0gZXh0ZW5zaW9ucy5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
R2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIu
Y29weVJlZigpLCBzdWJwcm90b2NvbCA9IHN1YnByb3RvY29sLmlzb2xhdGVkQ29weSgpLCBleHRl
bnNpb25zID0gZXh0ZW5zaW9ucy5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIG11dGFibGUgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNv
bnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBl
ci0+c2V0U3VicHJvdG9jb2woc3VicHJvdG9jb2wpOwogICAgICAgICB3b3JrZXJDbGllbnRXcmFw
cGVyLT5zZXRFeHRlbnNpb25zKGV4dGVuc2lvbnMpOwpAQCAtMjgwLDggKzI3Miw3IEBAIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtl
ckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCBtZXNzYWdlID0g
bWVzc2FnZS5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUo
W3dvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpLCBt
ZXNzYWdlID0gbWVzc2FnZS5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIG11dGFibGUgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRl
eHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+
ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7CiAgICAgfSwgbV90YXNrTW9kZSk7CkBAIC0yOTEs
OCArMjgyLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJD
bGllbnRXcmFwcGVyOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJH
bG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3Jh
cHBlciksIGJpbmFyeURhdGEgPSBXVEZNb3ZlKGJpbmFyeURhdGEpXSAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJD
bGllbnRXcmFwcGVyLmNvcHlSZWYoKSwgYmluYXJ5RGF0YSA9IFdURk1vdmUoYmluYXJ5RGF0YSld
IChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7CiAgICAg
ICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVCaW5hcnlEYXRhKFdURk1vdmUoYmlu
YXJ5RGF0YSkpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMzAyLDggKzI5Miw3IEBAIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtl
ckNsaWVudFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCBidWZmZXJlZEFt
b3VudF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBw
ZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpLCBidWZmZXJlZEFtb3VudF0gKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewogICAgICAgICBBU1NFUlRf
VU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAg
d29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoYnVmZmVyZWRBbW91
bnQpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMzEzLDggKzMwMiw3IEBAIHZvaWQgV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBl
cj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAgICBtX2xv
YWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVu
dFdyYXBwZXIgPSBXVEZNb3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpXSAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCkgeworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3Jh
cHBlci5jb3B5UmVmKCldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxl
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFs
U2NvcGUoKSk7CiAgICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFN0YXJ0Q2xvc2luZ0hh
bmRzaGFrZSgpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMzI1LDggKzMxMyw3IEBAIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIG1fbWFpbldlYlNvY2tldENoYW5uZWwgPSBudWxscHRyOwogCi0gICAgUmVm
UHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50
V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBXVEZN
b3ZlKHdvcmtlckNsaWVudFdyYXBwZXIpLCB1bmhhbmRsZWRCdWZmZXJlZEFtb3VudCwgY2xvc2lu
Z0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbiA9IHJlYXNvbi5pc29sYXRlZENvcHko
KV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICBtX2xvYWRlclByb3h5
LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIg
PSBtX3dvcmtlckNsaWVudFdyYXBwZXIuY29weVJlZigpLCB1bmhhbmRsZWRCdWZmZXJlZEFtb3Vu
dCwgY2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbiA9IHJlYXNvbi5pc29s
YXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewog
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFs
U2NvcGUoKSk7CiAgICAgICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRDbG9zZSh1bmhh
bmRsZWRCdWZmZXJlZEFtb3VudCwgY2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJl
YXNvbik7CiAgICAgICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMzM2LDIxICszMjMsMTkgQEAgdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGll
bnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOwot
ICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29y
a2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBlcildIChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJD
bGllbnRXcmFwcGVyLmNvcHlSZWYoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IG11dGFibGUgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3Jr
ZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2
ZU1lc3NhZ2VFcnJvcigpOwogICAgIH0sIG1fdGFza01vZGUpOwogfQogCi1Xb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBhc3NS
ZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcm
IHRhc2tNb2RlKQotICAgIDogbV93b3JrZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBw
ZXIpCi0gICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKQorV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6QnJpZGdlKFJlZjxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgd29ya2VyQ2xpZW50V3JhcHBlciwgUmVm
PFdvcmtlckdsb2JhbFNjb3BlPiYmIHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRh
c2tNb2RlKQorICAgIDogbV93b3JrZXJDbGllbnRXcmFwcGVyKFdURk1vdmUod29ya2VyQ2xpZW50
V3JhcHBlcikpCisgICAgLCBtX3dvcmtlckdsb2JhbFNjb3BlKFdURk1vdmUod29ya2VyR2xvYmFs
U2NvcGUpKQogICAgICwgbV9sb2FkZXJQcm94eShtX3dvcmtlckdsb2JhbFNjb3BlLT50aHJlYWQo
KS53b3JrZXJMb2FkZXJQcm94eSgpKQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKICAgICAs
IG1fcGVlcihudWxscHRyKQogewotICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0
KCkpOwogfQogCiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjp+QnJp
ZGdlKCkKQEAgLTM1OCwyMSArMzQzLDIwIEBAIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpCcmlkZ2UKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya2VyTG9hZGVyUHJveHkqIGxvYWRlclByb3h5LCBS
ZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIHBhc3NlZENs
aWVudFdyYXBwZXIsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpCisgICAgLy8gbG9hZGVyUHJveHkg
c2hvdWxkIGJlIGEgV29ya2VyTG9hZGVyUHJveHkmLgordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6QnJpZGdlOjptYWluVGhyZWFkSW5pdGlhbGl6ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBXb3JrZXJMb2FkZXJQcm94eSYgbG9hZGVyUHJveHksIFJlZjxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+JiYgY2xpZW50V3JhcHBlciwg
Y29uc3QgU3RyaW5nJiB0YXNrTW9kZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogCi0gICAg
UmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gY2xpZW50V3Jh
cHBlciA9IFdURk1vdmUocGFzc2VkQ2xpZW50V3JhcHBlcik7Ci0KLSAgICBhdXRvIHBlZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFBlZXI+KGNsaWVudFdyYXBwZXIuY29weVJlZigpLCAqbG9hZGVyUHJv
eHksICZjb250ZXh0LCB0YXNrTW9kZSk7Ci0gICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHktPnBv
c3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoeworICAgIGF1dG8gcGVlciA9IHN0ZDo6
bWFrZV91bmlxdWU8UGVlcj4oY2xpZW50V3JhcHBlci5jb3B5UmVmKCksIGxvYWRlclByb3h5LCBj
b250ZXh0LCB0YXNrTW9kZSk7CisgICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHkucG9zdFRhc2tG
b3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZSh7CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s6OkNsZWFudXBUYXNrLAotICAgICAgICBbY2xpZW50V3JhcHBlciwgbG9hZGVyUHJv
eHksIHBlZXIgPSBXVEZNb3ZlKHBlZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgbXV0YWJsZSB7CisgICAgICAgIFtjbGllbnRXcmFwcGVyID0gY2xpZW50V3JhcHBlci5jb3B5
UmVmKCksICZsb2FkZXJQcm94eSwgcGVlciA9IFdURk1vdmUocGVlcildIChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwogICAgICAgICAgICAgaWYg
KGNsaWVudFdyYXBwZXItPmZhaWxlZFdlYlNvY2tldENoYW5uZWxDcmVhdGlvbigpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgQnJpZGdlOjppbml0aWFsaXplKCkgcXVpdHRlZCBlYXJsaWVyLCB3
ZSBuZWVkIHRvIGtpY2sgbWFpblRocmVhZERlc3Ryb3koKSB0byBkZWxldGUgdGhlIHBlZXIuCi0g
ICAgICAgICAgICAgICAgbG9hZGVyUHJveHktPnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIgPSBXVEZN
b3ZlKHBlZXIpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAg
ICAgICAgIGxvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIgPSBXVEZNb3ZlKHBlZXIp
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICB9KTsK
QEAgLTM5MSw4ICszNzUsOCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCCiAgICAgc2V0TWV0aG9kTm90Q29tcGxldGVkKCk7CiAgICAgUmVmPEJyaWRnZT4gcHJvdGVj
dGVkVGhpcygqdGhpcyk7CiAKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVy
OwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbbG9hZGVyUHJveHkgPSAmbV9s
b2FkZXJQcm94eSwgd29ya2VyQ2xpZW50V3JhcHBlciA9IFdURk1vdmUod29ya2VyQ2xpZW50V3Jh
cHBlciksIHRhc2tNb2RlID0gbV90YXNrTW9kZS5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgIFJlZjxUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNs
aWVudFdyYXBwZXIuY29weVJlZigpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRl
cihbJmxvYWRlclByb3h5ID0gbV9sb2FkZXJQcm94eSwgd29ya2VyQ2xpZW50V3JhcHBlciA9IFdU
Rk1vdmUod29ya2VyQ2xpZW50V3JhcHBlciksIHRhc2tNb2RlID0gbV90YXNrTW9kZS5pc29sYXRl
ZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewogICAg
ICAgICBtYWluVGhyZWFkSW5pdGlhbGl6ZShjb250ZXh0LCBsb2FkZXJQcm94eSwgV1RGTW92ZSh3
b3JrZXJDbGllbnRXcmFwcGVyKSwgdGFza01vZGUpOwogICAgIH0pOwogICAgIHdhaXRGb3JNZXRo
b2RDb21wbGV0aW9uKCk7CkBAIC00MDUsNyArMzg5LDYgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpCcmlkZ2U6OmNvbm5lY3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wpCiB7Ci0gICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgaWYgKCFtX3Bl
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDIwLDcgKzQwMyw3IEBAIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkIKIAogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OlNlbmRSZXN1bHQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBw
ZXIgfHwgIW1fcGVlcikKKyAgICBpZiAoIW1fcGVlcikKICAgICAgICAgcmV0dXJuIFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kRmFpbDsKICAgICBzZXRNZXRob2ROb3RDb21wbGV0ZWQo
KTsKIApAQCAtNDM0LDE1ICs0MTcsMTIgQEAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNl
bmRSZXN1bHQgVwogCiAgICAgUmVmPEJyaWRnZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAgICAg
d2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKLSAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0
KCk7Ci0gICAgaWYgKCFjbGllbnRXcmFwcGVyKQotICAgICAgICByZXR1cm4gVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OlNlbmRGYWlsOwotICAgIHJldHVybiBjbGllbnRXcmFwcGVyLT5zZW5k
UmVxdWVzdFJlc3VsdCgpOworICAgIHJldHVybiBtX3dvcmtlckNsaWVudFdyYXBwZXItPnNlbmRS
ZXF1ZXN0UmVzdWx0KCk7CiB9CiAKIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVz
dWx0IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQoY29uc3Qg
QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpCiB7Ci0gICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIgfHwgIW1fcGVlcikK
KyAgICBpZiAoIW1fcGVlcikKICAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpTZW5kRmFpbDsKIAogICAgIC8vIEFycmF5QnVmZmVyIGlzbid0IHRocmVhZC1zYWZlLCBo
ZW5jZSB0aGUgY29udGVudCBvZiBBcnJheUJ1ZmZlciBpcyBjb3BpZWQgaW50byBWZWN0b3I8Y2hh
cj4uCkBAIC00NjIsMTUgKzQ0MiwxMiBAQCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2Vu
ZFJlc3VsdCBXCiAKICAgICBSZWY8QnJpZGdlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICB3
YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOwotICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQo
KTsKLSAgICBpZiAoIWNsaWVudFdyYXBwZXIpCi0gICAgICAgIHJldHVybiBUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6U2VuZEZhaWw7Ci0gICAgcmV0dXJuIGNsaWVudFdyYXBwZXItPnNlbmRS
ZXF1ZXN0UmVzdWx0KCk7CisgICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+c2VuZFJl
cXVlc3RSZXN1bHQoKTsKIH0KIAogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1
bHQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChCbG9iJiBi
aW5hcnlEYXRhKQogewotICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyIHx8ICFtX3BlZXIp
CisgICAgaWYgKCFtX3BlZXIpCiAgICAgICAgIHJldHVybiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6U2VuZEZhaWw7CiAgICAgc2V0TWV0aG9kTm90Q29tcGxldGVkKCk7CiAKQEAgLTQ4NCwx
NSArNDYxLDEyIEBAIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFcKIAog
ICAgIFJlZjxCcmlkZ2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogICAgIHdhaXRGb3JNZXRob2RD
b21wbGV0aW9uKCk7Ci0gICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
KiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOwotICAgIGlmICgh
Y2xpZW50V3JhcHBlcikKLSAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpTZW5kRmFpbDsKLSAgICByZXR1cm4gY2xpZW50V3JhcHBlci0+c2VuZFJlcXVlc3RSZXN1bHQo
KTsKKyAgICByZXR1cm4gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5zZW5kUmVxdWVzdFJlc3VsdCgp
OwogfQogCiB1bnNpZ25lZCBsb25nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpC
cmlkZ2U6OmJ1ZmZlcmVkQW1vdW50KCkKIHsKLSAgICBpZiAoIW1fd29ya2VyQ2xpZW50V3JhcHBl
ciB8fCAhbV9wZWVyKQorICAgIGlmICghbV9wZWVyKQogICAgICAgICByZXR1cm4gMDsKICAgICBz
ZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKIApAQCAtNTA2LDEwICs0ODAsNyBAQCB1bnNpZ25lZCBs
b25nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDCiAKICAgICBSZWY8QnJpZGdlPiBwcm90ZWN0
ZWRUaGlzKCp0aGlzKTsKICAgICB3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOwotICAgIFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9IG1fd29y
a2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKLSAgICBpZiAoY2xpZW50V3JhcHBlcikKLSAgICAgICAg
cmV0dXJuIGNsaWVudFdyYXBwZXItPmJ1ZmZlcmVkQW1vdW50KCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+YnVmZmVyZWRBbW91bnQoKTsKIH0KIAog
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpjbG9zZShpbnQg
Y29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCkBAIC01ODgsNyArNTU5LDYgQEAgdm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNldE1ldGhvZE5vdENvbXBsZXRlZCgpCiB7Ci0gICAg
QVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgbV93b3JrZXJDbGllbnRXcmFwcGVy
LT5jbGVhclN5bmNNZXRob2REb25lKCk7CiB9CiAKQEAgLTYwMCwxMCArNTcwLDEwIEBAIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkIKICAgICAgICAgcmV0dXJuOwogICAg
IFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlckdsb2JhbFNjb3BlLT50aHJlYWQoKS5y
dW5Mb29wKCk7CiAgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQgPSBNZXNzYWdlUXVl
dWVNZXNzYWdlUmVjZWl2ZWQ7Ci0gICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyKiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOworICAg
IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9
IG1fd29ya2VyQ2xpZW50V3JhcHBlci5wdHIoKTsKICAgICB3aGlsZSAobV93b3JrZXJHbG9iYWxT
Y29wZSAmJiBjbGllbnRXcmFwcGVyICYmICFjbGllbnRXcmFwcGVyLT5zeW5jTWV0aG9kRG9uZSgp
ICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7CiAgICAgICAgIHJlc3VsdCA9
IHJ1bkxvb3AucnVuSW5Nb2RlKG1fd29ya2VyR2xvYmFsU2NvcGUuZ2V0KCksIG1fdGFza01vZGUp
OyAvLyBNYXkgY2F1c2UgdGhpcyBicmlkZ2UgdG8gZ2V0IGRpc2Nvbm5lY3RlZCwgd2hpY2ggbWFr
ZXMgbV93b3JrZXJHbG9iYWxTY29wZSBiZWNvbWUgbnVsbC4KLSAgICAgICAgY2xpZW50V3JhcHBl
ciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKKyAgICAgICAgY2xpZW50V3JhcHBlciA9
IG1fd29ya2VyQ2xpZW50V3JhcHBlci5wdHIoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCShyZXZpc2lvbiAyMDE4MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsX2gKLSNkZWZp
bmUgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAKQEAgLTM3LDcgKzM2LDYgQEAKICNpbmNsdWRlICJXZWJT
b2NrZXRDaGFubmVsQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKIAot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAt
NTUsNyArNTMsNyBAQCBjbGFzcyBXb3JrZXJSdW5Mb29wOwogY2xhc3MgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbD4sIHB1YmxpYyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9i
YWxTY29wZSwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRh
c2tNb2RlKQorICAgIHN0YXRpYyBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IGNyZWF0
ZShXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIFdlYlNvY2tldENoYW5uZWxD
bGllbnQmIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKHdvcmtl
ckdsb2JhbFNjb3BlLCBjbGllbnQsIHRhc2tNb2RlKSk7CiAgICAgfQpAQCAtODAsNyArNzgsNyBA
QCBwdWJsaWM6CiAgICAgY2xhc3MgUGVlciA6IHB1YmxpYyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVlcik7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgUGVlcihSZWZQdHI8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmLCBXb3JrZXJMb2FkZXJQcm94eSYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKTsKKyAgICAgICAgUGVlcihS
ZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmLCBXb3JrZXJMb2Fk
ZXJQcm94eSYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2Rl
KTsKICAgICAgICAgflBlZXIoKTsKIAogICAgICAgICB2b2lkIGNvbm5lY3QoY29uc3QgVVJMJiwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CkBAIC0xMDQsNyArMTAyLDcgQEAgcHVibGljOgogICAg
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKSBvdmVycmlkZTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKyAgICAgICAgUmVmPFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOwogICAgICAgICBX
b3JrZXJMb2FkZXJQcm94eSYgbV9sb2FkZXJQcm94eTsKICAgICAgICAgUmVmUHRyPFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsPiBtX21haW5XZWJTb2NrZXRDaGFubmVsOwogICAgICAgICBTdHJp
bmcgbV90YXNrTW9kZTsKQEAgLTEyMSw5ICsxMTksOSBAQCBwcml2YXRlOgogICAgIC8vIEJyaWRn
ZSBmb3IgUGVlci4gIFJ1bm5pbmcgb24gdGhlIHdvcmtlciB0aHJlYWQuCiAgICAgY2xhc3MgQnJp
ZGdlIDogcHVibGljIFJlZkNvdW50ZWQ8QnJpZGdlPiB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUmVmPEJyaWRnZT4gY3JlYXRlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBQYXNzUmVmUHRyPFdvcmtl
ckdsb2JhbFNjb3BlPiB3b3JrZXJHbG9iYWxTY29wZSwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSkK
KyAgICAgICAgc3RhdGljIFJlZjxCcmlkZ2U+IGNyZWF0ZShSZWY8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiYmIHdvcmtlckNsaWVudFdyYXBwZXIsIFJlZjxXb3JrZXJH
bG9iYWxTY29wZT4mJiB3b3JrZXJHbG9iYWxTY29wZSwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQnJpZGdlKHdvcmtl
ckNsaWVudFdyYXBwZXIsIHdvcmtlckdsb2JhbFNjb3BlLCB0YXNrTW9kZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQnJpZGdlKFdURk1vdmUod29ya2VyQ2xpZW50V3JhcHBl
ciksIFdURk1vdmUod29ya2VyR2xvYmFsU2NvcGUpLCB0YXNrTW9kZSkpOwogICAgICAgICB9CiAg
ICAgICAgIH5CcmlkZ2UoKTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplKCk7CkBAIC0xNDIsMTIg
KzE0MCwxMiBAQCBwcml2YXRlOgogICAgICAgICB1c2luZyBSZWZDb3VudGVkPEJyaWRnZT46OmRl
cmVmOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiwgUGFzc1JlZlB0cjxXb3JrZXJHbG9iYWxT
Y29wZT4sIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgICAgICBCcmlkZ2UoUmVmPFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4mJiwgUmVmPFdvcmtlckdsb2JhbFNj
b3BlPiYmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCcmlkZ2UqIHRoaXNQ
dHIsIFBlZXIqLCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4pOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBCcmlkZ2UqIHRoaXNQdHIsIFBlZXIqLCBSZWY8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiYmKTsKIAogICAgICAgICAvLyBFeGVjdXRlZCBv
biB0aGUgbWFpbiB0aHJlYWQgdG8gY3JlYXRlIGEgUGVlciBmb3IgdGhpcyBicmlkZ2UuCi0gICAg
ICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRJbml0aWFsaXplKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBXb3JrZXJMb2FkZXJQcm94eSosIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+JiYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgICAgICBzdGF0
aWMgdm9pZCBtYWluVGhyZWFkSW5pdGlhbGl6ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29y
a2VyTG9hZGVyUHJveHkmLCBSZWY8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyPiYmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlKTsKIAogICAgICAgICAvLyBFeGVjdXRlZCBv
biB0aGUgd29ya2VyIGNvbnRleHQncyB0aHJlYWQuCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnRX
cmFwcGVyKCk7CkBAIC0xNTUsMjQgKzE1MywyMiBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNl
dE1ldGhvZE5vdENvbXBsZXRlZCgpOwogICAgICAgICB2b2lkIHdhaXRGb3JNZXRob2RDb21wbGV0
aW9uKCk7CiAKLSAgICAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgICAgICBSZWY8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CiAgICAg
ICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93b3JrZXJHbG9iYWxTY29wZTsKICAgICAg
ICAgV29ya2VyTG9hZGVyUHJveHkmIG1fbG9hZGVyUHJveHk7CiAgICAgICAgIFN0cmluZyBtX3Rh
c2tNb2RlOwogICAgICAgICBQZWVyKiBtX3BlZXI7CiAgICAgfTsKIAotICAgIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlKiwgV2ViU29ja2V0Q2hhbm5l
bENsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOworICAgIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKFdvcmtlckdsb2JhbFNjb3BlJiwgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dCYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUpOwogCiAgICAgY2xhc3MgV29ya2VyR2xvYmFsU2Nv
cGVEaWRJbml0aWFsaXplVGFzazsKIAotICAgIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4gbV93
b3JrZXJHbG9iYWxTY29wZTsKLSAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CisgICAgUmVmPFdvcmtlckdsb2Jh
bFNjb3BlPiBtX3dvcmtlckdsb2JhbFNjb3BlOworICAgIFJlZjxUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKICAgICBSZWZQdHI8
QnJpZGdlPiBtX2JyaWRnZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJfU09DS0VUUykKLQotI2VuZGlmIC8vIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsX2gK
</data>
<flag name="review"
          id="304731"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>