<?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>162518</bug_id>
          
          <creation_ts>2016-09-23 16:23:37 -0700</creation_ts>
          <short_desc>Refactor URLParser</short_desc>
          <delta_ts>2016-09-23 16:43:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233028</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-23 16:23:37 -0700</bug_when>
    <thetext>Refactor URLParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233031</commentid>
    <comment_count>1</comment_count>
      <attachid>289717</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-23 16:27:30 -0700</bug_when>
    <thetext>Created attachment 289717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233033</commentid>
    <comment_count>2</comment_count>
      <attachid>289717</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-09-23 16:30:54 -0700</bug_when>
    <thetext>Comment on attachment 289717
Patch

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

&gt; Source/WebCore/platform/URLParser.h:86
&gt; +    using IPv4Address = uint32_t;

Is &apos;using&apos; preferred over typedef?

&gt; Source/WebCore/platform/URLParser.h:89
&gt; +    using IPv6Address = std::array&lt;uint16_t, 8&gt;;

Why std::array instead of Vector?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233034</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-23 16:32:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 289717 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289717&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/URLParser.h:86
&gt; &gt; +    using IPv4Address = uint32_t;
&gt; 
&gt; Is &apos;using&apos; preferred over typedef?
Yes.  It works better with templates.
&gt; 
&gt; &gt; Source/WebCore/platform/URLParser.h:89
&gt; &gt; +    using IPv6Address = std::array&lt;uint16_t, 8&gt;;
&gt; 
&gt; Why std::array instead of Vector?
We know it will have exactly 8 and only 8 elements.  No reason to keep track of size, and no reason to have capability of having more or less.  I would use an array, but that doesn&apos;t work as a template parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233043</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-09-23 16:42:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 289717 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=289717&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/URLParser.h:86
&gt; &gt; &gt; +    using IPv4Address = uint32_t;
&gt; &gt; 
&gt; &gt; Is &apos;using&apos; preferred over typedef?
&gt; Yes.  It works better with templates.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/URLParser.h:89
&gt; &gt; &gt; +    using IPv6Address = std::array&lt;uint16_t, 8&gt;;
&gt; &gt; 
&gt; &gt; Why std::array instead of Vector?
&gt; We know it will have exactly 8 and only 8 elements. 

Vector with inline capacity accomplishes the same thing, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233044</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-23 16:43:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/206337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233045</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-23 16:43:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Vector with inline capacity accomplishes the same thing, no?
This has an unneeded unsigned value next to the values I care about.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289717</attachid>
            <date>2016-09-23 16:27:30 -0700</date>
            <delta_ts>2016-09-23 16:42:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162518-20160923162438.patch</filename>
            <type>text/plain</type>
            <size>34625</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE2LTA5LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVmYWN0b3Ig
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI1MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVc2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50UG9zaXRpb24g
aW5zdGVhZCBvZiBhbHdheXMgZGV0ZXJtaW5pbmcgcG9zaXRpb24gYmFzZWQgb24gdGhlCisgICAg
ICAgIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFNvb24gdGhlcmUgd2lsbCBiZSBub3RoaW5nIGluIHRo
ZSBidWZmZXIgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyBzeW50YXggZXJy
b3JzLgorICAgICAgICBBbHNvIG1ha2UgbW9yZSBzdGF0aWMgZnVuY3Rpb25zIGludG8gbWV0aG9k
cy4gIEdpdmUgSVB2NkFkZHJlc3NlcyBhbmQgSVB2NEFkZHJlc3NlcyBuYW1lcy4gIFN0YXJ0IGFk
ZGluZyBzeW50YXhFcnJvciBzdHVicy4KKworICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3Iu
ICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OmluY3JlbWVudEl0ZXJhdG9yU2tpcHBp
bmdUYWJBbmROZXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6aXNXaW5kb3dz
RHJpdmVMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjphcHBlbmRUb0FTQ0lJ
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c3ludGF4RXJyb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpjdXJyZW50UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VVJMUGFyc2VyOjpVUkxQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2Vy
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBhcnNlQXV0aG9yaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6YXBwZW5kTnVtYmVyVG9BU0NJSUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnNlcmlhbGl6ZUlQdjQpOgorICAgICAgICAo
V2ViQ29yZTo6VVJMUGFyc2VyOjpzZXJpYWxpemVJUHY2UGllY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VVJMUGFyc2VyOjpzZXJpYWxpemVJUHY2KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNl
cjo6cGFyc2VJUHY0SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBhcnNlSVB2
Nkhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZVBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZUhvc3RBbmRQb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlQdjZQaWVjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlSVB2NEhvc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJ
UHY2SG9zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmg6CisKIDIw
MTYtMDktMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZWZhY3RvciBVUkxQYXJzZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJM
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA2MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDggKzQxMywxMCBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogdm9pZCBVUkxQYXJzZXI6OmluY3JlbWVudEl0ZXJh
dG9yU2tpcHBpbmdUYWJBbmROZXdMaW5lKENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+
JiBpdGVyYXRvcikKIHsKICAgICArK2l0ZXJhdG9yOwotICAgIHdoaWxlICghaXRlcmF0b3IuYXRF
bmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQorICAgIHdoaWxlICghaXRlcmF0b3Iu
YXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKSB7CisgICAgICAgIHN5bnRheEVy
cm9yKGl0ZXJhdG9yKTsKICAgICAgICAgKytpdGVyYXRvcjsKKyAgICB9CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CkBAIC00MjcsOCArNDI5LDEwIEBAIGJvb2wgVVJMUGFy
c2VyOjppc1dpbmRvd3NEcml2ZUxldHRlcihDb2QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICgqaXRlcmF0b3IgPT0gJzonKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoKml0
ZXJhdG9yID09ICd8JykKKyAgICBpZiAoKml0ZXJhdG9yID09ICd8JykgeworICAgICAgICBzeW50
YXhFcnJvcihpdGVyYXRvcik7CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTQ0MywxMyArNDQ3LDE1IEBAIHZvaWQgVVJMUGFyc2VyOjphcHBl
bmRUb0FTQ0lJQnVmZmVyKFVDaGEKIHsKICAgICBBU1NFUlQobV91bmljb2RlRnJhZ21lbnRCdWZm
ZXIuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoaXNBU0NJSShjb2RlUG9pbnQpKTsKLSAgICBtX2Fz
Y2lpQnVmZmVyLmFwcGVuZChjb2RlUG9pbnQpOworICAgIGlmIChtX3NlZW5TeW50YXhFcnJvcikK
KyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoY29kZVBvaW50KTsKIH0KIAogdm9pZCBVUkxQ
YXJzZXI6OmFwcGVuZFRvQVNDSUlCdWZmZXIoY29uc3QgY2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobV91bmljb2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0eSgp
KTsKLSAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIGlm
IChtX3NlZW5TeW50YXhFcnJvcikKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAg
LTkyNiwyMiArOTMyLDQwIEBAIHZvaWQgVVJMUGFyc2VyOjpwb3BQYXRoKCkKICAgICBtX2FzY2lp
QnVmZmVyLnJlc2l6ZShtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIFVSTFBhcnNlcjo6c3ludGF4RXJyb3IoY29u
c3QgQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKIHZvaWQgVVJMUGFyc2VyOjpmYWlsdXJlKCkKIHsKICAgICBtX3VybC5p
bnZhbGlkYXRlKCk7CiAgICAgbV91cmwubV9zdHJpbmcgPSBtX2lucHV0U3RyaW5nOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc2l6ZV90IFVSTFBhcnNlcjo6Y3VycmVu
dFBvc2l0aW9uKGNvbnN0IENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBpdGVyYXRv
cikKK3sKKyAgICBpZiAobV9zZWVuU3ludGF4RXJyb3IpCisgICAgICAgIHJldHVybiBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICByZXR1cm4gaXRlcmF0b3IuY29kZVVuaXRzU2luY2Uo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBDaGFyYWN0ZXJUeXBlKj4obV9pbnB1dEJlZ2luKSk7Cit9
CisKIFVSTFBhcnNlcjo6VVJMUGFyc2VyKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IFVSTCYg
YmFzZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKICAgICA6IG1faW5wdXRTdHJpbmco
aW5wdXQpCiB7CiAgICAgaWYgKGlucHV0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoaW5wdXQuaXM4Qml0KCkpCisgICAgaWYgKGlucHV0LmlzOEJpdCgpKSB7CisgICAgICAg
IG1faW5wdXRCZWdpbiA9IGlucHV0LmNoYXJhY3RlcnM4KCk7CiAgICAgICAgIHBhcnNlKGlucHV0
LmNoYXJhY3RlcnM4KCksIGlucHV0Lmxlbmd0aCgpLCBiYXNlLCBlbmNvZGluZyk7Ci0gICAgZWxz
ZQorICAgIH0gZWxzZSB7CisgICAgICAgIG1faW5wdXRCZWdpbiA9IGlucHV0LmNoYXJhY3RlcnMx
NigpOwogICAgICAgICBwYXJzZShpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgaW5wdXQubGVuZ3RoKCks
IGJhc2UsIGVuY29kaW5nKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+CkBAIC05ODcsMTIgKzEwMTEsMTMgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0
IENoYXJhY3RlclR5cAogICAgICAgICBGcmFnbWVudCwKICAgICB9OwogCi0jZGVmaW5lIExPR19T
VEFURSh4KSBMT0coVVJMUGFyc2VyLCAiU3RhdGUgJXMsIGNvZGUgcG9pbnQgJWMsIGFzY2lpQnVm
ZmVyIHNpemUgJXp1IiwgeCwgKmMsIG1fYXNjaWlCdWZmZXIuc2l6ZSgpKQorI2RlZmluZSBMT0df
U1RBVEUoeCkgTE9HKFVSTFBhcnNlciwgIlN0YXRlICVzLCBjb2RlIHBvaW50ICVjLCBhc2NpaUJ1
ZmZlciBzaXplICV6dSIsIHgsICpjLCBjdXJyZW50UG9zaXRpb24oYykpCiAjZGVmaW5lIExPR19G
SU5BTF9TVEFURSh4KSBMT0coVVJMUGFyc2VyLCAiRmluYWwgU3RhdGU6ICVzIiwgeCkKIAogICAg
IFN0YXRlIHN0YXRlID0gU3RhdGU6OlNjaGVtZVN0YXJ0OwogICAgIHdoaWxlICghYy5hdEVuZCgp
KSB7CiAgICAgICAgIGlmIChpc1RhYk9yTmV3bGluZSgqYykpIHsKKyAgICAgICAgICAgIHN5bnRh
eEVycm9yKGMpOwogICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KQEAgLTEwMDEsNyArMTAyNiw3IEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXAKICAgICAgICAgY2FzZSBTdGF0ZTo6U2NoZW1lU3RhcnQ6CiAgICAgICAgICAg
ICBMT0dfU1RBVEUoIlNjaGVtZVN0YXJ0Iik7CiAgICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhh
KCpjKSkgewotICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKHRv
QVNDSUlMb3dlcigqYykpOworICAgICAgICAgICAgICAgIGFwcGVuZFRvQVNDSUlCdWZmZXIodG9B
U0NJSUxvd2VyKCpjKSk7CiAgICAgICAgICAgICAgICAgaW5jcmVtZW50SXRlcmF0b3JTa2lwcGlu
Z1RhYkFuZE5ld0xpbmUoYyk7CiAgICAgICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkgewogICAg
ICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmNsZWFyKCk7CkBAIC0xMDE3LDcgKzEwNDIs
NyBAQCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAg
ICBpZiAoaXNWYWxpZFNjaGVtZUNoYXJhY3RlcigqYykpCiAgICAgICAgICAgICAgICAgYXBwZW5k
VG9BU0NJSUJ1ZmZlcih0b0FTQ0lJTG93ZXIoKmMpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKCpj
ID09ICc6JykgewotICAgICAgICAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0gbV9hc2NpaUJ1
ZmZlci5zaXplKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9zY2hlbWVFbmQgPSBjdXJyZW50
UG9zaXRpb24oYyk7CiAgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB1cmxTY2hlbWUgPSBTdHJp
bmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX3VybC5tX3NjaGVtZUVuZCk7CiAgICAgICAg
ICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gdXJsU2NoZW1lID09ICJo
dHRwIiB8fCB1cmxTY2hlbWUgPT0gImh0dHBzIjsKICAgICAgICAgICAgICAgICBpZiAodXJsU2No
ZW1lID09ICJmaWxlIikgewpAQCAtMTAzMCw3ICsxMDU1LDcgQEAgdm9pZCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cAogICAgICAgICAgICAgICAgIGFwcGVuZFRvQVNDSUlCdWZm
ZXIoJzonKTsKICAgICAgICAgICAgICAgICBpZiAoaXNTcGVjaWFsU2NoZW1lKHVybFNjaGVtZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgbV91cmxJc1NwZWNpYWwgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoYmFzZS5wcm90b2NvbElzKG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX2Fz
Y2lpQnVmZmVyLnNpemUoKSAtIDEpKQorICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5wcm90
b2NvbElzKG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBjdXJyZW50UG9zaXRpb24oYykgLSAxKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxSZWxhdGl2ZU9yQXV0
aG9yaXR5OwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5U2xhc2hlczsKQEAgLTEwMzksMTIgKzEw
NjQsMTIgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cAogICAgICAg
ICAgICAgICAgICAgICBpbmNyZW1lbnRJdGVyYXRvclNraXBwaW5nVGFiQW5kTmV3TGluZShtYXli
ZVNsYXNoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXliZVNsYXNoLmF0RW5kKCkgJiYg
Km1heWJlU2xhc2ggPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0FT
Q0lJQnVmZmVyKCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFy
dCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwu
bV91c2VyU3RhcnQgPSBjdXJyZW50UG9zaXRpb24oYyk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRob3JpdHk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjID0gbWF5YmVTbGFzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgqYyA9PSAn
LycpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gY3VycmVudFBvc2l0aW9uKGMpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91
c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3Vy
bC5tX3VzZXJTdGFydDsKQEAgLTExMTIsMTMgKzExMzcsMTMgQEAgdm9pZCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cAogICAgICAgICAgICAgTE9HX1NUQVRFKCJQYXRoT3JBdXRo
b3JpdHkiKTsKICAgICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKICAgICAgICAgICAgICAgICBh
cHBlbmRUb0FTQ0lJQnVmZmVyKCcvJyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3Rh
cnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJT
dGFydCA9IGN1cnJlbnRQb3NpdGlvbihjKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
OjpBdXRob3JpdHlPckhvc3Q7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAg
IGF1dGhvcml0eU9ySG9zdEJlZ2luID0gYzsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fYXNjaWlCdWZmZXIubGFzdCgpID09ICcvJyk7Ci0gICAgICAgICAg
ICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDE7CisgICAg
ICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBjdXJyZW50UG9zaXRpb24oYykgLSAxOwog
ICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAg
ICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAg
ICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTEx
ODMsNyArMTIwOCw3IEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXAK
ICAgICAgICAgICAgICAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCcvJyk7CiAgICAgICAgICAgICAg
ICAgKytjOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBt
X2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gY3Vy
cmVudFBvc2l0aW9uKGMpOwogICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6QXV0aG9yaXR5T3JI
b3N0OwogICAgICAgICAgICAgYXV0aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xMjA4LDcgKzEyMzMsNyBAQCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJvb2wgaXNT
bGFzaCA9ICpjID09ICcvJyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJyk7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzU2xhc2ggfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJykgewotICAg
ICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsK
KyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gY3VycmVudFBvc2l0aW9uKGMp
OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2Vy
RW5kOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdEFuZFBvcnQoQ29kZVBvaW50
SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSgpOwpAQCAtMTIxNiw3ICsxMjQxLDcgQEAgdm9p
ZCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cAogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTbGFzaCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcignLycpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gY3VycmVu
dFBvc2l0aW9uKGMpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IHN0YXRlID0gU3RhdGU6OlBhdGg7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI1
Myw3ICsxMjc4LDcgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cAog
ICAgICAgICAgICAgICAgIGlmIChiYXNlLmlzVmFsaWQoKSAmJiBiYXNlLnByb3RvY29sSXMoImZp
bGUiKSkKICAgICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFy
dDo6UGF0aEVuZCk7CiAgICAgICAgICAgICAgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcigiLy8vPyIs
IDQpOwotICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCkgLSAyOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gY3VycmVudFBv
c2l0aW9uKGMpIC0gMjsKICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5t
X3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwu
bV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91
c2VyU3RhcnQ7CkBAIC0xMjY3LDcgKzEyOTIsNyBAQCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAgICAgICAgaWYgKGJhc2UuaXNWYWxpZCgpICYmIGJh
c2UucHJvdG9jb2xJcygiZmlsZSIpKQogICAgICAgICAgICAgICAgICAgICBjb3B5VVJMUGFydHNV
bnRpbChiYXNlLCBVUkxQYXJ0OjpRdWVyeUVuZCk7CiAgICAgICAgICAgICAgICAgYXBwZW5kVG9B
U0NJSUJ1ZmZlcigiLy8vIyIsIDQpOwotICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0
ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAyOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNl
clN0YXJ0ID0gY3VycmVudFBvc2l0aW9uKGMpIC0gMjsKICAgICAgICAgICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX3Bh
c3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9o
b3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMjgzLDcgKzEzMDgsNyBAQCB2b2lkIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAgICAgICAgICAgIGNv
cHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBhdGhBZnRlckxhc3RTbGFzaCk7CiAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvQVNDSUlCdWZm
ZXIoIi8vLyIsIDMpOwotICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1f
YXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2Vy
U3RhcnQgPSBjdXJyZW50UG9zaXRpb24oYykgLSAxOwogICAgICAgICAgICAgICAgICAgICBtX3Vy
bC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91
cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAg
ICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTEzMDAsNyArMTMyNSw3
IEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXAKICAgICAgICAgICAg
IGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykgewogICAgICAgICAgICAgICAgICsrYzsKICAg
ICAgICAgICAgICAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCcvJyk7Ci0gICAgICAgICAgICAgICAg
bV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgICAg
ICBtX3VybC5tX3VzZXJTdGFydCA9IGN1cnJlbnRQb3NpdGlvbihjKTsKICAgICAgICAgICAgICAg
ICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBt
X3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAg
bV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMzIzLDcgKzEzNDgsNyBA
QCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcigiLy8i
LCAyKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCkgLSAxOworICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBjdXJyZW50UG9zaXRpb24o
YykgLSAxOwogICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7
CiAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAg
ICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTEzNDAs
MTAgKzEzNjUsMTAgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cAog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgaWYgKGF1dGhvcml0eU9ySG9zdEJlZ2luID09IGMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fYXNjaWlCdWZmZXJbbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9hc2NpaUJ1ZmZlcltjdXJyZW50UG9zaXRp
b24oYykgLSAxXSA9PSAnLycpOwogICAgICAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCIvPyIsIDIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaCA9IGN1cnJlbnRQb3NpdGlvbihjKSAtIDE7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAgICAgICAg
ICAgICAgICAgICAgICAgKytjOwpAQCAtMTM1MSw3ICsxMzc2LDcgQEAgdm9pZCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGlmICgqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvQVNDSUlCdWZmZXIoIi8jIiwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Vy
bC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gY3VycmVudFBv
c2l0aW9uKGMpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9
IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgbV91
cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CkBAIC0xMzY2LDkgKzEzOTEsOSBA
QCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5t
X3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQp
ID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAgICAgICAgIGlmIChTdHJpbmdWaWV3KG1fYXNj
aWlCdWZmZXIuZGF0YSgpICsgbV91cmwubV9wYXNzd29yZEVuZCwgY3VycmVudFBvc2l0aW9uKGMp
IC0gbV91cmwubV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CiAgICAgICAgICAgICAg
ICAgICAgIG1fYXNjaWlCdWZmZXIuc2hyaW5rKG1fdXJsLm1fcGFzc3dvcmRFbmQpOwotICAgICAg
ICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gY3VycmVudFBvc2l0aW9uKGMpOwog
ICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX3VybC5tX2hvc3RFbmQ7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTM4OSwyOCArMTQxNCwyOCBA
QCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAgICBM
T0dfU1RBVEUoIlBhdGgiKTsKICAgICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKG1fdXJsSXNT
cGVjaWFsICYmICpjID09ICdcXCcpKSB7CiAgICAgICAgICAgICAgICAgYXBwZW5kVG9BU0NJSUJ1
ZmZlcignLycpOwotICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJM
YXN0U2xhc2ggPSBjdXJyZW50UG9zaXRpb24oYyk7CiAgICAgICAgICAgICAgICAgKytjOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fYXNj
aWlCdWZmZXIuc2l6ZSgpICYmIG1fYXNjaWlCdWZmZXJbbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAx
XSA9PSAnLycpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24oYykgJiYgbV9hc2Np
aUJ1ZmZlcltjdXJyZW50UG9zaXRpb24oYykgLSAxXSA9PSAnLycpIHsKICAgICAgICAgICAgICAg
ICBpZiAoaXNEb3VibGVEb3RQYXRoU2VnbWVudChjKSkgewogICAgICAgICAgICAgICAgICAgICBj
b25zdW1lRG91YmxlRG90UGF0aFNlZ21lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAgIHBvcFBh
dGgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChtX2FzY2lpQnVmZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0g
PT0gJy8nICYmIGlzU2luZ2xlRG90UGF0aFNlZ21lbnQoYykpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9hc2NpaUJ1ZmZlcltjdXJyZW50UG9zaXRpb24oYykgLSAxXSA9PSAnLycgJiYgaXNTaW5n
bGVEb3RQYXRoU2VnbWVudChjKSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdW1lU2luZ2xl
RG90UGF0aFNlZ21lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgqYyA9PSAnPycpIHsKLSAg
ICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAg
ICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBjdXJyZW50UG9zaXRpb24oYyk7CiAgICAg
ICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAg
ICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXRoRW5kID0gY3VycmVudFBvc2l0aW9uKGMpOwogICAgICAgICAgICAg
ICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDMx
LDE1ICsxNDU2LDE1IEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXAK
ICAgICAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAgICAgICAgICAgICBM
T0dfU1RBVEUoIkNhbm5vdEJlQUJhc2VVUkxQYXRoIik7CiAgICAgICAgICAgICBpZiAoKmMgPT0g
Jz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gY3VycmVudFBvc2l0aW9u
KGMpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAgICAgICAgICAg
fSBlbHNlIGlmICgqYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQg
PSBjdXJyZW50UG9zaXRpb24oYyk7CiAgICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9
IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVu
dDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAg
YXBwZW5kVG9BU0NJSUJ1ZmZlcignLycpOwotICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFm
dGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgICAgICAgICAgbV91
cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBjdXJyZW50UG9zaXRpb24oYyk7CiAgICAgICAgICAg
ICAgICAgKytjOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB1dGY4UGVy
Y2VudEVuY29kZTxpc0luU2ltcGxlRW5jb2RlU2V0PigqYyk7CkBAIC0xNDUxLDcgKzE0NzYsNyBA
QCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgICAgICBp
ZiAoKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1VURjhFbmNvZGluZykKICAg
ICAgICAgICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZmZXIsIGVuY29kaW5nKTsKLSAg
ICAgICAgICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IGN1cnJlbnRQb3NpdGlvbihjKTsKICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTE0NzUsNyArMTUwMCw3IEBAIHZvaWQgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXAKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2Fz
ZSBTdGF0ZTo6U2NoZW1lU3RhcnQ6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lU3Rh
cnQiKTsKLSAgICAgICAgaWYgKCFtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiBiYXNlLmlzVmFsaWQo
KSkgeworICAgICAgICBpZiAoIWN1cnJlbnRQb3NpdGlvbihjKSAmJiBiYXNlLmlzVmFsaWQoKSkg
ewogICAgICAgICAgICAgbV91cmwgPSBiYXNlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0xNDk2LDcgKzE1MjEsNyBAQCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwCiAgICAgY2FzZSBTdGF0ZTo6UGF0aE9yQXV0aG9yaXR5OgogICAgICAgICBMT0df
RklOQUxfU1RBVEUoIlBhdGhPckF1dGhvcml0eSIpOwogICAgICAgICBBU1NFUlQobV91cmwubV91
c2VyU3RhcnQpOwotICAgICAgICBBU1NFUlQobV91cmwubV91c2VyU3RhcnQgPT0gbV9hc2NpaUJ1
ZmZlci5zaXplKCkpOworICAgICAgICBBU1NFUlQobV91cmwubV91c2VyU3RhcnQgPT0gY3VycmVu
dFBvc2l0aW9uKGMpKTsKICAgICAgICAgQVNTRVJUKG1fYXNjaWlCdWZmZXIubGFzdCgpID09ICcv
Jyk7CiAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0LS07CiAgICAgICAgIG1fdXJsLm1fdXNlckVu
ZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTUyMyw3ICsxNTQ4LDcgQEAgdm9pZCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cAogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0
YXRlOjpTcGVjaWFsQXV0aG9yaXR5U2xhc2hlczoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJT
cGVjaWFsQXV0aG9yaXR5U2xhc2hlcyIpOwotICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1f
YXNjaWlCdWZmZXIuc2l6ZSgpOworICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IGN1cnJlbnRQ
b3NpdGlvbihjKTsKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7
CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAg
ICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xNTQwLDcgKzE1NjUs
NyBAQCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU3RhdGU6OkF1dGhvcml0eU9ySG9zdDoKICAgICAgICAgTE9HX0ZJTkFM
X1NUQVRFKCJBdXRob3JpdHlPckhvc3QiKTsKLSAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IGN1cnJlbnRQb3Np
dGlvbihjKTsKICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsK
ICAgICAgICAgaWYgKGF1dGhvcml0eU9ySG9zdEJlZ2luLmF0RW5kKCkpIHsKICAgICAgICAgICAg
IG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKQEAgLTE1NzQsNyArMTU5OSw3IEBA
IHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXAKICAgICAgICAgICAgIGFw
cGVuZFRvQVNDSUlCdWZmZXIoJzonKTsKICAgICAgICAgfQogICAgICAgICBhcHBlbmRUb0FTQ0lJ
QnVmZmVyKCIvLy8iLCAzKTsKLSAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKSAtIDE7CisgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gY3VycmVudFBvc2l0
aW9uKGMpIC0gMTsKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7
CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAg
ICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xNTg3LDcgKzE2MTIs
NyBAQCB2b2lkIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwCiAgICAgY2FzZSBT
dGF0ZTo6RmlsZVNsYXNoOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVTbGFzaCIpOwog
ICAgICAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCIvLyIsIDIpOwotICAgICAgICBtX3VybC5tX3Vz
ZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKKyAgICAgICAgbV91cmwubV91c2Vy
U3RhcnQgPSBjdXJyZW50UG9zaXRpb24oYykgLSAxOwogICAgICAgICBtX3VybC5tX3VzZXJFbmQg
PSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJs
Lm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFy
dDsKQEAgLTE2MDEsNyArMTYyNiw3IEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFy
YWN0ZXJUeXAKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJGaWxlSG9zdCIpOwogICAgICAgICBp
ZiAoYXV0aG9yaXR5T3JIb3N0QmVnaW4gPT0gYykgewogICAgICAgICAgICAgYXBwZW5kVG9BU0NJ
SUJ1ZmZlcignLycpOwotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKSAtIDE7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IGN1cnJlbnRQ
b3NpdGlvbihjKSAtIDE7CiAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3Vz
ZXJTdGFydDsKICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJT
dGFydDsKICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpA
QCAtMTYxOCw5ICsxNjQzLDkgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3Rl
clR5cAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFN0cmlu
Z1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lp
QnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgewor
ICAgICAgICBpZiAoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEoKSArIG1fdXJsLm1fcGFz
c3dvcmRFbmQsIGN1cnJlbnRQb3NpdGlvbihjKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJs
b2NhbGhvc3QiKSAgewogICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJpbmsobV91cmwubV9w
YXNzd29yZEVuZCk7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IGN1cnJlbnRQb3NpdGlvbihj
KTsKICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9zdEVuZDsKICAgICAg
ICAgfQogICAgICAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCcvJyk7CkBAIC0xNjM0LDEzICsxNjU5
LDEzIEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXAKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBjYXNlIFN0YXRlOjpQYXRoOgogICAg
ICAgICBMT0dfRklOQUxfU1RBVEUoIlBhdGgiKTsKLSAgICAgICAgbV91cmwubV9wYXRoRW5kID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IGN1cnJlbnRQ
b3NpdGlvbihjKTsKICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsK
ICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAgICAgICAgIExP
R19GSU5BTF9TVEFURSgiQ2Fubm90QmVBQmFzZVVSTFBhdGgiKTsKLSAgICAgICAgbV91cmwubV9w
YXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9
IGN1cnJlbnRQb3NpdGlvbihjKTsKICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1f
cGF0aEVuZDsKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fdXJsLm1fcGF0aEVuZDsK
ICAgICAgICAgYnJlYWs7CkBAIC0xNjQ4LDIwICsxNjczLDI0IEBAIHZvaWQgVVJMUGFyc2VyOjpw
YXJzZShjb25zdCBDaGFyYWN0ZXJUeXAKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJRdWVyeSIp
OwogICAgICAgICBpZiAoIWlzVVRGOEVuY29kaW5nKQogICAgICAgICAgICAgZW5jb2RlUXVlcnko
cXVlcnlCdWZmZXIsIGVuY29kaW5nKTsKLSAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fYXNj
aWlCdWZmZXIuc2l6ZSgpOworICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gY3VycmVudFBvc2l0
aW9uKGMpOwogICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gbV91cmwubV9xdWVyeUVuZDsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6RnJhZ21lbnQ6CiAgICAgICAgIExPR19G
SU5BTF9TVEFURSgiRnJhZ21lbnQiKTsKLSAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1f
YXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuc2l6ZSgpOworICAg
ICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gY3VycmVudFBvc2l0aW9uKGMpICsgbV91bmljb2Rl
RnJhZ21lbnRCdWZmZXIuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAo
bV91bmljb2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0eSgpKQorICAgIGlmICghbV9zZWVuU3ludGF4
RXJyb3IpIHsKKyAgICAgICAgbV91cmwubV9zdHJpbmcgPSBtX2lucHV0U3RyaW5nOworICAgICAg
ICBBU1NFUlQobV9hc2NpaUJ1ZmZlci5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQobV91bmlj
b2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0eSgpKTsKKyAgICB9IGVsc2UgaWYgKG1fdW5pY29kZUZy
YWdtZW50QnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgbV91cmwubV9zdHJpbmcgPSBTdHJpbmc6
OmFkb3B0KFdURk1vdmUobV9hc2NpaUJ1ZmZlcikpOwogICAgIGVsc2UgewogICAgICAgICBWZWN0
b3I8VUNoYXI+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9hc2NpaUJ1ZmZlci5zaXplKCkgKyBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCkpOwor
ICAgICAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjdXJyZW50UG9zaXRpb24oYykg
KyBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCkpOwogICAgICAgICBidWZmZXIuYXBwZW5k
VmVjdG9yKG1fYXNjaWlCdWZmZXIpOwogICAgICAgICBidWZmZXIuYXBwZW5kVmVjdG9yKG1fdW5p
Y29kZUZyYWdtZW50QnVmZmVyKTsKICAgICAgICAgbV91cmwubV9zdHJpbmcgPSBTdHJpbmc6OmFk
b3B0KFdURk1vdmUoYnVmZmVyKSk7CkBAIC0xNjc1LDE0ICsxNzA0LDE0IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CiB2b2lkIFVSTFBhcnNlcjo6cGFyc2VBdXRob3JpdHkoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgaWYgKGl0ZXJh
dG9yLmF0RW5kKCkpIHsKLSAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCk7CisgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRv
cik7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJh
dG9yKSB7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKSB7CiAgICAgICAgICAgICArK2l0
ZXJhdG9yOwotICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCk7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBjdXJyZW50UG9zaXRpb24oaXRlcmF0
b3IpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgICAg
ICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyRW5kOwogICAgICAgICAgICAgICAg
IGlmIChtX3VybC5tX3VzZXJFbmQgPiBtX3VybC5tX3VzZXJTdGFydCkKQEAgLTE2OTYsMTQgKzE3
MjUsMTQgQEAgdm9pZCBVUkxQYXJzZXI6OnBhcnNlQXV0aG9yaXR5KENvZGVQb2ludAogICAgIH0K
ICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpCiAgICAgICAgIHV0ZjhQ
ZXJjZW50RW5jb2RlPGlzSW5Vc2VySW5mb0VuY29kZVNldD4oKml0ZXJhdG9yKTsKLSAgICBtX3Vy
bC5tX3Bhc3N3b3JkRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgbV91cmwubV9wYXNz
d29yZEVuZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRvcik7CiAgICAgaWYgKCFtX3VybC5tX3Vz
ZXJFbmQpCiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fcGFzc3dvcmRFbmQ7CiAg
ICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcignQCcpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbnNp
Z25lZEludGVnZXJUeXBlPgotdm9pZCBhcHBlbmQoVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24s
IFVuc2lnbmVkSW50ZWdlclR5cGUgbnVtYmVyKQordm9pZCBVUkxQYXJzZXI6OmFwcGVuZE51bWJl
clRvQVNDSUlCdWZmZXIoVW5zaWduZWRJbnRlZ2VyVHlwZSBudW1iZXIpCiB7CiAgICAgTENoYXIg
YnVmW3NpemVvZihVbnNpZ25lZEludGVnZXJUeXBlKSAqIDMgKyAxXTsKICAgICBMQ2hhciogZW5k
ID0gYnVmICsgV1RGX0FSUkFZX0xFTkdUSChidWYpOwpAQCAtMTcxMiwxOCArMTc0MSwxOCBAQCB2
b2lkIGFwcGVuZChWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgCiAgICAgICAgICotLXAgPSAo
bnVtYmVyICUgMTApICsgJzAnOwogICAgICAgICBudW1iZXIgLz0gMTA7CiAgICAgfSB3aGlsZSAo
bnVtYmVyKTsKLSAgICBkZXN0aW5hdGlvbi5hcHBlbmQocCwgZW5kIC0gcCk7CisgICAgYXBwZW5k
VG9BU0NJSUJ1ZmZlcihwLCBlbmQgLSBwKTsKIH0KIAotaW5saW5lIHN0YXRpYyB2b2lkIHNlcmlh
bGl6ZUlQdjQodWludDMyX3QgYWRkcmVzcywgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQordm9pZCBV
UkxQYXJzZXI6OnNlcmlhbGl6ZUlQdjQoSVB2NEFkZHJlc3MgYWRkcmVzcykKIHsKLSAgICBhcHBl
bmQ8dWludDhfdD4oYnVmZmVyLCBhZGRyZXNzID4+IDI0KTsKLSAgICBidWZmZXIuYXBwZW5kKCcu
Jyk7Ci0gICAgYXBwZW5kPHVpbnQ4X3Q+KGJ1ZmZlciwgYWRkcmVzcyA+PiAxNik7Ci0gICAgYnVm
ZmVyLmFwcGVuZCgnLicpOwotICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MgPj4g
OCk7Ci0gICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIs
IGFkZHJlc3MpOworICAgIGFwcGVuZE51bWJlclRvQVNDSUlCdWZmZXI8dWludDhfdD4oYWRkcmVz
cyA+PiAyNCk7CisgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcignLicpOworICAgIGFwcGVuZE51bWJl
clRvQVNDSUlCdWZmZXI8dWludDhfdD4oYWRkcmVzcyA+PiAxNik7CisgICAgYXBwZW5kVG9BU0NJ
SUJ1ZmZlcignLicpOworICAgIGFwcGVuZE51bWJlclRvQVNDSUlCdWZmZXI8dWludDhfdD4oYWRk
cmVzcyA+PiA4KTsKKyAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCcuJyk7CisgICAgYXBwZW5kTnVt
YmVyVG9BU0NJSUJ1ZmZlcjx1aW50OF90PihhZGRyZXNzKTsKIH0KICAgICAKIGlubGluZSBzdGF0
aWMgc2l6ZV90IHplcm9TZXF1ZW5jZUxlbmd0aChjb25zdCBzdGQ6OmFycmF5PHVpbnQxNl90LCA4
PiYgYWRkcmVzcywgc2l6ZV90IGJlZ2luKQpAQCAtMTc1Miw0NiArMTc4MSw0NiBAQCBpbmxpbmUg
c3RhdGljIE9wdGlvbmFsPHNpemVfdD4gZmluZExvbmdlCiAgICAgfQogICAgIHJldHVybiBsb25n
ZXN0OwogfQotICAgIAotaW5saW5lIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVjZSh1aW50
MTZfdCBwaWVjZSwgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQorCit2b2lkIFVSTFBhcnNlcjo6c2Vy
aWFsaXplSVB2NlBpZWNlKHVpbnQxNl90IHBpZWNlKQogewogICAgIGJvb2wgcHJpbnRlZCA9IGZh
bHNlOwogICAgIGlmIChhdXRvIG5pYmJsZTAgPSBwaWVjZSA+PiAxMikgewotICAgICAgICBidWZm
ZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KG5pYmJsZTApKTsK
KyAgICAgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcihsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlI
ZXhEaWdpdChuaWJibGUwKSk7CiAgICAgICAgIHByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBh
dXRvIG5pYmJsZTEgPSBwaWVjZSA+PiA4ICYgMHhGOwogICAgIGlmIChwcmludGVkIHx8IG5pYmJs
ZTEpIHsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlI
ZXhEaWdpdChuaWJibGUxKSk7CisgICAgICAgIGFwcGVuZFRvQVNDSUlCdWZmZXIobG93ZXJOaWJi
bGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQobmliYmxlMSkpOwogICAgICAgICBwcmludGVkID0g
dHJ1ZTsKICAgICB9CiAgICAgYXV0byBuaWJibGUyID0gcGllY2UgPj4gNCAmIDB4RjsKICAgICBp
ZiAocHJpbnRlZCB8fCBuaWJibGUyKQotICAgICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxl
VG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KG5pYmJsZTIpKTsKLSAgICBidWZmZXIuYXBwZW5kKGxv
d2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KHBpZWNlICYgMHhGKSk7CisgICAgICAg
IGFwcGVuZFRvQVNDSUlCdWZmZXIobG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQo
bmliYmxlMikpOworICAgIGFwcGVuZFRvQVNDSUlCdWZmZXIobG93ZXJOaWJibGVUb0xvd2VyY2Fz
ZUFTQ0lJSGV4RGlnaXQocGllY2UgJiAweEYpKTsKIH0KIAotaW5saW5lIHN0YXRpYyB2b2lkIHNl
cmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcywgVmVjdG9yPExDaGFy
PiYgYnVmZmVyKQordm9pZCBVUkxQYXJzZXI6OnNlcmlhbGl6ZUlQdjYoVVJMUGFyc2VyOjpJUHY2
QWRkcmVzcyBhZGRyZXNzKQogewotICAgIGJ1ZmZlci5hcHBlbmQoJ1snKTsKKyAgICBhcHBlbmRU
b0FTQ0lJQnVmZmVyKCdbJyk7CiAgICAgYXV0byBjb21wcmVzc1BvaW50ZXIgPSBmaW5kTG9uZ2Vz
dFplcm9TZXF1ZW5jZShhZGRyZXNzKTsKICAgICBmb3IgKHNpemVfdCBwaWVjZSA9IDA7IHBpZWNl
IDwgODsgcGllY2UrKykgewogICAgICAgICBpZiAoY29tcHJlc3NQb2ludGVyICYmIGNvbXByZXNz
UG9pbnRlci52YWx1ZSgpID09IHBpZWNlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWFkZHJlc3Nb
cGllY2VdKTsKICAgICAgICAgICAgIGlmIChwaWVjZSkKLSAgICAgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcignOicpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjo6IiwgMik7
CisgICAgICAgICAgICAgICAgYXBwZW5kVG9BU0NJSUJ1ZmZlcigiOjoiLCAyKTsKICAgICAgICAg
ICAgIHdoaWxlIChwaWVjZSA8IDggJiYgIWFkZHJlc3NbcGllY2VdKQogICAgICAgICAgICAgICAg
IHBpZWNlKys7CiAgICAgICAgICAgICBpZiAocGllY2UgPT0gOCkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzZXJpYWxpemVJUHY2UGllY2UoYWRkcmVzc1twaWVj
ZV0sIGJ1ZmZlcik7CisgICAgICAgIHNlcmlhbGl6ZUlQdjZQaWVjZShhZGRyZXNzW3BpZWNlXSk7
CiAgICAgICAgIGlmIChwaWVjZSA8IDcpCi0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKCc6Jyk7
CisgICAgICAgICAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCc6Jyk7CiAgICAgfQotICAgIGJ1ZmZl
ci5hcHBlbmQoJ10nKTsKKyAgICBhcHBlbmRUb0FTQ0lJQnVmZmVyKCddJyk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CkBAIC0xODYzLDcgKzE4OTIsNyBAQCBpbmxpbmUg
c3RhdGljIHVpbnQ2NF90IHBvdzI1NihzaXplX3QgZXhwCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgc3RhdGljIE9wdGlvbmFsPHVpbnQzMl90PiBwYXJzZUlQ
djRIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJhdG9yKQorT3B0aW9u
YWw8VVJMUGFyc2VyOjpJUHY0QWRkcmVzcz4gVVJMUGFyc2VyOjpwYXJzZUlQdjRIb3N0KENvZGVQ
b2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGl0ZXJhdG9yKQogewogICAgIFZlY3Rvcjx1aW50
MzJfdCwgND4gaXRlbXM7CiAgICAgaXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKQEAg
LTE4ODksMTkgKzE5MTgsMTkgQEAgaW5saW5lIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFy
c2VJUAogICAgICAgICBpZiAoaXRlbSA+IDI1NSkKICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0
OwogICAgIH0KLSAgICB1aW50MzJfdCBpcHY0ID0gaXRlbXMudGFrZUxhc3QoKTsKKyAgICBJUHY0
QWRkcmVzcyBpcHY0ID0gaXRlbXMudGFrZUxhc3QoKTsKICAgICBmb3IgKHNpemVfdCBjb3VudGVy
ID0gMDsgY291bnRlciA8IGl0ZW1zLnNpemUoKTsgKytjb3VudGVyKQogICAgICAgICBpcHY0ICs9
IGl0ZW1zW2NvdW50ZXJdICogcG93MjU2KDMgLSBjb3VudGVyKTsKICAgICByZXR1cm4gaXB2NDsK
IH0KICAgICAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgc3RhdGlj
IE9wdGlvbmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+PiBwYXJzZUlQdjZIb3N0KENvZGVQb2lu
dEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+IGMpCitPcHRpb25hbDxVUkxQYXJzZXI6OklQdjZBZGRy
ZXNzPiBVUkxQYXJzZXI6OnBhcnNlSVB2Nkhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZT4gYykKIHsKICAgICBpZiAoYy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
IAotICAgIHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFkZHJlc3MgPSB7ezAsIDAsIDAsIDAsIDAs
IDAsIDAsIDB9fTsKKyAgICBJUHY2QWRkcmVzcyBhZGRyZXNzID0ge3swLCAwLCAwLCAwLCAwLCAw
LCAwLCAwfX07CiAgICAgc2l6ZV90IHBpZWNlUG9pbnRlciA9IDA7CiAgICAgT3B0aW9uYWw8c2l6
ZV90PiBjb21wcmVzc1BvaW50ZXI7CiAKQEAgLTIwNzgsNyArMjEwNyw3IEBAIGJvb2wgVVJMUGFy
c2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEKIHsKICAgICB1aW50MzJfdCBwb3J0ID0gMDsK
ICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBt
X2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgbV91cmwubV9wb3J0RW5kID0gY3VycmVudFBv
c2l0aW9uKGl0ZXJhdG9yKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGFwcGVu
ZFRvQVNDSUlCdWZmZXIoJzonKTsKQEAgLTIwOTUsMTEgKzIxMjQsMTMgQEAgYm9vbCBVUkxQYXJz
ZXI6OnBhcnNlUG9ydChDb2RlUG9pbnRJdGVyYQogCiAgICAgaWYgKGlzRGVmYXVsdFBvcnQoU3Ry
aW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEoKSwgbV91cmwubV9zY2hlbWVFbmQpLCBwb3J0KSkg
ewogICAgICAgICBBU1NFUlQobV9hc2NpaUJ1ZmZlci5sYXN0KCkgPT0gJzonKTsKLSAgICAgICAg
bV9hc2NpaUJ1ZmZlci5zaHJpbmsobV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgYXBwZW5kPHVpbnQxNl90PihtX2FzY2lpQnVmZmVyLCBzdGF0aWNfY2FzdDx1
aW50MTZfdD4ocG9ydCkpOworICAgICAgICBtX2FzY2lpQnVmZmVyLnNocmluayhjdXJyZW50UG9z
aXRpb24oaXRlcmF0b3IpIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBvcnQg
PD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgYXBwZW5k
TnVtYmVyVG9BU0NJSUJ1ZmZlcjx1aW50MTZfdD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHBvcnQp
KTsKKyAgICB9CiAKLSAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsK
KyAgICBtX3VybC5tX3BvcnRFbmQgPSBjdXJyZW50UG9zaXRpb24oaXRlcmF0b3IpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0yMTE0LDE1ICsyMTQ1LDE1IEBAIGJvb2wgVVJMUGFyc2VyOjpw
YXJzZUhvc3RBbmRQb3J0KENvZGVQb2kKICAgICAgICAgd2hpbGUgKCFpcHY2RW5kLmF0RW5kKCkg
JiYgKmlwdjZFbmQgIT0gJ10nKQogICAgICAgICAgICAgKytpcHY2RW5kOwogICAgICAgICBpZiAo
YXV0byBhZGRyZXNzID0gcGFyc2VJUHY2SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJU
eXBlPihpdGVyYXRvciwgaXB2NkVuZCkpKSB7Ci0gICAgICAgICAgICBzZXJpYWxpemVJUHY2KGFk
ZHJlc3MudmFsdWUoKSwgbV9hc2NpaUJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RF
bmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjYoYWRk
cmVzcy52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IGN1cnJlbnRQb3Np
dGlvbihpdGVyYXRvcik7CiAgICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRFbmQoKSkgewogICAg
ICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAgICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRF
bmQoKSAmJiAqaXB2NkVuZCA9PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICAgKytpcHY2RW5k
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGlwdjZFbmQpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBjdXJyZW50UG9z
aXRpb24oaXRlcmF0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTQwLDEwICsyMTcxLDEwIEBAIGJv
b2wgVVJMUGFyc2VyOjpwYXJzZUhvc3RBbmRQb3J0KENvZGVQb2kKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNl
SVB2NEhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oaG9zdEl0ZXJhdG9yLCBp
dGVyYXRvcikpKSB7Ci0gICAgICAgICAgICBzZXJpYWxpemVJUHY0KGFkZHJlc3MudmFsdWUoKSwg
bV9hc2NpaUJ1ZmZlcik7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpKTsK
KyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRvcik7
CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICAgICAgICAgIG1f
dXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOworICAgICAgICAgICAgICAgIG1f
dXJsLm1fcG9ydEVuZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRvcik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2l0ZXJhdG9yOwpA
QCAtMjE1MywxMyArMjE4NCwxMyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0QW5kUG9ydChD
b2RlUG9pCiAgICAgICAgICAgICBpZiAoIWlzVGFiT3JOZXdsaW5lKCpob3N0SXRlcmF0b3IpKQog
ICAgICAgICAgICAgICAgIGFwcGVuZFRvQVNDSUlCdWZmZXIodG9BU0NJSUxvd2VyKCpob3N0SXRl
cmF0b3IpKTsKICAgICAgICAgfQotICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKKyAgICAgICAgbV91cmwubV9ob3N0RW5kID0gY3VycmVudFBvc2l0aW9uKGl0
ZXJhdG9yKTsKICAgICAgICAgaWYgKCFob3N0SXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICAg
ICAgQVNTRVJUKCpob3N0SXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgICAgIGluY3JlbWVudEl0
ZXJhdG9yU2tpcHBpbmdUYWJBbmROZXdMaW5lKGhvc3RJdGVyYXRvcik7CiAgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VQb3J0KGhvc3RJdGVyYXRvcik7CiAgICAgICAgIH0KLSAgICAgICAgbV91cmwu
bV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgIG1fdXJsLm1fcG9ydEVu
ZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRvcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKQEAgLTIxODYsMTAgKzIyMTcsMTAgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9z
dEFuZFBvcnQoQ29kZVBvaQogICAgIGNvbnN0IExDaGFyKiBhc2NpaURvbWFpbkNoYXJhY3RlcnMg
PSBhc2NpaURvbWFpblZhbHVlLmRhdGEoKTsKIAogICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJz
ZUlQdjRIb3N0KENvZGVQb2ludEl0ZXJhdG9yPExDaGFyPihhc2NpaURvbWFpblZhbHVlLmJlZ2lu
KCksIGFzY2lpRG9tYWluVmFsdWUuZW5kKCkpKSkgewotICAgICAgICBzZXJpYWxpemVJUHY0KGFk
ZHJlc3MudmFsdWUoKSwgbV9hc2NpaUJ1ZmZlcik7Ci0gICAgICAgIG1fdXJsLm1faG9zdEVuZCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOworICAgICAgICBzZXJpYWxpemVJUHY0KGFkZHJlc3MudmFs
dWUoKSk7CisgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRv
cik7CiAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7Ci0gICAgICAgICAgICBtX3VybC5t
X3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgIG1fdXJsLm1fcG9y
dEVuZCA9IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICArK2l0ZXJhdG9yOwpAQCAtMjE5NywxMyArMjIyOCwxMyBA
QCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0QW5kUG9ydChDb2RlUG9pCiAgICAgfQogCiAgICAg
YXBwZW5kVG9BU0NJSUJ1ZmZlcihhc2NpaURvbWFpbkNoYXJhY3RlcnMsIGFzY2lpRG9tYWluVmFs
dWUuc2l6ZSgpKTsKLSAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsK
KyAgICBtX3VybC5tX2hvc3RFbmQgPSBjdXJyZW50UG9zaXRpb24oaXRlcmF0b3IpOwogICAgIGlm
ICghaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBBU1NFUlQoKml0ZXJhdG9yID09ICc6Jyk7
CiAgICAgICAgIGluY3JlbWVudEl0ZXJhdG9yU2tpcHBpbmdUYWJBbmROZXdMaW5lKGl0ZXJhdG9y
KTsKICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAgfQotICAgIG1fdXJs
Lm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOworICAgIG1fdXJsLm1fcG9ydEVuZCA9
IGN1cnJlbnRQb3NpdGlvbihpdGVyYXRvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDYzMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiAr
NTYsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXJsSXNTcGVjaWFsIHsgZmFsc2UgfTsKICAg
ICBib29sIG1faG9zdEhhc1BlcmNlbnRPck5vbkFTQ0lJIHsgZmFsc2UgfTsKICAgICBTdHJpbmcg
bV9pbnB1dFN0cmluZzsKKyAgICBjb25zdCB2b2lkKiBtX2lucHV0QmVnaW4geyBudWxscHRyIH07
CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc3RhcnQgb3V0IGFzIGZhbHNlIGFuZCBvbmx5
IGNoYW5nZSB0byB0cnVlIHdoZW4gd2Ugc2VlIGEgc3ludGF4IGVycm9yIG9uY2Ugc3ludGF4IGVy
cm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLgorICAgIGJvb2wgbV9zZWVuU3ludGF4RXJyb3Ig
eyB0cnVlIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUqLCBjb25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVS
TCYsIGNvbnN0IFRleHRFbmNvZGluZyYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgcGFyc2VBdXRob3JpdHkoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlw
ZT4pOwpAQCAtNjgsNiArNzIsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8
Q2hhcmFjdGVyVHlwZT4pOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgc2hvdWxkQ29weUZpbGVVUkwoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4pOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgY2hlY2tXaW5kb3dzRHJp
dmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzaXplX3QgY3VycmVudFBvc2l0aW9uKGNvbnN0IENv
ZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VW5zaWduZWRJbnRlZ2VyVHlwZT4gdm9pZCBhcHBlbmROdW1iZXJUb0FTQ0lJQnVmZmVyKFVuc2ln
bmVkSW50ZWdlclR5cGUpOwogICAgIHRlbXBsYXRlPGJvb2woKmlzSW5Db2RlU2V0KShVQ2hhcjMy
KT4gdm9pZCB1dGY4UGVyY2VudEVuY29kZShVQ2hhcjMyKTsKICAgICB2b2lkIHV0ZjhRdWVyeUVu
Y29kZShVQ2hhcjMyKTsKICAgICB2b2lkIHBlcmNlbnRFbmNvZGVCeXRlKHVpbnQ4X3QpOwpAQCAt
NzcsNiArODMsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVuY29kZVF1ZXJ5KGNvbnN0IFZlY3Rv
cjxVQ2hhcj4mIHNvdXJjZSwgY29uc3QgVGV4dEVuY29kaW5nJik7CiAgICAgdm9pZCBjb3B5QVND
SUlTdHJpbmdVbnRpbChjb25zdCBTdHJpbmcmLCBzaXplX3QgbGVuZ3RoSWY4Qml0LCBzaXplX3Qg
bGVuZ3RoSWYxNkJpdCk7CiAKKyAgICB1c2luZyBJUHY0QWRkcmVzcyA9IHVpbnQzMl90OworICAg
IHZvaWQgc2VyaWFsaXplSVB2NChJUHY0QWRkcmVzcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8SVB2NEFkZHJlc3M+IHBhcnNlSVB2NEhvc3QoQ29kZVBv
aW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4pOworICAgIHVzaW5nIElQdjZBZGRyZXNzID0gc3Rk
OjphcnJheTx1aW50MTZfdCwgOD47CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gT3B0aW9uYWw8SVB2NkFkZHJlc3M+IHBhcnNlSVB2Nkhvc3QoQ29kZVBvaW50SXRlcmF0b3I8
Q2hhcmFjdGVyVHlwZT4pOworICAgIHZvaWQgc2VyaWFsaXplSVB2NlBpZWNlKHVpbnQxNl90IHBp
ZWNlKTsKKyAgICB2b2lkIHNlcmlhbGl6ZUlQdjYoVVJMUGFyc2VyOjpJUHY2QWRkcmVzcyk7CisK
ICAgICBlbnVtIGNsYXNzIFVSTFBhcnQ7CiAgICAgdm9pZCBjb3B5VVJMUGFydHNVbnRpbChjb25z
dCBVUkwmIGJhc2UsIFVSTFBhcnQpOwogICAgIHN0YXRpYyBzaXplX3QgdXJsTGVuZ3RoVW50aWxQ
YXJ0KGNvbnN0IFVSTCYsIFVSTFBhcnQpOwo=
</data>
<flag name="review"
          id="312921"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>