<?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>37399</bug_id>
          
          <creation_ts>2010-04-10 19:52:07 -0700</creation_ts>
          <short_desc>Remove use of STL data structures from CoreIPC code</short_desc>
          <delta_ts>2010-04-11 13:23:55 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>211261</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-10 19:52:07 -0700</bug_when>
    <thetext>No reason to keep these STL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211262</commentid>
    <comment_count>1</comment_count>
      <attachid>53066</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-10 19:55:25 -0700</bug_when>
    <thetext>Created attachment 53066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211263</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-10 19:56:33 -0700</bug_when>
    <thetext>Please ignore the NotImplemented.h bits. That should not be there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211287</commentid>
    <comment_count>3</comment_count>
      <attachid>53074</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-10 22:15:31 -0700</bug_when>
    <thetext>Created attachment 53074
Updated patch

This updates the patch to use a Vector instead of a Deque in Connection as per Anders&apos; request. It also changes some uses of malloc/free with fastMalloc/fastFree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211318</commentid>
    <comment_count>4</comment_count>
      <attachid>53074</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-10 23:35:11 -0700</bug_when>
    <thetext>Comment on attachment 53074
Updated patch

&gt; -    queue&lt;WorkItem*&gt; workItemQueue;
&gt; +    Deque&lt;WorkItem*&gt; workItemQueue;

You said this updates the patch to use a Vector instead of a Deque. But this is a Deque.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211369</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-11 09:59:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 53074 [details])
&gt; &gt; -    queue&lt;WorkItem*&gt; workItemQueue;
&gt; &gt; +    Deque&lt;WorkItem*&gt; workItemQueue;
&gt; 
&gt; You said this updates the patch to use a Vector instead of a Deque. But this is
&gt; a Deque.

Only in Connection for the incomming/outgoing message queues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211411</commentid>
    <comment_count>6</comment_count>
      <attachid>53074</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-11 13:07:59 -0700</bug_when>
    <thetext>Comment on attachment 53074
Updated patch

&gt; Index: WebKit2/Platform/RunLoop.h
&gt; ===================================================================
&gt; --- WebKit2/Platform/RunLoop.h	(revision 57421)
&gt; +++ WebKit2/Platform/RunLoop.h	(working copy)
&gt; @@ -27,7 +27,7 @@
&gt;  #define RunLoop_h
&gt;  
&gt;  #include &lt;memory&gt;
&gt; -#include &lt;queue&gt;
&gt; +#include &lt;wtf/Deque.h&gt;
&gt;  #include &lt;wtf/HashMap.h&gt;
&gt;  #include &lt;wtf/Threading.h&gt;
&gt;  
&gt; @@ -99,7 +99,7 @@ private:
&gt;      void wakeUp();
&gt;  
&gt;      Mutex m_workItemQueueLock;
&gt; -    std::queue&lt;WorkItem*&gt; m_workItemQueue;
&gt; +    Deque&lt;WorkItem*&gt; m_workItemQueue;

This can actually be a Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211414</commentid>
    <comment_count>7</comment_count>
      <attachid>53099</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-11 13:14:20 -0700</bug_when>
    <thetext>Created attachment 53099
Take 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211415</commentid>
    <comment_count>8</comment_count>
      <attachid>53099</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-11 13:17:33 -0700</bug_when>
    <thetext>Comment on attachment 53099
Take 3

Great, r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211422</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-11 13:23:55 -0700</bug_when>
    <thetext>Fixed in r57454.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53066</attachid>
            <date>2010-04-10 19:55:25 -0700</date>
            <delta_ts>2010-04-10 22:15:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>datastruct.diff</filename>
            <type>text/plain</type>
            <size>18743</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzQzMykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMDQtMTAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzM5OQorICAgICAgICBS
ZW1vdmUgdXNlIG9mIFNUTCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDb3JlSVBDIGNvZGUKKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNvZGVyKToKKyAgICAgICAgKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2Rlcjo6ZGVjb2RlQnl0ZXMpOgorICAgICAgICAoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyOjpyZW1vdmVBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RGVjb2Rlci5oOgorICAgICAgICBVc2UgV1RGOjpEZXF1ZSBpbnN0ZWFkIG9m
IHN0ZDo6cXVldWUgYW5kIFdURjo6VmVjdG9yCisgICAgICAgIGluc3RlYWQgb2Ygc3RkOjp2ZWN0
b3IuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHA6Cisg
ICAgICAgIChDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI6OmFkZEF0dGFjaG1lbnQpOgorICAgICAg
ICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpyZWxlYXNlQXR0YWNobWVudHMpOgorICAgICAg
ICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmg6CisgICAgICAgIFVzZSBXVEY6
OlZlY3RvciBpbnN0ZWFkIG9mIHN0ZDo6bGlzdC4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKToKKyAg
ICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2VzKToKKyAgICAg
ICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZXMpOgorICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMv
bWFjL0Nvbm5lY3Rpb25NYWMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2Vu
ZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgIChDb3JlSVBDOjpjcmVhdGVBcmd1bWVudERlY29k
ZXIpOgorICAgICAgICBVc2UgV1RGOjpEZXF1ZSBpbnN0ZWFkIG9mIHN0ZDo6cXVldWUuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybS9SdW5Mb29wLmNwcDoKKyAgICAgICAgKFJ1bkxvb3A6OnBlcmZvcm1X
b3JrKToKKyAgICAgICAgKFJ1bkxvb3A6OnNjaGVkdWxlV29yayk6CisgICAgICAgICogUGxhdGZv
cm0vUnVuTG9vcC5oOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIFBsYXRmb3JtL1dvcmtR
dWV1ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwOgorICAgICAg
ICAoV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3Jt
V29yayk6CisgICAgICAgIERpdHRvLgorCiAyMDEwLTA0LTEwICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IGFuIG9idmlvdXNseSBpbmNvcnJlY3QgcGFydCBvZiB0
aGUgWGNvZGUgY29uZmlndXJhdGlvbiBjbGVhbnVwIHRoYXQgcmVzdWx0ZWQgaW4gZGVidWcgYnVp
bGRzCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvUGxhdGZvcm0vUnVuTG9vcC5jcHAJKHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9Q
bGF0Zm9ybS9SdW5Mb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiAj
aW5jbHVkZSAiV29ya0l0ZW0uaCIKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogc3RhdGljIFJ1
bkxvb3AqIHNfbWFpblJ1bkxvb3A7CiAKIHZvaWQgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5M
b29wKCkKQEAgLTQ2LDIzICs0NCwyMyBAQCBSdW5Mb29wKiBSdW5Mb29wOjptYWluUnVuTG9vcCgp
CiAKIHZvaWQgUnVuTG9vcDo6cGVyZm9ybVdvcmsoKQogewotICAgIHF1ZXVlPFdvcmtJdGVtKj4g
d29ya0l0ZW1RdWV1ZTsKKyAgICBEZXF1ZTxXb3JrSXRlbSo+IHdvcmtJdGVtUXVldWU7CiAgICAg
ewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAg
ICAgIHN3YXAobV93b3JrSXRlbVF1ZXVlLCB3b3JrSXRlbVF1ZXVlKTsKKyAgICAgICAgbV93b3Jr
SXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7CiAgICAgfQogCi0gICAgd2hpbGUgKCF3b3Jr
SXRlbVF1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgYXV0b19wdHI8V29ya0l0ZW0+IGl0ZW0od29y
a0l0ZW1RdWV1ZS5mcm9udCgpKTsKKyAgICB3aGlsZSAoIXdvcmtJdGVtUXVldWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIHN0ZDo6YXV0b19wdHI8V29ya0l0ZW0+IGl0ZW0od29ya0l0ZW1RdWV1ZS5m
aXJzdCgpKTsKICAgICAgICAgaXRlbS0+ZXhlY3V0ZSgpOwotICAgICAgICB3b3JrSXRlbVF1ZXVl
LnBvcCgpOworICAgICAgICB3b3JrSXRlbVF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICAgfQogfQog
CiB2b2lkIFJ1bkxvb3A6OnNjaGVkdWxlV29yayhzdGQ6OmF1dG9fcHRyPFdvcmtJdGVtPiBpdGVt
KQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICBt
X3dvcmtJdGVtUXVldWUucHVzaChpdGVtLnJlbGVhc2UoKSk7CisgICAgbV93b3JrSXRlbVF1ZXVl
LmFwcGVuZChpdGVtLnJlbGVhc2UoKSk7CiAKICAgICB3YWtlVXAoKTsKIH0KSW5kZXg6IFdlYktp
dDIvUGxhdGZvcm0vUnVuTG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vUnVu
TG9vcC5oCShyZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFJ1bkxvb3BfaAogCiAjaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHF1ZXVlPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBA
IC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3YWtlVXAoKTsKIAogICAgIE11dGV4
IG1fd29ya0l0ZW1RdWV1ZUxvY2s7Ci0gICAgc3RkOjpxdWV1ZTxXb3JrSXRlbSo+IG1fd29ya0l0
ZW1RdWV1ZTsKKyAgICBEZXF1ZTxXb3JrSXRlbSo+IG1fd29ya0l0ZW1RdWV1ZTsKIAogI2lmIFBM
QVRGT1JNKFdJTikKICAgICBzdGF0aWMgYm9vbCByZWdpc3RlclJ1bkxvb3BNZXNzYWdlV2luZG93
Q2xhc3MoKTsKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAkocmV2aXNpb24gNTc0MjEpCisrKyBXZWJL
aXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CiAjZWxp
ZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cXVldWU+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CiAjZW5kaWYKIAogI2luY2x1ZGUgIldvcmtJdGVtLmgiCkBAIC04OCw3ICs4OCw3IEBAIHByaXZh
dGU6CiAgICAgSEFORExFIG1fcGVyZm9ybVdvcmtFdmVudDsKIAogICAgIE11dGV4IG1fd29ya0l0
ZW1RdWV1ZUxvY2s7Ci0gICAgc3RkOjpxdWV1ZTxXb3JrSXRlbSo+IG1fd29ya0l0ZW1RdWV1ZTsK
KyAgICBEZXF1ZTxXb3JrSXRlbSo+IG1fd29ya0l0ZW1RdWV1ZTsKIAogICAgIE11dGV4IG1faGFu
ZGxlc0xvY2s7CiAgICAgSGFzaE1hcDxIQU5ETEUsIFdvcmtJdGVtKj4gbV9oYW5kbGVzOwpJbmRl
eDogV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAJKHJldmlz
aW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50
RGVjb2Rlci5oIgogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBuYW1lc3BhY2UgQ29yZUlQQyB7
CiAKIEFyZ3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZl
ciwgc2l6ZV90IGJ1ZmZlclNpemUpCkBAIC0zNCwxMSArMzIsMTEgQEAgQXJndW1lbnREZWNvZGVy
OjpBcmd1bWVudERlY29kZXIoY29uc3QgdQogICAgIGluaXRpYWxpemUoYnVmZmVyLCBidWZmZXJT
aXplKTsKIH0KIAotQXJndW1lbnREZWNvZGVyOjpBcmd1bWVudERlY29kZXIoY29uc3QgdWludDhf
dCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc3RkOjpxdWV1ZTxBdHRhY2htZW50PiYgYXR0
YWNobWVudHMpCitBcmd1bWVudERlY29kZXI6OkFyZ3VtZW50RGVjb2Rlcihjb25zdCB1aW50OF90
KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBEZXF1ZTxBdHRhY2htZW50PiYgYXR0YWNobWVu
dHMpCiB7CiAgICAgaW5pdGlhbGl6ZShidWZmZXIsIGJ1ZmZlclNpemUpOwotICAgIAotICAgIHN0
ZDo6c3dhcChtX2F0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CisKKyAgICBtX2F0dGFjaG1lbnRz
LnN3YXAoYXR0YWNobWVudHMpOwogfQogCiBBcmd1bWVudERlY29kZXI6On5Bcmd1bWVudERlY29k
ZXIoKQpAQCAtNzcsNyArNzUsNyBAQCBib29sIEFyZ3VtZW50RGVjb2Rlcjo6YWxpZ25CdWZmZXJQ
b3NpdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQXJndW1lbnREZWNvZGVyOjpkZWNv
ZGVCeXRlcyhzdGQ6OnZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQorYm9vbCBBcmd1bWVudERlY29k
ZXI6OmRlY29kZUJ5dGVzKFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogewogICAgIHVpbnQ2NF90
IHNpemU7CiAgICAgaWYgKCFkZWNvZGVVSW50NjQoc2l6ZSkpCkBAIC0xODQsMTEgKzE4MiwxMSBA
QCBib29sIEFyZ3VtZW50RGVjb2Rlcjo6ZGVjb2RlRG91YmxlKGRvdWJsCiAKIGJvb2wgQXJndW1l
bnREZWNvZGVyOjpyZW1vdmVBdHRhY2htZW50KEF0dGFjaG1lbnQmIGF0dGFjaG1lbnQpCiB7Ci0g
ICAgaWYgKG1fYXR0YWNobWVudHMuZW1wdHkoKSkKKyAgICBpZiAobV9hdHRhY2htZW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF0dGFjaG1lbnQgPSBtX2F0dGFj
aG1lbnRzLmZyb250KCk7Ci0gICAgbV9hdHRhY2htZW50cy5wb3AoKTsKKyAgICBhdHRhY2htZW50
ID0gbV9hdHRhY2htZW50cy5maXJzdCgpOworICAgIG1fYXR0YWNobWVudHMucmVtb3ZlRmlyc3Qo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0FyZ3VtZW50RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9Bcmd1bWVudERlY29kZXIuaAkocmV2aXNpb24gNTc0MjEpCisrKyBXZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNyw5
IEBACiAjZGVmaW5lIEFyZ3VtZW50RGVjb2Rlcl9oCiAKICNpbmNsdWRlICJBdHRhY2htZW50Lmgi
Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHF1ZXVlPgotI2luY2x1ZGUgPHZlY3Rvcj4K
KyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIENvcmVJUEMgewogCkBAIC00OSwxMiAr
NDgsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGUoQXJndW1lbgogY2xhc3Mg
QXJndW1lbnREZWNvZGVyIHsKIHB1YmxpYzoKICAgICBBcmd1bWVudERlY29kZXIoY29uc3QgdWlu
dDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7Ci0gICAgQXJndW1lbnREZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHN0ZDo6cXVldWU8QXR0YWNo
bWVudD4mKTsKKyAgICBBcmd1bWVudERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXpl
X3QgYnVmZmVyU2l6ZSwgRGVxdWU8QXR0YWNobWVudD4mKTsKICAgICB+QXJndW1lbnREZWNvZGVy
KCk7CiAKICAgICB1aW50NjRfdCBkZXN0aW5hdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbklEOyB9CiAKLSAgICBib29sIGRlY29kZUJ5dGVzKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+
Jik7CisgICAgYm9vbCBkZWNvZGVCeXRlcyhWZWN0b3I8dWludDhfdD4mKTsKICAgICBib29sIGRl
Y29kZUJ5dGVzKHVpbnQ4X3QqLCBzaXplX3QpOwogCiAgICAgYm9vbCBkZWNvZGVCb29sKGJvb2wm
KTsKQEAgLTk2LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB1aW50OF90KiBtX2J1ZmZlclBvczsK
ICAgICB1aW50OF90KiBtX2J1ZmZlckVuZDsKIAotICAgIHN0ZDo6cXVldWU8QXR0YWNobWVudD4g
bV9hdHRhY2htZW50czsKKyAgICBEZXF1ZTxBdHRhY2htZW50PiBtX2F0dGFjaG1lbnRzOwogfTsK
IAogdGVtcGxhdGU8PiBpbmxpbmUgYm9vbCBBcmd1bWVudERlY29kZXI6OmRlY29kZShib29sJiBu
KQpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAJ
KHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5j
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgPGFs
Z29yaXRobT4KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogbmFtZXNwYWNlIENvcmVJUEMgewog
CiBBcmd1bWVudEVuY29kZXI6OkFyZ3VtZW50RW5jb2Rlcih1aW50NjRfdCBkZXN0aW5hdGlvbklE
KQpAQCAtMTM2LDEzICsxMzQsMTMgQEAgdm9pZCBBcmd1bWVudEVuY29kZXI6OmVuY29kZURvdWJs
ZShkb3VibAogCiB2b2lkIEFyZ3VtZW50RW5jb2Rlcjo6YWRkQXR0YWNobWVudChjb25zdCBBdHRh
Y2htZW50JiBhdHRhY2htZW50KQogewotICAgIG1fYXR0YWNobWVudHMucHVzaF9iYWNrKGF0dGFj
aG1lbnQpOworICAgIG1fYXR0YWNobWVudHMuYXBwZW5kKGF0dGFjaG1lbnQpOwogfQogCi1zdGQ6
Omxpc3Q8QXR0YWNobWVudD4gQXJndW1lbnRFbmNvZGVyOjpyZWxlYXNlQXR0YWNobWVudHMoKQor
VmVjdG9yPEF0dGFjaG1lbnQ+IEFyZ3VtZW50RW5jb2Rlcjo6cmVsZWFzZUF0dGFjaG1lbnRzKCkK
IHsKLSAgICBzdGQ6Omxpc3Q8QXR0YWNobWVudD4gbmV3TGlzdDsKLSAgICBzdGQ6OnN3YXAobmV3
TGlzdCwgbV9hdHRhY2htZW50cyk7CisgICAgVmVjdG9yPEF0dGFjaG1lbnQ+IG5ld0xpc3Q7Cisg
ICAgbmV3TGlzdC5zd2FwKG1fYXR0YWNobWVudHMpOwogICAgIHJldHVybiBuZXdMaXN0OwogfQog
CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5oCShyZXZp
c2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2RlZmluZSBBcmd1bWVudEVuY29k
ZXJfaAogCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgotI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVk
ZSA8d3RmL1R5cGVUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBDb3JlSVBDIHsKIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGJ1ZmZl
clNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclNpemU7IH0KIAogICAgIHZvaWQgYWRkQXR0
YWNobWVudChjb25zdCBBdHRhY2htZW50Jik7Ci0gICAgc3RkOjpsaXN0PEF0dGFjaG1lbnQ+IHJl
bGVhc2VBdHRhY2htZW50cygpOworICAgIFZlY3RvcjxBdHRhY2htZW50PiByZWxlYXNlQXR0YWNo
bWVudHMoKTsKIAogICAgIHZvaWQgZGVidWcoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX2J1ZmZlclNpemU7CiAgICAgc2l6ZV90IG1fYnVmZmVyQ2FwYWNpdHk7
CiAKLSAgICBzdGQ6Omxpc3Q8QXR0YWNobWVudD4gbV9hdHRhY2htZW50czsKKyAgICBWZWN0b3I8
QXR0YWNobWVudD4gbV9hdHRhY2htZW50czsKIH07CiAKIHRlbXBsYXRlPD4gaW5saW5lIHZvaWQg
QXJndW1lbnRFbmNvZGVyOjplbmNvZGUoY29uc3QgYm9vbCYgbikKSW5kZXg6IFdlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw2IEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAKLSNpbmNsdWRlICJBdHRhY2htZW50
LmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIldvcmtJdGVtLmgiCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC05Niw3ICs5NSw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6
c2VuZE1lc3NhZ2UodW5zaWduZWQgbWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fb3V0Z29pbmdNZXNzYWdlc0xvY2spOwotICAgIG1fb3V0Z29pbmdN
ZXNzYWdlcy5wdXNoX2JhY2soT3V0Z29pbmdNZXNzYWdlKG1lc3NhZ2VJRCwgYXJndW1lbnRzKSk7
CisgICAgbV9vdXRnb2luZ01lc3NhZ2VzLmFwcGVuZChPdXRnb2luZ01lc3NhZ2UobWVzc2FnZUlE
LCBhcmd1bWVudHMpKTsKICAgICAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIGJvb2xl
YW4gZmxhZyBzbyB3ZSBkb24ndCBjYWxsIHRoaXMgd2hlbiB3b3JrIGhhcyBhbHJlYWR5IGJlZW4g
c2NoZWR1bGVkLgogICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRlbTo6
Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlcykpOwpAQCAtMTA5
LDE0ICsxMDgsMTQgQEAgc3RkOjphdXRvX3B0cjxBcmd1bWVudERlY29kZXI+IENvbm5lY3Rpbwog
ICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW5jb21pbmdNZXNzYWdlc0xvY2sp
OwogICAgICAgICAKLSAgICAgICAgZm9yIChzdGQ6OmRlcXVlPEluY29taW5nTWVzc2FnZT46Oml0
ZXJhdG9yIGl0ID0gbV9pbmNvbWluZ01lc3NhZ2VzLmJlZ2luKCksIGVuZCA9IG1faW5jb21pbmdN
ZXNzYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGZvciAoRGVxdWU8SW5j
b21pbmdNZXNzYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2luY29taW5nTWVzc2FnZXMuYmVnaW4oKSwg
ZW5kID0gbV9pbmNvbWluZ01lc3NhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIGNvbnN0IEluY29taW5nTWVzc2FnZSYgbWVzc2FnZSA9ICppdDsKICAgICAKICAgICAg
ICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VJRCgpID09IG1lc3NhZ2VJRCAmJiBtZXNzYWdlLmFy
Z3VtZW50cygpLT5kZXN0aW5hdGlvbklEKCkgPT0gZGVzdGluYXRpb25JRCkgewogICAgICAgICAg
ICAgICAgIHN0ZDo6YXV0b19wdHI8QXJndW1lbnREZWNvZGVyPiBhcmd1bWVudHMobWVzc2FnZS5h
cmd1bWVudHMoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRXJhc2Ug
dGhlIGluY29taW5nIG1lc3NhZ2UuCi0gICAgICAgICAgICAgICAgbV9pbmNvbWluZ01lc3NhZ2Vz
LmVyYXNlKGl0KTsKKyAgICAgICAgICAgICAgICBtX2luY29taW5nTWVzc2FnZXMucmVtb3ZlKGl0
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xOTUsNyArMTk0LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21p
bmdNZXNzYWdlKAogICAgIH0KIAogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2luY29taW5nTWVz
c2FnZXNMb2NrKTsKLSAgICBtX2luY29taW5nTWVzc2FnZXMucHVzaF9iYWNrKEluY29taW5nTWVz
c2FnZShtZXNzYWdlSUQsIGFyZ3VtZW50cykpOworICAgIG1faW5jb21pbmdNZXNzYWdlcy5hcHBl
bmQoSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJRCwgYXJndW1lbnRzKSk7CiAKICAgICBtX2NsaWVu
dFJ1bkxvb3AtPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9u
OjpkaXNwYXRjaE1lc3NhZ2VzKSk7CiB9CkBAIC0yMjEsMjkgKzIyMCwyOSBAQCB2b2lkIENvbm5l
Y3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2VzKCkKICAgICBpZiAoIW1faXNDb25uZWN0ZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGRlcXVlPE91dGdvaW5nTWVzc2FnZT4gb3V0Z29pbmdNZXNz
YWdlczsKLSAgICAKKyAgICBEZXF1ZTxPdXRnb2luZ01lc3NhZ2U+IG91dGdvaW5nTWVzc2FnZXM7
CisKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX291dGdvaW5nTWVzc2FnZXNM
b2NrKTsKLSAgICAgICAgc3dhcChtX291dGdvaW5nTWVzc2FnZXMsIG91dGdvaW5nTWVzc2FnZXMp
OworICAgICAgICBtX291dGdvaW5nTWVzc2FnZXMuc3dhcChvdXRnb2luZ01lc3NhZ2VzKTsKICAg
ICB9CiAKICAgICAvLyBTZW5kIG1lc3NhZ2VzLgotICAgIGZvciAoZGVxdWU8T3V0Z29pbmdNZXNz
YWdlPjo6aXRlcmF0b3IgaXQgPSBvdXRnb2luZ01lc3NhZ2VzLmJlZ2luKCksIGVuZCA9IG91dGdv
aW5nTWVzc2FnZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc2VuZE91dGdvaW5n
TWVzc2FnZShpdC0+bWVzc2FnZUlEKCksIGF1dG9fcHRyPEFyZ3VtZW50RW5jb2Rlcj4oaXQtPmFy
Z3VtZW50cygpKSk7CisgICAgZm9yIChEZXF1ZTxPdXRnb2luZ01lc3NhZ2U+OjppdGVyYXRvciBp
dCA9IG91dGdvaW5nTWVzc2FnZXMuYmVnaW4oKSwgZW5kID0gb3V0Z29pbmdNZXNzYWdlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBzZW5kT3V0Z29pbmdNZXNzYWdlKGl0LT5tZXNz
YWdlSUQoKSwgc3RkOjphdXRvX3B0cjxBcmd1bWVudEVuY29kZXI+KGl0LT5hcmd1bWVudHMoKSkp
OwogfQogCiB2b2lkIENvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZXMoKQogewotICAgIGRlcXVl
PEluY29taW5nTWVzc2FnZT4gaW5jb21pbmdNZXNzYWdlczsKKyAgICBEZXF1ZTxJbmNvbWluZ01l
c3NhZ2U+IGluY29taW5nTWVzc2FnZXM7CiAgICAgCiAgICAgewogICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7Ci0gICAgICAgIHN3YXAobV9pbmNvbWlu
Z01lc3NhZ2VzLCBpbmNvbWluZ01lc3NhZ2VzKTsKKyAgICAgICAgbV9pbmNvbWluZ01lc3NhZ2Vz
LnN3YXAoaW5jb21pbmdNZXNzYWdlcyk7CiAgICAgfQogCiAgICAgLy8gRGlzcGF0Y2ggbWVzc2Fn
ZXMuCi0gICAgZm9yIChkZXF1ZTxJbmNvbWluZ01lc3NhZ2U+OjppdGVyYXRvciBpdCA9IGluY29t
aW5nTWVzc2FnZXMuYmVnaW4oKSwgZW5kID0gaW5jb21pbmdNZXNzYWdlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgZm9yIChEZXF1ZTxJbmNvbWluZ01lc3NhZ2U+OjppdGVyYXRvciBp
dCA9IGluY29taW5nTWVzc2FnZXMuYmVnaW4oKSwgZW5kID0gaW5jb21pbmdNZXNzYWdlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEluY29taW5nTWVzc2FnZSYgbWVzc2FnZSA9
ICppdDsKICAgICAgICAgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMgPSBtZXNzYWdlLmFyZ3Vt
ZW50cygpOwogCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJKHJldmlz
aW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1ZGUgPGRl
cXVlPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0xMzIsNyArMTMxLDcgQEAgcHJpdmF0ZToKICAgICB9
OwogCiAgICAgTXV0ZXggbV9pbmNvbWluZ01lc3NhZ2VzTG9jazsKLSAgICBzdGQ6OmRlcXVlPElu
Y29taW5nTWVzc2FnZT4gbV9pbmNvbWluZ01lc3NhZ2VzOworICAgIERlcXVlPEluY29taW5nTWVz
c2FnZT4gbV9pbmNvbWluZ01lc3NhZ2VzOwogCiAgICAgLy8gT3V0Z29pbmcgbWVzc2FnZXMuCiAg
ICAgY2xhc3MgT3V0Z29pbmdNZXNzYWdlIHsKQEAgLTE1Nyw3ICsxNTYsNyBAQCBwcml2YXRlOgog
ICAgIH07CiAgICAgCiAgICAgTXV0ZXggbV9vdXRnb2luZ01lc3NhZ2VzTG9jazsKLSAgICBzdGQ6
OmRlcXVlPE91dGdvaW5nTWVzc2FnZT4gbV9vdXRnb2luZ01lc3NhZ2VzOworICAgIERlcXVlPE91
dGdvaW5nTWVzc2FnZT4gbV9vdXRnb2luZ01lc3NhZ2VzOwogICAgIAogICAgIFRocmVhZENvbmRp
dGlvbiBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uOwogICAgIE11dGV4IG1fd2FpdEZvck1lc3Nh
Z2VNdXRleDsKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9tYWMvQ29ubmVjdGlvbk1h
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0
aW9uTWFjLmNwcAkocmV2aXNpb24gNTc0MjEpCisrKyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
bWFjL0Nvbm5lY3Rpb25NYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTIgKzEyMiwxMiBA
QCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYWNoTWVzc2FnZVNpemUoc2l6CiAKIHZvaWQgQ29ubmVj
dGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSh1bnNpZ25lZCBtZXNzYWdlSUQsIGF1dG9fcHRyPEFy
Z3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQogewotICAgIHN0ZDo6bGlzdDxBdHRhY2htZW50PiBh
dHRhY2htZW50cyA9IGFyZ3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgVmVjdG9y
PEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzID0gYXJndW1lbnRzLT5yZWxlYXNlQXR0YWNobWVudHMo
KTsKICAgICAKICAgICBzaXplX3QgbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgPSAwOwogICAgIHNp
emVfdCBudW1iZXJPZk9PTE1lbW9yeURlc2NyaXB0b3JzID0gMDsKLSAgICBmb3IgKHN0ZDo6bGlz
dDxBdHRhY2htZW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhdHRhY2htZW50cy5iZWdpbigpLCBl
bmQgPSBhdHRhY2htZW50cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEF0dGFj
aG1lbnQ6OlR5cGUgdHlwZSA9ICgoQXR0YWNobWVudCkqaXQpLnR5cGUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEF0dGFj
aG1lbnQ6OlR5cGUgdHlwZSA9IGF0dGFjaG1lbnRzW2ldLnR5cGUoKTsKICAgICAgICAgaWYgKHR5
cGUgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBlKQogICAgICAgICAgICAgbnVtYmVyT2ZQb3J0
RGVzY3JpcHRvcnMrKzsKICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBBdHRhY2htZW50OjpNYWNo
T09MTWVtb3J5VHlwZSkKQEAgLTE1OSw4ICsxNTksOCBAQCB2b2lkIENvbm5lY3Rpb246OnNlbmRP
dXRnb2luZ01lc3NhZ2UodW5zCiAgICAgICAgIGJvZHktPm1zZ2hfZGVzY3JpcHRvcl9jb3VudCA9
IG51bWJlck9mUG9ydERlc2NyaXB0b3JzICsgbnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9yczsK
IAogICAgICAgICB1aW50OF90KiBkZXNjcmlwdG9yRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KGJvZHkgKyAxKTsKLSAgICAgICAgZm9yIChzdGQ6Omxpc3Q8QXR0YWNobWVudD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gYXR0YWNobWVudHMuYmVnaW4oKSwgZW5kID0gYXR0YWNobWVudHMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQXR0YWNobWVudCBhdHRhY2ht
ZW50ID0gKml0OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBBdHRhY2htZW50IGF0dGFjaG1lbnQgPSBhdHRhY2ht
ZW50c1tpXTsKIAogICAgICAgICAgICAgbWFjaF9tc2dfZGVzY3JpcHRvcl90KiBkZXNjcmlwdG9y
ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3QqPihkZXNjcmlwdG9yRGF0
YSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQudHlwZSgpKSB7CkBAIC0yMjIsMTkg
KzIyMiwxOSBAQCBzdGF0aWMgYXV0b19wdHI8QXJndW1lbnREZWNvZGVyPiBjcmVhdGVBCiAgICAg
QVNTRVJUKG51bURlc2NyaXB0b3JzKTsKIAogICAgIC8vIEJ1aWxkIGF0dGFjaG1lbnQgbGlzdAot
ICAgIHN0ZDo6cXVldWU8QXR0YWNobWVudD4gYXR0YWNobWVudHM7CisgICAgRGVxdWU8QXR0YWNo
bWVudD4gYXR0YWNobWVudHM7CiAgICAgdWludDhfdCogZGVzY3JpcHRvckRhdGEgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsgMSk7CiAgICAgZm9yIChtYWNoX21zZ19zaXplX3Qg
aSA9IDA7IGkgPCBudW1EZXNjcmlwdG9yczsgKytpKSB7CiAgICAgICAgIG1hY2hfbXNnX2Rlc2Ny
aXB0b3JfdCogZGVzY3JpcHRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRv
cl90Kj4oZGVzY3JpcHRvckRhdGEpOwogCiAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci0+dHlw
ZS50eXBlKSB7CiAgICAgICAgIGNhc2UgTUFDSF9NU0dfUE9SVF9ERVNDUklQVE9SOgotICAgICAg
ICAgICAgYXR0YWNobWVudHMucHVzaChBdHRhY2htZW50KGRlc2NyaXB0b3ItPnBvcnQubmFtZSwg
ZGVzY3JpcHRvci0+cG9ydC5kaXNwb3NpdGlvbikpOworICAgICAgICAgICAgYXR0YWNobWVudHMu
YXBwZW5kKEF0dGFjaG1lbnQoZGVzY3JpcHRvci0+cG9ydC5uYW1lLCBkZXNjcmlwdG9yLT5wb3J0
LmRpc3Bvc2l0aW9uKSk7CiAgICAgICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2YobWFj
aF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTUFDSF9NU0dfT09MX0RFU0NSSVBUT1I6Ci0gICAgICAgICAgICBhdHRhY2htZW50cy5wdXNo
KEF0dGFjaG1lbnQoZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuYWRkcmVzcywgZGVzY3JpcHRvci0+
b3V0X29mX2xpbmUuc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5jb3B5LCBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5k
ZWFsbG9jYXRlKSk7CisgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQoQXR0YWNobWVudChk
ZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5hZGRyZXNzLCBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5z
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci0+b3V0X29mX2xpbmUuY29weSwgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuZGVhbGxvY2F0ZSkp
OwogICAgICAgICAgICAgZGVzY3JpcHRvckRhdGEgKz0gc2l6ZW9mKG1hY2hfbXNnX29vbF9kZXNj
cmlwdG9yX3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBX
ZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAJKHJldmlzaW9uIDU3NDIxKQorKysgV2Vi
S2l0Mi9QbGF0Zm9ybS93aW4vV29ya1F1ZXVlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTIgKzI1LDkgQEAKIAogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogCi0jaW5jbHVkZSA8YXNzZXJ0
Lmg+CiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVySGFuZGxlKEhB
TkRMRSBoYW5kbGUsIHN0ZDo6YXV0b19wdHI8V29ya0l0ZW0+IGl0ZW0pCiB7CiAgICAgLy8gQWRk
IHRoZSBpdGVtLgpAQCAtMTA4LDcgKzEwNSw3IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQogdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29yayhzdGQ6OmF1dG9fcHRyPFdv
cmtJdGVtPiBpdGVtKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVM
b2NrKTsKLSAgICBtX3dvcmtJdGVtUXVldWUucHVzaChpdGVtLnJlbGVhc2UoKSk7CisgICAgbV93
b3JrSXRlbVF1ZXVlLmFwcGVuZChpdGVtLnJlbGVhc2UoKSk7CiAKICAgICAvLyBTZXQgdGhlIHdv
cmsgZXZlbnQuCiAgICAgOjpTZXRFdmVudChtX3BlcmZvcm1Xb3JrRXZlbnQpOwpAQCAtMTE2LDE5
ICsxMTMsMTkgQEAgdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29yayhzdGQ6OmF1dG9fcAogCiB2
b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQogewotICAgIHN0ZDo6cXVldWU8V29ya0l0ZW0q
PiB3b3JrSXRlbVF1ZXVlOworICAgIERlcXVlPFdvcmtJdGVtKj4gd29ya0l0ZW1RdWV1ZTsKICAg
ICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAg
ICAgICAgc3dhcChtX3dvcmtJdGVtUXVldWUsIHdvcmtJdGVtUXVldWUpOworICAgICAgICBtX3dv
cmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIXdv
cmtJdGVtUXVldWUuZW1wdHkoKSkgewotICAgICAgICBzdGQ6OmF1dG9fcHRyPFdvcmtJdGVtPiBp
dGVtKHdvcmtJdGVtUXVldWUuZnJvbnQoKSk7CisgICAgd2hpbGUgKCF3b3JrSXRlbVF1ZXVlLmlz
RW1wdHkoKSkgeworICAgICAgICBzdGQ6OmF1dG9fcHRyPFdvcmtJdGVtPiBpdGVtKHdvcmtJdGVt
UXVldWUuZmlyc3QoKSk7CiAKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11
dGV4KTsKICAgICAgICAgaWYgKG1faXNWYWxpZCkKICAgICAgICAgICAgIGl0ZW0tPmV4ZWN1dGUo
KTsKIAotICAgICAgICB3b3JrSXRlbVF1ZXVlLnBvcCgpOworICAgICAgICB3b3JrSXRlbVF1ZXVl
LnJlbW92ZUZpcnN0KCk7CiAgICAgfQogfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvTm90SW1wbGVt
ZW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Ob3RJbXBsZW1lbnRlZC5oCShy
ZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIvU2hhcmVkL05vdEltcGxlbWVudGVkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDkgQEAKICNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSAoKHZv
aWQpMCkKICNlbHNlCiAKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSAoKHZvaWQpMCkKKworLyoK
ICNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IFwKIHN0YXRpYyBib29sIGhhdmVQcmludGVk
ID0gZmFsc2U7IFwKIGlmICghaGF2ZVByaW50ZWQpIHsgXApAQCAtNDAsNiArNDMsNyBAQCBwcmlu
dGYoIlVOSU1QTEVNRU5URUQ6ICVzOiAlZCAtICVzXG4iLCBfCiBoYXZlUHJpbnRlZCA9IHRydWU7
IFwKIH0gXAogfSB3aGlsZSAoMCkKKyovCiAKICNlbmRpZiAvLyBOREVCVUcKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53074</attachid>
            <date>2010-04-10 22:15:31 -0700</date>
            <delta_ts>2010-04-11 13:14:20 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>updated.diff</filename>
            <type>text/plain</type>
            <size>20063</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzQzMykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMDQtMTAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzM5OQorICAgICAgICBS
ZW1vdmUgdXNlIG9mIFNUTCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDb3JlSVBDIGNvZGUKKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNvZGVyKToKKyAgICAgICAgKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2Rlcjo6ZGVjb2RlQnl0ZXMpOgorICAgICAgICAoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyOjpyZW1vdmVBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RGVjb2Rlci5oOgorICAgICAgICBVc2UgV1RGOjpEZXF1ZSBpbnN0ZWFkIG9m
IHN0ZDo6cXVldWUgYW5kIFdURjo6VmVjdG9yCisgICAgICAgIGluc3RlYWQgb2Ygc3RkOjp2ZWN0
b3IuIFJlcGxhY2UgdXNlIG9mIG1hbGxvYy9mcmVlIHdpdGggCisgICAgICAgIGZhc3RNYWxsb2Mv
ZmFzdEZyZWUuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5j
cHA6CisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI6OmFkZEF0dGFjaG1lbnQpOgor
ICAgICAgICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpyZWxlYXNlQXR0YWNobWVudHMpOgor
ICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmg6CisgICAgICAgIFVz
ZSBXVEY6OlZlY3RvciBpbnN0ZWFkIG9mIHN0ZDo6bGlzdC4gUmVwbGFjZSB1c2Ugb2YgbWFsbG9j
L2ZyZWUKKyAgICAgICAgd2l0aCBmYXN0TWFsbG9jL2Zhc3RGcmVlLgorCisgICAgICAgICogUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rp
b246OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JN
ZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01l
c3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2Fn
ZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlcyk6Cisg
ICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmg6CisgICAgICAgICogUGxhdGZv
cm0vQ29yZUlQQy9tYWMvQ29ubmVjdGlvbk1hYy5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25u
ZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OmNyZWF0ZUFy
Z3VtZW50RGVjb2Rlcik6CisgICAgICAgIFVzZSBXVEY6OlZlY3RvciBpbnN0ZWFkIG9mIHN0ZDo6
cXVldWUuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9SdW5Mb29wLmNwcDoKKyAgICAgICAgKFJ1bkxv
b3A6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFJ1bkxvb3A6OnNjaGVkdWxlV29yayk6CisgICAg
ICAgICogUGxhdGZvcm0vUnVuTG9vcC5oOgorICAgICAgICBVc2UgV1RGOjpEZXF1ZSBpbnN0ZWFk
IG9mIHN0ZDo6cXVldWUuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Xb3JrUXVldWUuaDoKKyAgICAg
ICAgKiBQbGF0Zm9ybS93aW4vV29ya1F1ZXVlV2luLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6
c2NoZWR1bGVXb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmspOgorICAgICAg
ICBEaXR0by4KKwogMjAxMC0wNC0xMCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBhbiBvYnZpb3VzbHkgaW5jb3JyZWN0IHBhcnQgb2YgdGhlIFhjb2RlIGNvbmZp
Z3VyYXRpb24gY2xlYW51cCB0aGF0IHJlc3VsdGVkIGluIGRlYnVnIGJ1aWxkcwpJbmRleDogV2Vi
S2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3Jt
L1J1bkxvb3AuY3BwCShyZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vUnVuTG9v
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgIldvcmtJ
dGVtLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KIHN0YXRpYyBSdW5Mb29wKiBzX21haW5S
dW5Mb29wOwogCiB2b2lkIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpCkBAIC00Niwy
MyArNDQsMjMgQEAgUnVuTG9vcCogUnVuTG9vcDo6bWFpblJ1bkxvb3AoKQogCiB2b2lkIFJ1bkxv
b3A6OnBlcmZvcm1Xb3JrKCkKIHsKLSAgICBxdWV1ZTxXb3JrSXRlbSo+IHdvcmtJdGVtUXVldWU7
CisgICAgRGVxdWU8V29ya0l0ZW0qPiB3b3JrSXRlbVF1ZXVlOwogICAgIHsKICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBzd2FwKG1fd29y
a0l0ZW1RdWV1ZSwgd29ya0l0ZW1RdWV1ZSk7CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2Fw
KHdvcmtJdGVtUXVldWUpOwogICAgIH0KIAotICAgIHdoaWxlICghd29ya0l0ZW1RdWV1ZS5lbXB0
eSgpKSB7Ci0gICAgICAgIGF1dG9fcHRyPFdvcmtJdGVtPiBpdGVtKHdvcmtJdGVtUXVldWUuZnJv
bnQoKSk7CisgICAgd2hpbGUgKCF3b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBz
dGQ6OmF1dG9fcHRyPFdvcmtJdGVtPiBpdGVtKHdvcmtJdGVtUXVldWUuZmlyc3QoKSk7CiAgICAg
ICAgIGl0ZW0tPmV4ZWN1dGUoKTsKLSAgICAgICAgd29ya0l0ZW1RdWV1ZS5wb3AoKTsKKyAgICAg
ICAgd29ya0l0ZW1RdWV1ZS5yZW1vdmVGaXJzdCgpOwogICAgIH0KIH0KIAogdm9pZCBSdW5Mb29w
OjpzY2hlZHVsZVdvcmsoc3RkOjphdXRvX3B0cjxXb3JrSXRlbT4gaXRlbSkKIHsKICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgbV93b3JrSXRlbVF1ZXVl
LnB1c2goaXRlbS5yZWxlYXNlKCkpOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbS5y
ZWxlYXNlKCkpOwogCiAgICAgd2FrZVVwKCk7CiB9CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1J1
bkxvb3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAkocmV2aXNp
b24gNTc0MjEpCisrKyBXZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBSdW5Mb29wX2gKIAogI2luY2x1ZGUgPG1lbW9yeT4K
LSNpbmNsdWRlIDxxdWV1ZT4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtOTksNyArOTksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgd2FrZVVwKCk7CiAKICAgICBNdXRleCBtX3dvcmtJdGVtUXVl
dWVMb2NrOwotICAgIHN0ZDo6cXVldWU8V29ya0l0ZW0qPiBtX3dvcmtJdGVtUXVldWU7CisgICAg
RGVxdWU8V29ya0l0ZW0qPiBtX3dvcmtJdGVtUXVldWU7CiAKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJSdW5Mb29wTWVzc2FnZVdpbmRvd0NsYXNzKCk7CkluZGV4
OiBXZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxh
dGZvcm0vV29ya1F1ZXVlLmgJKHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9X
b3JrUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIFBMQVRGT1JN
KE1BQykKICNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2VsaWYgUExBVEZPUk0oV0lO
KQotI2luY2x1ZGUgPHF1ZXVlPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2VuZGlmCiAKICNp
bmNsdWRlICJXb3JrSXRlbS5oIgpAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIEhBTkRM
RSBtX3BlcmZvcm1Xb3JrRXZlbnQ7CiAKICAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwot
ICAgIHN0ZDo6cXVldWU8V29ya0l0ZW0qPiBtX3dvcmtJdGVtUXVldWU7CisgICAgRGVxdWU8V29y
a0l0ZW0qPiBtX3dvcmtJdGVtUXVldWU7CiAKICAgICBNdXRleCBtX2hhbmRsZXNMb2NrOwogICAg
IEhhc2hNYXA8SEFORExFLCBXb3JrSXRlbSo+IG1faGFuZGxlczsKSW5kZXg6IFdlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCShyZXZpc2lvbiA1NzQyMSkKKysr
IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKIAot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogbmFtZXNwYWNlIENvcmVJUEMgewogCiBBcmd1bWVudERl
Y29kZXI6OkFyZ3VtZW50RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZm
ZXJTaXplKQpAQCAtMzQsMjMgKzMyLDIzIEBAIEFyZ3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNv
ZGVyKGNvbnN0IHUKICAgICBpbml0aWFsaXplKGJ1ZmZlciwgYnVmZmVyU2l6ZSk7CiB9CiAKLUFy
Z3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUsIHN0ZDo6cXVldWU8QXR0YWNobWVudD4mIGF0dGFjaG1lbnRzKQorQXJn
dW1lbnREZWNvZGVyOjpBcmd1bWVudERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXpl
X3QgYnVmZmVyU2l6ZSwgRGVxdWU8QXR0YWNobWVudD4mIGF0dGFjaG1lbnRzKQogewogICAgIGlu
aXRpYWxpemUoYnVmZmVyLCBidWZmZXJTaXplKTsKLSAgICAKLSAgICBzdGQ6OnN3YXAobV9hdHRh
Y2htZW50cywgYXR0YWNobWVudHMpOworCisgICAgbV9hdHRhY2htZW50cy5zd2FwKGF0dGFjaG1l
bnRzKTsKIH0KIAogQXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAgICBB
U1NFUlQobV9idWZmZXIpOwotICAgIGZyZWUobV9idWZmZXIpOworICAgIGZhc3RGcmVlKG1fYnVm
ZmVyKTsKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNwb3NlIG9mIHRoZSBtYWNoIHBvcnRz
IGluIGNhc2VzIG9mIGZhaWx1cmUuCiB9CiAKIHZvaWQgQXJndW1lbnREZWNvZGVyOjppbml0aWFs
aXplKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiB7Ci0gICAgbV9i
dWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFsbG9jKGJ1ZmZlclNpemUpKTsKKyAgICBt
X2J1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsK
ICAgICBtX2J1ZmZlclBvcyA9IG1fYnVmZmVyOwogICAgIG1fYnVmZmVyRW5kID0gbV9idWZmZXIg
KyBidWZmZXJTaXplOwogICAgIG1lbWNweShtX2J1ZmZlciwgYnVmZmVyLCBidWZmZXJTaXplKTsK
QEAgLTc3LDcgKzc1LDcgQEAgYm9vbCBBcmd1bWVudERlY29kZXI6OmFsaWduQnVmZmVyUG9zaXRp
bwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFyZ3VtZW50RGVjb2Rlcjo6ZGVjb2RlQnl0
ZXMoc3RkOjp2ZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKK2Jvb2wgQXJndW1lbnREZWNvZGVyOjpk
ZWNvZGVCeXRlcyhWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKIHsKICAgICB1aW50NjRfdCBzaXpl
OwogICAgIGlmICghZGVjb2RlVUludDY0KHNpemUpKQpAQCAtMTg0LDExICsxODIsMTEgQEAgYm9v
bCBBcmd1bWVudERlY29kZXI6OmRlY29kZURvdWJsZShkb3VibAogCiBib29sIEFyZ3VtZW50RGVj
b2Rlcjo6cmVtb3ZlQXR0YWNobWVudChBdHRhY2htZW50JiBhdHRhY2htZW50KQogewotICAgIGlm
IChtX2F0dGFjaG1lbnRzLmVtcHR5KCkpCisgICAgaWYgKG1fYXR0YWNobWVudHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdHRhY2htZW50ID0gbV9hdHRhY2htZW50
cy5mcm9udCgpOwotICAgIG1fYXR0YWNobWVudHMucG9wKCk7CisgICAgYXR0YWNobWVudCA9IG1f
YXR0YWNobWVudHMuZmlyc3QoKTsKKyAgICBtX2F0dGFjaG1lbnRzLnJlbW92ZUZpcnN0KCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1
bWVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnREZWNvZGVyLmgJKHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsOSBAQAog
I2RlZmluZSBBcmd1bWVudERlY29kZXJfaAogCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxxdWV1ZT4KLSNpbmNsdWRlIDx2ZWN0b3I+CisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIApAQCAtNDksMTIgKzQ4LDEy
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgZGVjb2RlKEFyZ3VtZW4KIGNsYXNzIEFyZ3Vt
ZW50RGVjb2RlciB7CiBwdWJsaWM6CiAgICAgQXJndW1lbnREZWNvZGVyKGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwotICAgIEFyZ3VtZW50RGVjb2Rlcihjb25zdCB1
aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzdGQ6OnF1ZXVlPEF0dGFjaG1lbnQ+
Jik7CisgICAgQXJndW1lbnREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1
ZmZlclNpemUsIERlcXVlPEF0dGFjaG1lbnQ+Jik7CiAgICAgfkFyZ3VtZW50RGVjb2RlcigpOwog
CiAgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b25JRDsgfQogCi0gICAgYm9vbCBkZWNvZGVCeXRlcyhzdGQ6OnZlY3Rvcjx1aW50OF90PiYpOwor
ICAgIGJvb2wgZGVjb2RlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+Jik7CiAgICAgYm9vbCBkZWNvZGVC
eXRlcyh1aW50OF90Kiwgc2l6ZV90KTsKIAogICAgIGJvb2wgZGVjb2RlQm9vbChib29sJik7CkBA
IC05Niw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgdWludDhfdCogbV9idWZmZXJQb3M7CiAgICAg
dWludDhfdCogbV9idWZmZXJFbmQ7CiAKLSAgICBzdGQ6OnF1ZXVlPEF0dGFjaG1lbnQ+IG1fYXR0
YWNobWVudHM7CisgICAgRGVxdWU8QXR0YWNobWVudD4gbV9hdHRhY2htZW50czsKIH07CiAKIHRl
bXBsYXRlPD4gaW5saW5lIGJvb2wgQXJndW1lbnREZWNvZGVyOjpkZWNvZGUoYm9vbCYgbikKSW5k
ZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCShyZXZp
c2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRlIDxhbGdvcml0
aG0+CiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogQXJn
dW1lbnRFbmNvZGVyOjpBcmd1bWVudEVuY29kZXIodWludDY0X3QgZGVzdGluYXRpb25JRCkKQEAg
LTQ0LDcgKzQyLDcgQEAgQXJndW1lbnRFbmNvZGVyOjpBcmd1bWVudEVuY29kZXIodWludDY0Xwog
QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKCkKIHsKICAgICBpZiAobV9idWZmZXIp
Ci0gICAgICAgIGZyZWUobV9idWZmZXIpOworICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CiAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgYXR0YWNobWVudHMgaW4gY2Fz
ZXMgb2YgZmFpbHVyZS4KIH0KIApAQCAtNjAsOSArNTgsOSBAQCB1aW50OF90KiBBcmd1bWVudEVu
Y29kZXI6Omdyb3codW5zaWduZWQgCiAgICAgaWYgKGFsaWduZWRTaXplICsgc2l6ZSA+IG1fYnVm
ZmVyQ2FwYWNpdHkpIHsKICAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gc3RkOjptYXgoYWxp
Z25lZFNpemUgKyBzaXplLCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KDMyKSwgbV9idWZm
ZXJDYXBhY2l0eSArIG1fYnVmZmVyQ2FwYWNpdHkgLyA0ICsgMSkpOwogICAgICAgICBpZiAoIW1f
YnVmZmVyKQotICAgICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFs
bG9jKG5ld0NhcGFjaXR5KSk7CisgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihmYXN0TWFsbG9jKG5ld0NhcGFjaXR5KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHJlYWxsb2MobV9idWZmZXIsIG5l
d0NhcGFjaXR5KSk7CisgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbmV3Q2FwYWNpdHkpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBpZiBhbGxvY2F0aW5nIG1lbW9yeSBmYWlscz8K
IApAQCAtMTM2LDEzICsxMzQsMTMgQEAgdm9pZCBBcmd1bWVudEVuY29kZXI6OmVuY29kZURvdWJs
ZShkb3VibAogCiB2b2lkIEFyZ3VtZW50RW5jb2Rlcjo6YWRkQXR0YWNobWVudChjb25zdCBBdHRh
Y2htZW50JiBhdHRhY2htZW50KQogewotICAgIG1fYXR0YWNobWVudHMucHVzaF9iYWNrKGF0dGFj
aG1lbnQpOworICAgIG1fYXR0YWNobWVudHMuYXBwZW5kKGF0dGFjaG1lbnQpOwogfQogCi1zdGQ6
Omxpc3Q8QXR0YWNobWVudD4gQXJndW1lbnRFbmNvZGVyOjpyZWxlYXNlQXR0YWNobWVudHMoKQor
VmVjdG9yPEF0dGFjaG1lbnQ+IEFyZ3VtZW50RW5jb2Rlcjo6cmVsZWFzZUF0dGFjaG1lbnRzKCkK
IHsKLSAgICBzdGQ6Omxpc3Q8QXR0YWNobWVudD4gbmV3TGlzdDsKLSAgICBzdGQ6OnN3YXAobmV3
TGlzdCwgbV9hdHRhY2htZW50cyk7CisgICAgVmVjdG9yPEF0dGFjaG1lbnQ+IG5ld0xpc3Q7Cisg
ICAgbmV3TGlzdC5zd2FwKG1fYXR0YWNobWVudHMpOwogICAgIHJldHVybiBuZXdMaXN0OwogfQog
CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5oCShyZXZp
c2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2RlZmluZSBBcmd1bWVudEVuY29k
ZXJfaAogCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgotI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVk
ZSA8d3RmL1R5cGVUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBDb3JlSVBDIHsKIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGJ1ZmZl
clNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclNpemU7IH0KIAogICAgIHZvaWQgYWRkQXR0
YWNobWVudChjb25zdCBBdHRhY2htZW50Jik7Ci0gICAgc3RkOjpsaXN0PEF0dGFjaG1lbnQ+IHJl
bGVhc2VBdHRhY2htZW50cygpOworICAgIFZlY3RvcjxBdHRhY2htZW50PiByZWxlYXNlQXR0YWNo
bWVudHMoKTsKIAogICAgIHZvaWQgZGVidWcoKTsKIApAQCAtODEsNyArODEsNyBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX2J1ZmZlclNpemU7CiAgICAgc2l6ZV90IG1fYnVmZmVyQ2FwYWNpdHk7
CiAKLSAgICBzdGQ6Omxpc3Q8QXR0YWNobWVudD4gbV9hdHRhY2htZW50czsKKyAgICBWZWN0b3I8
QXR0YWNobWVudD4gbV9hdHRhY2htZW50czsKIH07CiAKIHRlbXBsYXRlPD4gaW5saW5lIHZvaWQg
QXJndW1lbnRFbmNvZGVyOjplbmNvZGUoY29uc3QgYm9vbCYgbikKSW5kZXg6IFdlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw2IEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAKLSNpbmNsdWRlICJBdHRhY2htZW50
LmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIldvcmtJdGVtLmgiCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC05Niw3ICs5NSw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6
c2VuZE1lc3NhZ2UodW5zaWduZWQgbWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fb3V0Z29pbmdNZXNzYWdlc0xvY2spOwotICAgIG1fb3V0Z29pbmdN
ZXNzYWdlcy5wdXNoX2JhY2soT3V0Z29pbmdNZXNzYWdlKG1lc3NhZ2VJRCwgYXJndW1lbnRzKSk7
CisgICAgbV9vdXRnb2luZ01lc3NhZ2VzLmFwcGVuZChPdXRnb2luZ01lc3NhZ2UobWVzc2FnZUlE
LCBhcmd1bWVudHMpKTsKICAgICAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIGJvb2xl
YW4gZmxhZyBzbyB3ZSBkb24ndCBjYWxsIHRoaXMgd2hlbiB3b3JrIGhhcyBhbHJlYWR5IGJlZW4g
c2NoZWR1bGVkLgogICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRlbTo6
Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlcykpOwpAQCAtMTA4
LDE1ICsxMDcsMTUgQEAgc3RkOjphdXRvX3B0cjxBcmd1bWVudERlY29kZXI+IENvbm5lY3Rpbwog
ICAgIC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIG1lc3NhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgaW5j
b21pbmcgbWVzc2FnZXMgcXVldWUuCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHN0ZDo6ZGVx
dWU8SW5jb21pbmdNZXNzYWdlPjo6aXRlcmF0b3IgaXQgPSBtX2luY29taW5nTWVzc2FnZXMuYmVn
aW4oKSwgZW5kID0gbV9pbmNvbWluZ01lc3NhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIGNvbnN0IEluY29taW5nTWVzc2FnZSYgbWVzc2FnZSA9ICppdDsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5jb21pbmdNZXNzYWdlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgY29uc3QgSW5jb21pbmdNZXNzYWdlJiBtZXNzYWdlID0gbV9pbmNv
bWluZ01lc3NhZ2VzW2ldOwogICAgIAogICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZUlE
KCkgPT0gbWVzc2FnZUlEICYmIG1lc3NhZ2UuYXJndW1lbnRzKCktPmRlc3RpbmF0aW9uSUQoKSA9
PSBkZXN0aW5hdGlvbklEKSB7CiAgICAgICAgICAgICAgICAgc3RkOjphdXRvX3B0cjxBcmd1bWVu
dERlY29kZXI+IGFyZ3VtZW50cyhtZXNzYWdlLmFyZ3VtZW50cygpKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBFcmFzZSB0aGUgaW5jb21pbmcgbWVzc2FnZS4KLSAgICAg
ICAgICAgICAgICBtX2luY29taW5nTWVzc2FnZXMuZXJhc2UoaXQpOworICAgICAgICAgICAgICAg
IG1faW5jb21pbmdNZXNzYWdlcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50czsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk1LDcgKzE5NCw3IEBAIHZv
aWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSgKICAgICB9CiAKICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7Ci0gICAgbV9pbmNvbWluZ01l
c3NhZ2VzLnB1c2hfYmFjayhJbmNvbWluZ01lc3NhZ2UobWVzc2FnZUlELCBhcmd1bWVudHMpKTsK
KyAgICBtX2luY29taW5nTWVzc2FnZXMuYXBwZW5kKEluY29taW5nTWVzc2FnZShtZXNzYWdlSUQs
IGFyZ3VtZW50cykpOwogCiAgICAgbV9jbGllbnRSdW5Mb29wLT5zY2hlZHVsZVdvcmsoV29ya0l0
ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlcykpOwogfQpAQCAt
MjIxLDMwICsyMjAsMzAgQEAgdm9pZCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlcygp
CiAgICAgaWYgKCFtX2lzQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZXF1ZTxP
dXRnb2luZ01lc3NhZ2U+IG91dGdvaW5nTWVzc2FnZXM7Ci0gICAgCisgICAgVmVjdG9yPE91dGdv
aW5nTWVzc2FnZT4gb3V0Z29pbmdNZXNzYWdlczsKKwogICAgIHsKICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fb3V0Z29pbmdNZXNzYWdlc0xvY2spOwotICAgICAgICBzd2FwKG1fb3V0Z29p
bmdNZXNzYWdlcywgb3V0Z29pbmdNZXNzYWdlcyk7CisgICAgICAgIG1fb3V0Z29pbmdNZXNzYWdl
cy5zd2FwKG91dGdvaW5nTWVzc2FnZXMpOwogICAgIH0KIAogICAgIC8vIFNlbmQgbWVzc2FnZXMu
Ci0gICAgZm9yIChkZXF1ZTxPdXRnb2luZ01lc3NhZ2U+OjppdGVyYXRvciBpdCA9IG91dGdvaW5n
TWVzc2FnZXMuYmVnaW4oKSwgZW5kID0gb3V0Z29pbmdNZXNzYWdlcy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBzZW5kT3V0Z29pbmdNZXNzYWdlKGl0LT5tZXNzYWdlSUQoKSwgYXV0
b19wdHI8QXJndW1lbnRFbmNvZGVyPihpdC0+YXJndW1lbnRzKCkpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG91dGdvaW5nTWVzc2FnZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHNlbmRP
dXRnb2luZ01lc3NhZ2Uob3V0Z29pbmdNZXNzYWdlc1tpXS5tZXNzYWdlSUQoKSwgc3RkOjphdXRv
X3B0cjxBcmd1bWVudEVuY29kZXI+KG91dGdvaW5nTWVzc2FnZXNbaV0uYXJndW1lbnRzKCkpKTsK
IH0KIAogdm9pZCBDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2VzKCkKIHsKLSAgICBkZXF1ZTxJ
bmNvbWluZ01lc3NhZ2U+IGluY29taW5nTWVzc2FnZXM7CisgICAgVmVjdG9yPEluY29taW5nTWVz
c2FnZT4gaW5jb21pbmdNZXNzYWdlczsKICAgICAKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2luY29taW5nTWVzc2FnZXNMb2NrKTsKLSAgICAgICAgc3dhcChtX2luY29taW5n
TWVzc2FnZXMsIGluY29taW5nTWVzc2FnZXMpOworICAgICAgICBtX2luY29taW5nTWVzc2FnZXMu
c3dhcChpbmNvbWluZ01lc3NhZ2VzKTsKICAgICB9CiAKICAgICAvLyBEaXNwYXRjaCBtZXNzYWdl
cy4KLSAgICBmb3IgKGRlcXVlPEluY29taW5nTWVzc2FnZT46Oml0ZXJhdG9yIGl0ID0gaW5jb21p
bmdNZXNzYWdlcy5iZWdpbigpLCBlbmQgPSBpbmNvbWluZ01lc3NhZ2VzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgSW5jb21pbmdNZXNzYWdlJiBtZXNzYWdlID0gKml0OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5jb21pbmdNZXNzYWdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBJbmNvbWluZ01lc3NhZ2UmIG1lc3NhZ2UgPSBpbmNvbWluZ01lc3NhZ2VzW2ldOwog
ICAgICAgICBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cyA9IG1lc3NhZ2UuYXJndW1lbnRzKCk7
CiAKICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZUlEKCkuaXNTeW5jKCkpIHsKQEAgLTI2Nyw3
ICsyNjYsNyBAQCB2b2lkIENvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZXMoKQogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZSh0aGlzLCBtZXNz
YWdlLm1lc3NhZ2VJRCgpLCBhcmd1bWVudHMpOwogCi0gICAgICAgIGl0LT5kZXN0cm95KCk7Cisg
ICAgICAgIG1lc3NhZ2UuZGVzdHJveSgpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRl
ICJXb3JrUXVldWUuaCIKLSNpbmNsdWRlIDxkZXF1ZT4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMTMy
LDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIE11dGV4IG1faW5jb21pbmdNZXNz
YWdlc0xvY2s7Ci0gICAgc3RkOjpkZXF1ZTxJbmNvbWluZ01lc3NhZ2U+IG1faW5jb21pbmdNZXNz
YWdlczsKKyAgICBWZWN0b3I8SW5jb21pbmdNZXNzYWdlPiBtX2luY29taW5nTWVzc2FnZXM7CiAK
ICAgICAvLyBPdXRnb2luZyBtZXNzYWdlcy4KICAgICBjbGFzcyBPdXRnb2luZ01lc3NhZ2UgewpA
QCAtMTU3LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICAKICAgICBNdXRleCBtX291
dGdvaW5nTWVzc2FnZXNMb2NrOwotICAgIHN0ZDo6ZGVxdWU8T3V0Z29pbmdNZXNzYWdlPiBtX291
dGdvaW5nTWVzc2FnZXM7CisgICAgVmVjdG9yPE91dGdvaW5nTWVzc2FnZT4gbV9vdXRnb2luZ01l
c3NhZ2VzOwogICAgIAogICAgIFRocmVhZENvbmRpdGlvbiBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0
aW9uOwogICAgIE11dGV4IG1fd2FpdEZvck1lc3NhZ2VNdXRleDsKSW5kZXg6IFdlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9tYWMvQ29ubmVjdGlvbk1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0aW9uTWFjLmNwcAkocmV2aXNpb24gNTc0MjEp
CisrKyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvbWFjL0Nvbm5lY3Rpb25NYWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsMTIgKzEyMiwxMiBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYWNo
TWVzc2FnZVNpemUoc2l6CiAKIHZvaWQgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSh1
bnNpZ25lZCBtZXNzYWdlSUQsIGF1dG9fcHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQog
ewotICAgIHN0ZDo6bGlzdDxBdHRhY2htZW50PiBhdHRhY2htZW50cyA9IGFyZ3VtZW50cy0+cmVs
ZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgVmVjdG9yPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzID0g
YXJndW1lbnRzLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKICAgICAKICAgICBzaXplX3QgbnVtYmVy
T2ZQb3J0RGVzY3JpcHRvcnMgPSAwOwogICAgIHNpemVfdCBudW1iZXJPZk9PTE1lbW9yeURlc2Ny
aXB0b3JzID0gMDsKLSAgICBmb3IgKHN0ZDo6bGlzdDxBdHRhY2htZW50Pjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBhdHRhY2htZW50cy5iZWdpbigpLCBlbmQgPSBhdHRhY2htZW50cy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEF0dGFjaG1lbnQ6OlR5cGUgdHlwZSA9ICgoQXR0YWNo
bWVudCkqaXQpLnR5cGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dGFjaG1lbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIEF0dGFjaG1lbnQ6OlR5cGUgdHlwZSA9IGF0dGFjaG1l
bnRzW2ldLnR5cGUoKTsKICAgICAgICAgaWYgKHR5cGUgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRU
eXBlKQogICAgICAgICAgICAgbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMrKzsKICAgICAgICAgZWxz
ZSBpZiAodHlwZSA9PSBBdHRhY2htZW50OjpNYWNoT09MTWVtb3J5VHlwZSkKQEAgLTE1OSw4ICsx
NTksOCBAQCB2b2lkIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UodW5zCiAgICAgICAg
IGJvZHktPm1zZ2hfZGVzY3JpcHRvcl9jb3VudCA9IG51bWJlck9mUG9ydERlc2NyaXB0b3JzICsg
bnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9yczsKIAogICAgICAgICB1aW50OF90KiBkZXNjcmlw
dG9yRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJvZHkgKyAxKTsKLSAgICAgICAg
Zm9yIChzdGQ6Omxpc3Q8QXR0YWNobWVudD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXR0YWNobWVu
dHMuYmVnaW4oKSwgZW5kID0gYXR0YWNobWVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgQXR0YWNobWVudCBhdHRhY2htZW50ID0gKml0OworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF0dGFjaG1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBB
dHRhY2htZW50IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1tpXTsKIAogICAgICAgICAgICAgbWFj
aF9tc2dfZGVzY3JpcHRvcl90KiBkZXNjcmlwdG9yID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21z
Z19kZXNjcmlwdG9yX3QqPihkZXNjcmlwdG9yRGF0YSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGF0
dGFjaG1lbnQudHlwZSgpKSB7CkBAIC0yMjIsMTkgKzIyMiwxOSBAQCBzdGF0aWMgYXV0b19wdHI8
QXJndW1lbnREZWNvZGVyPiBjcmVhdGVBCiAgICAgQVNTRVJUKG51bURlc2NyaXB0b3JzKTsKIAog
ICAgIC8vIEJ1aWxkIGF0dGFjaG1lbnQgbGlzdAotICAgIHN0ZDo6cXVldWU8QXR0YWNobWVudD4g
YXR0YWNobWVudHM7CisgICAgRGVxdWU8QXR0YWNobWVudD4gYXR0YWNobWVudHM7CiAgICAgdWlu
dDhfdCogZGVzY3JpcHRvckRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsg
MSk7CiAgICAgZm9yIChtYWNoX21zZ19zaXplX3QgaSA9IDA7IGkgPCBudW1EZXNjcmlwdG9yczsg
KytpKSB7CiAgICAgICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwogCiAg
ICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci0+dHlwZS50eXBlKSB7CiAgICAgICAgIGNhc2UgTUFD
SF9NU0dfUE9SVF9ERVNDUklQVE9SOgotICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChBdHRh
Y2htZW50KGRlc2NyaXB0b3ItPnBvcnQubmFtZSwgZGVzY3JpcHRvci0+cG9ydC5kaXNwb3NpdGlv
bikpOworICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZGVzY3JpcHRv
ci0+cG9ydC5uYW1lLCBkZXNjcmlwdG9yLT5wb3J0LmRpc3Bvc2l0aW9uKSk7CiAgICAgICAgICAg
ICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUFDSF9NU0dfT09MX0RFU0NSSVBUT1I6
Ci0gICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKEF0dGFjaG1lbnQoZGVzY3JpcHRvci0+b3V0
X29mX2xpbmUuYWRkcmVzcywgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuc2l6ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5j
b3B5LCBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5kZWFsbG9jYXRlKSk7CisgICAgICAgICAgICBh
dHRhY2htZW50cy5hcHBlbmQoQXR0YWNobWVudChkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5hZGRy
ZXNzLCBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5zaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuY29weSwgZGVzY3Jp
cHRvci0+b3V0X29mX2xpbmUuZGVhbGxvY2F0ZSkpOwogICAgICAgICAgICAgZGVzY3JpcHRvckRh
dGEgKz0gc2l6ZW9mKG1hY2hfbXNnX29vbF9kZXNjcmlwdG9yX3QpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVl
dWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdp
bi5jcHAJKHJldmlzaW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS93aW4vV29ya1F1ZXVl
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDkgQEAKIAogI2luY2x1ZGUgIldv
cmtRdWV1ZS5oIgogCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQogdm9p
ZCBXb3JrUXVldWU6OnJlZ2lzdGVySGFuZGxlKEhBTkRMRSBoYW5kbGUsIHN0ZDo6YXV0b19wdHI8
V29ya0l0ZW0+IGl0ZW0pCiB7CiAgICAgLy8gQWRkIHRoZSBpdGVtLgpAQCAtMTA4LDcgKzEwNSw3
IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogdm9pZCBXb3JrUXVldWU6
OnNjaGVkdWxlV29yayhzdGQ6OmF1dG9fcHRyPFdvcmtJdGVtPiBpdGVtKQogewogICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICBtX3dvcmtJdGVtUXVldWUu
cHVzaChpdGVtLnJlbGVhc2UoKSk7CisgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChpdGVtLnJl
bGVhc2UoKSk7CiAKICAgICAvLyBTZXQgdGhlIHdvcmsgZXZlbnQuCiAgICAgOjpTZXRFdmVudCht
X3BlcmZvcm1Xb3JrRXZlbnQpOwpAQCAtMTE2LDE5ICsxMTMsMTkgQEAgdm9pZCBXb3JrUXVldWU6
OnNjaGVkdWxlV29yayhzdGQ6OmF1dG9fcAogCiB2b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmso
KQogewotICAgIHN0ZDo6cXVldWU8V29ya0l0ZW0qPiB3b3JrSXRlbVF1ZXVlOworICAgIERlcXVl
PFdvcmtJdGVtKj4gd29ya0l0ZW1RdWV1ZTsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICAgICAgc3dhcChtX3dvcmtJdGVtUXVldWUs
IHdvcmtJdGVtUXVldWUpOworICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1
ZXVlKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIXdvcmtJdGVtUXVldWUuZW1wdHkoKSkgewotICAg
ICAgICBzdGQ6OmF1dG9fcHRyPFdvcmtJdGVtPiBpdGVtKHdvcmtJdGVtUXVldWUuZnJvbnQoKSk7
CisgICAgd2hpbGUgKCF3b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBzdGQ6OmF1
dG9fcHRyPFdvcmtJdGVtPiBpdGVtKHdvcmtJdGVtUXVldWUuZmlyc3QoKSk7CiAKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKICAgICAgICAgaWYgKG1faXNWYWxp
ZCkKICAgICAgICAgICAgIGl0ZW0tPmV4ZWN1dGUoKTsKIAotICAgICAgICB3b3JrSXRlbVF1ZXVl
LnBvcCgpOworICAgICAgICB3b3JrSXRlbVF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53099</attachid>
            <date>2010-04-11 13:14:20 -0700</date>
            <delta_ts>2010-04-11 13:17:33 -0700</delta_ts>
            <desc>Take 3</desc>
            <filename>take3.diff</filename>
            <type>text/plain</type>
            <size>19982</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzQzMykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMDQtMTAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzM5OQorICAgICAgICBS
ZW1vdmUgdXNlIG9mIFNUTCBkYXRhIHN0cnVjdHVyZXMgZnJvbSBDb3JlSVBDIGNvZGUKKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcDoKKyAgICAgICAgKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNvZGVyKToKKyAgICAgICAgKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2Rlcjo6ZGVjb2RlQnl0ZXMpOgorICAgICAgICAoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyOjpyZW1vdmVBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RGVjb2Rlci5oOgorICAgICAgICBVc2UgV1RGOjpEZXF1ZSBpbnN0ZWFkIG9m
IHN0ZDo6cXVldWUgYW5kIFdURjo6VmVjdG9yCisgICAgICAgIGluc3RlYWQgb2Ygc3RkOjp2ZWN0
b3IuIFJlcGxhY2UgdXNlIG9mIG1hbGxvYy9mcmVlIHdpdGggCisgICAgICAgIGZhc3RNYWxsb2Mv
ZmFzdEZyZWUuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5j
cHA6CisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI6OmFkZEF0dGFjaG1lbnQpOgor
ICAgICAgICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpyZWxlYXNlQXR0YWNobWVudHMpOgor
ICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmg6CisgICAgICAgIFVz
ZSBXVEY6OlZlY3RvciBpbnN0ZWFkIG9mIHN0ZDo6bGlzdC4gUmVwbGFjZSB1c2Ugb2YgbWFsbG9j
L2ZyZWUKKyAgICAgICAgd2l0aCBmYXN0TWFsbG9jL2Zhc3RGcmVlLgorCisgICAgICAgICogUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rp
b246OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JN
ZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01l
c3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2Fn
ZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlcyk6Cisg
ICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmg6CisgICAgICAgICogUGxhdGZv
cm0vQ29yZUlQQy9tYWMvQ29ubmVjdGlvbk1hYy5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25u
ZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKENvcmVJUEM6OmNyZWF0ZUFy
Z3VtZW50RGVjb2Rlcik6CisgICAgICAgIFVzZSBXVEY6OlZlY3RvciBpbnN0ZWFkIG9mIHN0ZDo6
cXVldWUuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9SdW5Mb29wLmNwcDoKKyAgICAgICAgKFJ1bkxv
b3A6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFJ1bkxvb3A6OnNjaGVkdWxlV29yayk6CisgICAg
ICAgICogUGxhdGZvcm0vUnVuTG9vcC5oOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIFBs
YXRmb3JtL1dvcmtRdWV1ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwOgorICAgICAgICAoV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmspOgorICAgICAgICAoV29ya1F1
ZXVlOjpwZXJmb3JtV29yayk6CisgICAgICAgIERpdHRvLgorCiAyMDEwLTA0LTEwICBNYXJrIFJv
d2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGFuIG9idmlvdXNseSBpbmNvcnJl
Y3QgcGFydCBvZiB0aGUgWGNvZGUgY29uZmlndXJhdGlvbiBjbGVhbnVwIHRoYXQgcmVzdWx0ZWQg
aW4gZGVidWcgYnVpbGRzCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5jcHAJKHJldmlzaW9uIDU3NDIxKQor
KysgV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsNiBAQAogCiAjaW5jbHVkZSAiV29ya0l0ZW0uaCIKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQogc3RhdGljIFJ1bkxvb3AqIHNfbWFpblJ1bkxvb3A7CiAKIHZvaWQgUnVuTG9vcDo6aW5pdGlh
bGl6ZU1haW5SdW5Mb29wKCkKQEAgLTQ2LDIzICs0NCwyMiBAQCBSdW5Mb29wKiBSdW5Mb29wOjpt
YWluUnVuTG9vcCgpCiAKIHZvaWQgUnVuTG9vcDo6cGVyZm9ybVdvcmsoKQogewotICAgIHF1ZXVl
PFdvcmtJdGVtKj4gd29ya0l0ZW1RdWV1ZTsKKyAgICBWZWN0b3I8V29ya0l0ZW0qPiB3b3JrSXRl
bVF1ZXVlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1
ZUxvY2spOwotICAgICAgICBzd2FwKG1fd29ya0l0ZW1RdWV1ZSwgd29ya0l0ZW1RdWV1ZSk7Cisg
ICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVldWUpOwogICAgIH0KIAotICAg
IHdoaWxlICghd29ya0l0ZW1RdWV1ZS5lbXB0eSgpKSB7Ci0gICAgICAgIGF1dG9fcHRyPFdvcmtJ
dGVtPiBpdGVtKHdvcmtJdGVtUXVldWUuZnJvbnQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB3b3JrSXRlbVF1ZXVlLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN0ZDo6YXV0b19wdHI8
V29ya0l0ZW0+IGl0ZW0od29ya0l0ZW1RdWV1ZVtpXSk7CiAgICAgICAgIGl0ZW0tPmV4ZWN1dGUo
KTsKLSAgICAgICAgd29ya0l0ZW1RdWV1ZS5wb3AoKTsKICAgICB9CiB9CiAKIHZvaWQgUnVuTG9v
cDo6c2NoZWR1bGVXb3JrKHN0ZDo6YXV0b19wdHI8V29ya0l0ZW0+IGl0ZW0pCiB7CiAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgIG1fd29ya0l0ZW1RdWV1
ZS5wdXNoKGl0ZW0ucmVsZWFzZSgpKTsKKyAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKGl0ZW0u
cmVsZWFzZSgpKTsKIAogICAgIHdha2VVcCgpOwogfQpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9S
dW5Mb29wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmgJKHJldmlz
aW9uIDU3NDIxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkgKzI3LDkgQEAKICNkZWZpbmUgUnVuTG9vcF9oCiAKICNpbmNsdWRlIDxtZW1vcnk+
Ci0jaW5jbHVkZSA8cXVldWU+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBjbGFzcyBXb3JrSXRl
bTsKIApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd2FrZVVwKCk7CiAKICAg
ICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotICAgIHN0ZDo6cXVldWU8V29ya0l0ZW0qPiBt
X3dvcmtJdGVtUXVldWU7CisgICAgVmVjdG9yPFdvcmtJdGVtKj4gbV93b3JrSXRlbVF1ZXVlOwog
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyUnVuTG9vcE1lc3Nh
Z2VXaW5kb3dDbGFzcygpOwpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCShyZXZpc2lvbiA1NzQyMSkK
KysrIFdlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDYgQEAKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRj
aC5oPgotI2VsaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHF1ZXVlPgogI2VuZGlmCiAKICNp
bmNsdWRlICJXb3JrSXRlbS5oIgpAQCAtODgsNyArODYsNyBAQCBwcml2YXRlOgogICAgIEhBTkRM
RSBtX3BlcmZvcm1Xb3JrRXZlbnQ7CiAKICAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwot
ICAgIHN0ZDo6cXVldWU8V29ya0l0ZW0qPiBtX3dvcmtJdGVtUXVldWU7CisgICAgVmVjdG9yPFdv
cmtJdGVtKj4gbV93b3JrSXRlbVF1ZXVlOwogCiAgICAgTXV0ZXggbV9oYW5kbGVzTG9jazsKICAg
ICBIYXNoTWFwPEhBTkRMRSwgV29ya0l0ZW0qPiBtX2hhbmRsZXM7CkluZGV4OiBXZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAkocmV2aXNpb24gNTc0MjEpCisr
KyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsNiBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAK
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogQXJndW1lbnRE
ZWNvZGVyOjpBcmd1bWVudERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVm
ZmVyU2l6ZSkKQEAgLTM0LDIzICszMiwyMyBAQCBBcmd1bWVudERlY29kZXI6OkFyZ3VtZW50RGVj
b2Rlcihjb25zdCB1CiAgICAgaW5pdGlhbGl6ZShidWZmZXIsIGJ1ZmZlclNpemUpOwogfQogCi1B
cmd1bWVudERlY29kZXI6OkFyZ3VtZW50RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNp
emVfdCBidWZmZXJTaXplLCBzdGQ6OnF1ZXVlPEF0dGFjaG1lbnQ+JiBhdHRhY2htZW50cykKK0Fy
Z3VtZW50RGVjb2Rlcjo6QXJndW1lbnREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUsIERlcXVlPEF0dGFjaG1lbnQ+JiBhdHRhY2htZW50cykKIHsKICAgICBp
bml0aWFsaXplKGJ1ZmZlciwgYnVmZmVyU2l6ZSk7Ci0gICAgCi0gICAgc3RkOjpzd2FwKG1fYXR0
YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKKworICAgIG1fYXR0YWNobWVudHMuc3dhcChhdHRhY2ht
ZW50cyk7CiB9CiAKIEFyZ3VtZW50RGVjb2Rlcjo6fkFyZ3VtZW50RGVjb2RlcigpCiB7CiAgICAg
QVNTRVJUKG1fYnVmZmVyKTsKLSAgICBmcmVlKG1fYnVmZmVyKTsKKyAgICBmYXN0RnJlZShtX2J1
ZmZlcik7CiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgbWFjaCBwb3J0
cyBpbiBjYXNlcyBvZiBmYWlsdXJlLgogfQogCiB2b2lkIEFyZ3VtZW50RGVjb2Rlcjo6aW5pdGlh
bGl6ZShjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogewotICAgIG1f
YnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hbGxvYyhidWZmZXJTaXplKSk7CisgICAg
bV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZmZXJTaXplKSk7
CiAgICAgbV9idWZmZXJQb3MgPSBtX2J1ZmZlcjsKICAgICBtX2J1ZmZlckVuZCA9IG1fYnVmZmVy
ICsgYnVmZmVyU2l6ZTsKICAgICBtZW1jcHkobV9idWZmZXIsIGJ1ZmZlciwgYnVmZmVyU2l6ZSk7
CkBAIC03Nyw3ICs3NSw3IEBAIGJvb2wgQXJndW1lbnREZWNvZGVyOjphbGlnbkJ1ZmZlclBvc2l0
aW8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBBcmd1bWVudERlY29kZXI6OmRlY29kZUJ5
dGVzKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCitib29sIEFyZ3VtZW50RGVjb2Rlcjo6
ZGVjb2RlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCiB7CiAgICAgdWludDY0X3Qgc2l6
ZTsKICAgICBpZiAoIWRlY29kZVVJbnQ2NChzaXplKSkKQEAgLTE4NCwxMSArMTgyLDExIEBAIGJv
b2wgQXJndW1lbnREZWNvZGVyOjpkZWNvZGVEb3VibGUoZG91YmwKIAogYm9vbCBBcmd1bWVudERl
Y29kZXI6OnJlbW92ZUF0dGFjaG1lbnQoQXR0YWNobWVudCYgYXR0YWNobWVudCkKIHsKLSAgICBp
ZiAobV9hdHRhY2htZW50cy5lbXB0eSgpKQorICAgIGlmIChtX2F0dGFjaG1lbnRzLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXR0YWNobWVudCA9IG1fYXR0YWNobWVu
dHMuZnJvbnQoKTsKLSAgICBtX2F0dGFjaG1lbnRzLnBvcCgpOworICAgIGF0dGFjaG1lbnQgPSBt
X2F0dGFjaG1lbnRzLmZpcnN0KCk7CisgICAgbV9hdHRhY2htZW50cy5yZW1vdmVGaXJzdCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJn
dW1lbnREZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RGVjb2Rlci5oCShyZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Bcmd1bWVudERlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDkgQEAK
ICNkZWZpbmUgQXJndW1lbnREZWNvZGVyX2gKIAogI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNp
bmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cXVldWU+Ci0jaW5jbHVkZSA8dmVjdG9yPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKQEAgLTQ5LDEyICs0OCwx
MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZShBcmd1bWVuCiBjbGFzcyBBcmd1
bWVudERlY29kZXIgewogcHVibGljOgogICAgIEFyZ3VtZW50RGVjb2Rlcihjb25zdCB1aW50OF90
KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKLSAgICBBcmd1bWVudERlY29kZXIoY29uc3Qg
dWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc3RkOjpxdWV1ZTxBdHRhY2htZW50
PiYpOworICAgIEFyZ3VtZW50RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBi
dWZmZXJTaXplLCBEZXF1ZTxBdHRhY2htZW50PiYpOwogICAgIH5Bcmd1bWVudERlY29kZXIoKTsK
IAogICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uSUQ7IH0KIAotICAgIGJvb2wgZGVjb2RlQnl0ZXMoc3RkOjp2ZWN0b3I8dWludDhfdD4mKTsK
KyAgICBib29sIGRlY29kZUJ5dGVzKFZlY3Rvcjx1aW50OF90PiYpOwogICAgIGJvb2wgZGVjb2Rl
Qnl0ZXModWludDhfdCosIHNpemVfdCk7CiAKICAgICBib29sIGRlY29kZUJvb2woYm9vbCYpOwpA
QCAtOTYsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIHVpbnQ4X3QqIG1fYnVmZmVyUG9zOwogICAg
IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOwogCi0gICAgc3RkOjpxdWV1ZTxBdHRhY2htZW50PiBtX2F0
dGFjaG1lbnRzOworICAgIERlcXVlPEF0dGFjaG1lbnQ+IG1fYXR0YWNobWVudHM7CiB9OwogCiB0
ZW1wbGF0ZTw+IGlubGluZSBib29sIEFyZ3VtZW50RGVjb2Rlcjo6ZGVjb2RlKGJvb2wmIG4pCklu
ZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAkocmV2
aXNpb24gNTc0MjEpCisrKyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIEFy
Z3VtZW50RW5jb2Rlcjo6QXJndW1lbnRFbmNvZGVyKHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCkBA
IC00NCw3ICs0Miw3IEBAIEFyZ3VtZW50RW5jb2Rlcjo6QXJndW1lbnRFbmNvZGVyKHVpbnQ2NF8K
IEFyZ3VtZW50RW5jb2Rlcjo6fkFyZ3VtZW50RW5jb2RlcigpCiB7CiAgICAgaWYgKG1fYnVmZmVy
KQotICAgICAgICBmcmVlKG1fYnVmZmVyKTsKKyAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwog
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc3Bvc2Ugb2YgdGhlIGF0dGFjaG1lbnRzIGluIGNh
c2VzIG9mIGZhaWx1cmUuCiB9CiAKQEAgLTYwLDkgKzU4LDkgQEAgdWludDhfdCogQXJndW1lbnRF
bmNvZGVyOjpncm93KHVuc2lnbmVkIAogICAgIGlmIChhbGlnbmVkU2l6ZSArIHNpemUgPiBtX2J1
ZmZlckNhcGFjaXR5KSB7CiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IHN0ZDo6bWF4KGFs
aWduZWRTaXplICsgc2l6ZSwgc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigzMiksIG1fYnVm
ZmVyQ2FwYWNpdHkgKyBtX2J1ZmZlckNhcGFjaXR5IC8gNCArIDEpKTsKICAgICAgICAgaWYgKCFt
X2J1ZmZlcikKLSAgICAgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1h
bGxvYyhuZXdDYXBhY2l0eSkpOworICAgICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZmFzdE1hbGxvYyhuZXdDYXBhY2l0eSkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihyZWFsbG9jKG1fYnVmZmVyLCBu
ZXdDYXBhY2l0eSkpOworICAgICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG5ld0NhcGFjaXR5KSk7CiAgICAgICAgIAogICAgICAg
ICAvLyBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaWYgYWxsb2NhdGluZyBtZW1vcnkgZmFpbHM/
CiAKQEAgLTEzNiwxMyArMTM0LDEzIEBAIHZvaWQgQXJndW1lbnRFbmNvZGVyOjplbmNvZGVEb3Vi
bGUoZG91YmwKIAogdm9pZCBBcmd1bWVudEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoY29uc3QgQXR0
YWNobWVudCYgYXR0YWNobWVudCkKIHsKLSAgICBtX2F0dGFjaG1lbnRzLnB1c2hfYmFjayhhdHRh
Y2htZW50KTsKKyAgICBtX2F0dGFjaG1lbnRzLmFwcGVuZChhdHRhY2htZW50KTsKIH0KIAotc3Rk
OjpsaXN0PEF0dGFjaG1lbnQ+IEFyZ3VtZW50RW5jb2Rlcjo6cmVsZWFzZUF0dGFjaG1lbnRzKCkK
K1ZlY3RvcjxBdHRhY2htZW50PiBBcmd1bWVudEVuY29kZXI6OnJlbGVhc2VBdHRhY2htZW50cygp
CiB7Ci0gICAgc3RkOjpsaXN0PEF0dGFjaG1lbnQ+IG5ld0xpc3Q7Ci0gICAgc3RkOjpzd2FwKG5l
d0xpc3QsIG1fYXR0YWNobWVudHMpOworICAgIFZlY3RvcjxBdHRhY2htZW50PiBuZXdMaXN0Owor
ICAgIG5ld0xpc3Quc3dhcChtX2F0dGFjaG1lbnRzKTsKICAgICByZXR1cm4gbmV3TGlzdDsKIH0K
IApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuaAkocmV2
aXNpb24gNTc0MjEpCisrKyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgQXJndW1lbnRFbmNv
ZGVyX2gKIAogI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNpbmNsdWRlIDxsaXN0PgogI2luY2x1
ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgQ29yZUlQQyB7CiAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBidWZm
ZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJTaXplOyB9CiAKICAgICB2b2lkIGFkZEF0
dGFjaG1lbnQoY29uc3QgQXR0YWNobWVudCYpOwotICAgIHN0ZDo6bGlzdDxBdHRhY2htZW50PiBy
ZWxlYXNlQXR0YWNobWVudHMoKTsKKyAgICBWZWN0b3I8QXR0YWNobWVudD4gcmVsZWFzZUF0dGFj
aG1lbnRzKCk7CiAKICAgICB2b2lkIGRlYnVnKCk7CiAKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0
ZToKICAgICBzaXplX3QgbV9idWZmZXJTaXplOwogICAgIHNpemVfdCBtX2J1ZmZlckNhcGFjaXR5
OwogCi0gICAgc3RkOjpsaXN0PEF0dGFjaG1lbnQ+IG1fYXR0YWNobWVudHM7CisgICAgVmVjdG9y
PEF0dGFjaG1lbnQ+IG1fYXR0YWNobWVudHM7CiB9OwogCiB0ZW1wbGF0ZTw+IGlubGluZSB2b2lk
IEFyZ3VtZW50RW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IGJvb2wmIG4pCkluZGV4OiBXZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyAr
MjUsNiBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogCi0jaW5jbHVkZSAiQXR0YWNobWVu
dC5oIgogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKICNpbmNsdWRlICJXb3JrSXRlbS5oIgogI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtOTYsNyArOTUsNyBAQCBib29sIENvbm5lY3Rpb246
OnNlbmRNZXNzYWdlKHVuc2lnbmVkIG1lCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX291dGdvaW5nTWVzc2FnZXNMb2NrKTsKLSAgICBtX291dGdvaW5n
TWVzc2FnZXMucHVzaF9iYWNrKE91dGdvaW5nTWVzc2FnZShtZXNzYWdlSUQsIGFyZ3VtZW50cykp
OworICAgIG1fb3V0Z29pbmdNZXNzYWdlcy5hcHBlbmQoT3V0Z29pbmdNZXNzYWdlKG1lc3NhZ2VJ
RCwgYXJndW1lbnRzKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSBib29s
ZWFuIGZsYWcgc28gd2UgZG9uJ3QgY2FsbCB0aGlzIHdoZW4gd29yayBoYXMgYWxyZWFkeSBiZWVu
IHNjaGVkdWxlZC4KICAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdvcmsoV29ya0l0ZW06
OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZXMpKTsKQEAgLTEw
OCwxNSArMTA3LDE1IEBAIHN0ZDo6YXV0b19wdHI8QXJndW1lbnREZWNvZGVyPiBDb25uZWN0aW8K
ICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhpcyBtZXNzYWdlIGlzIGFscmVhZHkgaW4gdGhlIGlu
Y29taW5nIG1lc3NhZ2VzIHF1ZXVlLgogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1faW5jb21pbmdNZXNzYWdlc0xvY2spOwotICAgICAgICAKLSAgICAgICAgZm9yIChzdGQ6OmRl
cXVlPEluY29taW5nTWVzc2FnZT46Oml0ZXJhdG9yIGl0ID0gbV9pbmNvbWluZ01lc3NhZ2VzLmJl
Z2luKCksIGVuZCA9IG1faW5jb21pbmdNZXNzYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBjb25zdCBJbmNvbWluZ01lc3NhZ2UmIG1lc3NhZ2UgPSAqaXQ7CisKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luY29taW5nTWVzc2FnZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEluY29taW5nTWVzc2FnZSYgbWVzc2FnZSA9IG1faW5j
b21pbmdNZXNzYWdlc1tpXTsKICAgICAKICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VJ
RCgpID09IG1lc3NhZ2VJRCAmJiBtZXNzYWdlLmFyZ3VtZW50cygpLT5kZXN0aW5hdGlvbklEKCkg
PT0gZGVzdGluYXRpb25JRCkgewogICAgICAgICAgICAgICAgIHN0ZDo6YXV0b19wdHI8QXJndW1l
bnREZWNvZGVyPiBhcmd1bWVudHMobWVzc2FnZS5hcmd1bWVudHMoKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgLy8gRXJhc2UgdGhlIGluY29taW5nIG1lc3NhZ2UuCi0gICAg
ICAgICAgICAgICAgbV9pbmNvbWluZ01lc3NhZ2VzLmVyYXNlKGl0KTsKKyAgICAgICAgICAgICAg
ICBtX2luY29taW5nTWVzc2FnZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudHM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5NSw3ICsxOTQsNyBAQCB2
b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoCiAgICAgfQogCiAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faW5jb21pbmdNZXNzYWdlc0xvY2spOwotICAgIG1faW5jb21pbmdN
ZXNzYWdlcy5wdXNoX2JhY2soSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2VJRCwgYXJndW1lbnRzKSk7
CisgICAgbV9pbmNvbWluZ01lc3NhZ2VzLmFwcGVuZChJbmNvbWluZ01lc3NhZ2UobWVzc2FnZUlE
LCBhcmd1bWVudHMpKTsKIAogICAgIG1fY2xpZW50UnVuTG9vcC0+c2NoZWR1bGVXb3JrKFdvcmtJ
dGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZXMpKTsKIH0KQEAg
LTIyMSwzMCArMjIwLDMwIEBAIHZvaWQgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZXMo
KQogICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGVxdWU8
T3V0Z29pbmdNZXNzYWdlPiBvdXRnb2luZ01lc3NhZ2VzOwotICAgIAorICAgIFZlY3RvcjxPdXRn
b2luZ01lc3NhZ2U+IG91dGdvaW5nTWVzc2FnZXM7CisKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX291dGdvaW5nTWVzc2FnZXNMb2NrKTsKLSAgICAgICAgc3dhcChtX291dGdv
aW5nTWVzc2FnZXMsIG91dGdvaW5nTWVzc2FnZXMpOworICAgICAgICBtX291dGdvaW5nTWVzc2Fn
ZXMuc3dhcChvdXRnb2luZ01lc3NhZ2VzKTsKICAgICB9CiAKICAgICAvLyBTZW5kIG1lc3NhZ2Vz
LgotICAgIGZvciAoZGVxdWU8T3V0Z29pbmdNZXNzYWdlPjo6aXRlcmF0b3IgaXQgPSBvdXRnb2lu
Z01lc3NhZ2VzLmJlZ2luKCksIGVuZCA9IG91dGdvaW5nTWVzc2FnZXMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgc2VuZE91dGdvaW5nTWVzc2FnZShpdC0+bWVzc2FnZUlEKCksIGF1
dG9fcHRyPEFyZ3VtZW50RW5jb2Rlcj4oaXQtPmFyZ3VtZW50cygpKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvdXRnb2luZ01lc3NhZ2VzLnNpemUoKTsgKytpKQorICAgICAgICBzZW5k
T3V0Z29pbmdNZXNzYWdlKG91dGdvaW5nTWVzc2FnZXNbaV0ubWVzc2FnZUlEKCksIHN0ZDo6YXV0
b19wdHI8QXJndW1lbnRFbmNvZGVyPihvdXRnb2luZ01lc3NhZ2VzW2ldLmFyZ3VtZW50cygpKSk7
CiB9CiAKIHZvaWQgQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlcygpCiB7Ci0gICAgZGVxdWU8
SW5jb21pbmdNZXNzYWdlPiBpbmNvbWluZ01lc3NhZ2VzOworICAgIFZlY3RvcjxJbmNvbWluZ01l
c3NhZ2U+IGluY29taW5nTWVzc2FnZXM7CiAgICAgCiAgICAgewogICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7Ci0gICAgICAgIHN3YXAobV9pbmNvbWlu
Z01lc3NhZ2VzLCBpbmNvbWluZ01lc3NhZ2VzKTsKKyAgICAgICAgbV9pbmNvbWluZ01lc3NhZ2Vz
LnN3YXAoaW5jb21pbmdNZXNzYWdlcyk7CiAgICAgfQogCiAgICAgLy8gRGlzcGF0Y2ggbWVzc2Fn
ZXMuCi0gICAgZm9yIChkZXF1ZTxJbmNvbWluZ01lc3NhZ2U+OjppdGVyYXRvciBpdCA9IGluY29t
aW5nTWVzc2FnZXMuYmVnaW4oKSwgZW5kID0gaW5jb21pbmdNZXNzYWdlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIEluY29taW5nTWVzc2FnZSYgbWVzc2FnZSA9ICppdDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluY29taW5nTWVzc2FnZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgSW5jb21pbmdNZXNzYWdlJiBtZXNzYWdlID0gaW5jb21pbmdNZXNzYWdlc1tpXTsK
ICAgICAgICAgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMgPSBtZXNzYWdlLmFyZ3VtZW50cygp
OwogCiAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VJRCgpLmlzU3luYygpKSB7CkBAIC0yNjcs
NyArMjY2LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2UodGhpcywgbWVz
c2FnZS5tZXNzYWdlSUQoKSwgYXJndW1lbnRzKTsKIAotICAgICAgICBpdC0+ZGVzdHJveSgpOwor
ICAgICAgICBtZXNzYWdlLmRlc3Ryb3koKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gNTc0MjEpCisrKyBXZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCiAjaW5jbHVk
ZSAiV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSA8ZGVxdWU+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTEz
Miw3ICsxMzEsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBNdXRleCBtX2luY29taW5nTWVz
c2FnZXNMb2NrOwotICAgIHN0ZDo6ZGVxdWU8SW5jb21pbmdNZXNzYWdlPiBtX2luY29taW5nTWVz
c2FnZXM7CisgICAgVmVjdG9yPEluY29taW5nTWVzc2FnZT4gbV9pbmNvbWluZ01lc3NhZ2VzOwog
CiAgICAgLy8gT3V0Z29pbmcgbWVzc2FnZXMuCiAgICAgY2xhc3MgT3V0Z29pbmdNZXNzYWdlIHsK
QEAgLTE1Nyw3ICsxNTYsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgTXV0ZXggbV9v
dXRnb2luZ01lc3NhZ2VzTG9jazsKLSAgICBzdGQ6OmRlcXVlPE91dGdvaW5nTWVzc2FnZT4gbV9v
dXRnb2luZ01lc3NhZ2VzOworICAgIFZlY3RvcjxPdXRnb2luZ01lc3NhZ2U+IG1fb3V0Z29pbmdN
ZXNzYWdlczsKICAgICAKICAgICBUaHJlYWRDb25kaXRpb24gbV93YWl0Rm9yTWVzc2FnZUNvbmRp
dGlvbjsKICAgICBNdXRleCBtX3dhaXRGb3JNZXNzYWdlTXV0ZXg7CkluZGV4OiBXZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvbWFjL0Nvbm5lY3Rpb25NYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9tYWMvQ29ubmVjdGlvbk1hYy5jcHAJKHJldmlzaW9uIDU3NDIx
KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0aW9uTWFjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIyLDEyICsxMjIsMTIgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFj
aE1lc3NhZ2VTaXplKHNpegogCiB2b2lkIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2Uo
dW5zaWduZWQgbWVzc2FnZUlELCBhdXRvX3B0cjxBcmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykK
IHsKLSAgICBzdGQ6Omxpc3Q8QXR0YWNobWVudD4gYXR0YWNobWVudHMgPSBhcmd1bWVudHMtPnJl
bGVhc2VBdHRhY2htZW50cygpOworICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyA9
IGFyZ3VtZW50cy0+cmVsZWFzZUF0dGFjaG1lbnRzKCk7CiAgICAgCiAgICAgc2l6ZV90IG51bWJl
ck9mUG9ydERlc2NyaXB0b3JzID0gMDsKICAgICBzaXplX3QgbnVtYmVyT2ZPT0xNZW1vcnlEZXNj
cmlwdG9ycyA9IDA7Ci0gICAgZm9yIChzdGQ6Omxpc3Q8QXR0YWNobWVudD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYXR0YWNobWVudHMuYmVnaW4oKSwgZW5kID0gYXR0YWNobWVudHMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBBdHRhY2htZW50OjpUeXBlIHR5cGUgPSAoKEF0dGFj
aG1lbnQpKml0KS50eXBlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRhY2htZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBBdHRhY2htZW50OjpUeXBlIHR5cGUgPSBhdHRhY2ht
ZW50c1tpXS50eXBlKCk7CiAgICAgICAgIGlmICh0eXBlID09IEF0dGFjaG1lbnQ6Ok1hY2hQb3J0
VHlwZSkKICAgICAgICAgICAgIG51bWJlck9mUG9ydERlc2NyaXB0b3JzKys7CiAgICAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gQXR0YWNobWVudDo6TWFjaE9PTE1lbW9yeVR5cGUpCkBAIC0xNTksOCAr
MTU5LDggQEAgdm9pZCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKHVucwogICAgICAg
ICBib2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQgPSBudW1iZXJPZlBvcnREZXNjcmlwdG9ycyAr
IG51bWJlck9mT09MTWVtb3J5RGVzY3JpcHRvcnM7CiAKICAgICAgICAgdWludDhfdCogZGVzY3Jp
cHRvckRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsgMSk7Ci0gICAgICAg
IGZvciAoc3RkOjpsaXN0PEF0dGFjaG1lbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGF0dGFjaG1l
bnRzLmJlZ2luKCksIGVuZCA9IGF0dGFjaG1lbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIEF0dGFjaG1lbnQgYXR0YWNobWVudCA9ICppdDsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
QXR0YWNobWVudCBhdHRhY2htZW50ID0gYXR0YWNobWVudHNbaV07CiAKICAgICAgICAgICAgIG1h
Y2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9t
c2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwogICAgICAgICAgICAgc3dpdGNoIChh
dHRhY2htZW50LnR5cGUoKSkgewpAQCAtMjIyLDE5ICsyMjIsMTkgQEAgc3RhdGljIGF1dG9fcHRy
PEFyZ3VtZW50RGVjb2Rlcj4gY3JlYXRlQQogICAgIEFTU0VSVChudW1EZXNjcmlwdG9ycyk7CiAK
ICAgICAvLyBCdWlsZCBhdHRhY2htZW50IGxpc3QKLSAgICBzdGQ6OnF1ZXVlPEF0dGFjaG1lbnQ+
IGF0dGFjaG1lbnRzOworICAgIERlcXVlPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzOwogICAgIHVp
bnQ4X3QqIGRlc2NyaXB0b3JEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYm9keSAr
IDEpOwogICAgIGZvciAobWFjaF9tc2dfc2l6ZV90IGkgPSAwOyBpIDwgbnVtRGVzY3JpcHRvcnM7
ICsraSkgewogICAgICAgICBtYWNoX21zZ19kZXNjcmlwdG9yX3QqIGRlc2NyaXB0b3IgPSByZWlu
dGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCo+KGRlc2NyaXB0b3JEYXRhKTsKIAog
ICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3ItPnR5cGUudHlwZSkgewogICAgICAgICBjYXNlIE1B
Q0hfTVNHX1BPUlRfREVTQ1JJUFRPUjoKLSAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2goQXR0
YWNobWVudChkZXNjcmlwdG9yLT5wb3J0Lm5hbWUsIGRlc2NyaXB0b3ItPnBvcnQuZGlzcG9zaXRp
b24pKTsKKyAgICAgICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChBdHRhY2htZW50KGRlc2NyaXB0
b3ItPnBvcnQubmFtZSwgZGVzY3JpcHRvci0+cG9ydC5kaXNwb3NpdGlvbikpOwogICAgICAgICAg
ICAgZGVzY3JpcHRvckRhdGEgKz0gc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1BQ0hfTVNHX09PTF9ERVNDUklQVE9S
OgotICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChBdHRhY2htZW50KGRlc2NyaXB0b3ItPm91
dF9vZl9saW5lLmFkZHJlc3MsIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUu
Y29weSwgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuZGVhbGxvY2F0ZSkpOworICAgICAgICAgICAg
YXR0YWNobWVudHMuYXBwZW5kKEF0dGFjaG1lbnQoZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuYWRk
cmVzcywgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmNvcHksIGRlc2Ny
aXB0b3ItPm91dF9vZl9saW5lLmRlYWxsb2NhdGUpKTsKICAgICAgICAgICAgIGRlc2NyaXB0b3JE
YXRhICs9IHNpemVvZihtYWNoX21zZ19vb2xfZGVzY3JpcHRvcl90KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OgpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS93aW4vV29ya1F1
ZXVlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVX
aW4uY3BwCShyZXZpc2lvbiA1NzQyMSkKKysrIFdlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1
ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSw5IEBACiAKICNpbmNsdWRlICJX
b3JrUXVldWUuaCIKIAotI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHByb2Nlc3MuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KIHZv
aWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBzdGQ6OmF1dG9fcHRy
PFdvcmtJdGVtPiBpdGVtKQogewogICAgIC8vIEFkZCB0aGUgaXRlbS4KQEAgLTEwOCw3ICsxMDUs
NyBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHZvaWQgV29ya1F1ZXVl
OjpzY2hlZHVsZVdvcmsoc3RkOjphdXRvX3B0cjxXb3JrSXRlbT4gaXRlbSkKIHsKICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgbV93b3JrSXRlbVF1ZXVl
LnB1c2goaXRlbS5yZWxlYXNlKCkpOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbS5y
ZWxlYXNlKCkpOwogCiAgICAgLy8gU2V0IHRoZSB3b3JrIGV2ZW50LgogICAgIDo6U2V0RXZlbnQo
bV9wZXJmb3JtV29ya0V2ZW50KTsKQEAgLTExNiwxOSArMTEzLDE3IEBAIHZvaWQgV29ya1F1ZXVl
OjpzY2hlZHVsZVdvcmsoc3RkOjphdXRvX3AKIAogdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1Xb3Jr
KCkKIHsKLSAgICBzdGQ6OnF1ZXVlPFdvcmtJdGVtKj4gd29ya0l0ZW1RdWV1ZTsKKyAgICBWZWN0
b3I8V29ya0l0ZW0qPiB3b3JrSXRlbVF1ZXVlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotICAgICAgICBzd2FwKG1fd29ya0l0ZW1RdWV1
ZSwgd29ya0l0ZW1RdWV1ZSk7CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJdGVt
UXVldWUpOwogICAgIH0KIAotICAgIHdoaWxlICghd29ya0l0ZW1RdWV1ZS5lbXB0eSgpKSB7Ci0g
ICAgICAgIHN0ZDo6YXV0b19wdHI8V29ya0l0ZW0+IGl0ZW0od29ya0l0ZW1RdWV1ZS5mcm9udCgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgc3RkOjphdXRvX3B0cjxXb3JrSXRlbT4gaXRlbSh3b3JrSXRlbVF1ZXVlW2ld
KTsKIAogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9pc1ZhbGlkTXV0ZXgpOwogICAgICAg
ICBpZiAobV9pc1ZhbGlkKQogICAgICAgICAgICAgaXRlbS0+ZXhlY3V0ZSgpOwotCi0gICAgICAg
IHdvcmtJdGVtUXVldWUucG9wKCk7CiAgICAgfQogfQo=
</data>
<flag name="review"
          id="36756"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>