<?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>43526</bug_id>
          
          <creation_ts>2010-08-04 17:24:36 -0700</creation_ts>
          <short_desc>JSArray storage of m_vector is suboptimal</short_desc>
          <delta_ts>2010-08-07 22:29:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>260292</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-08-04 17:24:36 -0700</bug_when>
    <thetext>The recent shift/unshift speed up employed a trick where JSArray points into the middle of the enclosing ArrayStorage struct by pointing to the contained m_vector element.  This was done for performance reasons as part of a collection of other changes. It turns out that returning to point directly to the ArrayStorage struct performs slightly better (~.3%).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260305</commentid>
    <comment_count>1</comment_count>
      <attachid>63521</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-08-04 17:46:45 -0700</bug_when>
    <thetext>Created attachment 63521
Path to change from using m_vector to m_storage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260385</commentid>
    <comment_count>2</comment_count>
      <attachid>63521</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-04 21:46:12 -0700</bug_when>
    <thetext>Comment on attachment 63521
Path to change from using m_vector to m_storage

JavaScriptCore/runtime/JSArray.cpp:851
 +  }
I couldn&apos;t figure out why you needed to add this initialization -- it doesn&apos;t seem related to just changing what the Array points to. Am I missing something?

JavaScriptCore/runtime/JSArray.h:163
 +          ArrayStorage *m_storage; // Copy of ArrayStorage.m_vector.  Used for quick vector access and to materialize ArrayStorage ptr.
WebKit style guidelines specify &quot;ArrayStorage*&quot; rather than &quot;ArrayStorage *&quot;.

I think the comment here is out of date now.

r=me on the meat of the change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260681</commentid>
    <comment_count>3</comment_count>
      <attachid>63603</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-08-05 10:17:46 -0700</bug_when>
    <thetext>Created attachment 63603
Updated patch addressing reviewer&apos;s concerns

Removed initialization inadvertently included from another patch referenced by reviewer.

Removed comment that no longer applies after change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260724</commentid>
    <comment_count>4</comment_count>
      <attachid>63603</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-05 11:31:11 -0700</bug_when>
    <thetext>Comment on attachment 63603
Updated patch addressing reviewer&apos;s concerns

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261148</commentid>
    <comment_count>5</comment_count>
      <attachid>63603</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-06 01:18:14 -0700</bug_when>
    <thetext>Comment on attachment 63603
Updated patch addressing reviewer&apos;s concerns

Rejecting patch 63603 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/build-webkit&apos;, &apos;--debug&apos;]&quot; exit_code: 1
Last 500 characters of output:
cript-14D857B50A469C100032146C.sh


=== BUILDING AGGREGATE TARGET All OF PROJECT JavaScriptCore WITH CONFIGURATION Debug ===

Checking Dependencies...
** BUILD FAILED **

The following build commands failed:
JavaScriptCore:
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/JavaScriptCore.build/Debug/JavaScriptCore.build/Objects-normal/i386/JSArray.o /Users/eseidel/Projects/CommitQueue/JavaScriptCore/runtime/JSArray.cpp normal i386 c++ com.apple.compilers.gcc.4_2
(1 failure)


Full output: http://queues.webkit.org/results/3566957</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261355</commentid>
    <comment_count>6</comment_count>
      <attachid>63742</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-08-06 11:01:13 -0700</bug_when>
    <thetext>Created attachment 63742
Patch that include changes necessitated by patch for bug 43401

Added changes needed when this change is applied after patch 63427 (for bug #43401).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261413</commentid>
    <comment_count>7</comment_count>
      <attachid>63742</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-06 13:18:21 -0700</bug_when>
    <thetext>Comment on attachment 63742
Patch that include changes necessitated by patch for bug 43401

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261834</commentid>
    <comment_count>8</comment_count>
      <attachid>63742</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-07 22:29:46 -0700</bug_when>
    <thetext>Comment on attachment 63742
Patch that include changes necessitated by patch for bug 43401

Clearing flags on attachment: 63742

Committed r64937: &lt;http://trac.webkit.org/changeset/64937&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261835</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-07 22:29:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63521</attachid>
            <date>2010-08-04 17:46:45 -0700</date>
            <delta_ts>2010-08-05 10:17:46 -0700</delta_ts>
            <desc>Path to change from using m_vector to m_storage</desc>
            <filename>m_storage.patch</filename>
            <type>text/plain</type>
            <size>40213</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0Njk2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMDgtMDQgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmV2ZXJ0IEpTQXJyYXkgdG8gcG9pbnQgdG8gdGhlIGJlZ2lu
bmluZyBvZiB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZQorICAgICAgICBzdHJ1Y3QuICBUaGlz
IGlzIGRlc2NyaWJlZCBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDM1MjYuCisKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6fkpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpw
dXRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aW5jcmVhc2VWZWN0
b3JQcmVmaXhMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZp
bGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpzdWJjbGFzc0RhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRTdWJjbGFz
c0RhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y2FuR2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5jaGVja2VkU2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjptYXJrQ2hpbGRyZW5EaXJlY3QpOgorCiAyMDEwLTA4LTA0ICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggLSBhZGQgbmV3
IGhlYWRlciB0byAhTWFjIHByb2plY3RzLgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gNjQ2NTMpCisrKyBKYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
NCwxMSArMzE0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2Jh
bERhdGEtPmpzQXJyYXlWUHRyKSkpOwogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yKSksIHJlZ1QzKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2UpKSwgcmVn
VDMpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJl
c3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCkpKSk7CiAg
ICAgCi0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKLSAgICBs
b2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgbG9h
ZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDAp
OyAvLyBwYXlsb2FkCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgIAogICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CkBAIC0zNjcsMjIgKzM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNBcnJheVZQdHIpKSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKSkpKTsKICAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvcikp
LCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheSwgbV9zdG9yYWdlKSksIHJlZ1QzKTsKICAgICAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNo
MzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOworICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAgICAgCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7
CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwg
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7IC8vIHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1QxLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKKyAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsgLy8gcGF5bG9hZAorICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7IC8vIHRhZwogICAgIEp1
bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgYWRkMzIo
SW1tMzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
KSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgYWRkMzIoSW1t
MzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGFkZDMyKEltbTMyKDEpLCByZWdUMiwgcmVnVDAp
OwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKS1PQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
cikpKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0
LCB0aGlzKTsKICAgICAKICAgICBlbmQubGluayh0aGlzKTsKQEAgLTc0NCw4ICs3NDQsOCBAQCBi
b29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgSnVtcCBmYWlsdXJl
Q2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNBcnJheVZQdHIpKTsKICAgICAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0g
Z2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yKSksIHJlZ1QyKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgp
LU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKSksIHJlZ1QyKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2Up
KSwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7CiAgICAgCiAgICAgSnVtcCBmYWlsdXJlQ2Fz
ZXMyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBJbW0zMihJTlRfTUFYKSk7CiAgICAgbW92ZShy
ZWdUMiwgcmVnVDApOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiA2NDY1MykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMCArMTA2LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSkpOwogCi0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0
b3IpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1fc3RvcmFnZSkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQXJy
YXksIG1fdmVjdG9yTGVuZ3RoKSkpKTsKIAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKQEAgLTIxNywyMSArMjE3LDIxIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRh
LT5qc0FycmF5VlB0cikpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JM
ZW5ndGgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNBcnJheSwgbV92ZWN0b3IpKSwgcmVnVDIpOwotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0
UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKSksIHJl
Z1QyKTsKKyAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSk7CisgICAgc3RvcmVQdHIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5s
aW5rKHRoaXMpOwotICAgIGFkZDMyKEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKS1PQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKS1PQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvcikpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOworICAgIGFkZDMyKEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgIGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIG1vdmUocmVnVDEs
IHJlZ1QwKTsKICAgICBhZGQzMihJbW0zMigxKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAs
IEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKS1P
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvcikpKTsKKyAgICBzdG9yZTMyKHJl
Z1QwLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5s
aW5rKHRoaXMpOwpAQCAtNzM2LDggKzczNiw4IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZVBh
dGNoR2V0QXJyYXlMZW4KICAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRhLT5qc0FycmF5VlB0cikpOwog
CiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3Jh
Z2UKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBt
X3ZlY3RvcikpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKS1PQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvcikpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVnVDIp
OwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMiwgSW1tMzIo
SlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCkpOwogCiAgICAgZW1pdEZhc3RBcml0aEludFRv
SW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiA2NDY1MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMCArMTMxLDkgQEAgSlNBcnJheTo6SlNBcnJheShW
UHRyU3RlYWxpbmdIYWNrVHlwZSkKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkgPSAw
OwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4oZmFzdFplcm9lZE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7Ci0gICAg
c3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBzdG9yYWdlOworICAgIG1fc3RvcmFnZSA9IHN0YXRpY19j
YXN0PEFycmF5U3RvcmFnZSo+KGZhc3RaZXJvZWRNYWxsb2Moc3RvcmFnZVNpemUoaW5pdGlhbENh
cGFjaXR5KSkpOworICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7CiAgICAg
bV9pbmRleEJpYXMgPSAwOwotICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKICAgICBtX3Zl
Y3Rvckxlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
QEAgLTE0OSwxMCArMTQ4LDkgQEAgSlNBcnJheTo6SlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxT
dHJ1YwogewogICAgIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IDA7CiAKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihmYXN0WmVyb2VkTWFs
bG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKLSAgICBzdG9yYWdlLT5tX2FsbG9j
QmFzZSA9IHN0b3JhZ2U7CisgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4oZmFzdFplcm9lZE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7CisgICAg
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKICAgICBtX2luZGV4QmlhcyA9IDA7
Ci0gICAgc2V0QXJyYXlTdG9yYWdlKHN0b3JhZ2UpOwogICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5p
dGlhbENhcGFjaXR5OwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTY5LDI5ICsxNjcs
MjggQEAgSlNBcnJheTo6SlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1YwogICAgIGVsc2UK
ICAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gbWluKEJBU0VfVkVDVE9SX0xFTiwgTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oZmFzdE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNp
dHkpKSk7Ci0gICAgc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBzdG9yYWdlOwotICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKKyAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxB
cnJheVN0b3JhZ2UqPihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsK
KyAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOworICAgIG1fc3RvcmFnZS0+
bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIG1faW5kZXhCaWFzID0gMDsKICAgICBtX3Zl
Y3Rvckxlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKLSAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFn
ZSk7ICAgIAotICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwotICAgIHN0b3JhZ2Ut
PnN1YmNsYXNzRGF0YSA9IDA7Ci0gICAgc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9IDA7
CisgICAgbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gMDsKKyAgICBtX3N0b3JhZ2UtPnN1
YmNsYXNzRGF0YSA9IDA7CisgICAgbV9zdG9yYWdlLT5yZXBvcnRlZE1hcENhcGFjaXR5ID0gMDsK
IAogICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gQ3JlYXRlQ29tcGFjdCkgewogI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSAhIWluaXRpYWxDYXBhY2l0eTsKKyAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gISFpbml0aWFsQ2FwYWNpdHk7CiAjZW5kaWYKLSAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSAwOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
aW5pdGlhbENhcGFjaXR5OworICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gMDsKKyAgICAg
ICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbENhcGFjaXR5OwogICAg
IH0gZWxzZSB7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKICAgICAgICAgc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIHN0b3Jh
Z2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7Ci0gICAgICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fdmVjdG9yOworICAg
ICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgbV9zdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICAgICAgSlNWYWx1ZSogdmVjdG9yID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbml0
aWFsQ2FwYWNpdHk7ICsraSkKICAgICAgICAgICAgIHZlY3RvcltpXSA9IEpTVmFsdWUoKTsKICAg
ICB9CkBAIC0yMDYsMjIgKzIwMywyMSBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVm
UHRyPFN0cnVjCiB7CiAgICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gbGlzdC5zaXplKCk7
CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2Uq
PihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKLSAgICBzdG9yYWdl
LT5tX2FsbG9jQmFzZSA9IHN0b3JhZ2U7CisgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJy
YXlTdG9yYWdlKj4oZmFzdE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7Cisg
ICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKICAgICBtX2luZGV4QmlhcyA9
IDA7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsQ2FwYWNpdHk7CisgICAgbV9zdG9y
YWdlLT5tX2xlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKICAgICBtX3ZlY3Rvckxlbmd0aCA9IGlu
aXRpYWxDYXBhY2l0eTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlh
bENhcGFjaXR5OwotICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwotICAgIHN0b3Jh
Z2UtPnN1YmNsYXNzRGF0YSA9IDA7Ci0gICAgc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9
IDA7CisgICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbENhcGFjaXR5
OworICAgIG1fc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCA9IDA7CisgICAgbV9zdG9yYWdlLT5z
dWJjbGFzc0RhdGEgPSAwOworICAgIG1fc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9IDA7
CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gZmFsc2U7CisgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uID0gZmFsc2U7CiAjZW5kaWYKLSAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFnZSk7CiAK
ICAgICBzaXplX3QgaSA9IDA7Ci0gICAgSlNWYWx1ZSogdmVjdG9yID0gbV92ZWN0b3I7CisgICAg
SlNWYWx1ZSogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBBcmdMaXN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpKQogICAgICAgICB2
ZWN0b3JbaV0gPSAqaXQ7CkBAIC0yMzYsMTQgKzIzMiwxMyBAQCBKU0FycmF5Ojp+SlNBcnJheSgp
CiAgICAgQVNTRVJUKHZwdHIoKSA9PSBKU0dsb2JhbERhdGE6OmpzQXJyYXlWUHRyKTsKICAgICBj
aGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKIAotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwotICAgIGRlbGV0ZSBzdG9yYWdlLT5t
X3NwYXJzZVZhbHVlTWFwOwotICAgIGZhc3RGcmVlKHN0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKKyAg
ICBkZWxldGUgbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwOworICAgIGZhc3RGcmVlKG1fc3Rv
cmFnZS0+bV9hbGxvY0Jhc2UpOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9s
ZW5ndGgpIHsKICAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCkBAIC0yNTIsNyArMjQ3
LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YQogICAgIH0KIAog
ICAgIGlmIChpIDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90
ID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwogICAgICAgICBpZiAodmFsdWVTbG90KSB7CiAgICAgICAgICAgICBzbG90LnNl
dFZhbHVlU2xvdCgmdmFsdWVTbG90KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjky
LDcgKzI4Nyw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwog
ICAgIAogICAgIGJvb2wgaXNBcnJheUluZGV4OwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUudG9BcnJheUluZGV4KCZpc0FycmF5SW5kZXgpOwpAQCAtMzAwLDcgKzI5NSw3IEBAIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUKICAgICAgICAgaWYgKGkgPj0gc3Rv
cmFnZS0+bV9sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChp
IDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIEpTVmFsdWUmIHZhbHVlID0gbV92ZWN0
b3JbaV07CisgICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHZhbHVlLCAwKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM0NSw3ICszNDAsNyBAQCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
CiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CiAgICAgaWYgKGkg
Pj0gbGVuZ3RoICYmIGkgPD0gTUFYX0FSUkFZX0lOREVYKSB7CkBAIC0zNTQsNyArMzQ5LDcgQEAg
dm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZwogICAgIH0KIAogICAgIGlm
IChpIDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gbV92
ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldOwogICAgICAgICBpZiAodmFsdWVTbG90KSB7CiAgICAgICAgICAgICB2YWx1ZVNsb3QgPSB2
YWx1ZTsKICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTM3MSw3ICszNjYsNyBA
QCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnCiAKIE5FVkVSX0lOTElO
RSB2b2lkIEpTQXJyYXk6OnB1dFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKIApA
QCAtNDA5LDggKzQwNCw5IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1dFNsb3dDYXNl
KEUKICAgICAvLyBGYXN0IGNhc2UgaXMgd2hlbiB0aGVyZSBpcyBubyBzcGFyc2UgbWFwLCBzbyB3
ZSBjYW4gaW5jcmVhc2UgdGhlIHZlY3RvciBzaXplIHdpdGhvdXQgbW92aW5nIHZhbHVlcyBmcm9t
IGl0LgogICAgIGlmICghbWFwIHx8IG1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChpbmNy
ZWFzZVZlY3Rvckxlbmd0aChpICsgMSkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yW2ldID0gdmFs
dWU7Ci0gICAgICAgICAgICArK2FycmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldID0gdmFsdWU7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7CiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwpAQCAtNDQ1LDIyICs0NDEs
MjMgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0U2xvd0Nhc2UoRQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9y
YWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFzICogc2l6
ZW9mKEpTVmFsdWUpKTsKLSAgICBzdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwot
ICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKKyAgICBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0PEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBt
X2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKSk7CisgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IGJhc2VTdG9yYWdlOworICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7CisgICAgSlNWYWx1ZSogdmVjdG9y
ID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAKICAgICBpZiAobmV3TnVtVmFsdWVzSW5WZWN0b3IgPT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIDEpIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gdmVjdG9yTGVuZ3RoOyBqIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2opCi0gICAgICAgICAg
ICBtX3ZlY3RvcltqXSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHZlY3RvcltqXSA9IEpTVmFs
dWUoKTsKICAgICAgICAgaWYgKGkgPiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQogICAgICAgICAg
ICAgbWFwLT5yZW1vdmUoaSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gdmVjdG9yTGVuZ3RoOyBqIDwgbWF4KHZlY3Rvckxlbmd0aCwgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCk7ICsraikKLSAgICAgICAgICAgIG1fdmVjdG9yW2pdID0gSlNWYWx1ZSgpOworICAgICAg
ICAgICAgdmVjdG9yW2pdID0gSlNWYWx1ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBt
YXgodmVjdG9yTGVuZ3RoLCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsgaiA8IG5ld1ZlY3Rvckxl
bmd0aDsgKytqKQotICAgICAgICAgICAgbV92ZWN0b3Jbal0gPSBtYXAtPnRha2Uoaik7CisgICAg
ICAgICAgICB2ZWN0b3Jbal0gPSBtYXAtPnRha2Uoaik7CiAgICAgfQogCiAgICAgQVNTRVJUKGkg
PCBuZXdWZWN0b3JMZW5ndGgpOwpAQCAtNDY4LDcgKzQ2NSw3IEBAIE5FVkVSX0lOTElORSB2b2lk
IEpTQXJyYXk6OnB1dFNsb3dDYXNlKEUKICAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxl
bmd0aDsKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3TnVtVmFsdWVzSW5W
ZWN0b3I7CiAKLSAgICBtX3ZlY3RvcltpXSA9IHZhbHVlOworICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldID0gdmFsdWU7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTQ5MiwxMCArNDg5
LDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiAKIHsKICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAg
ICAgaWYgKGkgPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3Qg
PSBtX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CiAgICAgICAgIGlmICghdmFsdWVTbG90KSB7CiAgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzEsMTEgKzUyOCwx
MSBAQCB2b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0CiAgICAgLy8gaXMg
aW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVy
ZW50IGFwcHJvYWNoLAogICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZm
ZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KIAotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKICAgICAKICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0
b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAobV92ZWN0b3JbaV0p
CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwogICAgIH0KIApAQCAtNTU2LDcg
KzU1Myw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmUKICAgICBB
U1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKIAogICAg
IHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheVN0
b3JhZ2UoKS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9zdG9yYWdlLT5tX2xl
bmd0aDsKIAogICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbGVuZ3RoKQogICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBsZW5ndGg7CkBAIC01ODMsNyArNTgwLDcgQEAgYm9vbCBKU0FycmF5OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aCh1bnNpZwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBh
cnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2Vz
IG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCiAgICAgLy8gdG8gdGhl
IHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBj
YW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
IAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwogICAgIEFTU0VS
VChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwpAQCAtNTk0LDExICs1OTEsMTAgQEAgYm9vbCBK
U0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aCh1bnNpZwogICAgIGlmICghdHJ5RmFzdFJlYWxs
b2MoYmFzZVN0b3JhZ2UsIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFz
KSkuZ2V0VmFsdWUoYmFzZVN0b3JhZ2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBz
dG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFy
Kj4oYmFzZVN0b3JhZ2UpICsgbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkpOwotICAgIHN0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgc2V0QXJyYXlTdG9yYWdlKHN0
b3JhZ2UpOworICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFycmF5
U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKSk7CisgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9y
YWdlOwogCi0gICAgSlNWYWx1ZSogdmVjdG9yID0gbV92ZWN0b3I7CisgICAgSlNWYWx1ZSogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgIHZlY3RvcltpXSA9IEpTVmFs
dWUoKTsKIApAQCAtNjE0LDggKzYxMCw3IEBAIGJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JQ
cmVmaXhMZW5ndGgKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4g
aW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBh
bnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENh
bGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1v
cmUgZWZmaWNpZW50bHkuCiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlT
dG9yYWdlKCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlOworICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBtX3ZlY3Rvckxlbmd0aDsKICAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsK
QEAgLTYyOCwxOCArNjIzLDE2IEBAIGJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JQcmVmaXhM
ZW5ndGgKICAgICAKICAgICBtX2luZGV4QmlhcyArPSBuZXdWZWN0b3JMZW5ndGggLSBuZXdMZW5n
dGg7CiAgICAgCi0gICAgbmV3U3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld0Jhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFzICogc2l6
ZW9mKEpTVmFsdWUpKTsKKyAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFycmF5U3Rv
cmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdCYXNlU3RvcmFnZSkgKyBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKSk7CiAKLSAgICBtZW1jcHkobmV3U3RvcmFnZSwgc3RvcmFnZSwgc3Rv
cmFnZVNpemUoMCkpOwotICAgIG1lbWNweSgmbmV3U3RvcmFnZS0+bV92ZWN0b3JbbmV3TGVuZ3Ro
IC0gbV92ZWN0b3JMZW5ndGhdLCAmc3RvcmFnZS0+bV92ZWN0b3JbMF0sIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihKU1ZhbHVlKSk7CisgICAgbWVtY3B5KG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOworICAgIG1lbWNweSgmbV9zdG9yYWdlLT5tX3ZlY3RvcltuZXdMZW5ndGggLSBt
X3ZlY3Rvckxlbmd0aF0sICZzdG9yYWdlLT5tX3ZlY3RvclswXSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Jh
c2VTdG9yYWdlOworICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdCYXNlU3RvcmFnZTsK
ICAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld0xlbmd0aDsKICAgICAKICAgICBmYXN0RnJlZShzdG9y
YWdlLT5tX2FsbG9jQmFzZSk7CiAKLSAgICBzZXRBcnJheVN0b3JhZ2UobmV3U3RvcmFnZSk7Ci0g
ICAgCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0b3JhZ2VT
aXplKG5ld1ZlY3Rvckxlbmd0aCkgLSBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKICAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0OCwyMSArNjQxLDIxIEBAIGJvb2wgSlNBcnJheTo6aW5j
cmVhc2VWZWN0b3JQcmVmaXhMZW5ndGgKIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5zaWdu
ZWQgbmV3TGVuZ3RoKQogeworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
KyAgICAKICNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIGlmICghbV9zdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uKQorICAgIGlmICghc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbikKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisgICAg
ICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKICNlbmRpZgog
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Ci0gICAgCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CiAKICAgICBpZiAobmV3TGVuZ3Ro
IDwgbGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVu
Z3RoLCBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0
aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFs
dWVTbG90ID0gbV92ZWN0b3JbaV07CisgICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUgPSB2YWx1ZVNs
b3Q7CiAgICAgICAgICAgICB2YWx1ZVNsb3QgPSBKU1ZhbHVlKCk7CiAgICAgICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGhhZFZhbHVlOwpAQCAtNjkxLDcgKzY4NCw3IEBA
IEpTVmFsdWUgSlNBcnJheTo6cG9wKCkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bV9sZW5ndGg7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC03MDIsNyArNjk1LDcgQEAgSlNW
YWx1ZSBKU0FycmF5Ojpwb3AoKQogICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAgaWYgKGxlbmd0
aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IG1fdmVj
dG9yW2xlbmd0aF07CisgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2xlbmd0aF07CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlU2xv
dDsKQEAgLTczNSwxMCArNzI4LDEwIEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwogCiAgICAgaWYgKHN0b3JhZ2UtPm1fbGVuZ3RoIDwgbV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgbV92ZWN0b3Jbc3RvcmFnZS0+bV9sZW5ndGhdID0gdmFsdWU7CisgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW3N0b3JhZ2UtPm1fbGVuZ3RoXSA9IHZhbHVlOwogICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICsrc3RvcmFnZS0+bV9s
ZW5ndGg7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTc0OSw4ICs3NDIsOCBAQCB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXA7CiAgICAgICAgIGlm
ICghbWFwIHx8IG1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaW5jcmVhc2VWZWN0
b3JMZW5ndGgoc3RvcmFnZS0+bV9sZW5ndGggKyAxKSkgewotICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgICAgICBtX3ZlY3RvcltzdG9yYWdlLT5t
X2xlbmd0aF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwor
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW3N0b3JhZ2UtPm1fbGVuZ3RoXSA9IHZh
bHVlOwogICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAg
ICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbGVuZ3RoOwogICAgICAgICAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKQEAgLTc2OSw3ICs3NjIsNyBAQCB2b2lkIEpTQXJyYXk6OnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiBleGVjCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwogICAgIAogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwogICAgIApAQCAtNzgyLDcgKzc3NSw3IEBAIHZvaWQgSlNBcnJheTo6
c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgLy8gc2xvdHMgYW5kIHRoZW4gZmls
bCB0aGVtIHdpdGggcG9zc2libGUgcHJvcGVydGllcy4gIFNlZSBFQ01BIHNwZWMuCiAgICAgICAg
IC8vIDE1LjQuNC45IHN0ZXBzIDExIHRocm91Z2ggMTMuCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGNvdW50OyBpIDwgb2xkTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgoaSA+PSBt
X3ZlY3Rvckxlbmd0aCkgfHwgKCFtX3ZlY3RvcltpXSkpIHsKKyAgICAgICAgICAgIGlmICgoaSA+
PSBtX3ZlY3Rvckxlbmd0aCkgfHwgKCFtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSkgewogICAgICAg
ICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwogICAgICAgICAgICAgICAgIEpTVmFs
dWUgcCA9IHByb3RvdHlwZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIXAuaXNOdWxsKCkpICYm
IChhc09iamVjdChwKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGksIHNsb3QpKSkKQEAgLTc5MCwx
MSArNzgzLDExIEBAIHZvaWQgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsgLy8gVGhlIHB1dCgpIGFib3ZlIGNvdWxkIGhhdmUgZ3Jvd24gdGhlIHZlY3RvciBhbmQgcmVh
bGxvYydlZCBzdG9yYWdlLgorICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOyAvLyBUaGUgcHV0
KCkgYWJvdmUgY291bGQgaGF2ZSBncm93biB0aGUgdmVjdG9yIGFuZCByZWFsbG9jJ2VkIHN0b3Jh
Z2UuCiAKICAgICAgICAgLy8gTmVlZCB0byBkZWNyZW1lbnQgbnVtVmFsdWVzSW52ZWN0b3IgYmFz
ZWQgb24gbnVtYmVyIG9mIHJlYWwgZW50cmllcwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgKHVuc2lnbmVkKWNvdW50OyArK2kpCi0gICAgICAgICAgICBpZiAoKGkgPCBtX3ZlY3Rv
ckxlbmd0aCkgJiYgKG1fdmVjdG9yW2ldKSkKKyAgICAgICAgICAgIGlmICgoaSA8IG1fdmVjdG9y
TGVuZ3RoKSAmJiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pKQogICAgICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICB9IGVsc2UKICAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciAtPSBjb3VudDsKQEAgLTgwOSwxNyArODAyLDE2IEBAIHZvaWQg
SlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgaWYgKG1fdmVjdG9y
TGVuZ3RoKSB7CiAgICAgICAgICAgICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpICsgY291bnQgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAg
ICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0g
ICAgICAgICAgICBzdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdC
YXNlU3RvcmFnZSk7CisgICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFy
cmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKIAogICAgICAgICAgICAgbV9pbmRleEJpYXMg
Kz0gY291bnQ7Ci0gICAgICAgICAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFnZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CiAgICAgCiB2b2lkIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUq
IGV4ZWMsIGludCBjb3VudCkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICBB
U1NFUlQobV9pbmRleEJpYXMgPj0gMCk7CiAgICAgQVNTRVJUKGNvdW50ID49IDApOwpAQCAtODMy
LDcgKzgyNCw3IEBAIHZvaWQgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAg
ICAgICAgLy8gc2xvdHMgYW5kIHRoZW4gZmlsbCB0aGVtIHdpdGggcG9zc2libGUgcHJvcGVydGll
cy4gIFNlZSBFQ01BIHNwZWMuCiAgICAgICAgIC8vIDE1LjQuNC4xMyBzdGVwcyA4IHRocm91Z2gg
MTAuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgaWYgKChpID49IG1fdmVjdG9yTGVuZ3RoKSB8fCAoIW1fdmVjdG9yW2ldKSkgewor
ICAgICAgICAgICAgaWYgKChpID49IG1fdmVjdG9yTGVuZ3RoKSB8fCAoIW1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0pKSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBwID0gcHJvdG90eXBlKCk7CiAgICAgICAgICAgICAgICAg
aWYgKCghcC5pc051bGwoKSkgJiYgKGFzT2JqZWN0KHApLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aSwgc2xvdCkpKQpAQCAtODQxLDE5ICs4MzMsMjEgQEAgdm9pZCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiBleAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHN0b3JhZ2UgPSBh
cnJheVN0b3JhZ2UoKTsgLy8gVGhlIHB1dCgpIGFib3ZlIGNvdWxkIGhhdmUgZ3Jvd24gdGhlIHZl
Y3RvciBhbmQgcmVhbGxvYydlZCBzdG9yYWdlLgorICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7IC8v
IFRoZSBwdXQoKSBhYm92ZSBjb3VsZCBoYXZlIGdyb3duIHRoZSB2ZWN0b3IgYW5kIHJlYWxsb2Mn
ZWQgc3RvcmFnZS4KICAgICAKICAgICBpZiAobV9pbmRleEJpYXMgPj0gY291bnQpIHsKICAgICAg
ICAgbV9pbmRleEJpYXMgLT0gY291bnQ7CiAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgLSBjb3VudCAqIHNpemVvZihKU1ZhbHVl
KTsKICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUo
MCkpOwotICAgICAgICBzdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihu
ZXdCYXNlU3RvcmFnZSk7Ci0gICAgICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKKyAgICAg
ICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3Rv
cmFnZSk7CiAgICAgICAgIG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OwotICAgIH0gZWxzZSBpZiAo
KCFtX2luZGV4QmlhcykgJiYgKCFpbmNyZWFzZVZlY3RvclByZWZpeExlbmd0aChtX3ZlY3Rvckxl
bmd0aCArIGNvdW50KSkpIHsKKyAgICB9IGVsc2UgaWYgKCFpbmNyZWFzZVZlY3RvclByZWZpeExl
bmd0aChtX3ZlY3Rvckxlbmd0aCArIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSBKU1Zh
bHVlKCk7CiB9CiAKIHZvaWQgSlNBcnJheTo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0
YWNrKQpAQCAtODc5LDcgKzg3Myw3IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZv
clFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
IGNhbGxEYXRhKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKIAogICAgIHVuc2lnbmVk
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7CiAgICAg
aWYgKHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKQEAgLTg5Myw3ICs4ODcsNyBAQCB2b2lk
IEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgYm9vbCBhbGxWYWx1ZXNB
cmVOdW1iZXJzID0gdHJ1ZTsKICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFtX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgIGlmICghc3RvcmFnZS0+
bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVy
cyA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkwNSwxNCArODk5
LDE0IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAgICAvLyBG
b3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhh
biBtZXJnZXNvcnQuIFdlCiAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0
YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKICAgICAvLyBzaWRlLWVmZmVj
dCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAg
IHFzb3J0KG1fdmVjdG9yLCBzaXplLCBzaXplb2YoSlNWYWx1ZSksIGNvbXBhcmVOdW1iZXJzRm9y
UVNvcnQpOworICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoSlNWYWx1
ZSksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0
Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5zaWduZWQgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoKTsKICAgICBpZiAoc3Rv
cmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkgewpAQCAtOTM1LDcgKzkyOSw3IEBAIHZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CiAgICAgfQpAQCAtOTY3LDcgKzk2MSw3IEBAIHZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gbW9kaWZ5aW5nIHRoZSB2
ZWN0b3IgaW5jb3JyZWN0bHkuCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICBtX3ZlY3RvcltpXSA9IHZhbHVlc1tp
XS5maXJzdDsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSB2YWx1ZXNbaV0uZmlyc3Q7
CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KQEAgLTEw
NTQsNyArMTA0OCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
IHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
CiAKICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBj
b21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgogCkBAIC0xMDkzLDE0ICsxMDg3LDE0IEBA
IHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogICAgIC8vIEl0ZXJh
dGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRl
ZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgog
ICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7
Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fdmVjdG9yW251bURlZmluZWRdOworICAgICAgICBKU1Zh
bHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXTsKICAgICAgICAgaWYgKCF2IHx8
IHYuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV92ZWN0
b3JbaV07CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAg
ICBpZiAodikgewogICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
ICAgICArK251bVVuZGVmaW5lZDsKQEAgLTExMjQsNyArMTExOCw3IEBAIHZvaWQgSlNBcnJheTo6
c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdl
ID0gbV9zdG9yYWdlOwogCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTE0NiwxNyArMTE0
MCwxNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgQVZM
VHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVy
OwogICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fdmVjdG9yW2ldID0gdHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWU7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldID0gdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWU7CiAgICAgICAg
ICsraXRlcjsKICAgICB9CiAKICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3Ro
OyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0gPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQg
dW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgogICAgIGZvciAodW5z
aWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
Ci0gICAgICAgIG1fdmVjdG9yW2ldID0gSlNWYWx1ZSgpOworICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXSA9IEpTVmFsdWUoKTsKIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwogCkBAIC0xMTY1LDcgKzExNTksNyBAQCB2b2lkIEpTQXJy
YXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICBKU1ZhbHVlKiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgs
IG1fdmVjdG9yTGVuZ3RoKTsKQEAgLTExODMsOSArMTE3Nyw5IEBAIHZvaWQgSlNBcnJheTo6Zmls
bEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9SZWdpc3RlcnMo
RXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogYnVmZmVyLCB1aW50MzJfdCBtYXhTaXplKQogewot
ICAgIEFTU0VSVChhcnJheVN0b3JhZ2UoKS0+bV9sZW5ndGggPj0gbWF4U2l6ZSk7CisgICAgQVNT
RVJUKG1fc3RvcmFnZS0+bV9sZW5ndGggPj0gbWF4U2l6ZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1h
eFNpemUpOwotICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fdmVjdG9yOworICAgIEpTVmFsdWUqIHZl
Y3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWlu
KG1heFNpemUsIG1fdmVjdG9yTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3Ig
KDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CkBAIC0xMjAzLDcgKzExOTcsNyBAQCB1bnNpZ25lZCBK
U0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwogCkBAIC0xMjEx
LDE3ICsxMjA1LDE3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKCkKICAg
ICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwogCiAgICAgZm9yICg7IG51bURlZmluZWQgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV92
ZWN0b3JbbnVtRGVmaW5lZF07CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9y
W251bURlZmluZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV92ZWN0b3Jb
aV07CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBp
ZiAodikgewogICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICArK251bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3Zl
Y3RvcltudW1EZWZpbmVkKytdID0gdjsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkKytdID0gdjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTIzNSwyMSArMTIy
OSwyMSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCiAgICAgICAgICAg
ICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgobmV3VXNlZFZlY3Rvckxlbmd0aCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgICAgIH0KIAogICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3ZlY3RvcltudW1EZWZpbmVkKytdID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10gPSBpdC0+
c2Vjb25kOwogCiAgICAgICAgIGRlbGV0ZSBtYXA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNl
VmFsdWVNYXAgPSAwOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSBqc1VuZGVmaW5lZCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0gSlNWYWx1ZSgpOworICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXSA9IEpTVmFsdWUoKTsKIAogICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwogCkBAIC0xMjYwLDE5ICsxMjU0
LDE5IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKCkKIAogdm9pZCogSlNB
cnJheTo6c3ViY2xhc3NEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCkt
PnN1YmNsYXNzRGF0YTsKKyAgICByZXR1cm4gbV9zdG9yYWdlLT5zdWJjbGFzc0RhdGE7CiB9CiAK
IHZvaWQgSlNBcnJheTo6c2V0U3ViY2xhc3NEYXRhKHZvaWQqIGQpCiB7Ci0gICAgYXJyYXlTdG9y
YWdlKCktPnN1YmNsYXNzRGF0YSA9IGQ7CisgICAgbV9zdG9yYWdlLT5zdWJjbGFzc0RhdGEgPSBk
OwogfQogCiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKIAogdm9pZCBKU0FycmF5OjpjaGVj
a0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCiB7Ci0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwogCiAgICAgQVNTRVJUKHN0b3JhZ2UpOwogICAgIGlmICh0eXBlID09IFNv
cnRDb25zaXN0ZW5jeUNoZWNrKQpAQCAtMTI4MCw3ICsxMjc0LDcgQEAgdm9pZCBKU0FycmF5Ojpj
aGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0
b3IgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvckxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV92ZWN0b3JbaV0pIHsKKyAgICAgICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXSkgewogICAgICAgICAgICAg
QVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKICAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVm
aW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQu
CkBAIC0xMjk4LDcgKzEyOTIsNyBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29u
c2lzdGVuCiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBz
dG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OwogICAgICAgICAgICAgQVNTRVJU
KGluZGV4IDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49
IG1fdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT5t
X3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lO
REVYKTsKICAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKICAgICAgICAgICAgIGlmICh0
eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHJldmlzaW9uIDY0NjUzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBhcnJheVN0b3Jh
Z2UoKS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQogICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25l
ZCk7IC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEg
UmVnRXhwTWF0Y2hBcnJheS4KIAogICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKik7CkBAIC05
MCwxMSArOTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2hpZnRDb3VudChF
eGVjU3RhdGUqLCBpbnQgY291bnQpOwogICAgICAgICB2b2lkIHVuc2hpZnRDb3VudChFeGVjU3Rh
dGUqLCBpbnQgY291bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkg
eyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fdmVjdG9yW2ldOyB9CisgICAgICAgIGJv
b2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYm
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KICAgICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1bnNp
Z25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblNldEluZGV4
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQpAQCAtMTAyLDkgKzEw
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2Fu
U2V0SW5kZXgoaSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlJiB4ID0gbV92
ZWN0b3JbaV07CisgICAgICAgICAgICBKU1ZhbHVlJiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3Rvcltp
XTsKICAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAq
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAq
c3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgp
CiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7CkBAIC0xMTUs
NyArMTE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdW5jaGVja2VkU2V0SW5k
ZXgodW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
Y2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKICAgICAgICAgICAgIEFTU0VSVChzdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKICNlbmRpZgpAQCAtMTQzLDE2ICsxNDMs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCogc3ViY2xhc3NEYXRhKCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgc2V0U3ViY2xhc3NEYXRhKHZvaWQqKTsKICAgICAgICAgCi0gICAgICAg
IGlubGluZSBBcnJheVN0b3JhZ2UgKmFycmF5U3RvcmFnZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG1fdmVjdG9yKSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihKU1ZhbHVlKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0QXJyYXlT
dG9yYWdlKEFycmF5U3RvcmFnZSAqc3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV92
ZWN0b3IgPSAmc3RvcmFnZS0+bV92ZWN0b3JbMF07Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogCkBAIC0xNzAsNyArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92
ZWN0b3IKICAgICAgICAgaW50IG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUg
c2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0gICAgICAgIEpTVmFsdWUqIG1fdmVj
dG9yOyAvLyBDb3B5IG9mIEFycmF5U3RvcmFnZS5tX3ZlY3Rvci4gIFVzZWQgZm9yIHF1aWNrIHZl
Y3RvciBhY2Nlc3MgYW5kIHRvIG1hdGVyaWFsaXplIEFycmF5U3RvcmFnZSBwdHIuCisgICAgICAg
IEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOyAvLyBDb3B5IG9mIEFycmF5U3RvcmFnZS5tX3ZlY3Rv
ci4gIFVzZWQgZm9yIHF1aWNrIHZlY3RvciBhY2Nlc3MgYW5kIHRvIG1hdGVyaWFsaXplIEFycmF5
U3RvcmFnZSBwdHIuCiAgICAgfTsKIAogICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSk7CkBA
IC0xOTYsNyArMTg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBKU09iamVj
dDo6bWFya0NoaWxkcmVuRGlyZWN0KG1hcmtTdGFjayk7CiAgICAgICAgIAotICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBzdGQ6Om1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwogICAgICAg
ICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPm1fdmVjdG9yLCB1c2VkVmVjdG9yTGVu
Z3RoLCBNYXlDb250YWluTnVsbFZhbHVlcyk7Cg==
</data>
<flag name="review"
          id="51896"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63603</attachid>
            <date>2010-08-05 10:17:46 -0700</date>
            <delta_ts>2010-08-06 11:01:13 -0700</delta_ts>
            <desc>Updated patch addressing reviewer&apos;s concerns</desc>
            <filename>m_storage.patch</filename>
            <type>text/plain</type>
            <size>39878</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0Njk2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMDgtMDQgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmV2ZXJ0IEpTQXJyYXkgdG8gcG9pbnQgdG8gdGhlIGJlZ2lu
bmluZyBvZiB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZQorICAgICAgICBzdHJ1Y3QuICBUaGlz
IGlzIGRlc2NyaWJlZCBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDM1MjYuCisKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6fkpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpw
dXRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aW5jcmVhc2VWZWN0
b3JQcmVmaXhMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZp
bGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpzdWJjbGFzc0RhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRTdWJjbGFz
c0RhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y2FuR2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5jaGVja2VkU2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjptYXJrQ2hpbGRyZW5EaXJlY3QpOgorCiAyMDEwLTA4LTA0ICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggLSBhZGQgbmV3
IGhlYWRlciB0byAhTWFjIHByb2plY3RzLgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gNjQ2NTMpCisrKyBKYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
NCwxMSArMzE0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2Jh
bERhdGEtPmpzQXJyYXlWUHRyKSkpOwogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yKSksIHJlZ1QzKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2UpKSwgcmVn
VDMpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJl
c3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCkpKSk7CiAg
ICAgCi0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKLSAgICBs
b2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgbG9h
ZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDAp
OyAvLyBwYXlsb2FkCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgIAogICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CkBAIC0zNjcsMjIgKzM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNBcnJheVZQdHIpKSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKSkpKTsKICAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvcikp
LCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheSwgbV9zdG9yYWdlKSksIHJlZ1QzKTsKICAgICAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNo
MzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOworICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAgICAgCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7
CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwg
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7IC8vIHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1QxLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKKyAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsgLy8gcGF5bG9hZAorICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7IC8vIHRhZwogICAgIEp1
bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgYWRkMzIo
SW1tMzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
KSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgYWRkMzIoSW1t
MzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGFkZDMyKEltbTMyKDEpLCByZWdUMiwgcmVnVDAp
OwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKS1PQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
cikpKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0
LCB0aGlzKTsKICAgICAKICAgICBlbmQubGluayh0aGlzKTsKQEAgLTc0NCw4ICs3NDQsOCBAQCBi
b29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgSnVtcCBmYWlsdXJl
Q2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNBcnJheVZQdHIpKTsKICAgICAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0g
Z2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yKSksIHJlZ1QyKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgp
LU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKSksIHJlZ1QyKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2Up
KSwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7CiAgICAgCiAgICAgSnVtcCBmYWlsdXJlQ2Fz
ZXMyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBJbW0zMihJTlRfTUFYKSk7CiAgICAgbW92ZShy
ZWdUMiwgcmVnVDApOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiA2NDY1MykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMCArMTA2LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSkpOwogCi0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0
b3IpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1fc3RvcmFnZSkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQXJy
YXksIG1fdmVjdG9yTGVuZ3RoKSkpKTsKIAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKQEAgLTIxNywyMSArMjE3LDIxIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRh
LT5qc0FycmF5VlB0cikpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JM
ZW5ndGgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNBcnJheSwgbV92ZWN0b3IpKSwgcmVnVDIpOwotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0
UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKSksIHJl
Z1QyKTsKKyAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSk7CisgICAgc3RvcmVQdHIocmVnVDAsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5s
aW5rKHRoaXMpOwotICAgIGFkZDMyKEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKS1PQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKS1PQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvcikpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOworICAgIGFkZDMyKEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgIGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIG1vdmUocmVnVDEs
IHJlZ1QwKTsKICAgICBhZGQzMihJbW0zMigxKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAs
IEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKS1P
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvcikpKTsKKyAgICBzdG9yZTMyKHJl
Z1QwLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5s
aW5rKHRoaXMpOwpAQCAtNzM2LDggKzczNiw4IEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZVBh
dGNoR2V0QXJyYXlMZW4KICAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRhLT5qc0FycmF5VlB0cikpOwog
CiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3Jh
Z2UKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBt
X3ZlY3RvcikpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKS1PQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvcikpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVnVDIp
OwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMiwgSW1tMzIo
SlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCkpOwogCiAgICAgZW1pdEZhc3RBcml0aEludFRv
SW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiA2NDY1MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMCArMTMxLDkgQEAgSlNBcnJheTo6SlNBcnJheShW
UHRyU3RlYWxpbmdIYWNrVHlwZSkKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkgPSAw
OwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4oZmFzdFplcm9lZE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7Ci0gICAg
c3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBzdG9yYWdlOworICAgIG1fc3RvcmFnZSA9IHN0YXRpY19j
YXN0PEFycmF5U3RvcmFnZSo+KGZhc3RaZXJvZWRNYWxsb2Moc3RvcmFnZVNpemUoaW5pdGlhbENh
cGFjaXR5KSkpOworICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7CiAgICAg
bV9pbmRleEJpYXMgPSAwOwotICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKICAgICBtX3Zl
Y3Rvckxlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
QEAgLTE0OSwxMCArMTQ4LDkgQEAgSlNBcnJheTo6SlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxT
dHJ1YwogewogICAgIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IDA7CiAKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihmYXN0WmVyb2VkTWFs
bG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKLSAgICBzdG9yYWdlLT5tX2FsbG9j
QmFzZSA9IHN0b3JhZ2U7CisgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4oZmFzdFplcm9lZE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7CisgICAg
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKICAgICBtX2luZGV4QmlhcyA9IDA7
Ci0gICAgc2V0QXJyYXlTdG9yYWdlKHN0b3JhZ2UpOwogICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5p
dGlhbENhcGFjaXR5OwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTY5LDI5ICsxNjcs
MjggQEAgSlNBcnJheTo6SlNBcnJheShOb25OdWxsUGFzc1JlZlB0cjxTdHJ1YwogICAgIGVsc2UK
ICAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gbWluKEJBU0VfVkVDVE9SX0xFTiwgTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oZmFzdE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNp
dHkpKSk7Ci0gICAgc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBzdG9yYWdlOwotICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKKyAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxB
cnJheVN0b3JhZ2UqPihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsK
KyAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOworICAgIG1fc3RvcmFnZS0+
bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwogICAgIG1faW5kZXhCaWFzID0gMDsKICAgICBtX3Zl
Y3Rvckxlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKLSAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFn
ZSk7ICAgIAotICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwotICAgIHN0b3JhZ2Ut
PnN1YmNsYXNzRGF0YSA9IDA7Ci0gICAgc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9IDA7
CisgICAgbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gMDsKKyAgICBtX3N0b3JhZ2UtPnN1
YmNsYXNzRGF0YSA9IDA7CisgICAgbV9zdG9yYWdlLT5yZXBvcnRlZE1hcENhcGFjaXR5ID0gMDsK
IAogICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gQ3JlYXRlQ29tcGFjdCkgewogI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSAhIWluaXRpYWxDYXBhY2l0eTsKKyAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gISFpbml0aWFsQ2FwYWNpdHk7CiAjZW5kaWYKLSAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSAwOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
aW5pdGlhbENhcGFjaXR5OworICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gMDsKKyAgICAg
ICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbENhcGFjaXR5OwogICAg
IH0gZWxzZSB7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKICAgICAgICAgc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIHN0b3Jh
Z2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7Ci0gICAgICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fdmVjdG9yOworICAg
ICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgbV9zdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICAgICAgSlNWYWx1ZSogdmVjdG9yID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbml0
aWFsQ2FwYWNpdHk7ICsraSkKICAgICAgICAgICAgIHZlY3RvcltpXSA9IEpTVmFsdWUoKTsKICAg
ICB9CkBAIC0yMDYsMjIgKzIwMywyMSBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVm
UHRyPFN0cnVjCiB7CiAgICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gbGlzdC5zaXplKCk7
CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2Uq
PihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKLSAgICBzdG9yYWdl
LT5tX2FsbG9jQmFzZSA9IHN0b3JhZ2U7CisgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJy
YXlTdG9yYWdlKj4oZmFzdE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7Cisg
ICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKICAgICBtX2luZGV4QmlhcyA9
IDA7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsQ2FwYWNpdHk7CisgICAgbV9zdG9y
YWdlLT5tX2xlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKICAgICBtX3ZlY3Rvckxlbmd0aCA9IGlu
aXRpYWxDYXBhY2l0eTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlh
bENhcGFjaXR5OwotICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwotICAgIHN0b3Jh
Z2UtPnN1YmNsYXNzRGF0YSA9IDA7Ci0gICAgc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9
IDA7CisgICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbENhcGFjaXR5
OworICAgIG1fc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCA9IDA7CisgICAgbV9zdG9yYWdlLT5z
dWJjbGFzc0RhdGEgPSAwOworICAgIG1fc3RvcmFnZS0+cmVwb3J0ZWRNYXBDYXBhY2l0eSA9IDA7
CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gZmFsc2U7CisgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uID0gZmFsc2U7CiAjZW5kaWYKLSAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFnZSk7CiAK
ICAgICBzaXplX3QgaSA9IDA7Ci0gICAgSlNWYWx1ZSogdmVjdG9yID0gbV92ZWN0b3I7CisgICAg
SlNWYWx1ZSogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBBcmdMaXN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpKQogICAgICAgICB2
ZWN0b3JbaV0gPSAqaXQ7CkBAIC0yMzYsMTQgKzIzMiwxMyBAQCBKU0FycmF5Ojp+SlNBcnJheSgp
CiAgICAgQVNTRVJUKHZwdHIoKSA9PSBKU0dsb2JhbERhdGE6OmpzQXJyYXlWUHRyKTsKICAgICBj
aGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKIAotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwotICAgIGRlbGV0ZSBzdG9yYWdlLT5t
X3NwYXJzZVZhbHVlTWFwOwotICAgIGZhc3RGcmVlKHN0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKKyAg
ICBkZWxldGUgbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwOworICAgIGZhc3RGcmVlKG1fc3Rv
cmFnZS0+bV9hbGxvY0Jhc2UpOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9s
ZW5ndGgpIHsKICAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCkBAIC0yNTIsNyArMjQ3
LDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YQogICAgIH0KIAog
ICAgIGlmIChpIDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90
ID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwogICAgICAgICBpZiAodmFsdWVTbG90KSB7CiAgICAgICAgICAgICBzbG90LnNl
dFZhbHVlU2xvdCgmdmFsdWVTbG90KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjky
LDcgKzI4Nyw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwog
ICAgIAogICAgIGJvb2wgaXNBcnJheUluZGV4OwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUudG9BcnJheUluZGV4KCZpc0FycmF5SW5kZXgpOwpAQCAtMzAwLDcgKzI5NSw3IEBAIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUKICAgICAgICAgaWYgKGkgPj0gc3Rv
cmFnZS0+bV9sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChp
IDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIEpTVmFsdWUmIHZhbHVlID0gbV92ZWN0
b3JbaV07CisgICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHZhbHVlLCAwKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM0NSw3ICszNDAsNyBAQCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
CiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CiAgICAgaWYgKGkg
Pj0gbGVuZ3RoICYmIGkgPD0gTUFYX0FSUkFZX0lOREVYKSB7CkBAIC0zNTQsNyArMzQ5LDcgQEAg
dm9pZCBKU0FycmF5OjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZwogICAgIH0KIAogICAgIGlm
IChpIDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gbV92
ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldOwogICAgICAgICBpZiAodmFsdWVTbG90KSB7CiAgICAgICAgICAgICB2YWx1ZVNsb3QgPSB2
YWx1ZTsKICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTM3MSw3ICszNjYsNyBA
QCB2b2lkIEpTQXJyYXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnCiAKIE5FVkVSX0lOTElO
RSB2b2lkIEpTQXJyYXk6OnB1dFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKIApA
QCAtNDA5LDggKzQwNCw5IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1dFNsb3dDYXNl
KEUKICAgICAvLyBGYXN0IGNhc2UgaXMgd2hlbiB0aGVyZSBpcyBubyBzcGFyc2UgbWFwLCBzbyB3
ZSBjYW4gaW5jcmVhc2UgdGhlIHZlY3RvciBzaXplIHdpdGhvdXQgbW92aW5nIHZhbHVlcyBmcm9t
IGl0LgogICAgIGlmICghbWFwIHx8IG1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChpbmNy
ZWFzZVZlY3Rvckxlbmd0aChpICsgMSkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yW2ldID0gdmFs
dWU7Ci0gICAgICAgICAgICArK2FycmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldID0gdmFsdWU7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7CiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwpAQCAtNDQ1LDIyICs0NDEs
MjMgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0U2xvd0Nhc2UoRQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9y
YWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFzICogc2l6
ZW9mKEpTVmFsdWUpKTsKLSAgICBzdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwot
ICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKKyAgICBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0PEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBt
X2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKSk7CisgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IGJhc2VTdG9yYWdlOworICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7CisgICAgSlNWYWx1ZSogdmVjdG9y
ID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAKICAgICBpZiAobmV3TnVtVmFsdWVzSW5WZWN0b3IgPT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIDEpIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gdmVjdG9yTGVuZ3RoOyBqIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2opCi0gICAgICAgICAg
ICBtX3ZlY3RvcltqXSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIHZlY3RvcltqXSA9IEpTVmFs
dWUoKTsKICAgICAgICAgaWYgKGkgPiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQogICAgICAgICAg
ICAgbWFwLT5yZW1vdmUoaSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gdmVjdG9yTGVuZ3RoOyBqIDwgbWF4KHZlY3Rvckxlbmd0aCwgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCk7ICsraikKLSAgICAgICAgICAgIG1fdmVjdG9yW2pdID0gSlNWYWx1ZSgpOworICAgICAg
ICAgICAgdmVjdG9yW2pdID0gSlNWYWx1ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBt
YXgodmVjdG9yTGVuZ3RoLCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsgaiA8IG5ld1ZlY3Rvckxl
bmd0aDsgKytqKQotICAgICAgICAgICAgbV92ZWN0b3Jbal0gPSBtYXAtPnRha2Uoaik7CisgICAg
ICAgICAgICB2ZWN0b3Jbal0gPSBtYXAtPnRha2Uoaik7CiAgICAgfQogCiAgICAgQVNTRVJUKGkg
PCBuZXdWZWN0b3JMZW5ndGgpOwpAQCAtNDY4LDcgKzQ2NSw3IEBAIE5FVkVSX0lOTElORSB2b2lk
IEpTQXJyYXk6OnB1dFNsb3dDYXNlKEUKICAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxl
bmd0aDsKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3TnVtVmFsdWVzSW5W
ZWN0b3I7CiAKLSAgICBtX3ZlY3RvcltpXSA9IHZhbHVlOworICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldID0gdmFsdWU7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTQ5MiwxMCArNDg5
LDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiAKIHsKICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAg
ICAgaWYgKGkgPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3Qg
PSBtX3ZlY3RvcltpXTsKKyAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CiAgICAgICAgIGlmICghdmFsdWVTbG90KSB7CiAgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzEsMTEgKzUyOCwx
MSBAQCB2b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0CiAgICAgLy8gaXMg
aW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVy
ZW50IGFwcHJvYWNoLAogICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZm
ZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KIAotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKICAgICAKICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0
b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAobV92ZWN0b3JbaV0p
CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwogICAgIH0KIApAQCAtNTU2LDcg
KzU1Myw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmUKICAgICBB
U1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKIAogICAg
IHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheVN0
b3JhZ2UoKS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9zdG9yYWdlLT5tX2xl
bmd0aDsKIAogICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbGVuZ3RoKQogICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBsZW5ndGg7CkBAIC01ODMsNyArNTgwLDcgQEAgYm9vbCBKU0FycmF5OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aCh1bnNpZwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBh
cnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2Vz
IG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCiAgICAgLy8gdG8gdGhl
IHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBj
YW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
IAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwogICAgIEFTU0VS
VChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwpAQCAtNTk0LDExICs1OTEsMTAgQEAgYm9vbCBK
U0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aCh1bnNpZwogICAgIGlmICghdHJ5RmFzdFJlYWxs
b2MoYmFzZVN0b3JhZ2UsIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFz
KSkuZ2V0VmFsdWUoYmFzZVN0b3JhZ2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBz
dG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFy
Kj4oYmFzZVN0b3JhZ2UpICsgbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkpOwotICAgIHN0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgc2V0QXJyYXlTdG9yYWdlKHN0
b3JhZ2UpOworICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFycmF5
U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKSk7CisgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9y
YWdlOwogCi0gICAgSlNWYWx1ZSogdmVjdG9yID0gbV92ZWN0b3I7CisgICAgSlNWYWx1ZSogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgIHZlY3RvcltpXSA9IEpTVmFs
dWUoKTsKIApAQCAtNjE0LDggKzYxMCw3IEBAIGJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JQ
cmVmaXhMZW5ndGgKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4g
aW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBh
bnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAogICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENh
bGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1v
cmUgZWZmaWNpZW50bHkuCiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlT
dG9yYWdlKCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlOworICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBtX3ZlY3Rvckxlbmd0aDsKICAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsK
QEAgLTYyOCwxOCArNjIzLDE2IEBAIGJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JQcmVmaXhM
ZW5ndGgKICAgICAKICAgICBtX2luZGV4QmlhcyArPSBuZXdWZWN0b3JMZW5ndGggLSBuZXdMZW5n
dGg7CiAgICAgCi0gICAgbmV3U3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld0Jhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFzICogc2l6
ZW9mKEpTVmFsdWUpKTsKKyAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFycmF5U3Rv
cmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdCYXNlU3RvcmFnZSkgKyBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKSk7CiAKLSAgICBtZW1jcHkobmV3U3RvcmFnZSwgc3RvcmFnZSwgc3Rv
cmFnZVNpemUoMCkpOwotICAgIG1lbWNweSgmbmV3U3RvcmFnZS0+bV92ZWN0b3JbbmV3TGVuZ3Ro
IC0gbV92ZWN0b3JMZW5ndGhdLCAmc3RvcmFnZS0+bV92ZWN0b3JbMF0sIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihKU1ZhbHVlKSk7CisgICAgbWVtY3B5KG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOworICAgIG1lbWNweSgmbV9zdG9yYWdlLT5tX3ZlY3RvcltuZXdMZW5ndGggLSBt
X3ZlY3Rvckxlbmd0aF0sICZzdG9yYWdlLT5tX3ZlY3RvclswXSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Jh
c2VTdG9yYWdlOworICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdCYXNlU3RvcmFnZTsK
ICAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld0xlbmd0aDsKICAgICAKICAgICBmYXN0RnJlZShzdG9y
YWdlLT5tX2FsbG9jQmFzZSk7CiAKLSAgICBzZXRBcnJheVN0b3JhZ2UobmV3U3RvcmFnZSk7Ci0g
ICAgCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0b3JhZ2VT
aXplKG5ld1ZlY3Rvckxlbmd0aCkgLSBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKICAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0OCwyMSArNjQxLDIxIEBAIGJvb2wgSlNBcnJheTo6aW5j
cmVhc2VWZWN0b3JQcmVmaXhMZW5ndGgKIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5zaWdu
ZWQgbmV3TGVuZ3RoKQogeworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
KyAgICAKICNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIGlmICghbV9zdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uKQorICAgIGlmICghc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbikKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisgICAg
ICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKICNlbmRpZgog
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Ci0gICAgCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CiAKICAgICBpZiAobmV3TGVuZ3Ro
IDwgbGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVu
Z3RoLCBtX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0
aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFs
dWVTbG90ID0gbV92ZWN0b3JbaV07CisgICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUgPSB2YWx1ZVNs
b3Q7CiAgICAgICAgICAgICB2YWx1ZVNsb3QgPSBKU1ZhbHVlKCk7CiAgICAgICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGhhZFZhbHVlOwpAQCAtNjkxLDcgKzY4NCw3IEBA
IEpTVmFsdWUgSlNBcnJheTo6cG9wKCkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bV9sZW5ndGg7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC03MDIsNyArNjk1LDcgQEAgSlNW
YWx1ZSBKU0FycmF5Ojpwb3AoKQogICAgIEpTVmFsdWUgcmVzdWx0OwogCiAgICAgaWYgKGxlbmd0
aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IG1fdmVj
dG9yW2xlbmd0aF07CisgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2xlbmd0aF07CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlU2xv
dDsKQEAgLTczNSwxMCArNzI4LDEwIEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwogCiAgICAgaWYgKHN0b3JhZ2UtPm1fbGVuZ3RoIDwgbV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgbV92ZWN0b3Jbc3RvcmFnZS0+bV9sZW5ndGhdID0gdmFsdWU7CisgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW3N0b3JhZ2UtPm1fbGVuZ3RoXSA9IHZhbHVlOwogICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICsrc3RvcmFnZS0+bV9s
ZW5ndGg7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTc0OSw4ICs3NDIsOCBAQCB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXA7CiAgICAgICAgIGlm
ICghbWFwIHx8IG1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaW5jcmVhc2VWZWN0
b3JMZW5ndGgoc3RvcmFnZS0+bV9sZW5ndGggKyAxKSkgewotICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgICAgICBtX3ZlY3RvcltzdG9yYWdlLT5t
X2xlbmd0aF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwor
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW3N0b3JhZ2UtPm1fbGVuZ3RoXSA9IHZh
bHVlOwogICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAg
ICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbGVuZ3RoOwogICAgICAgICAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKQEAgLTc2OSw3ICs3NjIsNyBAQCB2b2lkIEpTQXJyYXk6OnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiBleGVjCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwogICAgIAogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwogICAgIApAQCAtNzgyLDcgKzc3NSw3IEBAIHZvaWQgSlNBcnJheTo6
c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgLy8gc2xvdHMgYW5kIHRoZW4gZmls
bCB0aGVtIHdpdGggcG9zc2libGUgcHJvcGVydGllcy4gIFNlZSBFQ01BIHNwZWMuCiAgICAgICAg
IC8vIDE1LjQuNC45IHN0ZXBzIDExIHRocm91Z2ggMTMuCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGNvdW50OyBpIDwgb2xkTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgoaSA+PSBt
X3ZlY3Rvckxlbmd0aCkgfHwgKCFtX3ZlY3RvcltpXSkpIHsKKyAgICAgICAgICAgIGlmICgoaSA+
PSBtX3ZlY3Rvckxlbmd0aCkgfHwgKCFtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldKSkgewogICAgICAg
ICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwogICAgICAgICAgICAgICAgIEpTVmFs
dWUgcCA9IHByb3RvdHlwZSgpOwogICAgICAgICAgICAgICAgIGlmICgoIXAuaXNOdWxsKCkpICYm
IChhc09iamVjdChwKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGksIHNsb3QpKSkKQEAgLTc5MCwx
MSArNzgzLDExIEBAIHZvaWQgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsgLy8gVGhlIHB1dCgpIGFib3ZlIGNvdWxkIGhhdmUgZ3Jvd24gdGhlIHZlY3RvciBhbmQgcmVh
bGxvYydlZCBzdG9yYWdlLgorICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOyAvLyBUaGUgcHV0
KCkgYWJvdmUgY291bGQgaGF2ZSBncm93biB0aGUgdmVjdG9yIGFuZCByZWFsbG9jJ2VkIHN0b3Jh
Z2UuCiAKICAgICAgICAgLy8gTmVlZCB0byBkZWNyZW1lbnQgbnVtVmFsdWVzSW52ZWN0b3IgYmFz
ZWQgb24gbnVtYmVyIG9mIHJlYWwgZW50cmllcwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgKHVuc2lnbmVkKWNvdW50OyArK2kpCi0gICAgICAgICAgICBpZiAoKGkgPCBtX3ZlY3Rv
ckxlbmd0aCkgJiYgKG1fdmVjdG9yW2ldKSkKKyAgICAgICAgICAgIGlmICgoaSA8IG1fdmVjdG9y
TGVuZ3RoKSAmJiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pKQogICAgICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICB9IGVsc2UKICAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciAtPSBjb3VudDsKQEAgLTgwOSwxNyArODAyLDE2IEBAIHZvaWQg
SlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgaWYgKG1fdmVjdG9y
TGVuZ3RoKSB7CiAgICAgICAgICAgICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpICsgY291bnQgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAg
ICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0g
ICAgICAgICAgICBzdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdC
YXNlU3RvcmFnZSk7CisgICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFy
cmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKIAogICAgICAgICAgICAgbV9pbmRleEJpYXMg
Kz0gY291bnQ7Ci0gICAgICAgICAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFnZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CiAgICAgCiB2b2lkIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUq
IGV4ZWMsIGludCBjb3VudCkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICBB
U1NFUlQobV9pbmRleEJpYXMgPj0gMCk7CiAgICAgQVNTRVJUKGNvdW50ID49IDApOwpAQCAtODMy
LDcgKzgyNCw3IEBAIHZvaWQgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAg
ICAgICAgLy8gc2xvdHMgYW5kIHRoZW4gZmlsbCB0aGVtIHdpdGggcG9zc2libGUgcHJvcGVydGll
cy4gIFNlZSBFQ01BIHNwZWMuCiAgICAgICAgIC8vIDE1LjQuNC4xMyBzdGVwcyA4IHRocm91Z2gg
MTAuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgaWYgKChpID49IG1fdmVjdG9yTGVuZ3RoKSB8fCAoIW1fdmVjdG9yW2ldKSkgewor
ICAgICAgICAgICAgaWYgKChpID49IG1fdmVjdG9yTGVuZ3RoKSB8fCAoIW1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0pKSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBwID0gcHJvdG90eXBlKCk7CiAgICAgICAgICAgICAgICAg
aWYgKCghcC5pc051bGwoKSkgJiYgKGFzT2JqZWN0KHApLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aSwgc2xvdCkpKQpAQCAtODQxLDE0ICs4MzMsMTMgQEAgdm9pZCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiBleAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHN0b3JhZ2UgPSBh
cnJheVN0b3JhZ2UoKTsgLy8gVGhlIHB1dCgpIGFib3ZlIGNvdWxkIGhhdmUgZ3Jvd24gdGhlIHZl
Y3RvciBhbmQgcmVhbGxvYydlZCBzdG9yYWdlLgorICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7IC8v
IFRoZSBwdXQoKSBhYm92ZSBjb3VsZCBoYXZlIGdyb3duIHRoZSB2ZWN0b3IgYW5kIHJlYWxsb2Mn
ZWQgc3RvcmFnZS4KICAgICAKICAgICBpZiAobV9pbmRleEJpYXMgPj0gY291bnQpIHsKICAgICAg
ICAgbV9pbmRleEJpYXMgLT0gY291bnQ7CiAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgLSBjb3VudCAqIHNpemVvZihKU1ZhbHVl
KTsKICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUo
MCkpOwotICAgICAgICBzdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihu
ZXdCYXNlU3RvcmFnZSk7Ci0gICAgICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKKyAgICAg
ICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3Rv
cmFnZSk7CiAgICAgICAgIG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OwogICAgIH0gZWxzZSBpZiAo
KCFtX2luZGV4QmlhcykgJiYgKCFpbmNyZWFzZVZlY3RvclByZWZpeExlbmd0aChtX3ZlY3Rvckxl
bmd0aCArIGNvdW50KSkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwpA
QCAtODc5LDcgKzg3MCw3IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0
KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
Y29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxE
YXRhKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKIAogICAgIHVuc2lnbmVkIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7CiAgICAgaWYgKHN0
b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKQEAgLTg5Myw3ICs4ODQsNyBAQCB2b2lkIEpTQXJy
YXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gdHJ1ZTsKICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYg
KCFtX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0
b3JbaV0uaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkwNSwxNCArODk2LDE0IEBA
IHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAgICAvLyBGb3IgbnVt
ZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJn
ZXNvcnQuIFdlCiAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0
eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKICAgICAvLyBzaWRlLWVmZmVjdCBmcm9t
IHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0
KG1fdmVjdG9yLCBzaXplLCBzaXplb2YoSlNWYWx1ZSksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQp
OworICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoSlNWYWx1ZSksIGNv
bXBhcmVOdW1iZXJzRm9yUVNvcnQpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lz
dGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoKTsKICAgICBpZiAoc3RvcmFnZS0+
bV9zcGFyc2VWYWx1ZU1hcCkgewpAQCAtOTM1LDcgKzkyNiw3IEBAIHZvaWQgSlNBcnJheTo6c29y
dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKICAgICAgICAgdmFs
dWVzW2ldLmZpcnN0ID0gdmFsdWU7CiAgICAgfQpAQCAtOTY3LDcgKzk1OCw3IEBAIHZvaWQgSlNB
cnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3Ig
aW5jb3JyZWN0bHkuCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICBtX3ZlY3RvcltpXSA9IHZhbHVlc1tpXS5maXJz
dDsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSB2YWx1ZXNbaV0uZmlyc3Q7CiAKICAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KQEAgLTEwNTQsNyAr
MTA0NSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIHsKICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJh
eVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgogCkBAIC0xMDkzLDE0ICsxMDg0LDE0IEBAIHZvaWQg
SlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogICAgIC8vIEl0ZXJhdGUgb3Zl
ciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQg
b25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgogICAgIGZv
ciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdiA9IG1fdmVjdG9yW251bURlZmluZWRdOworICAgICAgICBKU1ZhbHVlIHYg
PSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXTsKICAgICAgICAgaWYgKCF2IHx8IHYuaXNV
bmRlZmluZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKICAgICAgICAgdHJlZS5pbnNlcnQobnVt
RGVmaW5lZCk7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV92ZWN0b3JbaV07
CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBpZiAo
dikgewogICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICAr
K251bVVuZGVmaW5lZDsKQEAgLTExMjQsNyArMTExNSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlID0gbV9z
dG9yYWdlOwogCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1h
cC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTE0NiwxNyArMTEzNywxNyBA
QCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgQVZMVHJlZTxB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwogICAg
IGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fdmVjdG9yW2ldID0gdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWU7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
ID0gdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWU7CiAgICAgICAgICsraXRl
cjsKICAgICB9CiAKICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kp
Ci0gICAgICAgIG1fdmVjdG9yW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0gPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2Vk
IHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgogICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAg
ICAgIG1fdmVjdG9yW2ldID0gSlNWYWx1ZSgpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XSA9IEpTVmFsdWUoKTsKIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOwogCkBAIC0xMTY1LDcgKzExNTYsNyBAQCB2b2lkIEpTQXJyYXk6OnNv
cnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhl
Y1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7CiAKICAgICBKU1ZhbHVlKiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3Rv
cjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVj
dG9yTGVuZ3RoKTsKQEAgLTExODMsOSArMTE3NCw5IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9SZWdpc3RlcnMoRXhlY1N0
YXRlKiBleGVjLCBSZWdpc3RlciogYnVmZmVyLCB1aW50MzJfdCBtYXhTaXplKQogewotICAgIEFT
U0VSVChhcnJheVN0b3JhZ2UoKS0+bV9sZW5ndGggPj0gbWF4U2l6ZSk7CisgICAgQVNTRVJUKG1f
c3RvcmFnZS0+bV9sZW5ndGggPj0gbWF4U2l6ZSk7CiAgICAgVU5VU0VEX1BBUkFNKG1heFNpemUp
OwotICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fdmVjdG9yOworICAgIEpTVmFsdWUqIHZlY3RvciA9
IG1fc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKG1heFNp
emUsIG1fdmVjdG9yTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8
IHZlY3RvckVuZDsgKytpKSB7CkBAIC0xMjAzLDcgKzExOTQsNyBAQCB1bnNpZ25lZCBKU0FycmF5
Ojpjb21wYWN0Rm9yU29ydGluZygpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwogCkBAIC0xMjExLDE3ICsx
MjAyLDE3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKCkKICAgICB1bnNp
Z25lZCBudW1VbmRlZmluZWQgPSAwOwogCiAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV92ZWN0b3Jb
bnVtRGVmaW5lZF07CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV92ZWN0b3JbaV07Cisg
ICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICBpZiAodikg
ewogICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICArK251
bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3ZlY3Rvcltu
dW1EZWZpbmVkKytdID0gdjsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkKytdID0gdjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTIzNSwyMSArMTIyNiwyMSBA
QCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCiAgICAgICAgICAgICBpZiAo
KG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5j
cmVhc2VWZWN0b3JMZW5ndGgobmV3VXNlZFZlY3Rvckxlbmd0aCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgICAgIH0KIAogICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBtX3ZlY3RvcltudW1EZWZpbmVkKytdID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10gPSBpdC0+c2Vjb25k
OwogCiAgICAgICAgIGRlbGV0ZSBtYXA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVN
YXAgPSAwOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0gSlNWYWx1ZSgpOworICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXSA9IEpTVmFsdWUoKTsKIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwogCkBAIC0xMjYwLDE5ICsxMjUxLDE5IEBA
IHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKCkKIAogdm9pZCogSlNBcnJheTo6
c3ViY2xhc3NEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCktPnN1YmNs
YXNzRGF0YTsKKyAgICByZXR1cm4gbV9zdG9yYWdlLT5zdWJjbGFzc0RhdGE7CiB9CiAKIHZvaWQg
SlNBcnJheTo6c2V0U3ViY2xhc3NEYXRhKHZvaWQqIGQpCiB7Ci0gICAgYXJyYXlTdG9yYWdlKCkt
PnN1YmNsYXNzRGF0YSA9IGQ7CisgICAgbV9zdG9yYWdlLT5zdWJjbGFzc0RhdGEgPSBkOwogfQog
CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKIAogdm9pZCBKU0FycmF5OjpjaGVja0NvbnNp
c3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwogCiAgICAgQVNTRVJUKHN0b3JhZ2UpOwogICAgIGlmICh0eXBlID09IFNvcnRDb25z
aXN0ZW5jeUNoZWNrKQpAQCAtMTI4MCw3ICsxMjcxLDcgQEAgdm9pZCBKU0FycmF5OjpjaGVja0Nv
bnNpc3RlbmN5KENvbnNpc3RlbgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAw
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvckxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV92ZWN0b3JbaV0pIHsKKyAgICAgICAgaWYgKEpT
VmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXSkgewogICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVj
dG9yQ29uc2lzdGVuY3lDaGVjaykKICAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgp
OyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCkBAIC0x
Mjk4LDcgKzEyODksNyBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVu
CiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBzdG9yYWdl
LT5tX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OwogICAgICAgICAgICAgQVNTRVJUKGluZGV4
IDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT5tX3ZlY3Rv
ckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsK
ICAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDY0NjUzKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBhcnJheVN0b3JhZ2UoKS0+
bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9z
dG9yYWdlLT5tX2xlbmd0aDsgfQogICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCk7IC8v
IE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhw
TWF0Y2hBcnJheS4KIAogICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKik7CkBAIC05MCwxMSAr
OTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2hpZnRDb3VudChFeGVjU3Rh
dGUqLCBpbnQgY291bnQpOwogICAgICAgICB2b2lkIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCBp
bnQgY291bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1
cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fdmVjdG9yW2ldOyB9CisgICAgICAgIGJvb2wgY2Fu
R2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV07IH0KICAgICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBp
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV07CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2ln
bmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQpAQCAtMTAyLDkgKzEwMiw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5k
ZXgoaSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlJiB4ID0gbV92ZWN0b3Jb
aV07CisgICAgICAgICAgICBKU1ZhbHVlJiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAg
ICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCiAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7CkBAIC0xMTUsNyArMTE1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdW5jaGVja2VkU2V0SW5kZXgodW5z
aWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY2FuU2V0
SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gYXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKICNlbmRpZgpAQCAtMTQzLDE2ICsxNDMsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCogc3ViY2xhc3NEYXRhKCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgc2V0U3ViY2xhc3NEYXRhKHZvaWQqKTsKICAgICAgICAgCi0gICAgICAgIGlubGlu
ZSBBcnJheVN0b3JhZ2UgKmFycmF5U3RvcmFnZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG1fdmVjdG9yKSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1Zh
bHVlKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0QXJyYXlTdG9yYWdl
KEFycmF5U3RvcmFnZSAqc3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV92ZWN0b3Ig
PSAmc3RvcmFnZS0+bV92ZWN0b3JbMF07Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogCkBAIC0xNzAsNyArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IK
ICAgICAgICAgaW50IG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQg
YmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0gICAgICAgIEpTVmFsdWUqIG1fdmVjdG9yOyAv
LyBDb3B5IG9mIEFycmF5U3RvcmFnZS5tX3ZlY3Rvci4gIFVzZWQgZm9yIHF1aWNrIHZlY3RvciBh
Y2Nlc3MgYW5kIHRvIG1hdGVyaWFsaXplIEFycmF5U3RvcmFnZSBwdHIuCisgICAgICAgIEFycmF5
U3RvcmFnZSAqbV9zdG9yYWdlOwogICAgIH07CiAKICAgICBKU0FycmF5KiBhc0FycmF5KEpTVmFs
dWUpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAg
SlNPYmplY3Q6Om1hcmtDaGlsZHJlbkRpcmVjdChtYXJrU3RhY2spOwogICAgICAgICAKLSAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKIAogICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5tX3ZlY3RvciwgdXNlZFZl
Y3Rvckxlbmd0aCwgTWF5Q29udGFpbk51bGxWYWx1ZXMpOwo=
</data>
<flag name="review"
          id="51990"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="51991"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63742</attachid>
            <date>2010-08-06 11:01:13 -0700</date>
            <delta_ts>2010-08-07 22:29:46 -0700</delta_ts>
            <desc>Patch that include changes necessitated by patch for bug 43401</desc>
            <filename>m_storage.patch</filename>
            <type>text/plain</type>
            <size>40076</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0ODU2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMDgtMDYgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmV2ZXJ0IEpTQXJyYXkgdG8gcG9pbnQgdG8gdGhlIGJlZ2lu
bmluZyBvZiB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZQorICAgICAgICBzdHJ1Y3QuICBUaGlz
IGlzIGRlc2NyaWJlZCBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDM1MjYuCisKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6fkpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpw
dXRTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aW5jcmVhc2VWZWN0
b3JQcmVmaXhMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZp
bGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpzdWJjbGFzc0RhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRTdWJjbGFz
c0RhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y2FuR2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNldEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5jaGVja2VkU2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjptYXJrQ2hpbGRyZW5EaXJlY3QpOgorCiAyMDEwLTA4LTA2ICBKZXNzaWUgQmVybGluICA8
amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBCdWlsZCBGaXggKGNvbnRpbnVl
ZCkuIFVucmV2aWV3ZWQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiA2NDg1NikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDExICszMTQs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNB
cnJheVZQdHIpKSk7CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNBcnJheSwgbV92ZWN0b3IpKSwgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSkpLCByZWdUMyk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKSkpKTsKICAgICAKLSAgICBs
b2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRhZwotICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKKyAgICBsb2FkMzIoQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZWdUMSk7IC8vIHRhZworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxv
YWQKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6
OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgCiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTM2NywyMiArMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5z
dHJ1Y3Rpb24KICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDApLCBJbW1QdHIobV9nbG9iYWxEYXRhLT5qc0FycmF5VlB0cikpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpKSkpOwogICAgIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yKSksIHJlZ1QzKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0
b3JhZ2UpKSwgcmVnVDMpOwogICAgIAotICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwg
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAg
SnVtcCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKICAgICAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0
TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChy
ZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7IC8vIHRhZworICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBwYXls
b2FkCisgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8gdGFnCiAgICAgSnVtcCBlbmQgPSBq
dW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBhZGQzMihJbW0zMigxKSwg
QWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3RvciktT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpKSk7Ci0gICAg
YnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCktT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3IpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICBhZGQzMihJbW0zMigxKSwgQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3RvcikpKTsKKyAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7CiAgICAgCiAgICAgYWRkMzIoSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3Rv
cmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKSkpOworICAg
IHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSkpOwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwog
ICAgIAogICAgIGVuZC5saW5rKHRoaXMpOwpAQCAtNzQ0LDggKzc0NCw4IEBAIGJvb2wgSklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRhLT5q
c0FycmF5VlB0cikpOwogICAgIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxl
bmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3IpKSwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCktT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSkpLCByZWdUMik7
CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKSksIHJlZ1QyKTsKICAgICAKICAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFu
Y2gzMihBYm92ZSwgcmVnVDIsIEltbTMyKElOVF9NQVgpKTsKICAgICBtb3ZlKHJlZ1QyLCByZWdU
MCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDY0ODU2KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDEwICsxMDYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNBcnJheVZQdHIpKSk7CiAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3RvcikpLCByZWdU
Mik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwg
bV9zdG9yYWdlKSksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0
b3JMZW5ndGgpKSkpOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2Fs
ZVB0ciksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpAQCAtMjE3LDIxICsyMTcsMjEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzQXJyYXlW
UHRyKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCkpKSk7
CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBt
X3ZlY3RvcikpLCByZWdUMik7Ci0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2UpKSwgcmVnVDIpOworICAg
IEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
IAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIpKTsKKyAgICBzdG9yZVB0cihyZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7
Ci0gICAgYWRkMzIoSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLU9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Cisg
ICAgYWRkMzIoSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkp
KS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgbW92ZShyZWdUMSwgcmVnVDApOwog
ICAgIGFkZDMyKEltbTMyKDEpLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLU9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKSkpOworICAgIHN0b3JlMzIocmVnVDAsIEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwogICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7
CkBAIC03MzYsOCArNzM2LDggQEAgYm9vbCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbgogICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSk7CiAKICAgICAvLyBD
aGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yKSks
IHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpLU9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
KSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U0FycmF5LCBtX3N0b3JhZ2UpKSwgcmVnVDMpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7CiAgICAgSnVt
cCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBJbW0zMihKU0ltbWVkaWF0
ZTo6bWF4SW1tZWRpYXRlSW50KSk7CiAKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNr
KHJlZ1QyLCByZWdUMCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDY0ODU2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMxLDEwICsxMzEsOSBAQCBKU0FycmF5OjpKU0FycmF5KFZQdHJTdGVhbGlu
Z0hhY2tUeXBlKQogewogICAgIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IDA7CiAKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihmYXN0WmVy
b2VkTWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKLSAgICBzdG9yYWdlLT5t
X2FsbG9jQmFzZSA9IHN0b3JhZ2U7CisgICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlT
dG9yYWdlKj4oZmFzdFplcm9lZE1hbGxvYyhzdG9yYWdlU2l6ZShpbml0aWFsQ2FwYWNpdHkpKSk7
CisgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKICAgICBtX2luZGV4Qmlh
cyA9IDA7Ci0gICAgc2V0QXJyYXlTdG9yYWdlKHN0b3JhZ2UpOwogICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gaW5pdGlhbENhcGFjaXR5OwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTQ5LDEw
ICsxNDgsOSBAQCBKU0FycmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjCiB7CiAg
ICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gMDsKIAotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KGZhc3RaZXJvZWRNYWxsb2Moc3RvcmFn
ZVNpemUoaW5pdGlhbENhcGFjaXR5KSkpOwotICAgIHN0b3JhZ2UtPm1fYWxsb2NCYXNlID0gc3Rv
cmFnZTsKKyAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihmYXN0WmVy
b2VkTWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKKyAgICBtX3N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwogICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBzZXRB
cnJheVN0b3JhZ2Uoc3RvcmFnZSk7CiAgICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsQ2FwYWNp
dHk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0xNjksMjkgKzE2NywyOCBAQCBKU0Fy
cmF5OjpKU0FycmF5KE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjCiAgICAgZWxzZQogICAgICAgICBp
bml0aWFsQ2FwYWNpdHkgPSBtaW4oQkFTRV9WRUNUT1JfTEVOLCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJh
eVN0b3JhZ2UqPihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKLSAg
ICBzdG9yYWdlLT5tX2FsbG9jQmFzZSA9IHN0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBpbml0aWFsTGVuZ3RoOworICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFn
ZSo+KGZhc3RNYWxsb2Moc3RvcmFnZVNpemUoaW5pdGlhbENhcGFjaXR5KSkpOworICAgIG1fc3Rv
cmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7CisgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9
IGluaXRpYWxMZW5ndGg7CiAgICAgbV9pbmRleEJpYXMgPSAwOwogICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gaW5pdGlhbENhcGFjaXR5OwotICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsgICAgCi0g
ICAgc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci0gICAgc3RvcmFnZS0+c3ViY2xhc3NE
YXRhID0gMDsKLSAgICBzdG9yYWdlLT5yZXBvcnRlZE1hcENhcGFjaXR5ID0gMDsKKyAgICBtX3N0
b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOworICAgIG1fc3RvcmFnZS0+c3ViY2xhc3NEYXRh
ID0gMDsKKyAgICBtX3N0b3JhZ2UtPnJlcG9ydGVkTWFwQ2FwYWNpdHkgPSAwOwogCiAgICAgaWYg
KGNyZWF0aW9uTW9kZSA9PSBDcmVhdGVDb21wYWN0KSB7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKLSAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9ICEhaW5p
dGlhbENhcGFjaXR5OworICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSAhIWluaXRpYWxDYXBhY2l0eTsKICNlbmRpZgotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0
aCA9IDA7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsQ2Fw
YWNpdHk7CisgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSAwOworICAgICAgICBtX3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsQ2FwYWNpdHk7CiAgICAgfSBlbHNlIHsK
ICNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQogICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uID0gZmFsc2U7CiAjZW5kaWYKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpbml0aWFsTGVuZ3RoOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gMDsKLSAgICAgICAgSlNWYWx1ZSogdmVjdG9yID0gbV92ZWN0b3I7CisgICAgICAgIG1fc3Rv
cmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOworICAgICAgICBtX3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAwOworICAgICAgICBKU1ZhbHVlKiB2ZWN0b3IgPSBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluaXRpYWxDYXBhY2l0
eTsgKytpKQogICAgICAgICAgICAgdmVjdG9yW2ldID0gSlNWYWx1ZSgpOwogICAgIH0KQEAgLTIw
NiwyMiArMjAzLDIxIEBAIEpTQXJyYXk6OkpTQXJyYXkoTm9uTnVsbFBhc3NSZWZQdHI8U3RydWMK
IHsKICAgICB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkgPSBsaXN0LnNpemUoKTsKIAotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KGZhc3RNYWxs
b2Moc3RvcmFnZVNpemUoaW5pdGlhbENhcGFjaXR5KSkpOwotICAgIHN0b3JhZ2UtPm1fYWxsb2NC
YXNlID0gc3RvcmFnZTsKKyAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2Uq
PihmYXN0TWFsbG9jKHN0b3JhZ2VTaXplKGluaXRpYWxDYXBhY2l0eSkpKTsKKyAgICBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwogICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxDYXBhY2l0eTsKKyAgICBtX3N0b3JhZ2UtPm1fbGVu
Z3RoID0gaW5pdGlhbENhcGFjaXR5OwogICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbENhcGFj
aXR5OwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsQ2FwYWNpdHk7
Ci0gICAgc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci0gICAgc3RvcmFnZS0+c3ViY2xh
c3NEYXRhID0gMDsKLSAgICBzdG9yYWdlLT5yZXBvcnRlZE1hcENhcGFjaXR5ID0gMDsKKyAgICBt
X3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsQ2FwYWNpdHk7CisgICAgbV9z
dG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gMDsKKyAgICBtX3N0b3JhZ2UtPnN1YmNsYXNzRGF0
YSA9IDA7CisgICAgbV9zdG9yYWdlLT5yZXBvcnRlZE1hcENhcGFjaXR5ID0gMDsKICNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQotICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSBmYWxzZTsKKyAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBm
YWxzZTsKICNlbmRpZgotICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKIAogICAgIHNpemVf
dCBpID0gMDsKLSAgICBKU1ZhbHVlKiB2ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICBKU1ZhbHVlKiB2
ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOwogICAgIEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgZm9yIChBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGxpc3QuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0LCArK2kpCiAgICAgICAgIHZlY3RvcltpXSA9
ICppdDsKQEAgLTIzNiwxNCArMjMyLDEzIEBAIEpTQXJyYXk6On5KU0FycmF5KCkKICAgICBBU1NF
UlQodnB0cigpID09IEpTR2xvYmFsRGF0YTo6anNBcnJheVZQdHIpOwogICAgIGNoZWNrQ29uc2lz
dGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwogCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Ci0gICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlVmFs
dWVNYXA7Ci0gICAgZmFzdEZyZWUoc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOworICAgIGRlbGV0ZSBt
X3N0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXA7CisgICAgZmFzdEZyZWUobV9zdG9yYWdlLT5tX2Fs
bG9jQmFzZSk7CiB9CiAKIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkgewog
ICAgICAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKQEAgLTI1Miw3ICsyNDcsNyBAQCBib29s
IEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhCiAgICAgfQogCiAgICAgaWYgKGkg
PCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3QgPSBtX3ZlY3Rv
cltpXTsKKyAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07
CiAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90
KCZ2YWx1ZVNsb3QpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTIsNyArMjg3LDcg
QEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAg
Ym9vbCBpc0FycmF5SW5kZXg7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5
SW5kZXgoJmlzQXJyYXlJbmRleCk7CkBAIC0zMDAsNyArMjk1LDcgQEAgYm9vbCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRQogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xl
bmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGkgPCBtX3ZlY3Rv
ckxlbmd0aCkgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSBtX3ZlY3RvcltpXTsKKyAg
ICAgICAgICAgIEpTVmFsdWUmIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAg
ICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodmFsdWUsIDApOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzQ1LDcgKzM0
MCw3IEBAIHZvaWQgSlNBcnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWcKIHsKICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKICAgICBpZiAoaSA+PSBsZW5ndGgg
JiYgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHsKQEAgLTM1NCw3ICszNDksNyBAQCB2b2lkIEpTQXJy
YXk6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnCiAgICAgfQogCiAgICAgaWYgKGkgPCBtX3Zl
Y3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3QgPSBtX3ZlY3RvcltpXTsK
KyAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAg
ICAgIGlmICh2YWx1ZVNsb3QpIHsKICAgICAgICAgICAgIHZhbHVlU2xvdCA9IHZhbHVlOwogICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMzcxLDcgKzM2Niw3IEBAIHZvaWQgSlNB
cnJheTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWcKIAogTkVWRVJfSU5MSU5FIHZvaWQgSlNB
cnJheTo6cHV0U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwOwogCkBAIC00MDksOCAr
NDA0LDkgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0U2xvd0Nhc2UoRQogICAgIC8v
IEZhc3QgY2FzZSBpcyB3aGVuIHRoZXJlIGlzIG5vIHNwYXJzZSBtYXAsIHNvIHdlIGNhbiBpbmNy
ZWFzZSB0aGUgdmVjdG9yIHNpemUgd2l0aG91dCBtb3ZpbmcgdmFsdWVzIGZyb20gaXQuCiAgICAg
aWYgKCFtYXAgfHwgbWFwLT5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGluY3JlYXNlVmVjdG9y
TGVuZ3RoKGkgKyAxKSkgewotICAgICAgICAgICAgbV92ZWN0b3JbaV0gPSB2YWx1ZTsKLSAgICAg
ICAgICAgICsrYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAg
ICBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0g
PSB2YWx1ZTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAg
ICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CkBAIC00NDUsMjIgKzQ0MSwyMyBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXRTbG93Q2FzZShFCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBzdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihzdGF0
aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1
ZSkpOwotICAgIHN0b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgc2V0QXJy
YXlTdG9yYWdlKHN0b3JhZ2UpOworICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJy
YXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFz
ICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0
b3JhZ2U7CisgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKKyAgICBKU1ZhbHVlKiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKIAogICAgIGlmIChuZXdOdW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yICsgMSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2ZWN0
b3JMZW5ndGg7IGogPCBuZXdWZWN0b3JMZW5ndGg7ICsraikKLSAgICAgICAgICAgIG1fdmVjdG9y
W2pdID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgdmVjdG9yW2pdID0gSlNWYWx1ZSgpOwogICAg
ICAgICBpZiAoaSA+IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCiAgICAgICAgICAgICBtYXAtPnJl
bW92ZShpKTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2ZWN0b3JM
ZW5ndGg7IGogPCBtYXgodmVjdG9yTGVuZ3RoLCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsgKytq
KQotICAgICAgICAgICAgbV92ZWN0b3Jbal0gPSBKU1ZhbHVlKCk7CisgICAgICAgICAgICB2ZWN0
b3Jbal0gPSBKU1ZhbHVlKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1heCh2ZWN0b3JM
ZW5ndGgsIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpOyBqIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2op
Ci0gICAgICAgICAgICBtX3ZlY3RvcltqXSA9IG1hcC0+dGFrZShqKTsKKyAgICAgICAgICAgIHZl
Y3RvcltqXSA9IG1hcC0+dGFrZShqKTsKICAgICB9CiAKICAgICBBU1NFUlQoaSA8IG5ld1ZlY3Rv
ckxlbmd0aCk7CkBAIC00NjgsNyArNDY1LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6
cHV0U2xvd0Nhc2UoRQogICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwogICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdOdW1WYWx1ZXNJblZlY3RvcjsKIAot
ICAgIG1fdmVjdG9yW2ldID0gdmFsdWU7CisgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSB2YWx1
ZTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtNDkyLDEwICs0ODksMTAgQEAgYm9v
bCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIAogewogICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwor
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICBpZiAoaSA8
IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IG1fdmVjdG9y
W2ldOworICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
ICAgICAgICAgaWYgKCF2YWx1ZVNsb3QpIHsKICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUzMSwxMSArNTI4LDExIEBAIHZvaWQg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3QKICAgICAvLyBpcyBpbmNyZWRpYmx5
IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9h
Y2gsCiAgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1
Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwogICAgIAogICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9s
ZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZlY3RvcltpXSkKKyAgICAgICAg
aWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CiAgICAgfQogCkBAIC01NTYsNyArNTUzLDcgQEAg
QUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZQogICAgIEFTU0VSVChkZXNp
cmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogCiAgICAgdW5zaWduZWQg
aW5jcmVhc2VkTGVuZ3RoOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5U3RvcmFnZSgpLT5t
X2xlbmd0aDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3N0b3JhZ2UtPm1fbGVuZ3RoOwogCiAg
ICAgaWYgKGRlc2lyZWRMZW5ndGggPCBsZW5ndGgpCiAgICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IGxlbmd0aDsKQEAgLTU4Myw3ICs1ODAsNyBAQCBib29sIEpTQXJyYXk6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKHVuc2lnCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFu
IGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUg
YW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKICAgICAvLyB0byB0aGUgdmVjdG9yLiBD
YWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBt
b3JlIGVmZmljaWVudGx5LgogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9y
YWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7CiAgICAgQVNTRVJUKG5ld0xlbmd0
aCA+IHZlY3Rvckxlbmd0aCk7CkBAIC01OTQsMTEgKzU5MSwxMCBAQCBib29sIEpTQXJyYXk6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKHVuc2lnCiAgICAgaWYgKCF0cnlGYXN0UmVhbGxvYyhiYXNlU3Rv
cmFnZSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoICsgbV9pbmRleEJpYXMpKS5nZXRWYWx1
ZShiYXNlU3RvcmFnZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0b3JhZ2UgPSBy
ZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3Rv
cmFnZSkgKyBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAgc3RvcmFnZS0+bV9h
bGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICBzZXRBcnJheVN0b3JhZ2Uoc3RvcmFnZSk7Cisg
ICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4o
c3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFzICogc2l6ZW9mKEpT
VmFsdWUpKTsKKyAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7CiAKLSAg
ICBKU1ZhbHVlKiB2ZWN0b3IgPSBtX3ZlY3RvcjsKKyAgICBKU1ZhbHVlKiB2ZWN0b3IgPSBzdG9y
YWdlLT5tX3ZlY3RvcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgdmVjdG9yW2ldID0gSlNWYWx1ZSgpOwogCkBA
IC02MTQsOCArNjEwLDcgQEAgYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3RvclByZWZpeExlbmd0
aAogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5
IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMg
ZnJvbSBzcGFyc2UgdmFsdWUgbWFwCiAgICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZl
IHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2ll
bnRseS4KICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsK
LSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwogICAgIAogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9y
TGVuZ3RoOwogICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwpAQCAtNjI4LDE4
ICs2MjMsMTYgQEAgYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3RvclByZWZpeExlbmd0aAogICAg
IAogICAgIG1faW5kZXhCaWFzICs9IG5ld1ZlY3Rvckxlbmd0aCAtIG5ld0xlbmd0aDsKICAgICAK
LSAgICBuZXdTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihzdGF0aWNf
Y2FzdDxjaGFyKj4obmV3QmFzZVN0b3JhZ2UpICsgbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1
ZSkpOworICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oc3Rh
dGljX2Nhc3Q8Y2hhcio+KG5ld0Jhc2VTdG9yYWdlKSArIG1faW5kZXhCaWFzICogc2l6ZW9mKEpT
VmFsdWUpKTsKIAotICAgIG1lbWNweShuZXdTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgw
KSk7Ci0gICAgbWVtY3B5KCZuZXdTdG9yYWdlLT5tX3ZlY3RvcltuZXdMZW5ndGggLSBtX3ZlY3Rv
ckxlbmd0aF0sICZzdG9yYWdlLT5tX3ZlY3RvclswXSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEpT
VmFsdWUpKTsKKyAgICBtZW1jcHkobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7
CisgICAgbWVtY3B5KCZtX3N0b3JhZ2UtPm1fdmVjdG9yW25ld0xlbmd0aCAtIG1fdmVjdG9yTGVu
Z3RoXSwgJnN0b3JhZ2UtPm1fdmVjdG9yWzBdLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoSlNWYWx1
ZSkpOwogICAgIAotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QmFzZVN0b3JhZ2U7
CisgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Jhc2VTdG9yYWdlOwogICAgIG1fdmVj
dG9yTGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgIAogICAgIGZhc3RGcmVlKHN0b3JhZ2UtPm1fYWxs
b2NCYXNlKTsKIAotICAgIHNldEFycmF5U3RvcmFnZShuZXdTdG9yYWdlKTsKLSAgICAKICAgICBI
ZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc3RvcmFnZVNpemUobmV3VmVj
dG9yTGVuZ3RoKSAtIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwogICAgIAogICAgIHJldHVy
biB0cnVlOwpAQCAtNjQ4LDIxICs2NDEsMjEgQEAgYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rv
clByZWZpeExlbmd0aAogCiB2b2lkIEpTQXJyYXk6OnNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW5n
dGgpCiB7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIAogI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgaWYgKCFtX3N0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24pCisgICAgaWYgKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uKQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgZWxzZQotICAgICAgICBtX3N0
b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyAgICAgICAgc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICAKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKIAogICAgIGlmIChuZXdMZW5ndGggPCBsZW5ndGgp
IHsKICAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihsZW5ndGgsIG1fdmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3TGVuZ3RoOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZVNsb3QgPSBt
X3ZlY3RvcltpXTsKKyAgICAgICAgICAgIEpTVmFsdWUmIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwogICAgICAgICAgICAgYm9vbCBoYWRWYWx1ZSA9IHZhbHVlU2xvdDsKICAgICAg
ICAgICAgIHZhbHVlU2xvdCA9IEpTVmFsdWUoKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgLT0gaGFkVmFsdWU7CkBAIC02OTEsNyArNjg0LDcgQEAgSlNWYWx1ZSBK
U0FycmF5Ojpwb3AoKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKICAgICAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xl
bmd0aDsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTcwMiw3ICs2OTUsNyBAQCBKU1ZhbHVlIEpTQXJy
YXk6OnBvcCgpCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAKICAgICBpZiAobGVuZ3RoIDwgbV92ZWN0
b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gbV92ZWN0b3JbbGVuZ3Ro
XTsKKyAgICAgICAgSlNWYWx1ZSYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3Ro
XTsKICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewogICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWVTbG90OwpAQCAtNzM1
LDEwICs3MjgsMTAgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQog
ewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7CiAKICAgICBpZiAoc3RvcmFnZS0+bV9sZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBtX3ZlY3RvcltzdG9yYWdlLT5tX2xlbmd0aF0gPSB2YWx1ZTsKKyAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3Jbc3RvcmFnZS0+bV9sZW5ndGhdID0gdmFsdWU7CiAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgKytzdG9yYWdlLT5tX2xlbmd0aDsKICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtNzQ5LDggKzc0Miw4IEBAIHZvaWQgSlNBcnJh
eTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKICAgICAgICAgaWYgKCFtYXAgfHwg
bWFwLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChpbmNyZWFzZVZlY3Rvckxlbmd0aChz
dG9yYWdlLT5tX2xlbmd0aCArIDEpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5
U3RvcmFnZSgpOwotICAgICAgICAgICAgICAgIG1fdmVjdG9yW3N0b3JhZ2UtPm1fbGVuZ3RoXSA9
IHZhbHVlOworICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jbc3RvcmFnZS0+bV9sZW5ndGhdID0gdmFsdWU7CiAgICAg
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9sZW5ndGg7CiAgICAgICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwpAQCAtNzY5LDcgKzc2Miw3IEBAIHZvaWQgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3Rh
dGUqIGV4ZWMKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7CiAgICAgCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bV9s
ZW5ndGg7CiAgICAgCkBAIC03ODIsNyArNzc1LDcgQEAgdm9pZCBKU0FycmF5OjpzaGlmdENvdW50
KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAvLyBzbG90cyBhbmQgdGhlbiBmaWxsIHRoZW0gd2l0
aCBwb3NzaWJsZSBwcm9wZXJ0aWVzLiAgU2VlIEVDTUEgc3BlYy4KICAgICAgICAgLy8gMTUuNC40
Ljkgc3RlcHMgMTEgdGhyb3VnaCAxMy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY291bnQ7
IGkgPCBvbGRMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKChpID49IG1fdmVjdG9yTGVu
Z3RoKSB8fCAoIW1fdmVjdG9yW2ldKSkgeworICAgICAgICAgICAgaWYgKChpID49IG1fdmVjdG9y
TGVuZ3RoKSB8fCAoIW1fc3RvcmFnZS0+bV92ZWN0b3JbaV0pKSB7CiAgICAgICAgICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QodGhpcyk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwID0gcHJv
dG90eXBlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCghcC5pc051bGwoKSkgJiYgKGFzT2JqZWN0
KHApLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaSwgc2xvdCkpKQpAQCAtNzkwLDExICs3ODMsMTEg
QEAgdm9pZCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOyAvLyBUaGUg
cHV0KCkgYWJvdmUgY291bGQgaGF2ZSBncm93biB0aGUgdmVjdG9yIGFuZCByZWFsbG9jJ2VkIHN0
b3JhZ2UuCisgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7IC8vIFRoZSBwdXQoKSBhYm92ZSBj
b3VsZCBoYXZlIGdyb3duIHRoZSB2ZWN0b3IgYW5kIHJlYWxsb2MnZWQgc3RvcmFnZS4KIAogICAg
ICAgICAvLyBOZWVkIHRvIGRlY3JlbWVudCBudW1WYWx1ZXNJbnZlY3RvciBiYXNlZCBvbiBudW1i
ZXIgb2YgcmVhbCBlbnRyaWVzCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAodW5z
aWduZWQpY291bnQ7ICsraSkKLSAgICAgICAgICAgIGlmICgoaSA8IG1fdmVjdG9yTGVuZ3RoKSAm
JiAobV92ZWN0b3JbaV0pKQorICAgICAgICAgICAgaWYgKChpIDwgbV92ZWN0b3JMZW5ndGgpICYm
IChzdG9yYWdlLT5tX3ZlY3RvcltpXSkpCiAgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOwogICAgIH0gZWxzZQogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yIC09IGNvdW50OwpAQCAtODA5LDE3ICs4MDIsMTYgQEAgdm9pZCBKU0FycmF5Ojpz
aGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsK
ICAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgIG1lbW1v
dmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdl
KTsKKyAgICAgICAgICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4obmV3QmFzZVN0b3JhZ2UpOwogCiAgICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsK
LSAgICAgICAgICAgIHNldEFycmF5U3RvcmFnZShzdG9yYWdlKTsKICAgICAgICAgfQogICAgIH0K
IH0KICAgICAKIHZvaWQgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgaW50
IGNvdW50KQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwor
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKIAogICAgIEFTU0VSVChtX2lu
ZGV4QmlhcyA+PSAwKTsKICAgICBBU1NFUlQoY291bnQgPj0gMCk7CkBAIC04MzIsNyArODI0LDcg
QEAgdm9pZCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleAogICAgICAgICAvLyBz
bG90cyBhbmQgdGhlbiBmaWxsIHRoZW0gd2l0aCBwb3NzaWJsZSBwcm9wZXJ0aWVzLiAgU2VlIEVD
TUEgc3BlYy4KICAgICAgICAgLy8gMTUuNC40LjEzIHN0ZXBzIDggdGhyb3VnaCAxMC4KICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoKGkgPj0gbV92ZWN0b3JMZW5ndGgpIHx8ICghbV92ZWN0b3JbaV0pKSB7CisgICAgICAgICAg
ICBpZiAoKGkgPj0gbV92ZWN0b3JMZW5ndGgpIHx8ICghbV9zdG9yYWdlLT5tX3ZlY3RvcltpXSkp
IHsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHAgPSBwcm90b3R5cGUoKTsKICAgICAgICAgICAgICAgICBpZiAoKCFwLmlz
TnVsbCgpKSAmJiAoYXNPYmplY3QocCktPmdldFByb3BlcnR5U2xvdChleGVjLCBpLCBzbG90KSkp
CkBAIC04NDEsMjIgKzgzMywyMiBAQCB2b2lkIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3Rh
dGUqIGV4CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOyAvLyBUaGUgcHV0KCkgYWJvdmUgY291bGQgaGF2ZSBncm93biB0aGUgdmVjdG9yIGFuZCBy
ZWFsbG9jJ2VkIHN0b3JhZ2UuCisgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsgLy8gVGhlIHB1dCgp
IGFib3ZlIGNvdWxkIGhhdmUgZ3Jvd24gdGhlIHZlY3RvciBhbmQgcmVhbGxvYydlZCBzdG9yYWdl
LgogICAgIAogICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkgewogICAgICAgICBtX2luZGV4
QmlhcyAtPSBjb3VudDsKICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAg
ICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAg
ICAgIHN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9y
YWdlKTsKLSAgICAgICAgc2V0QXJyYXlTdG9yYWdlKHN0b3JhZ2UpOworICAgICAgICBtX3N0b3Jh
Z2UgPSByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKICAg
ICAgICAgbV92ZWN0b3JMZW5ndGggKz0gY291bnQ7CiAgICAgfSBlbHNlIGlmICghaW5jcmVhc2VW
ZWN0b3JQcmVmaXhMZW5ndGgobV92ZWN0b3JMZW5ndGggKyBjb3VudCkpIHsKICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
SlNWYWx1ZSogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIG1fdmVjdG9yW2ldID0gSlNWYWx1ZSgpOworICAg
ICAgICB2ZWN0b3JbaV0gPSBKU1ZhbHVlKCk7CiB9CiAKIHZvaWQgSlNBcnJheTo6bWFya0NoaWxk
cmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQpAQCAtODgyLDcgKzg3NCw3IEBAIHN0YXRpYyBpbnQg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJp
YyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBh
Y3RGb3JTb3J0aW5nKCk7CiAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKQEAg
LTg5Niw3ICs4ODgsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhl
CiAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKICAgICBzaXplX3Qgc2l6ZSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Cisg
ICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewogICAgICAgICAg
ICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTkwOCwxNCArOTAwLDE0IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhl
Y1N0YXRlKiBleGUKICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0
LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCiAgICAgLy8gYWxzbyBkb24ndCBy
ZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2li
bGUKICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBw
cmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KG1fdmVjdG9yLCBzaXplLCBzaXplb2YoSlNWYWx1
ZSksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9y
LCBzaXplLCBzaXplb2YoSlNWYWx1ZSksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwogCiAgICAg
Y2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwog
CiAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNv
cnRpbmcoKTsKICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkgewpAQCAtOTM4LDcg
KzkzMCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkr
KykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgQVNTRVJUKCF2YWx1ZS5p
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CiAgICAgfQpA
QCAtOTcwLDcgKzk2Miw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICBt
X3ZlY3RvcltpXSA9IHZhbHVlc1tpXS5maXJzdDsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0gPSB2YWx1ZXNbaV0uZmlyc3Q7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0
ZW5jeUNoZWNrKTsKIH0KQEAgLTEwNTcsNyArMTA0OSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2Vw
dGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgogCkBA
IC0xMDk2LDE0ICsxMDg4LDE0IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmEKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3Npbmcg
dmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIg
b25lcyBpbnRvIHRoZSB0cmVlLgogICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fdmVjdG9yW251bURl
ZmluZWRdOworICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVk
XTsKICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CiAgICAgfQogICAgIGZvciAodW5z
aWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgSlNWYWx1ZSB2ID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldOwogICAgICAgICBpZiAodikgewogICAgICAgICAgICAgaWYgKHYuaXNVbmRl
ZmluZWQoKSkKICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKQEAgLTExMjcsNyArMTEx
OSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOworICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewpAQCAtMTE0OSwxNyArMTE0MSwxNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhCiAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFy
ZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwogICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAg
IG1fdmVjdG9yW2ldID0gdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWU7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldID0gdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sq
aXRlcl0udmFsdWU7CiAgICAgICAgICsraXRlcjsKICAgICB9CiAKICAgICAvLyBQdXQgdW5kZWZp
bmVkIHZhbHVlcyBiYWNrIGluLgogICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0gPSBqc1VuZGVmaW5lZCgpOwog
CiAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJv
ZWQgb3V0LgogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ldID0gSlNWYWx1ZSgpOwor
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXSA9IEpTVmFsdWUoKTsKIAogICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwogCkBAIC0xMTY4LDcg
KzExNjAsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZv
aWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1
ZmZlciYgYXJncykKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAKICAgICBKU1ZhbHVl
KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBt
aW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKQEAgLTExODYsOSArMTE3OCw5
IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0Fy
cmF5Ojpjb3B5VG9SZWdpc3RlcnMoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogYnVmZmVyLCB1
aW50MzJfdCBtYXhTaXplKQogewotICAgIEFTU0VSVChhcnJheVN0b3JhZ2UoKS0+bV9sZW5ndGgg
Pj0gbWF4U2l6ZSk7CisgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9sZW5ndGggPj0gbWF4U2l6ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKG1heFNpemUpOwotICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fdmVj
dG9yOworICAgIEpTVmFsdWUqIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgdW5z
aWduZWQgdmVjdG9yRW5kID0gbWluKG1heFNpemUsIG1fdmVjdG9yTGVuZ3RoKTsKICAgICB1bnNp
Z25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CkBAIC0xMjA2LDcg
KzExOTgsNyBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCiB7CiAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlT
dG9yYWdlKCk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0
b3JMZW5ndGgpOwogCkBAIC0xMjE0LDE3ICsxMjA2LDE3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNv
bXBhY3RGb3JTb3J0aW5nKCkKICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwogCiAgICAg
Zm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gbV92ZWN0b3JbbnVtRGVmaW5lZF07CisgICAgICAgIEpTVmFsdWUg
diA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdOwogICAgICAgICBpZiAoIXYgfHwgdi5p
c1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
SlNWYWx1ZSB2ID0gbV92ZWN0b3JbaV07CisgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwogICAgICAgICBpZiAodikgewogICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX3ZlY3RvcltudW1EZWZpbmVkKytdID0gdjsKKyAgICAgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdID0gdjsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTIzOCwyMSArMTIzMCwyMSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9y
U29ydGluZygpCiAgICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgobmV3VXNlZFZlY3Rv
ckxlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAg
ICAgICAgIH0KIAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3ZlY3Rvcltu
dW1EZWZpbmVkKytdID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W251bURlZmluZWQrK10gPSBpdC0+c2Vjb25kOwogCiAgICAgICAgIGRlbGV0ZSBtYXA7CiAgICAg
ICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwogICAgIH0KIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAg
ICAgIG1fdmVjdG9yW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0gPSBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0
b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdmVjdG9yW2ld
ID0gSlNWYWx1ZSgpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXSA9IEpTVmFsdWUoKTsK
IAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3Ro
OwogCkBAIC0xMjYzLDE5ICsxMjU1LDE5IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JT
b3J0aW5nKCkKIAogdm9pZCogSlNBcnJheTo6c3ViY2xhc3NEYXRhKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYXJyYXlTdG9yYWdlKCktPnN1YmNsYXNzRGF0YTsKKyAgICByZXR1cm4gbV9zdG9yYWdl
LT5zdWJjbGFzc0RhdGE7CiB9CiAKIHZvaWQgSlNBcnJheTo6c2V0U3ViY2xhc3NEYXRhKHZvaWQq
IGQpCiB7Ci0gICAgYXJyYXlTdG9yYWdlKCktPnN1YmNsYXNzRGF0YSA9IGQ7CisgICAgbV9zdG9y
YWdlLT5zdWJjbGFzc0RhdGEgPSBkOwogfQogCiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
IAogdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5
cGUpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogCiAgICAgQVNTRVJUKHN0b3JhZ2Up
OwogICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQpAQCAtMTI4Myw3ICsxMjc1
LDcgQEAgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbgogCiAgICAgdW5z
aWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV92
ZWN0b3JbaV0pIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXSkgewogICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7CiAgICAg
ICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKICAgICAgICAg
ICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9i
amVjdCB3YXMgZGVhbGxvY2F0ZWQuCkBAIC0xMzAxLDcgKzEyOTMsNyBAQCB2b2lkIEpTQXJyYXk6
OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuCiAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6aXRlcmF0b3IgaXQgPSBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0
OwogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAg
ICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VS
VChpbmRleCA+PSBzdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKICAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25k
KTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDY0ODU2KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQogICAgICAgICB2
b2lkIHNldExlbmd0aCh1bnNpZ25lZCk7IC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQg
bm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KIAogICAgICAgICB2b2lkIHNv
cnQoRXhlY1N0YXRlKik7CkBAIC05MCwxMSArOTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgc2hpZnRDb3VudChFeGVjU3RhdGUqLCBpbnQgY291bnQpOwogICAgICAgICB2b2lk
IHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCBpbnQgY291bnQpOwogCi0gICAgICAgIGJvb2wgY2Fu
R2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fdmVj
dG9yW2ldOyB9CisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4g
aSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KICAgICAgICAg
SlNWYWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2ldOworICAg
ICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxl
bmd0aDsgfQpAQCAtMTAyLDkgKzEwMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBKU1ZhbHVlJiB4ID0gbV92ZWN0b3JbaV07CisgICAgICAgICAgICBKU1ZhbHVlJiB4ID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAgICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bV9sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gaSArIDE7CkBAIC0xMTUsNyArMTE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgdW5jaGVja2VkU2V0SW5kZXgodW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7
CiAgICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlT
dG9yYWdlICpzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKICAg
ICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKICNl
bmRpZgpAQCAtMTQzLDE2ICsxNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCog
c3ViY2xhc3NEYXRhKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0U3ViY2xhc3NEYXRhKHZvaWQq
KTsKICAgICAgICAgCi0gICAgICAgIGlubGluZSBBcnJheVN0b3JhZ2UgKmFycmF5U3RvcmFnZSgp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fdmVjdG9yKSAtIChzaXplb2Yo
QXJyYXlTdG9yYWdlKSAtIHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aW5saW5lIHZvaWQgc2V0QXJyYXlTdG9yYWdlKEFycmF5U3RvcmFnZSAqc3RvcmFnZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV92ZWN0b3IgPSAmc3RvcmFnZS0+bV92ZWN0b3JbMF07Ci0gICAg
ICAgIH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCkBAIC0xNzAsNyArMTYwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRo
ZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKICAgICAgICAgaW50IG1faW5kZXhCaWFzOyAvLyBU
aGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0g
ICAgICAgIEpTVmFsdWUqIG1fdmVjdG9yOyAvLyBDb3B5IG9mIEFycmF5U3RvcmFnZS5tX3ZlY3Rv
ci4gIFVzZWQgZm9yIHF1aWNrIHZlY3RvciBhY2Nlc3MgYW5kIHRvIG1hdGVyaWFsaXplIEFycmF5
U3RvcmFnZSBwdHIuCisgICAgICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwogICAgIH07CiAK
ICAgICBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHsKICAgICAgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbkRpcmVjdCht
YXJrU3RhY2spOwogICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
IAogICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+
bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVl
cyhzdG9yYWdlLT5tX3ZlY3RvciwgdXNlZFZlY3Rvckxlbmd0aCwgTWF5Q29udGFpbk51bGxWYWx1
ZXMpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>