<?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>176800</bug_id>
          
          <creation_ts>2017-09-12 13:13:06 -0700</creation_ts>
          <short_desc>[Cleanup] Cleanup uses of the FileList class</short_desc>
          <delta_ts>2017-09-27 12:27:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1348008</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 13:13:06 -0700</bug_when>
    <thetext>[Cleanup] Cleanup uses of the FileList class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348020</commentid>
    <comment_count>1</comment_count>
      <attachid>320564</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 13:42:31 -0700</bug_when>
    <thetext>Created attachment 320564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348022</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-12 13:44:32 -0700</bug_when>
    <thetext>Attachment 320564 did not pass style-queue:


ERROR: Source/WebCore/platform/gtk/DragDataGtk.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348035</commentid>
    <comment_count>3</comment_count>
      <attachid>320568</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 14:34:35 -0700</bug_when>
    <thetext>Created attachment 320568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348036</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-12 14:37:10 -0700</bug_when>
    <thetext>Attachment 320568 did not pass style-queue:


ERROR: Source/WebCore/platform/gtk/DragDataGtk.cpp:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348667</commentid>
    <comment_count>5</comment_count>
      <attachid>320568</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-13 23:43:58 -0700</bug_when>
    <thetext>Comment on attachment 320568
Patch

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

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2700
&gt;                  if (!readFile(file))
&gt;                      return JSValue();
&gt;                  if (m_isDOMGlobalObject)
&gt; -                    files.append(WTFMove(file));
&gt; +                    files.append(file.releaseNonNull());

This would be nicer if you made readFile take no parameters and return a RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348800</commentid>
    <comment_count>6</comment_count>
      <attachid>320568</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-14 09:22:11 -0700</bug_when>
    <thetext>Comment on attachment 320568
Patch

Clearing flags on attachment: 320568

Committed r222025: &lt;http://trac.webkit.org/changeset/222025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348801</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-14 09:22:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349135</commentid>
    <comment_count>8</comment_count>
      <attachid>320568</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-14 17:45:01 -0700</bug_when>
    <thetext>Comment on attachment 320568
Patch

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

&gt; Source/WebCore/html/FileInputType.cpp:156
&gt; +    auto* fileList = element().files();
&gt; +    ASSERT(fileList);

I would write:

    ASSERT(element().files());
    auto&amp; fileList = *element().files();

&gt; Source/WebCore/html/FormController.h:48
&gt; +        m_values.append(value);

Can this be done more efficiently? Seems like this will allocate a larger Vector than is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349315</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-15 08:47:58 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 320568 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320568&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/FileInputType.cpp:156
&gt; &gt; +    auto* fileList = element().files();
&gt; &gt; +    ASSERT(fileList);
&gt; 
&gt; I would write:
&gt; 
&gt;     ASSERT(element().files());
&gt;     auto&amp; fileList = *element().files();
&gt; 
&gt; &gt; Source/WebCore/html/FormController.h:48
&gt; &gt; +        m_values.append(value);
&gt; 
&gt; Can this be done more efficiently? Seems like this will allocate a larger
&gt; Vector than is needed.

Thanks. I&apos;ll address these with https://bugs.webkit.org/show_bug.cgi?id=177004.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353405</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:27:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693325&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320564</attachid>
            <date>2017-09-12 13:42:31 -0700</date>
            <delta_ts>2017-09-12 14:34:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176800-20170912134231.patch</filename>
            <type>text/plain</type>
            <size>30045</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE3LTA5LTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NsZWFudXBdIENsZWFudXAgdXNlcyBv
ZiB0aGUgRmlsZUxpc3QgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NjgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmlsZWFwaS9GaWxlTGlzdC5jcHA6CisgICAgICAgICogZmlsZWFwaS9G
aWxlTGlzdC5oOgorCisgICAgICAgICAgICBTdG9yZSBsaXN0IG9mIGZpbGVzIGFzIFJlZnMsIHJh
dGhlciB0aGFuIFJlZlB0cnMuCisgICAgICAgICAgICBBZGQgZGlyZWN0IGFjY2Vzc29yIHRvIHRo
ZSB1bmRlcmx5aW5nIFZlY3RvciBmb3IgZmFzdGVyIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIEFk
ZCBmaWxlKHVuc2lnbmVkKSBmdW5jdGlvbiB0byBhbGxvdyBkaXJlY3QgaW5kZXhpbmcsIHJhdGhl
ciB0aGFuIHVzaW5nCisgICAgICAgICAgICB0aGUgRE9NIGV4cG9zZWQgaXRlbSBmdW5jdGlvbiB3
aGljaCBhbHdheXMgZG9lcyBhIGxlbmd0aCBjaGVjay4KKworICAgICAgICAqIE1vZHVsZXMvZW50
cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmllc0FQSS5jcHA6CisgICAgICAgIAorICAgICAg
ICAgICAgUmVtb3ZlIHVudXNlZCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggI2luY2x1ZGUuCisg
ICAgICAgICAgICBVc2UgbW9kZXJuIGZvciBsb29wIGFuZCB0aGUgbmV3IGRpcmVjdCBmaWxlIHZl
Y3RvciBhY2Nlc3MuIAorICAgICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgCisg
ICAgICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgI2luY2x1ZGVzLCBhZG9wdCBhdXRvLCBhbmQg
dXNlIG1vZGVybiBmb3ItbG9vcAorICAgICAgICAgICAgZm9yIEZpbGVMaXN0LgorICAgICAgICAK
KyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlcjo6ZmlsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyOjpo
YXNGaWxlT2ZUeXBlKToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgYXV0by4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvcklucHV0RXZlbnQpOgor
ICAgICAgICAKKyAgICAgICAgICAgIFVzZSBpbml0aWFsaXplciBsaXN0IGZvciB0aGUgdHlwZVRv
U3RyaW5nTWFwLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1z
IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgYXV0byBhbmQgbW9kZXJuIGZvci1s
b29wIGZvciBGaWxlTGlzdC4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVzRnJvbUZvcm1Db250
cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6c2F2ZUZvcm1Db250
cm9sU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6YXBwZW5k
Rm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6aGFuZGxl
RE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpnZXRU
eXBlU3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpkaXNh
YmxlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
bXVsdGlwbGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVE
cm9wcGVkRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6ZGVmYXVsdFRv
b2xUaXAgY29uc3QpOgorCisgICAgICAgICAgICBBZG9wdCBhdXRvLCBicmFjZS1pbml0aWFsaXph
dGlvbiwgYW5kIG1vZGVybiBmb3ItbG9vcHMuCisKKyAgICAgICAgKiBodG1sL0ZpbGVMaXN0Q3Jl
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmREaXJlY3RvcnlGaWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlTGlzdENyZWF0b3I6OmNyZWF0ZUZpbGVMaXN0KToKKyAgICAgICAg
CisgICAgICAgICAgICBVcGRhdGUgdG8gd29yayBpbiB0ZXJtcyBvZiBWZWN0b3I8UmVmPEZpbGU+
Pi4KKworICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Db250cm9sU3RhdGU6OkZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAKKyAgICAgICAg
ICAgIFJlLWZvcm1hdCBleGlzdGluZyBjb25zdHJ1Y3RvcnMgYW5kIGFkZCBvbmUgdGhhdCB0YWtl
cyBhbiByLXZhbHVlCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiB0byBhbGxvdyBjb25zdHJ1
Y3Rpb24gZnJvbSBhIHByZS1jcmVhdGVkIGxpc3QgKHVzZWQgCisgICAgICAgICAgICBpbiBGaWxl
SW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSkKKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRmlsZW5hbWVzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6YXNGaWxlbmFtZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnRGF0
YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxlbmFtZXMgY29uc3Qp
OgorICAgICAgICAKKyAgICAgICAgICAgIENvbnZlcnQgYXNGaWxlbmFtZXMgdG8gcmV0dXJuLCBy
YXRoZXIgdGhhbiB0YWtlLCBhIFZlY3RvcjxTdHJpbmc+LgorCiAyMDE3LTA5LTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgR3RrIGJ1aWxkIGZpeCBmb3IgIkZpbmlz
aCBvZmYgdGhlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uIiAtIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NTkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW50cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmllc0FQSS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVz
QVBJLmNwcAkocmV2aXNpb24gMjIxOTM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRy
aWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGaWxl
TGlzdC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTUgKzQx
LDE0IEBAIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gSFRNTElucHV0RWwKICAgICBpZiAo
aW5wdXQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRkaXJlY3RvcnlB
dHRyKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8qIGZpbGVzID0gaW5wdXQuZmls
ZXMoKTsKLSAgICBpZiAoIWZpbGVzKQorICAgIGF1dG8qIGZpbGVMaXN0ID0gaW5wdXQuZmlsZXMo
KTsKKyAgICBpZiAoIWZpbGVMaXN0KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gZmlsZXMtPmxlbmd0aCgpOwogICAgIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVu
dHJ5Pj4gZW50cmllczsKLSAgICBlbnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3Ro
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGVu
dHJpZXMudW5jaGVja2VkQXBwZW5kKERPTUZpbGVTeXN0ZW06OmNyZWF0ZUVudHJ5Rm9yRmlsZShj
b250ZXh0LCAqZmlsZXMtPml0ZW0oaSkpKTsKKyAgICBlbnRyaWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZmlsZUxpc3QtPmZpbGVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGZpbGUgOiBm
aWxlTGlzdC0+ZmlsZXMoKSkKKyAgICAgICAgZW50cmllcy51bmNoZWNrZWRBcHBlbmQoRE9NRmls
ZVN5c3RlbTo6Y3JlYXRlRW50cnlGb3JGaWxlKGNvbnRleHQsIGZpbGUuY29weVJlZigpKSk7CiAg
ICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjIxOTM2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCi0jaW5jbHVkZSAiQmxvYi5oIgogI2lu
Y2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1
ZGUgIkNyeXB0b0tleUVDLmgiCkBAIC0zNSwxMCArMzQsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0tl
eVJTQS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJD
cnlwdG9LZXlSYXcuaCIKLSNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIK
ICNpbmNsdWRlICJJREJWYWx1ZS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
IkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCkBAIC05MjksNyArOTI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgSlNP
YmplY3QqIG9iaiA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8qIG9iaiA9IGFz
T2JqZWN0KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBCb29sZWFu
T2JqZWN0OjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVy
bmFsKG9iaikpIC8vIGhhbmRsZSBkdXBsaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtOTUxLDIwICs5NDcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3
cml0ZShvYmotPmludGVybmFsVmFsdWUoKS5hc051bWJlcigpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChGaWxlKiBmaWxlID0g
SlNGaWxlOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmaWxl
ID0gSlNGaWxlOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKICAgICAgICAgICAgICAgICB3cml0ZShG
aWxlVGFnKTsKLSAgICAgICAgICAgICAgICB3cml0ZShmaWxlKTsKKyAgICAgICAgICAgICAgICB3
cml0ZSgqZmlsZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoRmlsZUxpc3QqIGxpc3QgPSBKU0ZpbGVMaXN0Ojp0b1dyYXBwZWQo
dm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsaXN0ID0gSlNGaWxlTGlzdDo6dG9X
cmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoRmlsZUxpc3RUYWcpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAg
ICAgICAgICAgIHdyaXRlKGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB3cml0ZShsaXN0LT5p
dGVtKGkpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShsaXN0LT5sZW5ndGgoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogbGlzdC0+ZmlsZXMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoZmlsZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoQmxvYiogYmxvYiA9IEpTQmxvYjo6dG9XcmFw
cGVkKHZtLCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYmxvYiA9IEpTQmxvYjo6dG9X
cmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoQmxvYlRhZyk7CiAgICAg
ICAgICAgICAgICAgbV9ibG9iVVJMcy5hcHBlbmQoYmxvYi0+dXJsKCkpOwogICAgICAgICAgICAg
ICAgIHdyaXRlKGJsb2ItPnVybCgpKTsKQEAgLTk3Miw3ICs5NjcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHdyaXRlKGJsb2ItPnNpemUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoSW1hZ2VEYXRhKiBkYXRhID0g
SlNJbWFnZURhdGE6OnRvV3JhcHBlZCh2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IGRhdGEgPSBKU0ltYWdlRGF0YTo6dG9XcmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAg
ICAgd3JpdGUoSW1hZ2VEYXRhVGFnKTsKICAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT53aWR0
aCgpKTsKICAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5oZWlnaHQoKSk7CkBAIC05ODEsNyAr
OTc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBSZWdFeHBPYmplY3Q6Omlu
Zm8oKSkpIHsKLSAgICAgICAgICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9IGFzUmVnRXhw
T2JqZWN0KG9iaik7CisgICAgICAgICAgICAgICAgYXV0byogcmVnRXhwID0gYXNSZWdFeHBPYmpl
Y3Qob2JqKTsKICAgICAgICAgICAgICAgICBjaGFyIGZsYWdzWzNdOwogICAgICAgICAgICAgICAg
IGludCBmbGFnQ291bnQgPSAwOwogICAgICAgICAgICAgICAgIGlmIChyZWdFeHAtPnJlZ0V4cCgp
LT5nbG9iYWwoKSkKQEAgLTk5Niw3ICs5OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJp
dHModm0sIEpTTWVzc2FnZVBvcnQ6OmluZm8oKSkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RQ
b29sOjppdGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZmluZChvYmop
OworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRz
LmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9y
dFJlZmVyZW5jZVRhZyk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7
CkBAIC0xMDA2LDEyICsxMDAxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29kZSA9
IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyID0gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyKHZtLCBvYmopKSB7
CisgICAgICAgICAgICBpZiAoYXV0byogYXJyYXlCdWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJy
YXlCdWZmZXIodm0sIG9iaikpIHsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlCdWZmZXItPmlz
TmV1dGVyZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJl
dHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJh
dG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5maW5kKG9iaik7CisgICAgICAg
ICAgICAgICAgYXV0byBpbmRleCA9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZmluZChvYmop
OwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJz
LmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKEFycmF5QnVmZmVyVHJhbnNmZXJU
YWcpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwpAQCAtMTAyMCw4
ICsxMDE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50
ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGFycmF5QnVm
ZmVyLT5pc1NoYXJlZCgpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fY29udGV4dCA9PSBTZXJp
YWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlCdWZmZXItPmlzU2hhcmVkKCkgJiYgbV9jb250ZXh0ID09IFNlcmlhbGl6YXRpb25D
b250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSkgewogICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBpbmRleCA9IG1fc2hhcmVkQnVmZmVycy5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJh
eUJ1ZmZlci0+c2hhcmVXaXRoKGNvbnRlbnRzKSkgewpAQCAtMTA0NSw3ICsxMDM5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgIH0KICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLSAgICAgICAgICAgIGlmIChDcnlwdG9LZXkqIGtleSA9
IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAg
ICAgd3JpdGUoQ3J5cHRvS2V5VGFnKTsKICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4g
c2VyaWFsaXplZEtleTsKICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBkdW1teUJsb2JV
UkxzOwpAQCAtMTI0MSwxMyArMTIzNSwxMyBAQCBwcml2YXRlOgogICAgICAgICB3cml0ZUxpdHRs
ZUVuZGlhbihtX2J1ZmZlciwgdmVjdG9yLmRhdGEoKSwgc2l6ZSk7CiAgICAgfQogCi0gICAgdm9p
ZCB3cml0ZShjb25zdCBGaWxlKiBmaWxlKQorICAgIHZvaWQgd3JpdGUoY29uc3QgRmlsZSYgZmls
ZSkKICAgICB7Ci0gICAgICAgIG1fYmxvYlVSTHMuYXBwZW5kKGZpbGUtPnVybCgpKTsKLSAgICAg
ICAgd3JpdGUoZmlsZS0+cGF0aCgpKTsKLSAgICAgICAgd3JpdGUoZmlsZS0+dXJsKCkpOwotICAg
ICAgICB3cml0ZShmaWxlLT50eXBlKCkpOwotICAgICAgICB3cml0ZShmaWxlLT5uYW1lKCkpOwor
ICAgICAgICBtX2Jsb2JVUkxzLmFwcGVuZChmaWxlLnVybCgpKTsKKyAgICAgICAgd3JpdGUoZmls
ZS5wYXRoKCkpOworICAgICAgICB3cml0ZShmaWxlLnVybCgpKTsKKyAgICAgICAgd3JpdGUoZmls
ZS50eXBlKCkpOworICAgICAgICB3cml0ZShmaWxlLm5hbWUoKSk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCkBAIC0yMDMzLDE2ICsyMDI3LDE2IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBDYWNoZWRTdHJpbmdSZWYgcGF0aDsKICAgICAgICAgaWYgKCFyZWFkU3RyaW5n
RGF0YShwYXRoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBDYWNoZWRTdHJpbmdSZWYgdXJsOwogICAgICAgICBpZiAoIXJlYWRTdHJp
bmdEYXRhKHVybCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIHR5cGU7CiAgICAgICAgIGlmICghcmVhZFN0
cmluZ0RhdGEodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIG5hbWU7CiAgICAgICAgIGlmICghcmVh
ZFN0cmluZ0RhdGEobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgYmxvYiBVUkwgZm9yIHRoaXMgZmlsZSBo
YXMgYW4gYXNzb2NpYXRlZCBibG9iIGZpbGUgcGF0aCwgcHJlZmVyIHRoYXQgb25lIG92ZXIgdGhl
ICJidWlsdC1pbiIgcGF0aC4KICAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gYmxvYkZpbGVQYXRo
Rm9yQmxvYlVSTCh1cmwtPnN0cmluZygpKTsKQEAgLTI2OTcsMTMgKzI2OTEsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgICAgICAgICBpZiAoIXJl
YWQobGVuZ3RoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAg
ICAgVmVjdG9yPFJlZlB0cjxGaWxlPj4gZmlsZXM7CisgICAgICAgICAgICBWZWN0b3I8UmVmPEZp
bGU+PiBmaWxlczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogICAgICAgICAgICAgICAgIFJlZlB0cjxGaWxlPiBmaWxlOwogICAgICAgICAgICAg
ICAgIGlmICghcmVhZEZpbGUoZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpCi0gICAgICAg
ICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChXVEZNb3ZlKGZpbGUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmlsZXMuYXBwZW5kKGZpbGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAJKHJl
dmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6
ZmlsZXMoKSBjb25zdAogI2VuZGlmCiAKICAgICBpZiAobmV3bHlDcmVhdGVkRmlsZUxpc3QpIHsK
LSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGZpbGVuYW1lIDogbV9wYXN0ZWJvYXJkLT5yZWFk
RmlsZW5hbWVzKCkpCisgICAgICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBtX3Bhc3RlYm9hcmQt
PnJlYWRGaWxlbmFtZXMoKSkKICAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUoZmlsZW5hbWUpKTsKICAgICB9CiAgICAgcmV0dXJuICptX2ZpbGVMaXN0OwpAQCAtMjAz
LDcgKzIwMyw3IEBAIGJvb2wgRGF0YVRyYW5zZmVyOjpoYXNGaWxlT2ZUeXBlKGNvbnN0IFMKIHsK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5SZWFkVHlwZXMoKSk7CiAK
LSAgICBmb3IgKGNvbnN0IFN0cmluZyYgcGF0aCA6IG1fcGFzdGVib2FyZC0+cmVhZEZpbGVuYW1l
cygpKSB7CisgICAgZm9yIChhdXRvJiBwYXRoIDogbV9wYXN0ZWJvYXJkLT5yZWFkRmlsZW5hbWVz
KCkpIHsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoRmlsZTo6Y29udGVudFR5
cGVGb3JGaWxlKHBhdGgpLCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTIyMCw5ICsyMjAsNyBAQCBib29sIERhdGFUcmFuc2Zlcjo6aGFzU3RyaW5nT2ZUeXBlKGNv
bnN0CiAKIFJlZjxEYXRhVHJhbnNmZXI+IERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9ySW5wdXRFdmVu
dChjb25zdCBTdHJpbmcmIHBsYWluVGV4dCwgY29uc3QgU3RyaW5nJiBodG1sVGV4dCkKIHsKLSAg
ICBUeXBlVG9TdHJpbmdNYXAgdHlwZVRvU3RyaW5nTWFwOwotICAgIHR5cGVUb1N0cmluZ01hcC5z
ZXQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIiksIHBsYWluVGV4dCk7Ci0gICAgdHlwZVRvU3Ry
aW5nTWFwLnNldChBU0NJSUxpdGVyYWwoInRleHQvaHRtbCIpLCBodG1sVGV4dCk7CisgICAgVHlw
ZVRvU3RyaW5nTWFwIHR5cGVUb1N0cmluZ01hcCB7IHsgQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWlu
IiksIHBsYWluVGV4dCB9LCB7IEFTQ0lJTGl0ZXJhbCgidGV4dC9odG1sIiksIGh0bWxUZXh0IH0g
fTsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhVHJhbnNmZXIoU3RvcmVNb2RlOjpSZWFk
b25seSwgU3RhdGljUGFzdGVib2FyZDo6Y3JlYXRlKFdURk1vdmUodHlwZVRvU3RyaW5nTWFwKSks
IFR5cGU6OklucHV0RXZlbnQpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlckl0ZW1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0
YVRyYW5zZmVySXRlbUxpc3QuY3BwCShyZXZpc2lvbiAyMjE5MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTgg
KzEyNCwxNiBAQCBWZWN0b3I8UmVmPERhdGFUcmFuc2Zlckl0ZW0+PiYgRGF0YVRyYW5zCiAgICAg
ICAgIHJldHVybiAqbV9pdGVtczsKIAogICAgIFZlY3RvcjxSZWY8RGF0YVRyYW5zZmVySXRlbT4+
IGl0ZW1zOwotICAgIGZvciAoU3RyaW5nJiB0eXBlIDogbV9kYXRhVHJhbnNmZXIudHlwZXMoKSkg
ewotICAgICAgICBTdHJpbmcgbG93ZXJjYXNlZFR5cGUgPSB0eXBlLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV9kYXRhVHJhbnNmZXIudHlwZXMoKSkg
eworICAgICAgICBhdXRvIGxvd2VyY2FzZWRUeXBlID0gdHlwZS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwogICAgICAgICBpZiAoaXNTdXBwb3J0ZWRUeXBlKGxvd2VyY2FzZWRUeXBlKSkKICAg
ICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtOjpjcmVhdGUobV93ZWFrUHRy
RmFjdG9yeS5jcmVhdGVXZWFrUHRyKCksIGxvd2VyY2FzZWRUeXBlKSk7CiAgICAgfQogCi0gICAg
RmlsZUxpc3QmIGZpbGVzID0gbV9kYXRhVHJhbnNmZXIuZmlsZXMoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwLCBsZW5ndGggPSBmaWxlcy5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIEZpbGUmIGZpbGUgPSAqZmlsZXMuaXRlbShpKTsKLSAgICAgICAgU3RyaW5nIHR5cGUg
PSBGaWxlOjpjb250ZW50VHlwZUZvckZpbGUoZmlsZS5wYXRoKCkpLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7Ci0gICAgICAgIGlmIChpc1N1cHBvcnRlZFR5cGUodHlwZSkgfHwgZmlsZS5pc0Rp
cmVjdG9yeSgpKQotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW06OmNy
ZWF0ZShtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKSwgdHlwZSwgZmlsZSkpOworICAg
IGZvciAoYXV0byYgZmlsZSA6IG1fZGF0YVRyYW5zZmVyLmZpbGVzKCkuZmlsZXMoKSkgeworICAg
ICAgICBhdXRvIHR5cGUgPSBGaWxlOjpjb250ZW50VHlwZUZvckZpbGUoZmlsZS0+cGF0aCgpKS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgICAgICBpZiAoaXNTdXBwb3J0ZWRUeXBlKHR5
cGUpIHx8IGZpbGUtPmlzRGlyZWN0b3J5KCkpCisgICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0
YVRyYW5zZmVySXRlbTo6Y3JlYXRlKG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpLCB0
eXBlLCBmaWxlLmNvcHlSZWYoKSkpOwogICAgIH0KIAogICAgIG1faXRlbXMgPSBXVEZNb3ZlKGl0
ZW1zKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUxpc3QuY3BwCShyZXZpc2lvbiAyMjE5
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMjcgKzI2LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmls
ZUxpc3QuaCIKIAotI2luY2x1ZGUgIkZpbGUuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
aWxlTGlzdDo6RmlsZUxpc3QoKQotewotfQotCiBGaWxlKiBGaWxlTGlzdDo6aXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPj0gbV9maWxlcy5zaXplKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2ZpbGVzW2luZGV4XS5nZXQoKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fZmlsZXNbaW5kZXhdLnB0cigpOwogfQogCiBW
ZWN0b3I8U3RyaW5nPiBGaWxlTGlzdDo6cGF0aHMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJp
bmc+IHBhdGhzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbGVzLnNpemUoKTsg
KytpKQotICAgICAgICBwYXRocy5hcHBlbmQobV9maWxlc1tpXS0+cGF0aCgpKTsKLQorICAgIHBh
dGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9maWxlcy5zaXplKCkpOworICAgIGZvciAoYXV0
byYgZmlsZSA6IG1fZmlsZXMpCisgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChmaWxlLT5w
YXRoKCkpOwogICAgIHJldHVybiBwYXRoczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZUxpc3QuaAkocmV2aXNpb24gMjIxOTM2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsZUxpc3QpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8
RmlsZUxpc3Q+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPEZpbGU+PiYmIGZpbGVzKQorICAgIHN0YXRp
YyBSZWY8RmlsZUxpc3Q+IGNyZWF0ZShWZWN0b3I8UmVmPEZpbGU+PiYmIGZpbGVzKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsZUxpc3QoV1RGTW92ZShmaWxlcykpKTsK
ICAgICB9CkBAIC01MSwxOSArNTEsMjMgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsZXMuaXNFbXB0eSgpOyB9CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0
aHMoKSBjb25zdDsKIAorICAgIGNvbnN0IFZlY3RvcjxSZWY8RmlsZT4+JiBmaWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZXM7IH0KKyAgICBjb25zdCBGaWxlJiBmaWxlKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVzW2luZGV4XS5nZXQoKTsgfQorCiBwcml2YXRlOgotICAg
IEZpbGVMaXN0KCk7Ci0gICAgRmlsZUxpc3QoVmVjdG9yPFJlZlB0cjxGaWxlPj4mJiBmaWxlcykK
KyAgICBGaWxlTGlzdCgpID0gZGVmYXVsdDsKKyAgICBGaWxlTGlzdChWZWN0b3I8UmVmPEZpbGU+
PiYmIGZpbGVzKQogICAgICAgICA6IG1fZmlsZXMoV1RGTW92ZShmaWxlcykpCi0gICAgeyB9Cisg
ICAgeworICAgIH0KIAogICAgIC8vIEZpbGVMaXN0cyBjYW4gb25seSBiZSBjaGFuZ2VkIGJ5IHRo
ZWlyIG93bmVycy4KICAgICBmcmllbmQgY2xhc3MgRGF0YVRyYW5zZmVyOwogICAgIGZyaWVuZCBj
bGFzcyBGaWxlSW5wdXRUeXBlOwotICAgIHZvaWQgYXBwZW5kKFJlZlB0cjxGaWxlPiYmIGZpbGUp
IHsgbV9maWxlcy5hcHBlbmQoV1RGTW92ZShmaWxlKSk7IH0KKyAgICB2b2lkIGFwcGVuZChSZWY8
RmlsZT4mJiBmaWxlKSB7IG1fZmlsZXMuYXBwZW5kKFdURk1vdmUoZmlsZSkpOyB9CiAgICAgdm9p
ZCBjbGVhcigpIHsgbV9maWxlcy5jbGVhcigpOyB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPEZpbGU+
PiBtX2ZpbGVzOworICAgIFZlY3RvcjxSZWY8RmlsZT4+IG1fZmlsZXM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJ
KHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsOSBAQCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4gRmlsZUlucHV0VHlwCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZp
bGVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUudmFsdWVTaXplKCk7IGkgKz0g
MikgewogICAgICAgICBpZiAoIXN0YXRlW2kgKyAxXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBm
aWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5mbyhzdGF0ZVtpXSwgc3RhdGVbaSArIDFdKSk7
CisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoeyBzdGF0ZVtpXSwgc3RhdGVbaSArIDFdIH0pOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5m
byhzdGF0ZVtpXSkpOworICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHsgc3RhdGVbaV0gfSk7CiAg
ICAgfQogICAgIHJldHVybiBmaWxlczsKIH0KQEAgLTEzMCwxNCArMTMwLDE3IEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgRmlsZUlucHV0VHlwZTo6Zm9ybUMKIEZvcm1Db250cm9sU3RhdGUgRmlsZUlu
cHV0VHlwZTo6c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogewogICAgIGlmIChtX2ZpbGVM
aXN0LT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRlKCk7Ci0gICAg
Rm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZTsKLSAgICB1bnNpZ25lZCBudW1GaWxlcyA9IG1fZmlsZUxp
c3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GaWxlczsgKytp
KSB7Ci0gICAgICAgIHN0YXRlLmFwcGVuZChtX2ZpbGVMaXN0LT5pdGVtKGkpLT5wYXRoKCkpOwot
ICAgICAgICBzdGF0ZS5hcHBlbmQobV9maWxlTGlzdC0+aXRlbShpKS0+bmFtZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbGVuZ3RoID0gQ2hlY2tlZDxzaXplX3Q+KG1fZmls
ZUxpc3QtPmZpbGVzKCkuc2l6ZSgpKSAqIDJ1bGw7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBzdGF0
ZVZlY3RvcjsKKyAgICBzdGF0ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aC51
bnNhZmVHZXQoKSk7CisgICAgZm9yIChhdXRvJiBmaWxlIDogbV9maWxlTGlzdC0+ZmlsZXMoKSkg
eworICAgICAgICBzdGF0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZmlsZS0+cGF0aCgpKTsKKyAg
ICAgICAgc3RhdGVWZWN0b3IudW5jaGVja2VkQXBwZW5kKGZpbGUtPm5hbWUoKSk7CiAgICAgfQot
ICAgIHJldHVybiBzdGF0ZTsKKyAgICByZXR1cm4gRm9ybUNvbnRyb2xTdGF0ZSB7IFdURk1vdmUo
c3RhdGVWZWN0b3IpIH07CiB9CiAKIHZvaWQgRmlsZUlucHV0VHlwZTo6cmVzdG9yZUZvcm1Db250
cm9sU3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgc3RhdGUpCkBAIC0xNDksMTAgKzE1Miwx
MSBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0CiAKIGJvb2wgRmls
ZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sIG11
bHRpcGFydCkgY29uc3QKIHsKKyAgICBhdXRvKiBmaWxlTGlzdCA9IGVsZW1lbnQoKS5maWxlcygp
OworICAgIEFTU0VSVChmaWxlTGlzdCk7CisKICAgICBhdXRvIG5hbWUgPSBlbGVtZW50KCkubmFt
ZSgpOwogCi0gICAgYXV0byogZmlsZUxpc3QgPSBlbGVtZW50KCkuZmlsZXMoKTsKLSAgICB1bnNp
Z25lZCBudW1GaWxlcyA9IGZpbGVMaXN0LT5sZW5ndGgoKTsKICAgICBpZiAoIW11bHRpcGFydCkg
ewogICAgICAgICAvLyBTZW5kIG9ubHkgdGhlIGJhc2VuYW1lcy4KICAgICAgICAgLy8gNC4xMC4x
Ni40IGFuZCA0LjEwLjE2LjYgc2VjdGlvbnMgaW4gSFRNTDUuCkBAIC0xNjEsMjAgKzE2NSwyMSBA
QCBib29sIEZpbGVJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvCiAgICAgICAgIC8vIGZp
bGVMaXN0IGJlY2F1c2UgTmV0c2NhcGUgZG9lc24ndCBzdXBwb3J0IGZvciBub24tbXVsdGlwYXJ0
CiAgICAgICAgIC8vIHN1Ym1pc3Npb24gb2YgZmlsZSBpbnB1dHMsIGFuZCBGaXJlZm94IGRvZXNu
J3QgYWRkICJuYW1lPSIgcXVlcnkKICAgICAgICAgLy8gcGFyYW1ldGVyLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmlsZXM7ICsraSkKLSAgICAgICAgICAgIGZvcm1EYXRh
LmFwcGVuZChuYW1lLCBmaWxlTGlzdC0+aXRlbShpKS0+bmFtZSgpKTsKKyAgICAgICAgZm9yIChh
dXRvJiBmaWxlIDogZmlsZUxpc3QtPmZpbGVzKCkpCisgICAgICAgICAgICBmb3JtRGF0YS5hcHBl
bmQobmFtZSwgZmlsZS0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAg
ICAgLy8gSWYgbm8gZmlsZW5hbWUgYXQgYWxsIGlzIGVudGVyZWQsIHJldHVybiBzdWNjZXNzZnVs
IGJ1dCBlbXB0eS4KICAgICAvLyBOdWxsIHdvdWxkIGJlIG1vcmUgbG9naWNhbCwgYnV0IE5ldHNj
YXBlIHBvc3RzIGFuIGVtcHR5IGZpbGUuIEFyZ2guCi0gICAgaWYgKCFudW1GaWxlcykgeworICAg
IGlmIChmaWxlTGlzdC0+aXNFbXB0eSgpKSB7CiAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1l
LCBGaWxlOjpjcmVhdGUoZW1wdHlTdHJpbmcoKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRmlsZXM7ICsraSkKLSAgICAg
ICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsICpmaWxlTGlzdC0+aXRlbShpKSk7CisKKyAgICBmb3Ig
KGF1dG8mIGZpbGUgOiBmaWxlTGlzdC0+ZmlsZXMoKSkKKyAgICAgICAgZm9ybURhdGEuYXBwZW5k
KG5hbWUsIGZpbGUuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTAsNyArMTk1
LDkgQEAgU3RyaW5nIEZpbGVJbnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKQogCiB2b2lkIEZp
bGVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAg
IGlmIChlbGVtZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgYXV0byYgaW5wdXQg
PSBlbGVtZW50KCk7CisKKyAgICBpZiAoaW5wdXQuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCkpCkBAIC0xOTgsNyArMjA1LDYgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpoYW5k
bGVET01BY3RpdmF0ZUV2ZQogCiAgICAgaWYgKGF1dG8qIGNocm9tZSA9IHRoaXMtPmNocm9tZSgp
KSB7CiAgICAgICAgIEZpbGVDaG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gZWxlbWVudCgpOwogICAgICAgICBzZXR0aW5ncy5hbGxvd3NE
aXJlY3RvcmllcyA9IGFsbG93c0RpcmVjdG9yaWVzKCk7CiAgICAgICAgIHNldHRpbmdzLmFsbG93
c011bHRpcGxlRmlsZXMgPSBpbnB1dC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KG11bHRpcGxlQXR0cik7CiAgICAgICAgIHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlcyA9IGlucHV0
LmFjY2VwdE1JTUVUeXBlcygpOwpAQCAtMjQxLDcgKzI0Nyw3IEBAIGJvb2wgRmlsZUlucHV0VHlw
ZTo6Y2FuU2V0VmFsdWUoY29uc3QgU3QKIGJvb2wgRmlsZUlucHV0VHlwZTo6Z2V0VHlwZVNwZWNp
ZmljVmFsdWUoU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobV9maWxlTGlzdC0+aXNFbXB0eSgp
KSB7Ci0gICAgICAgIHZhbHVlID0gU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0geyB9OwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI1MSw3ICsyNTcsNyBAQCBib29sIEZpbGVJ
bnB1dFR5cGU6OmdldFR5cGVTcGVjaWZpY1ZhbHVlCiAgICAgLy8gZGVjaWRlZCB0byB0cnkgdG8g
cGFyc2UgdGhlIHZhbHVlIGJ5IGxvb2tpbmcgZm9yIGJhY2tzbGFzaGVzCiAgICAgLy8gKGJlY2F1
c2UgdGhhdCdzIHdoYXQgV2luZG93cyBmaWxlIHBhdGhzIHVzZSkuIFRvIGJlIGNvbXBhdGlibGUK
ICAgICAvLyB3aXRoIHRoYXQgY29kZSwgd2UgbWFrZSB1cCBhIGZha2UgcGF0aCBmb3IgdGhlIGZp
bGUuCi0gICAgdmFsdWUgPSAiQzpcXGZha2VwYXRoXFwiICsgbV9maWxlTGlzdC0+aXRlbSgwKS0+
bmFtZSgpOworICAgIHZhbHVlID0gbWFrZVN0cmluZygiQzpcXGZha2VwYXRoXFwiLCBtX2ZpbGVM
aXN0LT5maWxlKDApLm5hbWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3OCw3ICsy
ODQsNyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OmRpc2FibGVkQXR0cmlidXRlQ2hhCiB7CiAgICAg
QVNTRVJUKGVsZW1lbnQoKS5zaGFkb3dSb290KCkpOwogCi0gICAgU2hhZG93Um9vdCogcm9vdCA9
IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCk7CisgICAgYXV0byogcm9vdCA9IGVsZW1l
bnQoKS51c2VyQWdlbnRTaGFkb3dSb290KCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1
cm47CiAgICAgCkBAIC0yOTAsNyArMjk2LDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjptdWx0aXBs
ZUF0dHJpYnV0ZUNoYQogewogICAgIEFTU0VSVChlbGVtZW50KCkuc2hhZG93Um9vdCgpKTsKIAot
ICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpOwor
ICAgIGF1dG8qIHJvb3QgPSBlbGVtZW50KCkudXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgIGlm
ICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNTQsNyArMzYwLDcgQEAgdm9pZCBGaWxl
SW5wdXRUeXBlOjpzZXRGaWxlcyhSZWZQdHI8RmlsZQogICAgICAgICBwYXRoc0NoYW5nZWQgPSB0
cnVlOwogICAgIGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChmaWxlcy0+aXRlbShpKS0+cGF0aCgpICE9IG1fZmls
ZUxpc3QtPml0ZW0oaSktPnBhdGgoKSkgeworICAgICAgICAgICAgaWYgKGZpbGVzLT5maWxlKGkp
LnBhdGgoKSAhPSBtX2ZpbGVMaXN0LT5maWxlKGkpLnBhdGgoKSkgewogICAgICAgICAgICAgICAg
IHBhdGhzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC0zNjksOCArMzc1LDggQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRGaWxlcyhSZWZQ
dHI8RmlsZQogICAgIGlmIChzaG91bGRSZXF1ZXN0SWNvbiA9PSBSZXF1ZXN0SWNvbjo6WWVzKSB7
CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwogICAgICAgICBwYXRocy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChtX2ZpbGVMaXN0
LT5pdGVtKGkpLT5wYXRoKCkpOworICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBtX2ZpbGVMaXN0
LT5maWxlcygpKQorICAgICAgICAgICAgcGF0aHMudW5jaGVja2VkQXBwZW5kKGZpbGUtPnBhdGgo
KSk7CiAgICAgICAgIHJlcXVlc3RJY29uKHBhdGhzKTsKICAgICB9CiAKQEAgLTQyMiwyNCArNDI4
LDIwIEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6aWNvbkxvYWRlZChSZWZQdHI8SWMKICNpZiBFTkFC
TEUoRFJBR19TVVBQT1JUKQogYm9vbCBGaWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVz
KGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsK
LSAgICBkcmFnRGF0YS5hc0ZpbGVuYW1lcyhwYXRocyk7CisgICAgYXV0byBwYXRocyA9IGRyYWdE
YXRhLmFzRmlsZW5hbWVzKCk7CiAgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSAmZWxlbWVudCgpOwot
Ci0gICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOwotICAgIGZvciAoYXV0byYg
cGF0aCA6IHBhdGhzKQotICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5mbyhw
YXRoKSk7CisgICAgaWYgKGVsZW1lbnQoKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKG11bHRpcGxlQXR0cikpIHsKKyAgICAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+
IGZpbGVzOworICAgICAgICBmaWxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUo
KSk7CisgICAgICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKQorICAgICAgICAgICAgZmlsZXMu
dW5jaGVja2VkQXBwZW5kKHsgcGF0aCB9KTsKIAotICAgIGlmIChpbnB1dC0+aGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpKQogICAgICAgICBmaWxlc0Nob3Nl
bihmaWxlcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZv
PiBmaXJzdEZpbGVPbmx5OwotICAgICAgICBmaXJzdEZpbGVPbmx5LmFwcGVuZChmaWxlc1swXSk7
Ci0gICAgICAgIGZpbGVzQ2hvc2VuKGZpcnN0RmlsZU9ubHkpOwotICAgIH0KKyAgICB9IGVsc2UK
KyAgICAgICAgZmlsZXNDaG9zZW4oeyBGaWxlQ2hvb3NlckZpbGVJbmZvIHsgcGF0aHNbMF0gfSB9
KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQp
CkBAIC00NjAsNyArNDYyLDcgQEAgU3RyaW5nIEZpbGVJbnB1dFR5cGU6OmRlZmF1bHRUb29sVGlw
KCkgYwogCiAgICAgU3RyaW5nQnVpbGRlciBuYW1lczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICBuYW1lcy5hcHBlbmQobV9maWxlTGlzdC0+
aXRlbShpKS0+bmFtZSgpKTsKKyAgICAgICAgbmFtZXMuYXBwZW5kKG1fZmlsZUxpc3QtPmZpbGUo
aSkubmFtZSgpKTsKICAgICAgICAgaWYgKGkgIT0gbGlzdFNpemUgLSAxKQogICAgICAgICAgICAg
bmFtZXMuYXBwZW5kKCdcbicpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmls
ZUxpc3RDcmVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVM
aXN0Q3JlYXRvci5jcHAJKHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
RmlsZUxpc3RDcmVhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBGaWxl
TGlzdENyZWF0b3I6On5GaWxlTGlzdENyZWF0b3IoKQogICAgIEFTU0VSVCghbV9jb21wbGV0aW9u
SGFuZGVyKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kRGlyZWN0b3J5RmlsZXMoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBWZWN0b3I8UmVmUHRy
PEZpbGU+PiYgZmlsZU9iamVjdHMpCitzdGF0aWMgdm9pZCBhcHBlbmREaXJlY3RvcnlGaWxlcyhj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIFZlY3Rv
cjxSZWY8RmlsZT4+JiBmaWxlT2JqZWN0cykKIHsKICAgICBmb3IgKGF1dG8mIGNoaWxkUGF0aCA6
IGxpc3REaXJlY3RvcnkoZGlyZWN0b3J5LCAiKiIpKSB7CiAgICAgICAgIGF1dG8gbWV0YWRhdGEg
PSBmaWxlTWV0YWRhdGEoY2hpbGRQYXRoKTsKQEAgLTc4LDcgKzc4LDcgQEAgRmlsZUxpc3RDcmVh
dG9yOjpGaWxlTGlzdENyZWF0b3IoY29uc3QgVgogdGVtcGxhdGU8RmlsZUxpc3RDcmVhdG9yOjpT
aG91bGRSZXNvbHZlRGlyZWN0b3JpZXMgc2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzPgogUmVmPEZp
bGVMaXN0PiBGaWxlTGlzdENyZWF0b3I6OmNyZWF0ZUZpbGVMaXN0KGNvbnN0IFZlY3RvcjxGaWxl
Q2hvb3NlckZpbGVJbmZvPiYgcGF0aHMpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWxlPj4gZmls
ZU9iamVjdHM7CisgICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZU9iamVjdHM7CiAgICAgZm9yIChh
dXRvJiBpbmZvIDogcGF0aHMpIHsKICAgICAgICAgaWYgKHNob3VsZFJlc29sdmVEaXJlY3Rvcmll
cyA9PSBTaG91bGRSZXNvbHZlRGlyZWN0b3JpZXM6OlllcyAmJiBmaWxlSXNEaXJlY3RvcnkoaW5m
by5wYXRoLCBTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpCiAgICAgICAgICAgICBhcHBl
bmREaXJlY3RvcnlGaWxlcyhpbmZvLnBhdGgsIHBhdGhHZXRGaWxlTmFtZShpbmZvLnBhdGgpLCBm
aWxlT2JqZWN0cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oCShyZXZp
c2lvbiAyMjE5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDIzIEBAIGNsYXNzIFNhdmVkRm9ybVN0YXRlOwogCiBj
bGFzcyBGb3JtQ29udHJvbFN0YXRlIHsKIHB1YmxpYzoKLSAgICBGb3JtQ29udHJvbFN0YXRlKCkg
OiBtX3R5cGUoVHlwZVNraXApIHsgfQotICAgIGV4cGxpY2l0IEZvcm1Db250cm9sU3RhdGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkgOiBtX3R5cGUoVHlwZVJlc3RvcmUpIHsgbV92YWx1ZXMuYXBwZW5k
KHZhbHVlKTsgfQorICAgIEZvcm1Db250cm9sU3RhdGUoKQorICAgICAgICA6IG1fdHlwZShUeXBl
U2tpcCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgRm9ybUNvbnRyb2xTdGF0ZShjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgICAgICA6IG1fdHlwZShUeXBlUmVzdG9yZSkKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorCisgICAgZXhwbGljaXQgRm9y
bUNvbnRyb2xTdGF0ZShWZWN0b3I8U3RyaW5nPiYmIHZhbHVlcykKKyAgICAgICAgOiBtX3R5cGUo
VHlwZVNraXApCisgICAgICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQorICAgIHsKKyAg
ICB9CisKICAgICBzdGF0aWMgRm9ybUNvbnRyb2xTdGF0ZSBkZXNlcmlhbGl6ZShjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RhdGVWZWN0b3IsIHNpemVfdCYgaW5kZXgpOwogICAgIEZvcm1Db250cm9s
U3RhdGUoY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYgYW5vdGhlcikgOiBtX3R5cGUoYW5vdGhlci5t
X3R5cGUpLCBtX3ZhbHVlcyhhbm90aGVyLm1fdmFsdWVzKSB7IH0KICAgICBGb3JtQ29udHJvbFN0
YXRlJiBvcGVyYXRvcj0oY29uc3QgRm9ybUNvbnRyb2xTdGF0ZSYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnRGF0YS5oCShyZXZpc2lvbiAyMjE5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgY29udGFpbnNDb21wYXRpYmxlQ29udGVudChEcmFnZ2luZ1B1cnBvc2Ug
PSBEcmFnZ2luZ1B1cnBvc2U6OkZvckVkaXRpbmcpIGNvbnN0OwogICAgIFN0cmluZyBhc1VSTChG
aWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgPSBDb252ZXJ0RmlsZW5hbWVzLCBTdHJpbmcqIHRpdGxl
ID0gbnVsbHB0cikgY29uc3Q7CiAgICAgU3RyaW5nIGFzUGxhaW5UZXh0KCkgY29uc3Q7Ci0gICAg
dm9pZCBhc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OworICAgIFZlY3RvcjxTdHJp
bmc+IGFzRmlsZW5hbWVzKCkgY29uc3Q7CiAgICAgQ29sb3IgYXNDb2xvcigpIGNvbnN0OwogICAg
IGJvb2wgY2FuU21hcnRSZXBsYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0NvbG9yKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5j
cHAJKHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFn
RGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDkgQEAgdW5zaWduZWQgRHJh
Z0RhdGE6Om51bWJlck9mRmlsZXMoKSBjb25zdAogICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmZpbGVuYW1lcygpLnNpemUoKTsKIH0KIAotdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMo
VmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IERyYWdEYXRhOjph
c0ZpbGVuYW1lcygpIGNvbnN0CiB7Ci0gICAgcmVzdWx0ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5m
aWxlbmFtZXMoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKTsK
IH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkocmV2aXNpb24gMjIxOTM2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsMTMgKzE3OCwxNSBAQCB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZG
aWxlcygpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Z2V0TnVtYmVyT2ZGaWxlcyhtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotdm9p
ZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKK1Zl
Y3RvcjxTdHJpbmc+IERyYWdEYXRhOjphc0ZpbGVuYW1lcygpIGNvbnN0CiB7CiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
Z2V0UGF0aG5hbWVzRm9yVHlwZShyZXN1bHQsIFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUp
LCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0UGF0aG5hbWVzRm9y
VHlwZShyZXN1bHRzLCBTdHJpbmcoTlNGaWxlbmFtZXNQYm9hcmRUeXBlKSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgaWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CiAjZW5kaWYKLSAgICBpZiAoIXJlc3VsdC5zaXplKCkpCi0gICAgICAgIHJlc3VsdCA9IGZp
bGVOYW1lcygpOworICAgIHJldHVybiBmaWxlTmFtZXMoKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNQbGFpblRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0RyYWdEYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRHJhZ0RhdGFXaW4uY3BwCShyZXZpc2lvbiAyMjE5MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMjAg
KzEzNiwyMiBAQCB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0CiAjZW5k
aWYKIH0KIAotdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IERyYWdEYXRhOjphc0ZpbGVuYW1lcygpIGNvbnN0CiB7
CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworCiAjaWYgVVNFKENGKQogICAgIGlmIChtX3Bs
YXRmb3JtRHJhZ0RhdGEpIHsKICAgICAgICAgV0NIQVIgZmlsZW5hbWVbTUFYX1BBVEhdOwogCiAg
ICAgICAgIFNUR01FRElVTSBtZWRpdW07CiAgICAgICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURy
YWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJm1lZGl1bSkpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgICAgICBIRFJPUCBoZHJv
cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsg
CiAKICAgICAgICAgaWYgKCFoZHJvcCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKICAgICAgICAgY29uc3QgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFn
UXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1GaWxlczsgaSsrKSB7CkBAIC0xNjIsMTAgKzE2NCwxMiBAQCB2b2lk
IERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nCiAgICAgICAgIERyYWdGaW5pc2go
aGRyb3ApOwogCiAgICAgICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgcmVzdWx0ID0gbV9k
cmFnRGF0YU1hcC5nZXQoY2ZIRHJvcEZvcm1hdCgpLT5jZkZvcm1hdCk7CiAjZW5kaWYKKworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkg
Y29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320568</attachid>
            <date>2017-09-12 14:34:35 -0700</date>
            <delta_ts>2017-09-14 09:22:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176800-20170912143435.patch</filename>
            <type>text/plain</type>
            <size>30059</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE3LTA5LTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NsZWFudXBdIENsZWFudXAgdXNlcyBv
ZiB0aGUgRmlsZUxpc3QgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NjgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmlsZWFwaS9GaWxlTGlzdC5jcHA6CisgICAgICAgICogZmlsZWFwaS9G
aWxlTGlzdC5oOgorCisgICAgICAgICAgICBTdG9yZSBsaXN0IG9mIGZpbGVzIGFzIFJlZnMsIHJh
dGhlciB0aGFuIFJlZlB0cnMuCisgICAgICAgICAgICBBZGQgZGlyZWN0IGFjY2Vzc29yIHRvIHRo
ZSB1bmRlcmx5aW5nIFZlY3RvciBmb3IgZmFzdGVyIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIEFk
ZCBmaWxlKHVuc2lnbmVkKSBmdW5jdGlvbiB0byBhbGxvdyBkaXJlY3QgaW5kZXhpbmcsIHJhdGhl
ciB0aGFuIHVzaW5nCisgICAgICAgICAgICB0aGUgRE9NIGV4cG9zZWQgaXRlbSBmdW5jdGlvbiB3
aGljaCBhbHdheXMgZG9lcyBhIGxlbmd0aCBjaGVjay4KKworICAgICAgICAqIE1vZHVsZXMvZW50
cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmllc0FQSS5jcHA6CisgICAgICAgIAorICAgICAg
ICAgICAgUmVtb3ZlIHVudXNlZCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggI2luY2x1ZGUuCisg
ICAgICAgICAgICBVc2UgbW9kZXJuIGZvciBsb29wIGFuZCB0aGUgbmV3IGRpcmVjdCBmaWxlIHZl
Y3RvciBhY2Nlc3MuIAorICAgICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgCisg
ICAgICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgI2luY2x1ZGVzLCBhZG9wdCBhdXRvLCBhbmQg
dXNlIG1vZGVybiBmb3ItbG9vcAorICAgICAgICAgICAgZm9yIEZpbGVMaXN0LgorICAgICAgICAK
KyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlcjo6ZmlsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyOjpo
YXNGaWxlT2ZUeXBlKToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgYXV0by4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvcklucHV0RXZlbnQpOgor
ICAgICAgICAKKyAgICAgICAgICAgIFVzZSBpbml0aWFsaXplciBsaXN0IGZvciB0aGUgdHlwZVRv
U3RyaW5nTWFwLgorICAgICAgICAKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1z
IGNvbnN0KToKKyAgICAgICAgCisgICAgICAgICAgICBVc2UgYXV0byBhbmQgbW9kZXJuIGZvci1s
b29wIGZvciBGaWxlTGlzdC4KKyAgICAgICAgCisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVzRnJvbUZvcm1Db250
cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6c2F2ZUZvcm1Db250
cm9sU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6YXBwZW5k
Rm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6aGFuZGxl
RE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpnZXRU
eXBlU3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpkaXNh
YmxlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
bXVsdGlwbGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnNldEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVE
cm9wcGVkRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6ZGVmYXVsdFRv
b2xUaXAgY29uc3QpOgorCisgICAgICAgICAgICBBZG9wdCBhdXRvLCBicmFjZS1pbml0aWFsaXph
dGlvbiwgYW5kIG1vZGVybiBmb3ItbG9vcHMuCisKKyAgICAgICAgKiBodG1sL0ZpbGVMaXN0Q3Jl
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmREaXJlY3RvcnlGaWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlTGlzdENyZWF0b3I6OmNyZWF0ZUZpbGVMaXN0KToKKyAgICAgICAg
CisgICAgICAgICAgICBVcGRhdGUgdG8gd29yayBpbiB0ZXJtcyBvZiBWZWN0b3I8UmVmPEZpbGU+
Pi4KKworICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Db250cm9sU3RhdGU6OkZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAKKyAgICAgICAg
ICAgIFJlLWZvcm1hdCBleGlzdGluZyBjb25zdHJ1Y3RvcnMgYW5kIGFkZCBvbmUgdGhhdCB0YWtl
cyBhbiByLXZhbHVlCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiB0byBhbGxvdyBjb25zdHJ1
Y3Rpb24gZnJvbSBhIHByZS1jcmVhdGVkIGxpc3QgKHVzZWQgCisgICAgICAgICAgICBpbiBGaWxl
SW5wdXRUeXBlOjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSkKKyAgICAgICAgCisgICAgICAgICogcGxh
dGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRmlsZW5hbWVzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6YXNGaWxlbmFtZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnRGF0
YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxlbmFtZXMgY29uc3Qp
OgorICAgICAgICAKKyAgICAgICAgICAgIENvbnZlcnQgYXNGaWxlbmFtZXMgdG8gcmV0dXJuLCBy
YXRoZXIgdGhhbiB0YWtlLCBhIFZlY3RvcjxTdHJpbmc+LgorCiAyMDE3LTA5LTEyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgR3RrIGJ1aWxkIGZpeCBmb3IgIkZpbmlz
aCBvZmYgdGhlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uIiAtIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NTkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW50cmllc2FwaS9IVE1MSW5wdXRFbGVtZW50RW50cmllc0FQSS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRyaWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVz
QVBJLmNwcAkocmV2aXNpb24gMjIxOTM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbnRy
aWVzYXBpL0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVzQVBJLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGaWxl
TGlzdC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTUgKzQx
LDE0IEBAIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVudHJ5Pj4gSFRNTElucHV0RWwKICAgICBpZiAo
aW5wdXQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRkaXJlY3RvcnlB
dHRyKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8qIGZpbGVzID0gaW5wdXQuZmls
ZXMoKTsKLSAgICBpZiAoIWZpbGVzKQorICAgIGF1dG8qIGZpbGVMaXN0ID0gaW5wdXQuZmlsZXMo
KTsKKyAgICBpZiAoIWZpbGVMaXN0KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gZmlsZXMtPmxlbmd0aCgpOwogICAgIFZlY3RvcjxSZWY8RmlsZVN5c3RlbUVu
dHJ5Pj4gZW50cmllczsKLSAgICBlbnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3Ro
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGVu
dHJpZXMudW5jaGVja2VkQXBwZW5kKERPTUZpbGVTeXN0ZW06OmNyZWF0ZUVudHJ5Rm9yRmlsZShj
b250ZXh0LCAqZmlsZXMtPml0ZW0oaSkpKTsKKyAgICBlbnRyaWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZmlsZUxpc3QtPmZpbGVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGZpbGUgOiBm
aWxlTGlzdC0+ZmlsZXMoKSkKKyAgICAgICAgZW50cmllcy51bmNoZWNrZWRBcHBlbmQoRE9NRmls
ZVN5c3RlbTo6Y3JlYXRlRW50cnlGb3JGaWxlKGNvbnRleHQsIGZpbGUuY29weVJlZigpKSk7CiAg
ICAgcmV0dXJuIGVudHJpZXM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjIxOTM2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCi0jaW5jbHVkZSAiQmxvYi5oIgogI2lu
Y2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1
ZGUgIkNyeXB0b0tleUVDLmgiCkBAIC0zNSwxMCArMzQsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0tl
eVJTQS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJD
cnlwdG9LZXlSYXcuaCIKLSNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIK
ICNpbmNsdWRlICJJREJWYWx1ZS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
IkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvS2V5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCkBAIC05MjksNyArOTI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgSlNP
YmplY3QqIG9iaiA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8qIG9iaiA9IGFz
T2JqZWN0KHZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBCb29sZWFu
T2JqZWN0OjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVy
bmFsKG9iaikpIC8vIGhhbmRsZSBkdXBsaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtOTUxLDIwICs5NDcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3
cml0ZShvYmotPmludGVybmFsVmFsdWUoKS5hc051bWJlcigpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChGaWxlKiBmaWxlID0g
SlNGaWxlOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmaWxl
ID0gSlNGaWxlOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKICAgICAgICAgICAgICAgICB3cml0ZShG
aWxlVGFnKTsKLSAgICAgICAgICAgICAgICB3cml0ZShmaWxlKTsKKyAgICAgICAgICAgICAgICB3
cml0ZSgqZmlsZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoRmlsZUxpc3QqIGxpc3QgPSBKU0ZpbGVMaXN0Ojp0b1dyYXBwZWQo
dm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsaXN0ID0gSlNGaWxlTGlzdDo6dG9X
cmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoRmlsZUxpc3RUYWcpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3QtPmxlbmd0aCgpOwotICAgICAg
ICAgICAgICAgIHdyaXRlKGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB3cml0ZShsaXN0LT5p
dGVtKGkpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShsaXN0LT5sZW5ndGgoKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogbGlzdC0+ZmlsZXMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoZmlsZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoQmxvYiogYmxvYiA9IEpTQmxvYjo6dG9XcmFw
cGVkKHZtLCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYmxvYiA9IEpTQmxvYjo6dG9X
cmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoQmxvYlRhZyk7CiAgICAg
ICAgICAgICAgICAgbV9ibG9iVVJMcy5hcHBlbmQoYmxvYi0+dXJsKCkpOwogICAgICAgICAgICAg
ICAgIHdyaXRlKGJsb2ItPnVybCgpKTsKQEAgLTk3Miw3ICs5NjcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHdyaXRlKGJsb2ItPnNpemUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoSW1hZ2VEYXRhKiBkYXRhID0g
SlNJbWFnZURhdGE6OnRvV3JhcHBlZCh2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IGRhdGEgPSBKU0ltYWdlRGF0YTo6dG9XcmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAg
ICAgd3JpdGUoSW1hZ2VEYXRhVGFnKTsKICAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT53aWR0
aCgpKTsKICAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5oZWlnaHQoKSk7CkBAIC05ODEsNyAr
OTc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBSZWdFeHBPYmplY3Q6Omlu
Zm8oKSkpIHsKLSAgICAgICAgICAgICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cCA9IGFzUmVnRXhw
T2JqZWN0KG9iaik7CisgICAgICAgICAgICAgICAgYXV0byogcmVnRXhwID0gYXNSZWdFeHBPYmpl
Y3Qob2JqKTsKICAgICAgICAgICAgICAgICBjaGFyIGZsYWdzWzNdOwogICAgICAgICAgICAgICAg
IGludCBmbGFnQ291bnQgPSAwOwogICAgICAgICAgICAgICAgIGlmIChyZWdFeHAtPnJlZ0V4cCgp
LT5nbG9iYWwoKSkKQEAgLTk5Niw3ICs5OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJp
dHModm0sIEpTTWVzc2FnZVBvcnQ6OmluZm8oKSkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RQ
b29sOjppdGVyYXRvciBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZmluZChvYmop
OworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXggPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRz
LmZpbmQob2JqKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0cy5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICB3cml0ZShNZXNzYWdlUG9y
dFJlZmVyZW5jZVRhZyk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKGluZGV4LT52YWx1ZSk7
CkBAIC0xMDA2LDEyICsxMDAxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29kZSA9
IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyID0gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyKHZtLCBvYmopKSB7
CisgICAgICAgICAgICBpZiAoYXV0byogYXJyYXlCdWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJy
YXlCdWZmZXIodm0sIG9iaikpIHsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlCdWZmZXItPmlz
TmV1dGVyZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJl
dHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE9iamVjdFBvb2w6Oml0ZXJh
dG9yIGluZGV4ID0gbV90cmFuc2ZlcnJlZEFycmF5QnVmZmVycy5maW5kKG9iaik7CisgICAgICAg
ICAgICAgICAgYXV0byBpbmRleCA9IG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuZmluZChvYmop
OwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkQXJyYXlCdWZmZXJz
LmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKEFycmF5QnVmZmVyVHJhbnNmZXJU
YWcpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZShpbmRleC0+dmFsdWUpOwpAQCAtMTAyMCw4
ICsxMDE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50
ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGFycmF5QnVm
ZmVyLT5pc1NoYXJlZCgpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fY29udGV4dCA9PSBTZXJp
YWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlCdWZmZXItPmlzU2hhcmVkKCkgJiYgbV9jb250ZXh0ID09IFNlcmlhbGl6YXRpb25D
b250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSkgewogICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBpbmRleCA9IG1fc2hhcmVkQnVmZmVycy5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJh
eUJ1ZmZlci0+c2hhcmVXaXRoKGNvbnRlbnRzKSkgewpAQCAtMTA0NSw3ICsxMDM5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgIH0KICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLSAgICAgICAgICAgIGlmIChDcnlwdG9LZXkqIGtleSA9
IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHZtLCBvYmopKSB7CiAgICAgICAgICAgICAg
ICAgd3JpdGUoQ3J5cHRvS2V5VGFnKTsKICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4g
c2VyaWFsaXplZEtleTsKICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBkdW1teUJsb2JV
UkxzOwpAQCAtMTI0MSwxMyArMTIzNSwxMyBAQCBwcml2YXRlOgogICAgICAgICB3cml0ZUxpdHRs
ZUVuZGlhbihtX2J1ZmZlciwgdmVjdG9yLmRhdGEoKSwgc2l6ZSk7CiAgICAgfQogCi0gICAgdm9p
ZCB3cml0ZShjb25zdCBGaWxlKiBmaWxlKQorICAgIHZvaWQgd3JpdGUoY29uc3QgRmlsZSYgZmls
ZSkKICAgICB7Ci0gICAgICAgIG1fYmxvYlVSTHMuYXBwZW5kKGZpbGUtPnVybCgpKTsKLSAgICAg
ICAgd3JpdGUoZmlsZS0+cGF0aCgpKTsKLSAgICAgICAgd3JpdGUoZmlsZS0+dXJsKCkpOwotICAg
ICAgICB3cml0ZShmaWxlLT50eXBlKCkpOwotICAgICAgICB3cml0ZShmaWxlLT5uYW1lKCkpOwor
ICAgICAgICBtX2Jsb2JVUkxzLmFwcGVuZChmaWxlLnVybCgpKTsKKyAgICAgICAgd3JpdGUoZmls
ZS5wYXRoKCkpOworICAgICAgICB3cml0ZShmaWxlLnVybCgpKTsKKyAgICAgICAgd3JpdGUoZmls
ZS50eXBlKCkpOworICAgICAgICB3cml0ZShmaWxlLm5hbWUoKSk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCkBAIC0yMDMzLDE2ICsyMDI3LDE2IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBDYWNoZWRTdHJpbmdSZWYgcGF0aDsKICAgICAgICAgaWYgKCFyZWFkU3RyaW5n
RGF0YShwYXRoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBDYWNoZWRTdHJpbmdSZWYgdXJsOwogICAgICAgICBpZiAoIXJlYWRTdHJp
bmdEYXRhKHVybCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIHR5cGU7CiAgICAgICAgIGlmICghcmVhZFN0
cmluZ0RhdGEodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIG5hbWU7CiAgICAgICAgIGlmICghcmVh
ZFN0cmluZ0RhdGEobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgYmxvYiBVUkwgZm9yIHRoaXMgZmlsZSBo
YXMgYW4gYXNzb2NpYXRlZCBibG9iIGZpbGUgcGF0aCwgcHJlZmVyIHRoYXQgb25lIG92ZXIgdGhl
ICJidWlsdC1pbiIgcGF0aC4KICAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gYmxvYkZpbGVQYXRo
Rm9yQmxvYlVSTCh1cmwtPnN0cmluZygpKTsKQEAgLTI2OTcsMTMgKzI2OTEsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgICAgICAgICBpZiAoIXJl
YWQobGVuZ3RoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAg
ICAgVmVjdG9yPFJlZlB0cjxGaWxlPj4gZmlsZXM7CisgICAgICAgICAgICBWZWN0b3I8UmVmPEZp
bGU+PiBmaWxlczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogICAgICAgICAgICAgICAgIFJlZlB0cjxGaWxlPiBmaWxlOwogICAgICAgICAgICAg
ICAgIGlmICghcmVhZEZpbGUoZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpCi0gICAgICAg
ICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChXVEZNb3ZlKGZpbGUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmlsZXMuYXBwZW5kKGZpbGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAJKHJl
dmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6
ZmlsZXMoKSBjb25zdAogI2VuZGlmCiAKICAgICBpZiAobmV3bHlDcmVhdGVkRmlsZUxpc3QpIHsK
LSAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIGZpbGVuYW1lIDogbV9wYXN0ZWJvYXJkLT5yZWFk
RmlsZW5hbWVzKCkpCisgICAgICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBtX3Bhc3RlYm9hcmQt
PnJlYWRGaWxlbmFtZXMoKSkKICAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUoZmlsZW5hbWUpKTsKICAgICB9CiAgICAgcmV0dXJuICptX2ZpbGVMaXN0OwpAQCAtMjAz
LDcgKzIwMyw3IEBAIGJvb2wgRGF0YVRyYW5zZmVyOjpoYXNGaWxlT2ZUeXBlKGNvbnN0IFMKIHsK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5SZWFkVHlwZXMoKSk7CiAK
LSAgICBmb3IgKGNvbnN0IFN0cmluZyYgcGF0aCA6IG1fcGFzdGVib2FyZC0+cmVhZEZpbGVuYW1l
cygpKSB7CisgICAgZm9yIChhdXRvJiBwYXRoIDogbV9wYXN0ZWJvYXJkLT5yZWFkRmlsZW5hbWVz
KCkpIHsKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoRmlsZTo6Y29udGVudFR5
cGVGb3JGaWxlKHBhdGgpLCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTIyMCw5ICsyMjAsNyBAQCBib29sIERhdGFUcmFuc2Zlcjo6aGFzU3RyaW5nT2ZUeXBlKGNv
bnN0CiAKIFJlZjxEYXRhVHJhbnNmZXI+IERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9ySW5wdXRFdmVu
dChjb25zdCBTdHJpbmcmIHBsYWluVGV4dCwgY29uc3QgU3RyaW5nJiBodG1sVGV4dCkKIHsKLSAg
ICBUeXBlVG9TdHJpbmdNYXAgdHlwZVRvU3RyaW5nTWFwOwotICAgIHR5cGVUb1N0cmluZ01hcC5z
ZXQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIiksIHBsYWluVGV4dCk7Ci0gICAgdHlwZVRvU3Ry
aW5nTWFwLnNldChBU0NJSUxpdGVyYWwoInRleHQvaHRtbCIpLCBodG1sVGV4dCk7CisgICAgVHlw
ZVRvU3RyaW5nTWFwIHR5cGVUb1N0cmluZ01hcCB7IHsgQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWlu
IiksIHBsYWluVGV4dCB9LCB7IEFTQ0lJTGl0ZXJhbCgidGV4dC9odG1sIiksIGh0bWxUZXh0IH0g
fTsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhVHJhbnNmZXIoU3RvcmVNb2RlOjpSZWFk
b25seSwgU3RhdGljUGFzdGVib2FyZDo6Y3JlYXRlKFdURk1vdmUodHlwZVRvU3RyaW5nTWFwKSks
IFR5cGU6OklucHV0RXZlbnQpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlckl0ZW1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0
YVRyYW5zZmVySXRlbUxpc3QuY3BwCShyZXZpc2lvbiAyMjE5MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTgg
KzEyNCwxNiBAQCBWZWN0b3I8UmVmPERhdGFUcmFuc2Zlckl0ZW0+PiYgRGF0YVRyYW5zCiAgICAg
ICAgIHJldHVybiAqbV9pdGVtczsKIAogICAgIFZlY3RvcjxSZWY8RGF0YVRyYW5zZmVySXRlbT4+
IGl0ZW1zOwotICAgIGZvciAoU3RyaW5nJiB0eXBlIDogbV9kYXRhVHJhbnNmZXIudHlwZXMoKSkg
ewotICAgICAgICBTdHJpbmcgbG93ZXJjYXNlZFR5cGUgPSB0eXBlLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7CisgICAgZm9yIChhdXRvJiB0eXBlIDogbV9kYXRhVHJhbnNmZXIudHlwZXMoKSkg
eworICAgICAgICBhdXRvIGxvd2VyY2FzZWRUeXBlID0gdHlwZS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwogICAgICAgICBpZiAoaXNTdXBwb3J0ZWRUeXBlKGxvd2VyY2FzZWRUeXBlKSkKICAg
ICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtOjpjcmVhdGUobV93ZWFrUHRy
RmFjdG9yeS5jcmVhdGVXZWFrUHRyKCksIGxvd2VyY2FzZWRUeXBlKSk7CiAgICAgfQogCi0gICAg
RmlsZUxpc3QmIGZpbGVzID0gbV9kYXRhVHJhbnNmZXIuZmlsZXMoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwLCBsZW5ndGggPSBmaWxlcy5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIEZpbGUmIGZpbGUgPSAqZmlsZXMuaXRlbShpKTsKLSAgICAgICAgU3RyaW5nIHR5cGUg
PSBGaWxlOjpjb250ZW50VHlwZUZvckZpbGUoZmlsZS5wYXRoKCkpLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCk7Ci0gICAgICAgIGlmIChpc1N1cHBvcnRlZFR5cGUodHlwZSkgfHwgZmlsZS5pc0Rp
cmVjdG9yeSgpKQotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW06OmNy
ZWF0ZShtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKSwgdHlwZSwgZmlsZSkpOworICAg
IGZvciAoYXV0byYgZmlsZSA6IG1fZGF0YVRyYW5zZmVyLmZpbGVzKCkuZmlsZXMoKSkgeworICAg
ICAgICBhdXRvIHR5cGUgPSBGaWxlOjpjb250ZW50VHlwZUZvckZpbGUoZmlsZS0+cGF0aCgpKS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgICAgICBpZiAoaXNTdXBwb3J0ZWRUeXBlKHR5
cGUpIHx8IGZpbGUtPmlzRGlyZWN0b3J5KCkpCisgICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0
YVRyYW5zZmVySXRlbTo6Y3JlYXRlKG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpLCB0
eXBlLCBmaWxlLmNvcHlSZWYoKSkpOwogICAgIH0KIAogICAgIG1faXRlbXMgPSBXVEZNb3ZlKGl0
ZW1zKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUxpc3QuY3BwCShyZXZpc2lvbiAyMjE5
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMjcgKzI2LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmls
ZUxpc3QuaCIKIAotI2luY2x1ZGUgIkZpbGUuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
aWxlTGlzdDo6RmlsZUxpc3QoKQotewotfQotCiBGaWxlKiBGaWxlTGlzdDo6aXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPj0gbV9maWxlcy5zaXplKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2ZpbGVzW2luZGV4XS5nZXQoKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fZmlsZXNbaW5kZXhdLnB0cigpOwogfQogCiBW
ZWN0b3I8U3RyaW5nPiBGaWxlTGlzdDo6cGF0aHMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJp
bmc+IHBhdGhzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbGVzLnNpemUoKTsg
KytpKQotICAgICAgICBwYXRocy5hcHBlbmQobV9maWxlc1tpXS0+cGF0aCgpKTsKLQorICAgIHBh
dGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9maWxlcy5zaXplKCkpOworICAgIGZvciAoYXV0
byYgZmlsZSA6IG1fZmlsZXMpCisgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChmaWxlLT5w
YXRoKCkpOwogICAgIHJldHVybiBwYXRoczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZUxpc3QuaAkocmV2aXNpb24gMjIxOTM2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsZUxpc3QpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWY8
RmlsZUxpc3Q+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPEZpbGU+PiYmIGZpbGVzKQorICAgIHN0YXRp
YyBSZWY8RmlsZUxpc3Q+IGNyZWF0ZShWZWN0b3I8UmVmPEZpbGU+PiYmIGZpbGVzKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsZUxpc3QoV1RGTW92ZShmaWxlcykpKTsK
ICAgICB9CkBAIC01MSwxOSArNTEsMjMgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsZXMuaXNFbXB0eSgpOyB9CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0
aHMoKSBjb25zdDsKIAorICAgIGNvbnN0IFZlY3RvcjxSZWY8RmlsZT4+JiBmaWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZXM7IH0KKyAgICBjb25zdCBGaWxlJiBmaWxlKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVzW2luZGV4XS5nZXQoKTsgfQorCiBwcml2YXRlOgotICAg
IEZpbGVMaXN0KCk7Ci0gICAgRmlsZUxpc3QoVmVjdG9yPFJlZlB0cjxGaWxlPj4mJiBmaWxlcykK
KyAgICBGaWxlTGlzdCgpID0gZGVmYXVsdDsKKyAgICBGaWxlTGlzdChWZWN0b3I8UmVmPEZpbGU+
PiYmIGZpbGVzKQogICAgICAgICA6IG1fZmlsZXMoV1RGTW92ZShmaWxlcykpCi0gICAgeyB9Cisg
ICAgeworICAgIH0KIAogICAgIC8vIEZpbGVMaXN0cyBjYW4gb25seSBiZSBjaGFuZ2VkIGJ5IHRo
ZWlyIG93bmVycy4KICAgICBmcmllbmQgY2xhc3MgRGF0YVRyYW5zZmVyOwogICAgIGZyaWVuZCBj
bGFzcyBGaWxlSW5wdXRUeXBlOwotICAgIHZvaWQgYXBwZW5kKFJlZlB0cjxGaWxlPiYmIGZpbGUp
IHsgbV9maWxlcy5hcHBlbmQoV1RGTW92ZShmaWxlKSk7IH0KKyAgICB2b2lkIGFwcGVuZChSZWY8
RmlsZT4mJiBmaWxlKSB7IG1fZmlsZXMuYXBwZW5kKFdURk1vdmUoZmlsZSkpOyB9CiAgICAgdm9p
ZCBjbGVhcigpIHsgbV9maWxlcy5jbGVhcigpOyB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPEZpbGU+
PiBtX2ZpbGVzOworICAgIFZlY3RvcjxSZWY8RmlsZT4+IG1fZmlsZXM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJ
KHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsOSBAQCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4gRmlsZUlucHV0VHlwCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZp
bGVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUudmFsdWVTaXplKCk7IGkgKz0g
MikgewogICAgICAgICBpZiAoIXN0YXRlW2kgKyAxXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBm
aWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5mbyhzdGF0ZVtpXSwgc3RhdGVbaSArIDFdKSk7
CisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoeyBzdGF0ZVtpXSwgc3RhdGVbaSArIDFdIH0pOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5m
byhzdGF0ZVtpXSkpOworICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHsgc3RhdGVbaV0gfSk7CiAg
ICAgfQogICAgIHJldHVybiBmaWxlczsKIH0KQEAgLTEzMCwxNCArMTMwLDE3IEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgRmlsZUlucHV0VHlwZTo6Zm9ybUMKIEZvcm1Db250cm9sU3RhdGUgRmlsZUlu
cHV0VHlwZTo6c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogewogICAgIGlmIChtX2ZpbGVM
aXN0LT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGb3JtQ29udHJvbFN0YXRlKCk7Ci0gICAg
Rm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZTsKLSAgICB1bnNpZ25lZCBudW1GaWxlcyA9IG1fZmlsZUxp
c3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GaWxlczsgKytp
KSB7Ci0gICAgICAgIHN0YXRlLmFwcGVuZChtX2ZpbGVMaXN0LT5pdGVtKGkpLT5wYXRoKCkpOwot
ICAgICAgICBzdGF0ZS5hcHBlbmQobV9maWxlTGlzdC0+aXRlbShpKS0+bmFtZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbGVuZ3RoID0gQ2hlY2tlZDxzaXplX3Q+KG1fZmls
ZUxpc3QtPmZpbGVzKCkuc2l6ZSgpKSAqIENoZWNrZWQ8c2l6ZV90PigyKTsKKworICAgIFZlY3Rv
cjxTdHJpbmc+IHN0YXRlVmVjdG9yOworICAgIHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoLnVuc2FmZUdldCgpKTsKKyAgICBmb3IgKGF1dG8mIGZpbGUgOiBtX2ZpbGVM
aXN0LT5maWxlcygpKSB7CisgICAgICAgIHN0YXRlVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChmaWxl
LT5wYXRoKCkpOworICAgICAgICBzdGF0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZmlsZS0+bmFt
ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRlOworICAgIHJldHVybiBGb3JtQ29udHJvbFN0
YXRlIHsgV1RGTW92ZShzdGF0ZVZlY3RvcikgfTsKIH0KIAogdm9pZCBGaWxlSW5wdXRUeXBlOjpy
ZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3JtQ29udHJvbFN0YXRlJiBzdGF0ZSkKQEAg
LTE0OSwxMCArMTUyLDExIEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6cmVzdG9yZUZvcm1Db250cm9s
U3QKIAogYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYgZm9y
bURhdGEsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogeworICAgIGF1dG8qIGZpbGVMaXN0ID0gZWxl
bWVudCgpLmZpbGVzKCk7CisgICAgQVNTRVJUKGZpbGVMaXN0KTsKKwogICAgIGF1dG8gbmFtZSA9
IGVsZW1lbnQoKS5uYW1lKCk7CiAKLSAgICBhdXRvKiBmaWxlTGlzdCA9IGVsZW1lbnQoKS5maWxl
cygpOwotICAgIHVuc2lnbmVkIG51bUZpbGVzID0gZmlsZUxpc3QtPmxlbmd0aCgpOwogICAgIGlm
ICghbXVsdGlwYXJ0KSB7CiAgICAgICAgIC8vIFNlbmQgb25seSB0aGUgYmFzZW5hbWVzLgogICAg
ICAgICAvLyA0LjEwLjE2LjQgYW5kIDQuMTAuMTYuNiBzZWN0aW9ucyBpbiBIVE1MNS4KQEAgLTE2
MSwyMCArMTY1LDIxIEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm8K
ICAgICAgICAgLy8gZmlsZUxpc3QgYmVjYXVzZSBOZXRzY2FwZSBkb2Vzbid0IHN1cHBvcnQgZm9y
IG5vbi1tdWx0aXBhcnQKICAgICAgICAgLy8gc3VibWlzc2lvbiBvZiBmaWxlIGlucHV0cywgYW5k
IEZpcmVmb3ggZG9lc24ndCBhZGQgIm5hbWU9IiBxdWVyeQogICAgICAgICAvLyBwYXJhbWV0ZXIu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GaWxlczsgKytpKQotICAgICAg
ICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIGZpbGVMaXN0LT5pdGVtKGkpLT5uYW1lKCkpOwor
ICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlTGlzdC0+ZmlsZXMoKSkKKyAgICAgICAgICAg
IGZvcm1EYXRhLmFwcGVuZChuYW1lLCBmaWxlLT5uYW1lKCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICAvLyBJZiBubyBmaWxlbmFtZSBhdCBhbGwgaXMgZW50ZXJlZCwgcmV0
dXJuIHN1Y2Nlc3NmdWwgYnV0IGVtcHR5LgogICAgIC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dp
Y2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KLSAgICBpZiAoIW51
bUZpbGVzKSB7CisgICAgaWYgKGZpbGVMaXN0LT5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9ybURh
dGEuYXBwZW5kKG5hbWUsIEZpbGU6OmNyZWF0ZShlbXB0eVN0cmluZygpKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GaWxl
czsgKytpKQotICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgKmZpbGVMaXN0LT5pdGVtKGkp
KTsKKworICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVMaXN0LT5maWxlcygpKQorICAgICAgICBm
b3JtRGF0YS5hcHBlbmQobmFtZSwgZmlsZS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTE5MCw3ICsxOTUsOSBAQCBTdHJpbmcgRmlsZUlucHV0VHlwZTo6dmFsdWVNaXNzaW5nVGV4
dCgpCiAKIHZvaWQgRmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAg
ICBhdXRvJiBpbnB1dCA9IGVsZW1lbnQoKTsKKworICAgIGlmIChpbnB1dC5pc0Rpc2FibGVkRm9y
bUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFTY3JpcHRDb250cm9sbGVy
Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKQEAgLTE5OCw3ICsyMDUsNiBAQCB2b2lkIEZpbGVJ
bnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlCiAKICAgICBpZiAoYXV0byogY2hyb21lID0g
dGhpcy0+Y2hyb21lKCkpIHsKICAgICAgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5nczsK
LSAgICAgICAgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBlbGVtZW50KCk7CiAgICAgICAgIHNl
dHRpbmdzLmFsbG93c0RpcmVjdG9yaWVzID0gYWxsb3dzRGlyZWN0b3JpZXMoKTsKICAgICAgICAg
c2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyA9IGlucHV0Lmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKTsKICAgICAgICAgc2V0dGluZ3MuYWNjZXB0TUlN
RVR5cGVzID0gaW5wdXQuYWNjZXB0TUlNRVR5cGVzKCk7CkBAIC0yNDEsNyArMjQ3LDcgQEAgYm9v
bCBGaWxlSW5wdXRUeXBlOjpjYW5TZXRWYWx1ZShjb25zdCBTdAogYm9vbCBGaWxlSW5wdXRUeXBl
OjpnZXRUeXBlU3BlY2lmaWNWYWx1ZShTdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChtX2ZpbGVM
aXN0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgdmFsdWUgPSBTdHJpbmcoKTsKKyAgICAgICAgdmFs
dWUgPSB7IH07CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjUxLDcgKzI1Nyw3
IEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6Z2V0VHlwZVNwZWNpZmljVmFsdWUKICAgICAvLyBkZWNp
ZGVkIHRvIHRyeSB0byBwYXJzZSB0aGUgdmFsdWUgYnkgbG9va2luZyBmb3IgYmFja3NsYXNoZXMK
ICAgICAvLyAoYmVjYXVzZSB0aGF0J3Mgd2hhdCBXaW5kb3dzIGZpbGUgcGF0aHMgdXNlKS4gVG8g
YmUgY29tcGF0aWJsZQogICAgIC8vIHdpdGggdGhhdCBjb2RlLCB3ZSBtYWtlIHVwIGEgZmFrZSBw
YXRoIGZvciB0aGUgZmlsZS4KLSAgICB2YWx1ZSA9ICJDOlxcZmFrZXBhdGhcXCIgKyBtX2ZpbGVM
aXN0LT5pdGVtKDApLT5uYW1lKCk7CisgICAgdmFsdWUgPSBtYWtlU3RyaW5nKCJDOlxcZmFrZXBh
dGhcXCIsIG1fZmlsZUxpc3QtPmZpbGUoMCkubmFtZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjc4LDcgKzI4NCw3IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6ZGlzYWJsZWRBdHRyaWJ1
dGVDaGEKIHsKICAgICBBU1NFUlQoZWxlbWVudCgpLnNoYWRvd1Jvb3QoKSk7CiAKLSAgICBTaGFk
b3dSb290KiByb290ID0gZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAgICBhdXRv
KiByb290ID0gZWxlbWVudCgpLnVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKICAgICBpZiAoIXJvb3Qp
CiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI5MCw3ICsyOTYsNyBAQCB2b2lkIEZpbGVJbnB1
dFR5cGU6Om11bHRpcGxlQXR0cmlidXRlQ2hhCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQoKS5zaGFk
b3dSb290KCkpOwogCi0gICAgU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQoKS51c2VyQWdlbnRT
aGFkb3dSb290KCk7CisgICAgYXV0byogcm9vdCA9IGVsZW1lbnQoKS51c2VyQWdlbnRTaGFkb3dS
b290KCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm47CiAKQEAgLTM1NCw3ICszNjAs
NyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnNldEZpbGVzKFJlZlB0cjxGaWxlCiAgICAgICAgIHBh
dGhzQ2hhbmdlZCA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGZpbGVzLT5pdGVtKGkpLT5w
YXRoKCkgIT0gbV9maWxlTGlzdC0+aXRlbShpKS0+cGF0aCgpKSB7CisgICAgICAgICAgICBpZiAo
ZmlsZXMtPmZpbGUoaSkucGF0aCgpICE9IG1fZmlsZUxpc3QtPmZpbGUoaSkucGF0aCgpKSB7CiAg
ICAgICAgICAgICAgICAgcGF0aHNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTM2OSw4ICszNzUsOCBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6
OnNldEZpbGVzKFJlZlB0cjxGaWxlCiAgICAgaWYgKHNob3VsZFJlcXVlc3RJY29uID09IFJlcXVl
c3RJY29uOjpZZXMpIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CiAgICAgICAgIHBh
dGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgcGF0aHMudW5jaGVja2VkQXBw
ZW5kKG1fZmlsZUxpc3QtPml0ZW0oaSktPnBhdGgoKSk7CisgICAgICAgIGZvciAoYXV0byYgZmls
ZSA6IG1fZmlsZUxpc3QtPmZpbGVzKCkpCisgICAgICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBl
bmQoZmlsZS0+cGF0aCgpKTsKICAgICAgICAgcmVxdWVzdEljb24ocGF0aHMpOwogICAgIH0KIApA
QCAtNDIyLDI0ICs0MjgsMjAgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjppY29uTG9hZGVkKFJlZlB0
cjxJYwogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiBib29sIEZpbGVJbnB1dFR5cGU6OnJlY2Vp
dmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIFZlY3RvcjxT
dHJpbmc+IHBhdGhzOwotICAgIGRyYWdEYXRhLmFzRmlsZW5hbWVzKHBhdGhzKTsKKyAgICBhdXRv
IHBhdGhzID0gZHJhZ0RhdGEuYXNGaWxlbmFtZXMoKTsKICAgICBpZiAocGF0aHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
ICZlbGVtZW50KCk7Ci0KLSAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7Ci0g
ICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpCi0gICAgICAgIGZpbGVzLmFwcGVuZChGaWxlQ2hv
b3NlckZpbGVJbmZvKHBhdGgpKTsKKyAgICBpZiAoZWxlbWVudCgpLmhhc0F0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKSkgeworICAgICAgICBWZWN0b3I8RmlsZUNo
b29zZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgICAgIGZpbGVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkocGF0aHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpCisgICAg
ICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBwYXRoIH0pOwogCi0gICAgaWYgKGlucHV0
LT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11bHRpcGxlQXR0cikpCiAgICAg
ICAgIGZpbGVzQ2hvc2VuKGZpbGVzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPEZpbGVD
aG9vc2VyRmlsZUluZm8+IGZpcnN0RmlsZU9ubHk7Ci0gICAgICAgIGZpcnN0RmlsZU9ubHkuYXBw
ZW5kKGZpbGVzWzBdKTsKLSAgICAgICAgZmlsZXNDaG9zZW4oZmlyc3RGaWxlT25seSk7Ci0gICAg
fQorICAgIH0gZWxzZQorICAgICAgICBmaWxlc0Nob3Nlbih7IEZpbGVDaG9vc2VyRmlsZUluZm8g
eyBwYXRoc1swXSB9IH0pOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KERSQUdfU1VQUE9SVCkKQEAgLTQ2MCw3ICs0NjIsNyBAQCBTdHJpbmcgRmlsZUlucHV0VHlwZTo6
ZGVmYXVsdFRvb2xUaXAoKSBjCiAKICAgICBTdHJpbmdCdWlsZGVyIG5hbWVzOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgIG5hbWVzLmFwcGVu
ZChtX2ZpbGVMaXN0LT5pdGVtKGkpLT5uYW1lKCkpOworICAgICAgICBuYW1lcy5hcHBlbmQobV9m
aWxlTGlzdC0+ZmlsZShpKS5uYW1lKCkpOwogICAgICAgICBpZiAoaSAhPSBsaXN0U2l6ZSAtIDEp
CiAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoJ1xuJyk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvRmlsZUxpc3RDcmVhdG9yLmNwcAkocmV2aXNpb24gMjIxOTM2KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw3IEBAIEZpbGVMaXN0Q3JlYXRvcjo6fkZpbGVMaXN0Q3JlYXRvcigpCiAgICAgQVNTRVJU
KCFtX2NvbXBsZXRpb25IYW5kZXIpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmREaXJlY3RvcnlG
aWxlcyhjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgs
IFZlY3RvcjxSZWZQdHI8RmlsZT4+JiBmaWxlT2JqZWN0cykKK3N0YXRpYyB2b2lkIGFwcGVuZERp
cmVjdG9yeUZpbGVzKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIHJlbGF0
aXZlUGF0aCwgVmVjdG9yPFJlZjxGaWxlPj4mIGZpbGVPYmplY3RzKQogewogICAgIGZvciAoYXV0
byYgY2hpbGRQYXRoIDogbGlzdERpcmVjdG9yeShkaXJlY3RvcnksICIqIikpIHsKICAgICAgICAg
YXV0byBtZXRhZGF0YSA9IGZpbGVNZXRhZGF0YShjaGlsZFBhdGgpOwpAQCAtNzgsNyArNzgsNyBA
QCBGaWxlTGlzdENyZWF0b3I6OkZpbGVMaXN0Q3JlYXRvcihjb25zdCBWCiB0ZW1wbGF0ZTxGaWxl
TGlzdENyZWF0b3I6OlNob3VsZFJlc29sdmVEaXJlY3RvcmllcyBzaG91bGRSZXNvbHZlRGlyZWN0
b3JpZXM+CiBSZWY8RmlsZUxpc3Q+IEZpbGVMaXN0Q3JlYXRvcjo6Y3JlYXRlRmlsZUxpc3QoY29u
c3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBwYXRocykKIHsKLSAgICBWZWN0b3I8UmVm
UHRyPEZpbGU+PiBmaWxlT2JqZWN0czsKKyAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlT2JqZWN0
czsKICAgICBmb3IgKGF1dG8mIGluZm8gOiBwYXRocykgewogICAgICAgICBpZiAoc2hvdWxkUmVz
b2x2ZURpcmVjdG9yaWVzID09IFNob3VsZFJlc29sdmVEaXJlY3Rvcmllczo6WWVzICYmIGZpbGVJ
c0RpcmVjdG9yeShpbmZvLnBhdGgsIFNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKICAg
ICAgICAgICAgIGFwcGVuZERpcmVjdG9yeUZpbGVzKGluZm8ucGF0aCwgcGF0aEdldEZpbGVOYW1l
KGluZm8ucGF0aCksIGZpbGVPYmplY3RzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250
cm9sbGVyLmgJKHJldmlzaW9uIDIyMTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMjMgQEAgY2xhc3MgU2F2ZWRG
b3JtU3RhdGU7CiAKIGNsYXNzIEZvcm1Db250cm9sU3RhdGUgewogcHVibGljOgotICAgIEZvcm1D
b250cm9sU3RhdGUoKSA6IG1fdHlwZShUeXBlU2tpcCkgeyB9Ci0gICAgZXhwbGljaXQgRm9ybUNv
bnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmIHZhbHVlKSA6IG1fdHlwZShUeXBlUmVzdG9yZSkgeyBt
X3ZhbHVlcy5hcHBlbmQodmFsdWUpOyB9CisgICAgRm9ybUNvbnRyb2xTdGF0ZSgpCisgICAgICAg
IDogbV90eXBlKFR5cGVTa2lwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBGb3JtQ29u
dHJvbFN0YXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIDogbV90eXBlKFR5cGVSZXN0
b3JlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBGb3JtQ29udHJvbFN0YXRlKFZlY3RvcjxTdHJpbmc+JiYgdmFsdWVzKQorICAg
ICAgICA6IG1fdHlwZShUeXBlU2tpcCkKKyAgICAgICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVl
cykpCisgICAgeworICAgIH0KKwogICAgIHN0YXRpYyBGb3JtQ29udHJvbFN0YXRlIGRlc2VyaWFs
aXplKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3Rvciwgc2l6ZV90JiBpbmRleCk7CiAg
ICAgRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBGb3JtQ29udHJvbFN0YXRlJiBhbm90aGVyKSA6IG1f
dHlwZShhbm90aGVyLm1fdHlwZSksIG1fdmFsdWVzKGFub3RoZXIubV92YWx1ZXMpIHsgfQogICAg
IEZvcm1Db250cm9sU3RhdGUmIG9wZXJhdG9yPShjb25zdCBGb3JtQ29udHJvbFN0YXRlJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgJKHJldmlzaW9uIDIyMTkzNikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3
ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc0NvbXBhdGlibGVDb250ZW50KERy
YWdnaW5nUHVycG9zZSA9IERyYWdnaW5nUHVycG9zZTo6Rm9yRWRpdGluZykgY29uc3Q7CiAgICAg
U3RyaW5nIGFzVVJMKEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSA9IENvbnZlcnRGaWxlbmFtZXMs
IFN0cmluZyogdGl0bGUgPSBudWxscHRyKSBjb25zdDsKICAgICBTdHJpbmcgYXNQbGFpblRleHQo
KSBjb25zdDsKLSAgICB2b2lkIGFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7Cisg
ICAgVmVjdG9yPFN0cmluZz4gYXNGaWxlbmFtZXMoKSBjb25zdDsKICAgICBDb2xvciBhc0NvbG9y
KCkgY29uc3Q7CiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2UoKSBjb25zdDsKICAgICBib29sIGNv
bnRhaW5zQ29sb3IoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
cmFnRGF0YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RyYWdEYXRhR3RrLmNwcAkocmV2aXNpb24gMjIxOTM2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBA
QCB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
cGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKCkuc2l6ZSgpOwogfQogCi12b2lkIERyYWdEYXRh
Ojphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAorVmVjdG9yPFN0cmlu
Zz4gRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKCkgY29uc3QKIHsKLSAgICByZXN1bHQgPSBtX3BsYXRm
b3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEt
PmZpbGVuYW1lcygpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCShy
ZXZpc2lvbiAyMjE5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxMyArMTc4LDE1IEBAIHVuc2lnbmVkIERyYWdE
YXRhOjpudW1iZXJPZkZpbGVzKCkgY29uc3QKICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXROdW1iZXJPZkZpbGVzKG1fcGFzdGVib2FyZE5h
bWUpOwogfQogCi12b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVz
dWx0KSBjb25zdAorVmVjdG9yPFN0cmluZz4gRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKCkgY29uc3QK
IHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBlKHJlc3VsdCwgU3RyaW5nKE5TRmlsZW5h
bWVzUGJvYXJkVHlwZSksIG1fcGFzdGVib2FyZE5hbWUpOworICAgIFZlY3RvcjxTdHJpbmc+IHJl
c3VsdHM7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5n
ZXRQYXRobmFtZXNGb3JUeXBlKHJlc3VsdHMsIFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUp
LCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0czsKICNlbmRpZgotICAgIGlmICghcmVzdWx0LnNpemUoKSkKLSAgICAg
ICAgcmVzdWx0ID0gZmlsZU5hbWVzKCk7CisgICAgcmV0dXJuIGZpbGVOYW1lcygpOwogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDIyMTkzNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNiwyMCArMTM2LDIyIEBAIHVuc2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZpbGVz
KCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8
U3RyaW5nPiYgcmVzdWx0KSBjb25zdAorVmVjdG9yPFN0cmluZz4gRHJhZ0RhdGE6OmFzRmlsZW5h
bWVzKCkgY29uc3QKIHsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisKICNpZiBVU0UoQ0Yp
CiAgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YSkgewogICAgICAgICBXQ0hBUiBmaWxlbmFtZVtN
QVhfUEFUSF07CiAKICAgICAgICAgU1RHTUVESVVNIG1lZGl1bTsKICAgICAgICAgaWYgKEZBSUxF
RChtX3BsYXRmb3JtRHJhZ0RhdGEtPkdldERhdGEoY2ZIRHJvcEZvcm1hdCgpLCAmbWVkaXVtKSkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
ICAgIEhEUk9QIGhkcm9wID0gcmVpbnRlcnByZXRfY2FzdDxIRFJPUD4oR2xvYmFsTG9jayhtZWRp
dW0uaEdsb2JhbCkpOyAKIAogICAgICAgICBpZiAoIWhkcm9wKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgICAgICBjb25zdCB1bnNpZ25lZCBu
dW1GaWxlcyA9IERyYWdRdWVyeUZpbGVXKGhkcm9wLCAweEZGRkZGRkZGLCAwLCAwKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZpbGVzOyBpKyspIHsKQEAgLTE2MiwxMCAr
MTY0LDEyIEBAIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmcKICAgICAg
ICAgRHJhZ0ZpbmlzaChoZHJvcCk7CiAKICAgICAgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5oR2xv
YmFsKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICByZXN1bHQgPSBtX2RyYWdEYXRhTWFwLmdldChjZkhEcm9wRm9ybWF0KCktPmNmRm9ybWF0KTsK
ICNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNQbGFpblRleHQoKSBjb25zdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>