<?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>178062</bug_id>
          
          <creation_ts>2017-10-07 23:41:08 -0700</creation_ts>
          <short_desc>[JSC] Use fastJoin in Array#toString</short_desc>
          <delta_ts>2017-11-15 13:10:17 -0800</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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1358041</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-07 23:41:08 -0700</bug_when>
    <thetext>[JSC] Use fastJoin in Array#toString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358043</commentid>
    <comment_count>1</comment_count>
      <attachid>323124</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-07 23:52:20 -0700</bug_when>
    <thetext>Created attachment 323124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358044</commentid>
    <comment_count>2</comment_count>
      <attachid>323125</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-07 23:53:45 -0700</bug_when>
    <thetext>Created attachment 323125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358046</commentid>
    <comment_count>3</comment_count>
      <attachid>323125</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-08 00:10:11 -0700</bug_when>
    <thetext>Comment on attachment 323125
Patch

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

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:672
&gt; +        if (element.isUndefinedOrNull())
&gt; +            continue;

Why does the ENABLE(INTL) version put in extra commas, but the !ENABLE(INTL) version doesn’t? There is no stringJoiner.appendEmptyString() here. Does your patch change behavior in one of the two cases? Do we have test coverage?

Can we put ENABLE(INTL) around less of the function? It seems like the code is *almost* identical. There are only three differences.

&gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:41
&gt; +    void appendInt32(VM&amp;, int32_t);
&gt; +    void appendDouble(VM&amp;, double);

I probably would have used overloading and named these both appendNumber or appendNumeral. I believe that if someone used it with any other type besides int32_t and double, it would not compile because the overloading would be ambiguous. That’s how the underlying numericStrings.add works.

But your way is clear and explicit so I am OK with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358051</commentid>
    <comment_count>4</comment_count>
      <attachid>323125</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-08 00:21:21 -0700</bug_when>
    <thetext>Comment on attachment 323125
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:672
&gt;&gt; +            continue;
&gt; 
&gt; Why does the ENABLE(INTL) version put in extra commas, but the !ENABLE(INTL) version doesn’t? There is no stringJoiner.appendEmptyString() here. Does your patch change behavior in one of the two cases? Do we have test coverage?
&gt; 
&gt; Can we put ENABLE(INTL) around less of the function? It seems like the code is *almost* identical. There are only three differences.

On reflection, obviously the patch doesn’t change anything because this is toLocaleString, not toString, but still this is strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363243</commentid>
    <comment_count>5</comment_count>
      <attachid>323125</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-23 04:39:44 -0700</bug_when>
    <thetext>Comment on attachment 323125
Patch

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

Thank you!

&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:672
&gt;&gt;&gt; +            continue;
&gt;&gt; 
&gt;&gt; Why does the ENABLE(INTL) version put in extra commas, but the !ENABLE(INTL) version doesn’t? There is no stringJoiner.appendEmptyString() here. Does your patch change behavior in one of the two cases? Do we have test coverage?
&gt;&gt; 
&gt;&gt; Can we put ENABLE(INTL) around less of the function? It seems like the code is *almost* identical. There are only three differences.
&gt; 
&gt; On reflection, obviously the patch doesn’t change anything because this is toLocaleString, not toString, but still this is strange.

Yeah, this patch does not change toLocaleString. But right, it looks incorrect.
According to the spec[1], we should take ENABLE(INTL) version&apos;s behavior.
I&apos;ll clean up this part and add a test.
[1]: https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring

&gt;&gt; Source/JavaScriptCore/runtime/JSStringJoiner.h:41
&gt;&gt; +    void appendDouble(VM&amp;, double);
&gt; 
&gt; I probably would have used overloading and named these both appendNumber or appendNumeral. I believe that if someone used it with any other type besides int32_t and double, it would not compile because the overloading would be ambiguous. That’s how the underlying numericStrings.add works.
&gt; 
&gt; But your way is clear and explicit so I am OK with it.

OK, I&apos;ll use overloading version since the underlying numericStrings.add follows this. I&apos;ll change them to `appendNumber`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363244</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-10-23 04:50:32 -0700</bug_when>
    <thetext>Committed r223834: &lt;https://trac.webkit.org/changeset/223834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372380</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 13:10:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/35568901&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323124</attachid>
            <date>2017-10-07 23:52:20 -0700</date>
            <delta_ts>2017-10-07 23:53:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178062-20171008155219.patch</filename>
            <type>text/plain</type>
            <size>21364</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MGMxMmQzNWUyNTc5ZjUwYjlkNGNmZjI5MmZjMTE4MzNkNzUzYzhmLi43YTM3YWVkMzg5NzNmYmI4
NWZlZGNkOGMxNzgxNDFiOTlhOGUyMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNy0xMC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgZmFzdEpvaW4gaW4gQXJyYXkjdG9TdHJpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA2MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFycmF5I3RvU3Ry
aW5nKCkncyBmYXN0IHBhdGggdXNlcyBvcmlnaW5hbCBqb2luIG9wZXJhdGlvbi4KKyAgICAgICAg
QnV0IHRoaXMgc2hvdWxkIHVzZSBmYXN0Sm9pbiBpZiBwb3NzaWJsZS4KKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIGEgZmFzdCBwYXRoIHVzaW5nIGZhc3RKb2luIGluIEFycmF5I3RvU3RyaW5nLgor
ICAgICAgICBBbmQgd2UgYWxzbyBleHRlbmQgZmFzdEpvaW4gdG8gcGVyZm9ybSBmYXN0IGpvaW5p
bmcgZm9yIGludDMyCisgICAgICAgIGFycmF5cy4KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmUgICAgICAgICAgICAgICAgICBwYXRjaGVkCisK
KyAgICAgICAgZG91YmxlLWFycmF5LXRvLXN0cmluZyAgICAgICAgICAxMjYuNjE1NystNS44NjI1
ICAgICBeICAgIDEwMy43MzQzKy00LjQ5NjggICAgICAgIF4gZGVmaW5pdGVseSAxLjIyMDZ4IGZh
c3RlcgorICAgICAgICBpbnQzMi1hcnJheS10by1zdHJpbmcgICAgICAgICAgICA2NC43NzkyKy0y
LjY1MjQgICAgICAgICAgIDYxLjIzOTArLTIuMTc0OSAgICAgICAgICBtaWdodCBiZSAxLjA1Nzh4
IGZhc3RlcgorICAgICAgICBjb250aWd1b3VzLWFycmF5LXRvLXN0cmluZyAgICAgICA2Mi42MjI0
Ky0yLjYzODggICAgIF4gICAgIDU2Ljk4OTkrLTIuMDg1MiAgICAgICAgXiBkZWZpbml0ZWx5IDEu
MDk4OHggZmFzdGVyCisKKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmYXN0Sm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
Sm9pbmVyOjphcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Z0pvaW5lcjo6YXBwZW5kSW50MzIpOgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pvaW5lcjo6YXBw
ZW5kRG91YmxlKToKKwogMjAxNy0xMC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIE9jdGFuZS9zcGxheSBjYW4gbGVhayBtZW1vcnkgZHVlIHRvIHN0cmF5IHBv
aW50ZXJzIG9uIHRoZSBzdGFjayB3aGVuIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXgg
NWUyODY3Y2E4YzE3NzBiMjc4ZTVlMWRlNjI4NjI4M2NhNDAwYzlkZS4uNDYzMTlmMDYxMjgwYjg3
OTNiMjQ4Mjc1YjBmYjZhOWMyOGU4M2ZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMC0w
NyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbSlND
XSBVc2UgZmFzdEpvaW4gaW4gQXJyYXkjdG9TdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgYml0IGNsZWFuaW5nIHVwIHRvIHVzZSBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcnMgaW5zdGVhZCBvZgorICAgICAgICB1c2luZyBmb3ItbG9vcCBkaXJlY3Rs
eS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaDoKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQgY29uc3QpOgorCiAyMDE3LTEwLTA2
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIyNzkxIGFuZCByMjIyODczLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IDU4ZDFmZGMwYTlh
NzZlNzcyZTA4OWQyODc5YmM3ZTExZDYxMmVlNTguLjI1YjE4NDMwMjRlMDM1YWFmYjdlMDA3OTI2
Mzc5OTYwOWM1ZGI1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJTdHJpbmdSZWN1
cnNpb25DaGVja2VyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMzgwLDEyOSArMzgxLDYgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmUK
ICAgICB9CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7Ci0KLSAg
ICAvLyAxLiBMZXQgYXJyYXkgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRo
ZSB0aGlzIHZhbHVlLgotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIAotICAgIC8vIDIuIExldCBmdW5jIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0
aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYXJyYXkgd2l0aCBhcmd1bWVudCAiam9pbiIu
Ci0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IEpTVmFsdWUodGhpc09iamVjdCkuZ2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPmpvaW4pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotCi0gICAgLy8gMy4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxz
ZSwgdGhlbiBsZXQgZnVuYyBiZSB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kIE9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmcgKDE1LjIuNC4yKS4KLSAgICBib29sIGN1c3RvbUpvaW5DYXNlID0g
ZmFsc2U7Ci0gICAgaWYgKCFmdW5jdGlvbi5pc0NlbGwoKSkKLSAgICAgICAgY3VzdG9tSm9pbkNh
c2UgPSB0cnVlOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIGN1c3RvbUpvaW5DYXNlID0gdHJ1ZTsKLQotICAgIGlm
IChVTkxJS0VMWShjdXN0b21Kb2luQ2FzZSkpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhl
YywgIltvYmplY3QgIiwgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5jbGFzc05hbWUodGhp
c09iamVjdCksICJdIikpOwotICAgIH0KLQotICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGluZyBh
cnJheSBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCi0gICAg
aWYgKCFpc0pTQXJyYXkodGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3Qg
fHwgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikgewotICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCAqdm0uZW1w
dHlMaXN0KSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGlzSlNBcnJheSh0aGlzVmFsdWUpKTsKLSAg
ICBKU0FycmF5KiB0aGlzQXJyYXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7Ci0KLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0aGlzQXJyYXktPmxlbmd0aCgpOwotCi0gICAgU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlciBjaGVja2VyKGV4ZWMsIHRoaXNBcnJheSk7Ci0gICAgRVhDRVBUSU9OX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwotICAgIGlmIChK
U1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKLQotICAgIEpT
U3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNB
cnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwotICAgICAgICBpZiAoIWVsZW1lbnQpIHsKLSAg
ICAgICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhl
YykpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwot
Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0KLSAgICBTdHJpbmdSZWN1cnNp
b25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgRVhDRVBUSU9OX0FTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwotICAg
IGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUo
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKLQot
ICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCi0jaWYgRU5B
QkxFKElOVEwpCi0gICAgQXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRo
aXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0g
ZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgICAg
ICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBl
bGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgZWxlbWVudCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgfQotI2Vsc2Ug
Ly8gIUVOQUJMRShJTlRMKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVj
LCBpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24gPSBlbGVtZW50
LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZyk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShj
b252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICAgICAgaWYgKGNhbGxUeXBlICE9IENh
bGxUeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJz
aW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgKnZtLmVtcHR5TGlzdCk7
Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICAgICAgfQotICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgfQotI2VuZGlmIC8vICFFTkFCTEUoSU5UTCkKLQotICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5qb2luKCpleGVjKSk7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hvbGUoZG91YmxlIHZhbHVlKQogewogICAgIHJldHVy
biBzdGQ6OmlzbmFuKHZhbHVlKTsKQEAgLTU5NCwxMCArNDcyLDMzIEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogdGhpc09iamVjdCwg
U3RyaW5nVmllCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKICAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1dHRlcmZseSgp
OwotICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFy
YXRvciwgbGVuZ3RoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAg
ICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBk
YXRhW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKExJS0VMWSh2YWx1ZSkpCisgICAgICAgICAg
ICAgICAgam9pbmVyLmFwcGVuZEludDMyKHZtLCB2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIHRoaXNP
YmplY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKKyAgICAg
ICAgICAgICAgICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJu
IGpvaW5lci5qb2luKHN0YXRlKTsKKyAgICB9CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0
dGVyZmx5KCk7CisgICAgICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGlj
TGVuZ3RoKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpv
aW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwpAQCAtNjIxLDcgKzUyMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogdGhpc09iamVjdCwgU3RyaW5n
VmllCiAgICAgfQogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAgICAgIGlm
IChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpAQCAtNjI5LDggKzUz
MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBK
U09iamVjdCogdGhpc09iamVjdCwgU3RyaW5nVmllCiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRv
QmVPSyA9IGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGRhdGFbaV07Ci0gICAgICAgICAgICBp
ZiAoIWlzSG9sZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZChzdGF0ZSwg
anNEb3VibGVOdW1iZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoIWlzSG9sZSh2
YWx1ZSkpKQorICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmREb3VibGUodm0sIHZhbHVlKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVP
SykgewogICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBl
KHZtLCB0aGlzT2JqZWN0KSkKQEAgLTY1OCw2ICs1NTksMTM1IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogdGhpc09iamVjdCwgU3Ry
aW5nVmllCiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKIH0KIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKKworICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRoaXMgdmFsdWUuCisgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgCisgICAgLy8gMi4gTGV0
IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
SlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+am9pbik7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICAv
LyAzLiBJZiBJc0NhbGxhYmxlKGZ1bmMpIGlzIGZhbHNlLCB0aGVuIGxldCBmdW5jIGJlIHRoZSBz
dGFuZGFyZCBidWlsdC1pbiBtZXRob2QgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoMTUuMi40
LjIpLgorICAgIGJvb2wgY3VzdG9tSm9pbkNhc2UgPSBmYWxzZTsKKyAgICBpZiAoIWZ1bmN0aW9u
LmlzQ2VsbCgpKQorICAgICAgICBjdXN0b21Kb2luQ2FzZSA9IHRydWU7CisgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKKyAgICAgICAg
Y3VzdG9tSm9pbkNhc2UgPSB0cnVlOworCisgICAgaWYgKFVOTElLRUxZKGN1c3RvbUpvaW5DYXNl
KSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiW29iamVjdCAiLCB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmNsYXNzTmFtZSh0aGlzT2JqZWN0KSwgIl0iKSk7CisgICAgfQor
CisgICAgLy8gNC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50
ZXJuYWwgbWV0aG9kIG9mIGZ1bmMgcHJvdmlkaW5nIGFycmF5IGFzIHRoZSB0aGlzIHZhbHVlIGFu
ZCBhbiBlbXB0eSBhcmd1bWVudHMgbGlzdC4KKyAgICBpZiAoIWlzSlNBcnJheSh0aGlzT2JqZWN0
KSB8fCBjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SG9zdCB8fCBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24gIT0gYXJyYXlQcm90b0Z1bmNKb2luKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsICp2bS5lbXB0eUxpc3QpKTsKKyAgICB9CisKKyAgICBB
U1NFUlQoaXNKU0FycmF5KHRoaXNWYWx1ZSkpOworICAgIEpTQXJyYXkqIHRoaXNBcnJheSA9IGFz
QXJyYXkodGhpc1ZhbHVlKTsKKworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNBcnJheS0+bGVu
Z3RoKCk7CisKKyAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc0Fy
cmF5KTsKKyAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2Vy
LmVhcmx5UmV0dXJuVmFsdWUoKSk7CisgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9
IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGVhcmx5UmV0dXJuVmFsdWUpOworCisgICAgaWYgKExJS0VMWShjYW5Vc2VGYXN0Sm9pbih0
aGlzQXJyYXkpKSkgeworICAgICAgICBjb25zdCBMQ2hhciBjb21tYSA9ICcsJzsKKyAgICAgICAg
c2NvcGUucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZhc3RKb2lu
KCpleGVjLCB0aGlzQXJyYXksIHsgJmNvbW1hLCAxIH0sIGxlbmd0aCkpOworICAgIH0KKworICAg
IEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRo
aXNBcnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOworICAgICAgICBpZiAoIWVsZW1lbnQpIHsK
KyAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAg
ICB9CisgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBz
Y29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigq
ZXhlYykpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
OworCisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZXhlYywgdGhpc09iamVjdCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBTdHJpbmdSZWN1
cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVjdCk7CisgICAgRVhDRVBUSU9OX0FT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwor
ICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFs
dWUoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsK
KworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisjaWYg
RU5BQkxFKElOVEwpCisgICAgQXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9
IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9u
ID0gZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAg
ICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgZWxlbWVudCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgfQorI2Vs
c2UgLy8gIUVOQUJMRShJTlRMKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChl
eGVjLCBpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CisgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24gPSBlbGVt
ZW50LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZyk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0
YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlICE9
IENhbGxUeXBlOjpOb25lKSB7CisgICAgICAgICAgICBlbGVtZW50ID0gY2FsbChleGVjLCBjb252
ZXJzaW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZWxlbWVudCwgKnZtLmVtcHR5TGlz
dCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVt
ZW50KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CisgICAgfQorI2VuZGlmIC8vICFFTkFCTEUoSU5UTCkKKworICAgIHNjb3BlLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5qb2luKCpleGVjKSk7
Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKaW5kZXggZjIyZmZkMTljZDBh
NWE3NGNiMTg3ZmIzNThlYWQ4MDQ2YjFmZGEwNS4uZDdhOWE0ZjcwNDM1ZWRiYzM2ODc2MGU1ODc1
MTFkNDJhNTMwYjA0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdKb2luZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0pvaW5lci5oCkBAIC0zNyw2ICszNyw4IEBAIGNsYXNzIEpTU3RyaW5nSm9pbmVyIHsKICAg
ICB+SlNTdHJpbmdKb2luZXIoKTsKIAogICAgIHZvaWQgYXBwZW5kKEV4ZWNTdGF0ZSYsIEpTVmFs
dWUpOworICAgIHZvaWQgYXBwZW5kSW50MzIoVk0mLCBpbnQzMl90KTsKKyAgICB2b2lkIGFwcGVu
ZERvdWJsZShWTSYsIGRvdWJsZSk7CiAgICAgYm9vbCBhcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMo
RXhlY1N0YXRlJiwgSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRFbXB0eVN0cmluZygpOwogCkBA
IC0xMjEsMTEgKzEyMywxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmdKb2luZXI6OmFw
cGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhFeGVjU3RhdGUmIHN0YXRlLCBKUwogICAgIH0KIAogICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgYXBwZW5kOEJpdChzdGF0ZS52bSgpLm51
bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZS5hc0ludDMyKCkpKTsKKyAgICAgICAgYXBwZW5kSW50MzIo
c3RhdGUudm0oKSwgdmFsdWUuYXNJbnQzMigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKSB7Ci0gICAgICAgIGFwcGVuZDhCaXQoc3RhdGUu
dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNEb3VibGUoKSkpOworICAgICAgICBhcHBl
bmREb3VibGUoc3RhdGUudm0oKSwgdmFsdWUuYXNEb3VibGUoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAodmFsdWUuaXNUcnVlKCkpIHsKQEAgLTE0OSw0ICsxNTEsMTQg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmQoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB9CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1N0
cmluZ0pvaW5lcjo6YXBwZW5kSW50MzIoVk0mIHZtLCBpbnQzMl90IHZhbHVlKQoreworICAgIGFw
cGVuZDhCaXQodm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKU1N0cmluZ0pvaW5lcjo6YXBwZW5kRG91YmxlKFZNJiB2bSwgZG91YmxlIHZhbHVl
KQoreworICAgIGFwcGVuZDhCaXQodm0ubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCAyOWQwNDg3
OWEyYjU3YjA3YWY4ODhkMGVjODJhZTE4YzA3YjY0OTI3Li4yYTIyNTVhNmM1MjlmNDFiNzQ3ZDBk
NTE1ZDlmMTQ1ZTBmZjRlMmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtNDUxLDIy
ICs0NTEsMTYgQEAgaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Y29udGFpbnMoVUNoYXIgY2hhcmFj
dGVyKSBjb25zdAogaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNv
bnZlcnQoTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogewogICAgIEFTU0VSVChpczhCaXQoKSk7
Ci0gICAgYXV0byBjaGFyYWN0ZXJzOCA9IHRoaXMtPmNoYXJhY3RlcnM4KCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGRlc3RpbmF0aW9uW2ld
ID0gY2hhcmFjdGVyczhbaV07CisgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGRlc3RpbmF0aW9u
LCBjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCk7CiB9CiAKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6
OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsK
ICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXJzOCA9IHRoaXMtPmNo
YXJhY3RlcnM4KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsg
KytpKQotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBjaGFyYWN0ZXJzOFtpXTsKKyAgICAg
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzOCgpLCBtX2xl
bmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byBjaGFyYWN0ZXJzMTYgPSB0
aGlzLT5jaGFyYWN0ZXJzMTYoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5n
dGg7ICsraSkKLSAgICAgICAgZGVzdGluYXRpb25baV0gPSBjaGFyYWN0ZXJzMTZbaV07CisgICAg
U3RyaW5nSW1wbDo6Y29weUNoYXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzMTYoKSwgbV9sZW5n
dGgpOwogfQogCiBpbmxpbmUgU3RyaW5nVmlldzo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOjpVcGNv
bnZlcnRlZENoYXJhY3RlcnMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAwZDkwNjhhNThjYTNj
MzlhOTFjYTgwM2VlZGRjNzUzNTlhYTdjMjM2Li5jMTFmMTQ2MGVjNzY0N2FlZGQ4NzQwMjM1MDkz
YzhkMzI4MjMwNGNmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDE3LTEwLTA3ICBZdXN1a2UgU3V6dWtpICA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCisgICAgICAgIFtKU0NdIFVzZSBmYXN0Sm9pbiBpbiBB
cnJheSN0b1N0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc4MDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvY29udGlndW91cy1hcnJheS10by1zdHJpbmcuanM6IEFk
ZGVkLgorICAgICAgICAodGFyZ2V0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZG91Ymxl
LWFycmF5LXRvLXN0cmluZy5qczogQWRkZWQuCisgICAgICAgICh0YXJnZXQpOgorICAgICAgICAq
IG1pY3JvYmVuY2htYXJrcy9pbnQzMi1hcnJheS10by1zdHJpbmcuanM6IEFkZGVkLgorICAgICAg
ICAodGFyZ2V0KToKKworMjAxNy0xMC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KKwogICAgICAgICBgYXN5bmNgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHVzZWQgYXMg
YW4gaW1wb3J0ZWQgYmluZGluZyBuYW1lCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzY1NzMKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvY29udGlndW91cy1hcnJheS10by1zdHJpbmcuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9jb250aWd1b3VzLWFycmF5LXRvLXN0cmluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmU2ZGNhYTE0
NWE5YjJiNmNiMWVlMjE3YTA3MmMyNzg2ZjQ2NGY3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvY29udGlndW91cy1hcnJheS10by1zdHJpbmcuanMKQEAgLTAsMCAr
MSwxMiBAQAordmFyIGFycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpCisg
ICAgYXJyYXkucHVzaChgJHtpfWApOworCitmdW5jdGlvbiB0YXJnZXQoYXJyYXkpCit7CisgICAg
cmV0dXJuIGFycmF5LnRvU3RyaW5nKCk7Cit9Citub0lubGluZSh0YXJnZXQpOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRhcmdldChhcnJheSk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kb3VibGUtYXJyYXktdG8tc3RyaW5nLmpzIGIvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZG91YmxlLWFycmF5LXRvLXN0cmluZy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YTQyMGRkMWM0MjNiMTRiYjNhYjViOTY4YjA4N2RmNmM5NWY2MGVjCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZG91YmxlLWFycmF5LXRvLXN0cmluZy5qcwpAQCAt
MCwwICsxLDEyIEBACit2YXIgYXJyYXkgPSBbXTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjA7ICsr
aSkKKyAgICBhcnJheS5wdXNoKGkgKiAwLjEpOworCitmdW5jdGlvbiB0YXJnZXQoYXJyYXkpCit7
CisgICAgcmV0dXJuIGFycmF5LnRvU3RyaW5nKCk7Cit9Citub0lubGluZSh0YXJnZXQpOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRhcmdldChhcnJheSk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9pbnQzMi1hcnJheS10by1zdHJpbmcuanMgYi9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9pbnQzMi1hcnJheS10by1zdHJpbmcuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzA0OGM2YmNjNDJhZTJlM2FlMTM2YjM5MjI5NmFhN2U1MzJkOTU3YwotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2ludDMyLWFycmF5LXRvLXN0cmluZy5qcwpA
QCAtMCwwICsxLDEyIEBACit2YXIgYXJyYXkgPSBbXTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjA7
ICsraSkKKyAgICBhcnJheS5wdXNoKGkpOworCitmdW5jdGlvbiB0YXJnZXQoYXJyYXkpCit7Cisg
ICAgcmV0dXJuIGFycmF5LnRvU3RyaW5nKCk7Cit9Citub0lubGluZSh0YXJnZXQpOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRhcmdldChhcnJheSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323125</attachid>
            <date>2017-10-07 23:53:45 -0700</date>
            <delta_ts>2017-10-08 00:10:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178062-20171008155344.patch</filename>
            <type>text/plain</type>
            <size>21200</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MGMxMmQzNWUyNTc5ZjUwYjlkNGNmZjI5MmZjMTE4MzNkNzUzYzhmLi43YTM3YWVkMzg5NzNmYmI4
NWZlZGNkOGMxNzgxNDFiOTlhOGUyMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNy0xMC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgZmFzdEpvaW4gaW4gQXJyYXkjdG9TdHJpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA2MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFycmF5I3RvU3Ry
aW5nKCkncyBmYXN0IHBhdGggdXNlcyBvcmlnaW5hbCBqb2luIG9wZXJhdGlvbi4KKyAgICAgICAg
QnV0IHRoaXMgc2hvdWxkIHVzZSBmYXN0Sm9pbiBpZiBwb3NzaWJsZS4KKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIGEgZmFzdCBwYXRoIHVzaW5nIGZhc3RKb2luIGluIEFycmF5I3RvU3RyaW5nLgor
ICAgICAgICBBbmQgd2UgYWxzbyBleHRlbmQgZmFzdEpvaW4gdG8gcGVyZm9ybSBmYXN0IGpvaW5p
bmcgZm9yIGludDMyCisgICAgICAgIGFycmF5cy4KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmUgICAgICAgICAgICAgICAgICBwYXRjaGVkCisK
KyAgICAgICAgZG91YmxlLWFycmF5LXRvLXN0cmluZyAgICAgICAgICAxMjYuNjE1NystNS44NjI1
ICAgICBeICAgIDEwMy43MzQzKy00LjQ5NjggICAgICAgIF4gZGVmaW5pdGVseSAxLjIyMDZ4IGZh
c3RlcgorICAgICAgICBpbnQzMi1hcnJheS10by1zdHJpbmcgICAgICAgICAgICA2NC43NzkyKy0y
LjY1MjQgICAgICAgICAgIDYxLjIzOTArLTIuMTc0OSAgICAgICAgICBtaWdodCBiZSAxLjA1Nzh4
IGZhc3RlcgorICAgICAgICBjb250aWd1b3VzLWFycmF5LXRvLXN0cmluZyAgICAgICA2Mi42MjI0
Ky0yLjYzODggICAgIF4gICAgIDU2Ljk4OTkrLTIuMDg1MiAgICAgICAgXiBkZWZpbml0ZWx5IDEu
MDk4OHggZmFzdGVyCisKKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmYXN0Sm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
Sm9pbmVyOjphcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Z0pvaW5lcjo6YXBwZW5kSW50MzIpOgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pvaW5lcjo6YXBw
ZW5kRG91YmxlKToKKwogMjAxNy0xMC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIE9jdGFuZS9zcGxheSBjYW4gbGVhayBtZW1vcnkgZHVlIHRvIHN0cmF5IHBv
aW50ZXJzIG9uIHRoZSBzdGFjayB3aGVuIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXgg
NWUyODY3Y2E4YzE3NzBiMjc4ZTVlMWRlNjI4NjI4M2NhNDAwYzlkZS4uNDYzMTlmMDYxMjgwYjg3
OTNiMjQ4Mjc1YjBmYjZhOWMyOGU4M2ZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMC0w
NyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbSlND
XSBVc2UgZmFzdEpvaW4gaW4gQXJyYXkjdG9TdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgYml0IGNsZWFuaW5nIHVwIHRvIHVzZSBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcnMgaW5zdGVhZCBvZgorICAgICAgICB1c2luZyBmb3ItbG9vcCBkaXJlY3Rs
eS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaDoKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQgY29uc3QpOgorCiAyMDE3LTEwLTA2
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIyNzkxIGFuZCByMjIyODczLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCmluZGV4IDU4ZDFmZGMwYTlh
NzZlNzcyZTA4OWQyODc5YmM3ZTExZDYxMmVlNTguLjI3OGY3MWI4MjAxNTg3NjFmZDJhZjQxY2Y1
Njc2MzA0NDE5OWRmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKQEAgLTM4MCwxMjkgKzM4MCw2IEBAIHZvaWQgdW5zaGlmdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVk
IGN1cnJlCiAgICAgfQogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
OwotCi0gICAgLy8gMS4gTGV0IGFycmF5IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb09iamVj
dCBvbiB0aGUgdGhpcyB2YWx1ZS4KLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1
ZS50b09iamVjdChleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICAKLSAgICAvLyAyLiBMZXQgZnVuYyBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGFycmF5IHdpdGggYXJndW1lbnQg
ImpvaW4iLgotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBKU1ZhbHVlKHRoaXNPYmplY3QpLmdldChl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5qb2luKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLQotICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykg
aXMgZmFsc2UsIHRoZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCi0gICAgYm9vbCBjdXN0b21Kb2lu
Q2FzZSA9IGZhbHNlOwotICAgIGlmICghZnVuY3Rpb24uaXNDZWxsKCkpCi0gICAgICAgIGN1c3Rv
bUpvaW5DYXNlID0gdHJ1ZTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlOjpOb25lKQotICAgICAgICBjdXN0b21Kb2luQ2FzZSA9IHRydWU7Ci0K
LSAgICBpZiAoVU5MSUtFTFkoY3VzdG9tSm9pbkNhc2UpKSB7Ci0gICAgICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICJbb2JqZWN0ICIsIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Y2xhc3NO
YW1lKHRoaXNPYmplY3QpLCAiXSIpKTsKLSAgICB9Ci0KLSAgICAvLyA0LiBSZXR1cm4gdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgZnVuYyBwcm92
aWRpbmcgYXJyYXkgYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFuIGVtcHR5IGFyZ3VtZW50cyBsaXN0
LgotICAgIGlmICghaXNKU0FycmF5KHRoaXNPYmplY3QpIHx8IGNhbGxUeXBlICE9IENhbGxUeXBl
OjpIb3N0IHx8IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiAhPSBhcnJheVByb3RvRnVuY0pvaW4p
IHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwg
KnZtLmVtcHR5TGlzdCkpOwotICAgIH0KLQotICAgIEFTU0VSVChpc0pTQXJyYXkodGhpc1ZhbHVl
KSk7Ci0gICAgSlNBcnJheSogdGhpc0FycmF5ID0gYXNBcnJheSh0aGlzVmFsdWUpOwotCi0gICAg
dW5zaWduZWQgbGVuZ3RoID0gdGhpc0FycmF5LT5sZW5ndGgoKTsKLQotICAgIFN0cmluZ1JlY3Vy
c2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzQXJyYXkpOwotICAgIEVYQ0VQVElPTl9BU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKLSAg
ICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVl
KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7Ci0K
LSAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSB0aGlzQXJyYXktPnRyeUdldEluZGV4UXVpY2tseShpKTsKLSAgICAgICAgaWYgKCFlbGVtZW50
KSB7Ci0gICAgICAgICAgICBlbGVtZW50ID0gdGhpc0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgfQotCi0g
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpv
aW4oKmV4ZWMpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKTsKLQotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotCi0gICAgU3RyaW5n
UmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOwotICAgIEVYQ0VQVElP
Tl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgp
KTsKLSAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVy
blZhbHVlKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1
ZSk7Ci0KLSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywgbGVuZ3Ro
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLQot
I2lmIEVOQUJMRShJTlRMKQotICAgIEFyZ0xpc3QgYXJndW1lbnRzKGV4ZWMpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIGlmIChlbGVtZW50Lmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICBlbGVtZW50ID0ganNFbXB0eVN0cmluZyhl
eGVjKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5j
dGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvTG9jYWxlU3RyaW5n
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwot
ICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAgICAg
ICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIH0K
LSNlbHNlIC8vICFFTkFCTEUoSU5UTCkKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoZXhlYywgaSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0g
ZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgICAgIGlmIChjYWxsVHlw
ZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywg
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsICp2bS5lbXB0
eUxpc3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywg
ZWxlbWVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIH0KLSNlbmRpZiAvLyAhRU5BQkxFKElOVEwpCi0KLSAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigqZXhl
YykpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNIb2xlKGRvdWJsZSB2YWx1ZSkKIHsKICAg
ICByZXR1cm4gc3RkOjppc25hbih2YWx1ZSk7CkBAIC01OTQsMTAgKzQ3MSwzMyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNP
YmplY3QsIFN0cmluZ1ZpZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOiB7CiAgICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRl
LCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgp
OworICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gZGF0YVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFkodmFsdWUpKQorICAg
ICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRJbnQzMih2bSwgdmFsdWUuYXNJbnQzMigpKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZt
LCB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7
CisgICAgICAgICAgICAgICAgICAgIGhvbGVzS25vd25Ub0JlT0sgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAg
IHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CisgICAgfQorICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRoaXNPYmpl
Y3QtPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gYnV0dGVyZmx5
LnB1YmxpY0xlbmd0aCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBKU1N0cmluZ0pv
aW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTYyMSw3ICs1MjEsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNPYmplY3Qs
IFN0cmluZ1ZpZQogICAgIH0KICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAg
ICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQorICAgICAgICBpZiAo
VU5MSUtFTFkobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwg
bGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAgLTYy
OSw4ICs1MjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFN0cmluZ1ZpZQogICAgICAgICBib29sIGhvbGVz
S25vd25Ub0JlT0sgPSBmYWxzZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBkYXRhW2ldOwotICAgICAg
ICAgICAgaWYgKCFpc0hvbGUodmFsdWUpKQotICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmQo
c3RhdGUsIGpzRG91YmxlTnVtYmVyKHZhbHVlKSk7CisgICAgICAgICAgICBpZiAoTElLRUxZKCFp
c0hvbGUodmFsdWUpKSkKKyAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRG91YmxlKHZtLCB2
YWx1ZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoIWhvbGVzS25v
d25Ub0JlT0spIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhvbGVzTXVzdEZvcndhcmRUb1By
b3RvdHlwZSh2bSwgdGhpc09iamVjdCkpCkBAIC02NTgsNiArNTU4LDEzNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIFN0cmluZ1ZpZQogICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CiB9CiAKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CisKKyAgICAvLyAxLiBMZXQgYXJyYXkg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRoZSB0aGlzIHZhbHVlLgorICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIAorICAgIC8v
IDIuIExldCBmdW5jIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5h
bCBtZXRob2Qgb2YgYXJyYXkgd2l0aCBhcmd1bWVudCAiam9pbiIuCisgICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IEpTVmFsdWUodGhpc09iamVjdCkuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmpv
aW4pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
CisgICAgLy8gMy4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhlbiBsZXQgZnVuYyBi
ZSB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcg
KDE1LjIuNC4yKS4KKyAgICBib29sIGN1c3RvbUpvaW5DYXNlID0gZmFsc2U7CisgICAgaWYgKCFm
dW5jdGlvbi5pc0NlbGwoKSkKKyAgICAgICAgY3VzdG9tSm9pbkNhc2UgPSB0cnVlOworICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVu
Y3Rpb24sIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCisg
ICAgICAgIGN1c3RvbUpvaW5DYXNlID0gdHJ1ZTsKKworICAgIGlmIChVTkxJS0VMWShjdXN0b21K
b2luQ2FzZSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIltvYmplY3QgIiwgdGhp
c09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5jbGFzc05hbWUodGhpc09iamVjdCksICJdIikpOwor
ICAgIH0KKworICAgIC8vIDQuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2Fs
bF1dIGludGVybmFsIG1ldGhvZCBvZiBmdW5jIHByb3ZpZGluZyBhcnJheSBhcyB0aGUgdGhpcyB2
YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnRzIGxpc3QuCisgICAgaWYgKCFpc0pTQXJyYXkodGhp
c09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3QgfHwgY2FsbERhdGEubmF0aXZl
LmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikgeworICAgICAgICBzY29wZS5yZWxlYXNl
KCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCAqdm0uZW1wdHlMaXN0KSk7CisgICAgfQor
CisgICAgQVNTRVJUKGlzSlNBcnJheSh0aGlzVmFsdWUpKTsKKyAgICBKU0FycmF5KiB0aGlzQXJy
YXkgPSBhc0FycmF5KHRoaXNWYWx1ZSk7CisKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzQXJy
YXktPmxlbmd0aCgpOworCisgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMs
IHRoaXNBcnJheSk7CisgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwg
Y2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOworICAgIGlmIChKU1ZhbHVlIGVhcmx5UmV0dXJu
VmFsdWUgPSBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKKworICAgIGlmIChMSUtFTFkoY2FuVXNlRmFz
dEpvaW4odGhpc0FycmF5KSkpIHsKKyAgICAgICAgY29uc3QgTENoYXIgY29tbWEgPSAnLCc7Cisg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShm
YXN0Sm9pbigqZXhlYywgdGhpc0FycmF5LCB7ICZjb21tYSwgMSB9LCBsZW5ndGgpKTsKKyAgICB9
CisKKyAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB0aGlzQXJyYXktPnRyeUdldEluZGV4UXVpY2tseShpKTsKKyAgICAgICAgaWYgKCFlbGVt
ZW50KSB7CisgICAgICAgICAgICBlbGVtZW50ID0gdGhpc0FycmF5LT5nZXQoZXhlYywgaSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICAgICAgfQorICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgfQor
CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVy
LmpvaW4oKmV4ZWMpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKTsKKworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgU3Ry
aW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGV4ZWMsIHRoaXNPYmplY3QpOworICAgIEVYQ0VQ
VElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1
ZSgpKTsKKyAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJl
dHVyblZhbHVlKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5W
YWx1ZSk7CisKKyAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywgbGVu
Z3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KworI2lmIEVOQUJMRShJTlRMKQorICAgIEFyZ0xpc3QgYXJndW1lbnRzKGV4ZWMpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGVs
ZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIGlmIChlbGVtZW50
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICBlbGVtZW50ID0ganNFbXB0eVN0cmlu
ZyhleGVjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25G
dW5jdGlvbiA9IGVsZW1lbnQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvTG9jYWxlU3Ry
aW5nKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERhdGEp
OworICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CisgICAgICAg
ICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAg
IH0KKyNlbHNlIC8vICFFTkFCTEUoSU5UTCkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0
SW5kZXgoZXhlYywgaSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9u
ID0gZWxlbWVudC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9Mb2NhbGVTdHJpbmcpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAg
ICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0
Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgICAgIGlmIChjYWxs
VHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhl
YywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsICp2bS5l
bXB0eUxpc3QpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhl
YywgZWxlbWVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIH0KKyNlbmRpZiAvLyAhRU5BQkxFKElOVEwpCisKKyAgICBzY29wZS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigq
ZXhlYykpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
Sm9pbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5oCmluZGV4IGYyMmZm
ZDE5Y2QwYTVhNzRjYjE4N2ZiMzU4ZWFkODA0NmIxZmRhMDUuLmQ3YTlhNGY3MDQzNWVkYmMzNjg3
NjBlNTg3NTExZDQyYTUzMGIwNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdKb2luZXIuaApAQCAtMzcsNiArMzcsOCBAQCBjbGFzcyBKU1N0cmluZ0pvaW5l
ciB7CiAgICAgfkpTU3RyaW5nSm9pbmVyKCk7CiAKICAgICB2b2lkIGFwcGVuZChFeGVjU3RhdGUm
LCBKU1ZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZEludDMyKFZNJiwgaW50MzJfdCk7CisgICAgdm9p
ZCBhcHBlbmREb3VibGUoVk0mLCBkb3VibGUpOwogICAgIGJvb2wgYXBwZW5kV2l0aG91dFNpZGVF
ZmZlY3RzKEV4ZWNTdGF0ZSYsIEpTVmFsdWUpOwogICAgIHZvaWQgYXBwZW5kRW1wdHlTdHJpbmco
KTsKIApAQCAtMTIxLDExICsxMjMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nSm9p
bmVyOjphcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMoRXhlY1N0YXRlJiBzdGF0ZSwgSlMKICAgICB9
CiAKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgIGFwcGVuZDhCaXQoc3RhdGUu
dm0oKS5udW1lcmljU3RyaW5ncy5hZGQodmFsdWUuYXNJbnQzMigpKSk7CisgICAgICAgIGFwcGVu
ZEludDMyKHN0YXRlLnZtKCksIHZhbHVlLmFzSW50MzIoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkgewotICAgICAgICBhcHBlbmQ4Qml0
KHN0YXRlLnZtKCkubnVtZXJpY1N0cmluZ3MuYWRkKHZhbHVlLmFzRG91YmxlKCkpKTsKKyAgICAg
ICAgYXBwZW5kRG91YmxlKHN0YXRlLnZtKCksIHZhbHVlLmFzRG91YmxlKCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHZhbHVlLmlzVHJ1ZSgpKSB7CkBAIC0xNDksNCAr
MTUxLDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU1N0cmluZ0pvaW5lcjo6YXBwZW5kKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5FIHZv
aWQgSlNTdHJpbmdKb2luZXI6OmFwcGVuZEludDMyKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK3sK
KyAgICBhcHBlbmQ4Qml0KHZtLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6OmFwcGVuZERvdWJsZShWTSYgdm0sIGRvdWJs
ZSB2YWx1ZSkKK3sKKyAgICBhcHBlbmQ4Qml0KHZtLm51bWVyaWNTdHJpbmdzLmFkZCh2YWx1ZSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nVmlldy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKaW5kZXgg
MjlkMDQ4NzlhMmI1N2IwN2FmODg4ZDBlYzgyYWUxOGMwN2I2NDkyNy4uMmEyMjU1YTZjNTI5ZjQx
Yjc0N2QwZDUxNWQ5ZjE0NWUwZmY0ZTJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdWaWV3LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKQEAg
LTQ1MSwyMiArNDUxLDE2IEBAIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OmNvbnRhaW5zKFVDaGFy
IGNoYXJhY3RlcikgY29uc3QKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNX
aXRoVXBjb252ZXJ0KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoaXM4
Qml0KCkpOwotICAgIGF1dG8gY2hhcmFjdGVyczggPSB0aGlzLT5jaGFyYWN0ZXJzOCgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQotICAgICAgICBkZXN0aW5h
dGlvbltpXSA9IGNoYXJhY3RlcnM4W2ldOworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkZXN0
aW5hdGlvbiwgY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOwogfQogCiBpbmxpbmUgdm9pZCBTdHJp
bmdWaWV3OjpnZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChVQ2hhciogZGVzdGluYXRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyczggPSB0
aGlzLT5jaGFyYWN0ZXJzOCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9s
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY2hhcmFjdGVyczhbaV07
CisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVyczgo
KSwgbV9sZW5ndGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGF1dG8gY2hhcmFjdGVy
czE2ID0gdGhpcy0+Y2hhcmFjdGVyczE2KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY2hhcmFjdGVyczE2W2ld
OworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVyczE2KCks
IG1fbGVuZ3RoKTsKIH0KIAogaW5saW5lIFN0cmluZ1ZpZXc6OlVwY29udmVydGVkQ2hhcmFjdGVy
czo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGQ5MDY4
YTU4Y2EzYzM5YTkxY2E4MDNlZWRkYzc1MzU5YWE3YzIzNi4uYzExZjE0NjBlYzc2NDdhZWRkODc0
MDIzNTA5M2M4ZDMyODIzMDRjZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOSBAQAogMjAxNy0xMC0wNyAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAorICAgICAgICBbSlNDXSBVc2UgZmFzdEpv
aW4gaW4gQXJyYXkjdG9TdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3ODA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2NvbnRpZ3VvdXMtYXJyYXktdG8tc3RyaW5n
LmpzOiBBZGRlZC4KKyAgICAgICAgKHRhcmdldCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtz
L2RvdWJsZS1hcnJheS10by1zdHJpbmcuanM6IEFkZGVkLgorICAgICAgICAodGFyZ2V0KToKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvaW50MzItYXJyYXktdG8tc3RyaW5nLmpzOiBBZGRlZC4K
KyAgICAgICAgKHRhcmdldCk6CisKKzIwMTctMTAtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+CisKICAgICAgICAgYGFzeW5jYCBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGFzIGFuIGltcG9ydGVkIGJpbmRpbmcgbmFtZQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NTczCiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2NvbnRpZ3VvdXMtYXJyYXktdG8tc3RyaW5nLmpzIGIvSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY29udGlndW91cy1hcnJheS10by1zdHJpbmcuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJl
NmRjYWExNDVhOWIyYjZjYjFlZTIxN2EwNzJjMjc4NmY0NjRmNwotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2NvbnRpZ3VvdXMtYXJyYXktdG8tc3RyaW5nLmpzCkBA
IC0wLDAgKzEsMTIgQEAKK3ZhciBhcnJheSA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsg
KytpKQorICAgIGFycmF5LnB1c2goYCR7aX1gKTsKKworZnVuY3Rpb24gdGFyZ2V0KGFycmF5KQor
eworICAgIHJldHVybiBhcnJheS50b1N0cmluZygpOworfQorbm9JbmxpbmUodGFyZ2V0KTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0YXJnZXQoYXJyYXkpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZG91YmxlLWFycmF5LXRvLXN0cmluZy5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RvdWJsZS1hcnJheS10by1zdHJpbmcuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWE0MjBkZDFjNDIzYjE0YmIzYWI1Yjk2OGIwODdkZjZjOTVmNjBlYwotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RvdWJsZS1hcnJheS10by1zdHJpbmcu
anMKQEAgLTAsMCArMSwxMiBAQAordmFyIGFycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8
IDIwOyArK2kpCisgICAgYXJyYXkucHVzaChpICogMC4xKTsKKworZnVuY3Rpb24gdGFyZ2V0KGFy
cmF5KQoreworICAgIHJldHVybiBhcnJheS50b1N0cmluZygpOworfQorbm9JbmxpbmUodGFyZ2V0
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0YXJnZXQoYXJyYXkpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvaW50MzItYXJyYXktdG8tc3RyaW5n
LmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvaW50MzItYXJyYXktdG8tc3RyaW5nLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMwNDhjNmJjYzQyYWUyZTNhZTEzNmIzOTIyOTZhYTdlNTMyZDk1N2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9pbnQzMi1hcnJheS10by1zdHJp
bmcuanMKQEAgLTAsMCArMSwxMiBAQAordmFyIGFycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsg
aSA8IDIwOyArK2kpCisgICAgYXJyYXkucHVzaChpKTsKKworZnVuY3Rpb24gdGFyZ2V0KGFycmF5
KQoreworICAgIHJldHVybiBhcnJheS50b1N0cmluZygpOworfQorbm9JbmxpbmUodGFyZ2V0KTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0YXJnZXQoYXJyYXkpOwo=
</data>
<flag name="review"
          id="342912"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>