<?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>228810</bug_id>
          
          <creation_ts>2021-08-04 20:34:33 -0700</creation_ts>
          <short_desc>[JSC] Yarr&apos;s character tracking for BoyerMoore search should be more precise</short_desc>
          <delta_ts>2021-08-06 17:26:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1782134</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-04 20:34:33 -0700</bug_when>
    <thetext>[JSC] Yarr&apos;s character tracking for BoyerMoore search should be more precise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782135</commentid>
    <comment_count>1</comment_count>
      <attachid>434963</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-04 20:37:00 -0700</bug_when>
    <thetext>Created attachment 434963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782142</commentid>
    <comment_count>2</comment_count>
      <attachid>434965</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-04 23:31:44 -0700</bug_when>
    <thetext>Created attachment 434965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782355</commentid>
    <comment_count>3</comment_count>
      <attachid>434965</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-05 15:14:32 -0700</bug_when>
    <thetext>Comment on attachment 434965
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        We should track candidate characters without masking up to 2 so

let&apos;s fix this first sentence to be more clear like you suggested on slack.

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        We also remove m_table giving up. This is because m_table can be used

&quot;We also remove m_table giving up....&quot; =&gt; &quot;We also add support for m_table because m_table can be used&quot;

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        To make `\s` work on Char8 case, we use Char8 / Char16 information
&gt; +        effectively in BoyreMoore search bitmap construction.

how so? It&apos;d be helpful to share more detail here, like, what makes it &quot;effective&quot;

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:2414
&gt; +                        auto [map, characters] = op.m_bmInfo-&gt;createCandidateBitmap(beginIndex, endIndex);

nit: &quot;characters&quot; is a generic name given this context. Similar suggestion to naming the class. maybe &quot;charactersFastPath&quot; or something?

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:2429
&gt;                              UChar32 character2 = 0xff;
&gt; -                            if (mapCount == 2) {
&gt; -                                character2 = map.findBit(character1 + 1, true);
&gt; -                                ASSERT(character2 != BoyerMooreBitmap::Map::size());
&gt; -                            }
&gt; -                            dataLogLnIf(Options::verboseRegExpCompilation(), &quot;Found 1-or-2 characters lookahead character:(0x&quot;, hex(character1), &quot;),character2:(&quot;, hex(character2), &quot;),isMaskEffective:(&quot;, isMaskEffective,&quot;),range:[&quot;, beginIndex, &quot;, &quot;, endIndex, &quot;)&quot;);
&gt; +                            if (characters.size() &gt; 1)
&gt; +                                character2 = characters.at(1);
&gt; +                            dataLogLnIf(Options::verboseRegExpCompilation(), &quot;Found &quot;, characters.size(), &quot; characters lookahead character:(0x&quot;, hex(character1), &quot;),character2:(&quot;, hex(character2), &quot;),range:[&quot;, beginIndex, &quot;, &quot;, endIndex, &quot;)&quot;);

Can all of the &quot;character2&quot;, &quot;characters.size() &gt; 1&quot; just be moved into &quot;characters.size() &gt; 1&quot; branch below? I think that&apos;d make things a lot more clear. No need to set to 0xff, etc.

&gt; Source/JavaScriptCore/yarr/YarrJIT.h:63
&gt; +class BoyerMooreCharacterCandidates {

this name feels weirdly generic. I wonder if we can go with &quot;BoyerMooreFastCase&quot; or &quot;BoyerMooreFastCandidates&quot; or something similar that&apos;s just a bit more descriptive of what we&apos;re aiming for? Since this isn&apos;t really a comprehensive list of &quot;character candidates&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782356</commentid>
    <comment_count>4</comment_count>
      <attachid>434965</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-05 15:14:52 -0700</bug_when>
    <thetext>Comment on attachment 434965
Patch

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

&gt; Source/JavaScriptCore/yarr/YarrJIT.h:145
&gt; +            // Early return since characters are sorted.

can we debug assert they&apos;re sorted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782608</commentid>
    <comment_count>5</comment_count>
      <attachid>434965</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-06 16:55:13 -0700</bug_when>
    <thetext>Comment on attachment 434965
Patch

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

Thanks

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        We should track candidate characters without masking up to 2 so
&gt; 
&gt; let&apos;s fix this first sentence to be more clear like you suggested on slack.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:12
&gt;&gt; +        We also remove m_table giving up. This is because m_table can be used
&gt; 
&gt; &quot;We also remove m_table giving up....&quot; =&gt; &quot;We also add support for m_table because m_table can be used&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:17
&gt;&gt; +        effectively in BoyreMoore search bitmap construction.
&gt; 
&gt; how so? It&apos;d be helpful to share more detail here, like, what makes it &quot;effective&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:2414
&gt;&gt; +                        auto [map, characters] = op.m_bmInfo-&gt;createCandidateBitmap(beginIndex, endIndex);
&gt; 
&gt; nit: &quot;characters&quot; is a generic name given this context. Similar suggestion to naming the class. maybe &quot;charactersFastPath&quot; or something?

Fixed.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:2429
&gt;&gt; +                            dataLogLnIf(Options::verboseRegExpCompilation(), &quot;Found &quot;, characters.size(), &quot; characters lookahead character:(0x&quot;, hex(character1), &quot;),character2:(&quot;, hex(character2), &quot;),range:[&quot;, beginIndex, &quot;, &quot;, endIndex, &quot;)&quot;);
&gt; 
&gt; Can all of the &quot;character2&quot;, &quot;characters.size() &gt; 1&quot; just be moved into &quot;characters.size() &gt; 1&quot; branch below? I think that&apos;d make things a lot more clear. No need to set to 0xff, etc.

Fixed.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.h:63
&gt;&gt; +class BoyerMooreCharacterCandidates {
&gt; 
&gt; this name feels weirdly generic. I wonder if we can go with &quot;BoyerMooreFastCase&quot; or &quot;BoyerMooreFastCandidates&quot; or something similar that&apos;s just a bit more descriptive of what we&apos;re aiming for? Since this isn&apos;t really a comprehensive list of &quot;character candidates&quot;.

Fixed.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.h:145
&gt;&gt; +            // Early return since characters are sorted.
&gt; 
&gt; can we debug assert they&apos;re sorted?

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782610</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-06 17:03:18 -0700</bug_when>
    <thetext>Committed r280744 (240330@main): &lt;https://commits.webkit.org/240330@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782611</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-06 17:04:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/81638511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782614</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-06 17:26:36 -0700</bug_when>
    <thetext>Committed r280745 (240331@main): &lt;https://commits.webkit.org/240331@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434963</attachid>
            <date>2021-08-04 20:37:00 -0700</date>
            <delta_ts>2021-08-04 23:31:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228810-20210804203659.patch</filename>
            <type>text/plain</type>
            <size>14527</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
M2MxY2IxMmZhYWMwZGU5OGQyNTY1NWJhYjNiZTA0MjVlZTVlYTY3Li5iYWJkYWZkMTI1OTI0MDNk
MGMxOTNmNGE5YTc4Yzc0ZTcxMDMyOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAyMS0wOC0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFlhcnIncyBjaGFyYWN0ZXIgdHJhY2tpbmcgZm9yIEJveWVyTW9v
cmUgc2VhcmNoIHNob3VsZCBiZSBtb3JlIHByZWNpc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODgxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNob3VsZCB0cmFjayBjYW5kaWRhdGUgY2hhcmFj
dGVycyB3aXRob3V0IG1hc2tpbmcgdXAgdG8gMiBzbworICAgICAgICB0aGF0IHdlIGNhbiBzZWFy
Y2ggYSBjaGFyYWN0ZXIgd2l0aG91dCBtYXNraW5nLiBUbyB0cmFjayBjYW5kaWRhdGVzLAorICAg
ICAgICB3ZSBpbnRyb2R1Y2UgQm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXMuCisKKyAgICAg
ICAgV2UgYWxzbyByZW1vdmUgbV90YWJsZSBnaXZpbmcgdXAuIFRoaXMgaXMgYmVjYXVzZSBtX3Rh
YmxlIGNhbiBiZSB1c2VkCisgICAgICAgIGZvciBpbXBvcnRhbnQgQ2hhcmFjdGVyQ2xhc3MgbGlr
ZSBgXHNgLCBhbmQgc3RpbGwgdGhhdCBkb2VzIG5vdCBoYXZlCisgICAgICAgIG1hbnkgY2hhcmFj
dGVyIGNhbmRpZGF0ZXMgaWYgdGhlIG1vZGUgaXMgQ2hhcjguCisKKyAgICAgICAgVG8gbWFrZSBg
XHNgIHdvcmsgb24gQ2hhcjggY2FzZSwgd2UgdXNlIENoYXI4IC8gQ2hhcjE2IGluZm9ybWF0aW9u
CisgICAgICAgIGVmZmVjdGl2ZWx5IGluIEJveXJlTW9vcmUgc2VhcmNoIGJpdG1hcCBjb25zdHJ1
Y3Rpb24uCisKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpCb3llck1vb3JlSW5mbzo6Qm95ZXJNb29yZUluZm8pOgorICAgICAgICAoSlNDOjpZYXJyOjpC
b3llck1vb3JlSW5mbzo6c2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUluZm86
OmFkZENoYXJhY3RlcnMpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3JlSW5mbzo6YWRk
UmFuZ2VzKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUluZm86OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVJbmZvOjpjcmVhdGVDYW5kaWRhdGVCaXRtYXAg
Y29uc3QpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpC
b3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRlczo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChK
U0M6OllhcnI6OkJveWVyTW9vcmVDaGFyYWN0ZXJDYW5kaWRhdGVzOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXM6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRl
czo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVDaGFyYWN0ZXJD
YW5kaWRhdGVzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVDaGFy
YWN0ZXJDYW5kaWRhdGVzOjphZGQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3JlQ2hh
cmFjdGVyQ2FuZGlkYXRlczo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3Jl
Qml0bWFwOjpjaGFyYWN0ZXJDYW5kaWRhdGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6
Qm95ZXJNb29yZUJpdG1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUJp
dG1hcDo6YWRkQ2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVCaXRt
YXA6OmFkZFJhbmdlcyk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVCaXRtYXA6Omlz
TWFza0VmZmVjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjEtMDgtMDMgIFlpamlhIEh1YW5n
ICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtBUk02NF0gVXNlIGxpbmsgcmVn
aXN0ZXIgaW5zdGVhZCBvZiBwaW5uaW5nIGEgcmVnaXN0ZXIgZm9yIG1hdGVyaWFsaXppbmcgYmln
IGxvYWQgY29uc3RhbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCmluZGV4
IDRkYTU2ZWVhYjBhYjUxNTM3M2RkZmExMDZlOGQ5ODUxZmE2MGMyYWUuLmZiMGQwZTY0M2M1ZWUx
YzRiMDBjODBmZjJlNDY3OTRkZWY1NDNjNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCkBAIC01Niw4ICs1Niw5IEBAIGNsYXNzIEJveWVyTW9vcmVJbmZvIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aCA9IDMyOwogCi0gICAg
ZXhwbGljaXQgQm95ZXJNb29yZUluZm8odW5zaWduZWQgbGVuZ3RoKQorICAgIGV4cGxpY2l0IEJv
eWVyTW9vcmVJbmZvKENoYXJTaXplIGNoYXJTaXplLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAg
IDogbV9jaGFyYWN0ZXJzKGxlbmd0aCkKKyAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmxlbmd0aCgpIDw9IG1heExlbmd0aCk7CiAgICAg
fQpAQCAtNzEsNyArNzIsNyBAQCBjbGFzcyBCb3llck1vb3JlSW5mbyB7CiAKICAgICB2b2lkIHNl
dCh1bnNpZ25lZCBpbmRleCwgVUNoYXIzMiBjaGFyYWN0ZXIpCiAgICAgewotICAgICAgICBtX2No
YXJhY3RlcnNbaW5kZXhdLmFkZChjaGFyYWN0ZXIpOworICAgICAgICBtX2NoYXJhY3RlcnNbaW5k
ZXhdLmFkZChtX2NoYXJTaXplLCBjaGFyYWN0ZXIpOwogICAgIH0KIAogICAgIHZvaWQgc2V0QWxs
KHVuc2lnbmVkIGluZGV4KQpAQCAtODEsMjYgKzgyLDI3IEBAIGNsYXNzIEJveWVyTW9vcmVJbmZv
IHsKIAogICAgIHZvaWQgYWRkQ2hhcmFjdGVycyh1bnNpZ25lZCBpbmRleCwgY29uc3QgVmVjdG9y
PFVDaGFyMzI+JiBjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgbV9jaGFyYWN0ZXJzW2luZGV4
XS5hZGRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMpOworICAgICAgICBtX2NoYXJhY3RlcnNbaW5kZXhd
LmFkZENoYXJhY3RlcnMobV9jaGFyU2l6ZSwgY2hhcmFjdGVycyk7CiAgICAgfQogCiAgICAgdm9p
ZCBhZGRSYW5nZXModW5zaWduZWQgaW5kZXgsIGNvbnN0IFZlY3RvcjxDaGFyYWN0ZXJSYW5nZT4m
IHJhbmdlKQogICAgIHsKLSAgICAgICAgbV9jaGFyYWN0ZXJzW2luZGV4XS5hZGRSYW5nZXMocmFu
Z2UpOworICAgICAgICBtX2NoYXJhY3RlcnNbaW5kZXhdLmFkZFJhbmdlcyhtX2NoYXJTaXplLCBy
YW5nZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFVuaXF1ZVJlZjxCb3llck1vb3JlSW5mbz4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICBzdGF0aWMgVW5pcXVlUmVmPEJveWVyTW9vcmVJbmZv
PiBjcmVhdGUoQ2hhclNpemUgY2hhclNpemUsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEJveWVyTW9vcmVJbmZvPihsZW5ndGgpOworICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxCb3llck1vb3JlSW5mbz4oY2hhclNpemUsIGxlbmd0aCk7
CiAgICAgfQogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnR1cGxlPHVuc2lnbmVkLCB1bnNpZ25l
ZD4+IGZpbmRXb3J0aHdoaWxlQ2hhcmFjdGVyU2VxdWVuY2VGb3JMb29rYWhlYWQoKSBjb25zdDsK
LSAgICBzdGQ6OnR1cGxlPEJveWVyTW9vcmVCaXRtYXA6Ok1hcCwgYm9vbD4gY3JlYXRlQ2FuZGlk
YXRlQml0bWFwKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OworICAgIHN0ZDo6
dHVwbGU8Qm95ZXJNb29yZUJpdG1hcDo6TWFwLCBCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRl
cz4gY3JlYXRlQ2FuZGlkYXRlQml0bWFwKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIHN0ZDo6dHVwbGU8aW50LCB1bnNpZ25lZCwgdW5zaWduZWQ+
IGZpbmRCZXN0Q2hhcmFjdGVyU2VxdWVuY2UodW5zaWduZWQgbnVtYmVyT2ZDYW5kaWRhdGVzTGlt
aXQpIGNvbnN0OwogCiAgICAgVmVjdG9yPEJveWVyTW9vcmVCaXRtYXA+IG1fY2hhcmFjdGVyczsK
KyAgICBDaGFyU2l6ZSBtX2NoYXJTaXplOwogfTsKIAogc3RkOjp0dXBsZTxpbnQsIHVuc2lnbmVk
LCB1bnNpZ25lZD4gQm95ZXJNb29yZUluZm86OmZpbmRCZXN0Q2hhcmFjdGVyU2VxdWVuY2UodW5z
aWduZWQgbnVtYmVyT2ZDYW5kaWRhdGVzTGltaXQpIGNvbnN0CkBAIC0xNTgsMTYgKzE2MCwxNiBA
QCBzdGQ6Om9wdGlvbmFsPHN0ZDo6dHVwbGU8dW5zaWduZWQsIHVuc2lnbmVkPj4gQm95ZXJNb29y
ZUluZm86OmZpbmRXb3J0aHdoaWxlQ2hhcgogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgYmVnaW4s
IGVuZCB9OwogfQogCi1zdGQ6OnR1cGxlPEJveWVyTW9vcmVCaXRtYXA6Ok1hcCwgYm9vbD4gQm95
ZXJNb29yZUluZm86OmNyZWF0ZUNhbmRpZGF0ZUJpdG1hcCh1bnNpZ25lZCBiZWdpbiwgdW5zaWdu
ZWQgZW5kKSBjb25zdAorc3RkOjp0dXBsZTxCb3llck1vb3JlQml0bWFwOjpNYXAsIEJveWVyTW9v
cmVDaGFyYWN0ZXJDYW5kaWRhdGVzPiBCb3llck1vb3JlSW5mbzo6Y3JlYXRlQ2FuZGlkYXRlQml0
bWFwKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0CiB7CiAgICAgQm95ZXJNb29y
ZUJpdG1hcDo6TWFwIG1hcCB7IH07Ci0gICAgYm9vbCBpc01hc2tFZmZlY3RpdmUgPSBmYWxzZTsK
KyAgICBCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRlcyBjYW5kaWRhdGVzOwogICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBiZWdpbjsgaW5kZXggPCBlbmQ7ICsraW5kZXgpIHsKICAgICAgICAg
YXV0byYgYm1CaXRtYXAgPSBtX2NoYXJhY3RlcnNbaW5kZXhdOwogICAgICAgICBtYXAubWVyZ2Uo
Ym1CaXRtYXAubWFwKCkpOwotICAgICAgICBpc01hc2tFZmZlY3RpdmUgfD0gYm1CaXRtYXAuaXNN
YXNrRWZmZWN0aXZlKCk7CisgICAgICAgIGNhbmRpZGF0ZXMubWVyZ2UoYm1CaXRtYXAuY2hhcmFj
dGVyQ2FuZGlkYXRlcygpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBtYXAsIGlz
TWFza0VmZmVjdGl2ZSB9OworICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgV1RGTW92ZShtYXApLCBX
VEZNb3ZlKGNhbmRpZGF0ZXMpIH07CiB9CiAKIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckpJVEluZm8sIHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewpAQCAtMjQwOSw3ICsy
NDExLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbywg
cHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIFti
ZWdpbkluZGV4LCBlbmRJbmRleF0gPSAqcmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZW5kSW5kZXggPD0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIFttYXAsIGlzTWFza0VmZmVjdGl2ZV0gPSBvcC5tX2JtSW5m
by0+Y3JlYXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgsIGVuZEluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gW21hcCwgY2hhcmFjdGVyc10gPSBvcC5tX2JtSW5mby0+Y3Jl
YXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgsIGVuZEluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG1hcENvdW50ID0gbWFwLmNvdW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBjYW5kaWF0ZSBjaGFyYWN0ZXJzIGFyZSA8PSAyLCBjaGVja2luZyBl
YWNoIGlzIGJldHRlciB0aGFuIHVzaW5nIHZlY3Rvci4KICAgICAgICAgICAgICAgICAgICAgICAg
IEp1bXBMaXN0IG91dE9mTGVuZ3RoRmFpbHVyZTsKQEAgLTI0MTgsMjIgKzI0MjAsMTggQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbywgcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXR0ZXJucyBsaWtlIC9b
XS8gaGF2ZSB6ZXJvIGNhbmRpZGF0ZXMuIFNpbmNlIGl0IGlzIHJhcmUsIHdlIGRvIG5vdCBkbyBu
b3RoaW5nIGZvciBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcENvdW50KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hcENvdW50IDw9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hh
cjMyIGNoYXJhY3RlcjEgPSBtYXAuZmluZEJpdCgwLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVyMSAhPSBCb3llck1vb3JlQml0bWFwOjpNYXA6OnNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVycy5pc1ZhbGlkKCkg
JiYgIWNoYXJhY3RlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydChCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRlczo6bWF4U2l6ZSA9PSAy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjEgPSBjaGFy
YWN0ZXJzLmF0KDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyMiA9IDB4ZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcENvdW50ID09
IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyMiA9IG1hcC5m
aW5kQml0KGNoYXJhY3RlcjEgKyAxLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGNoYXJhY3RlcjIgIT0gQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpzaXplKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24oKSwgIkZv
dW5kIDEtb3ItMiBjaGFyYWN0ZXJzIGxvb2thaGVhZCBjaGFyYWN0ZXI6KDB4IiwgaGV4KGNoYXJh
Y3RlcjEpLCAiKSxjaGFyYWN0ZXIyOigiLCBoZXgoY2hhcmFjdGVyMiksICIpLGlzTWFza0VmZmVj
dGl2ZTooIiwgaXNNYXNrRWZmZWN0aXZlLCIpLHJhbmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBl
bmRJbmRleCwgIikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVy
cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIy
ID0gY2hhcmFjdGVycy5hdCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24oKSwgIkZvdW5kICIsIGNoYXJh
Y3RlcnMuc2l6ZSgpLCAiIGNoYXJhY3RlcnMgbG9va2FoZWFkIGNoYXJhY3RlcjooMHgiLCBoZXgo
Y2hhcmFjdGVyMSksICIpLGNoYXJhY3RlcjI6KCIsIGhleChjaGFyYWN0ZXIyKSwgIikscmFuZ2U6
WyIsIGJlZ2luSW5kZXgsICIsICIsIGVuZEluZGV4LCAiKSIpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb29wSGVhZCA9IGxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSBlbmRJbmRleCArIDEsIHJl
Z1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXNrRWZmZWN0aXZlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoQm95ZXJN
b29yZUJpdG1hcDo6bWFwTWFzayksIHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoY2hhcmFjdGVyMSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwQ291
bnQgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVycy5zaXpl
KCkgPiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihjaGFyYWN0ZXIyKSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVtcElmTm9B
dmFpbGFibGVJbnB1dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKQEAgLTM4OTUsNyArMzg5
Myw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckpJVEluZm8sIHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCB1bmljb2Rl
IGZsYWcuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjg2MTEKICAgICAgICAgaWYgKGRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplICYmICFtX3Bh
dHRlcm4uc3RpY2t5KCkgJiYgIW1fcGF0dGVybi51bmljb2RlKCkpIHsKLSAgICAgICAgICAgIGF1
dG8gYm1JbmZvID0gQm95ZXJNb29yZUluZm86OmNyZWF0ZShzdGQ6Om1pbjx1bnNpZ25lZD4oZGlz
anVuY3Rpb24tPm1fbWluaW11bVNpemUsIEJveWVyTW9vcmVJbmZvOjptYXhMZW5ndGgpKTsKKyAg
ICAgICAgICAgIGF1dG8gYm1JbmZvID0gQm95ZXJNb29yZUluZm86OmNyZWF0ZShtX2NoYXJTaXpl
LCBzdGQ6Om1pbjx1bnNpZ25lZD4oZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUsIEJveWVyTW9v
cmVJbmZvOjptYXhMZW5ndGgpKTsKICAgICAgICAgICAgIGlmIChjb2xsZWN0Qm95ZXJNb29yZUlu
Zm8oZGlzanVuY3Rpb24sIGN1cnJlbnRBbHRlcm5hdGl2ZUluZGV4LCBibUluZm8uZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgbV9vcHMubGFzdCgpLm1fYm1JbmZvID0gYm1JbmZvLnB0cigpOwog
ICAgICAgICAgICAgICAgIG1fYm1JbmZvcy5hcHBlbmQoV1RGTW92ZShibUluZm8pKTsKQEAgLTM5
NzUsMTEgKzM5NzMsNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
SVRJbmZvLCBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICsrY3Vyc29yOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckNsYXNzLm1fdGFi
bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJtSW5mby5zZXRBbGwoY3Vyc29yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYg
KCFjaGFyYWN0ZXJDbGFzcy5tX3Jhbmdlc1VuaWNvZGUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYm1JbmZvLmFkZFJhbmdlcyhjdXJzb3IsIGNoYXJhY3RlckNsYXNzLm1fcmFu
Z2VzVW5pY29kZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyQ2xhc3MubV9t
YXRjaGVzVW5pY29kZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgK
aW5kZXggYTdiNjI2N2MzZDY3OGZlOTI5YWI1NzU3ZTMyMGE0YWVkMzU4NTdlZi4uZjNkODlhMzE4
ZGQ2ZjZlYjQxZTBkMGI2MTQzYTBiMjRkM2RmYjc0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJKSVQuaApAQCAtNjAsNiArNjAsNTQgQEAgZW51bSBjbGFzcyBKSVRGYWlsdXJlUmVhc29u
IDogdWludDhfdCB7CiAgICAgRXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlLAogfTsK
IAorY2xhc3MgQm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXMgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEKEJveWVyTW9vcmVDaGFyYWN0ZXJDYW5kaWRhdGVzKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNpemUgPSAyOworICAgIHVzaW5nIENoYXJh
Y3RlclZlY3RvciA9IFZlY3RvcjxVQ2hhcjMyLCBtYXhTaXplPjsKKworICAgIEJveWVyTW9vcmVD
aGFyYWN0ZXJDYW5kaWRhdGVzKCkgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7Cisg
ICAgICAgIG1fY2hhcmFjdGVycy5jbGVhcigpOworICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnMu
aXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFj
dGVycy5zaXplKCk7IH0KKyAgICBVQ2hhcjMyIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NoYXJhY3RlcnMuYXQoaW5kZXgpOyB9CisKKyAgICB2b2lkIGFkZChVQ2hhcjMyIGNo
YXJhY3RlcikKKyAgICB7CisgICAgICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIW1fY2hhcmFjdGVycy5jb250YWlucyhjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBpZiAobV9jaGFyYWN0ZXJzLnNpemUoKSA8IG1heFNpemUpCisgICAgICAgICAg
ICAgICAgbV9jaGFyYWN0ZXJzLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgbWVyZ2UoY29uc3QgQm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghb3RoZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgb3RoZXIuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICAgICAgYWRkKG90aGVy
LmF0KGluZGV4KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENoYXJhY3RlclZlY3RvciBtX2No
YXJhY3RlcnM7CisgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Cit9OworCiBjbGFzcyBCb3ll
ck1vb3JlQml0bWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCb3llck1vb3JlQml0bWFw
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRChCb3llck1vb3JlQml0bWFwKTsKQEAgLTcy
LDIyICsxMjAsMjMgQEAgY2xhc3MgQm95ZXJNb29yZUJpdG1hcCB7CiAKICAgICB1bnNpZ25lZCBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KICAgICBjb25zdCBNYXAmIG1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwOyB9Ci0gICAgYm9vbCBpc01hc2tFZmZlY3RpdmUoKSBjb25zdCB7
IHJldHVybiBtX2lzTWFza0VmZmVjdGl2ZTsgfQorICAgIGNvbnN0IEJveWVyTW9vcmVDaGFyYWN0
ZXJDYW5kaWRhdGVzJiBjaGFyYWN0ZXJDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFy
YWN0ZXJDYW5kaWRhdGVzOyB9CiAKLSAgICB2b2lkIGFkZChVQ2hhcjMyIGNoYXJhY3RlcikKKyAg
ICB2b2lkIGFkZChDaGFyU2l6ZSBjaGFyU2l6ZSwgVUNoYXIzMiBjaGFyYWN0ZXIpCiAgICAgewog
ICAgICAgICBpZiAoaXNBbGxTZXQoKSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KGNoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCAmJiBjaGFyYWN0ZXIgPiAweGZmKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX2NoYXJhY3RlckNhbmRpZGF0ZXMuYWRkKGNoYXJhY3Rl
cik7CiAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gY2hhcmFjdGVyICYgbWFwTWFzazsKLSAg
ICAgICAgaWYgKHBvc2l0aW9uICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXIpKQot
ICAgICAgICAgICAgbV9pc01hc2tFZmZlY3RpdmUgPSB0cnVlOwogICAgICAgICBpZiAoIW1fbWFw
LmdldChwb3NpdGlvbikpIHsKICAgICAgICAgICAgIG1fbWFwLnNldChwb3NpdGlvbik7CiAgICAg
ICAgICAgICArK21fY291bnQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGFkZENoYXJh
Y3RlcnMoY29uc3QgVmVjdG9yPFVDaGFyMzI+JiBjaGFyYWN0ZXJzKQorICAgIHZvaWQgYWRkQ2hh
cmFjdGVycyhDaGFyU2l6ZSBjaGFyU2l6ZSwgY29uc3QgVmVjdG9yPFVDaGFyMzI+JiBjaGFyYWN0
ZXJzKQogICAgIHsKICAgICAgICAgaWYgKGlzQWxsU2V0KCkpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC05NSwxMSArMTQ0LDE0IEBAIGNsYXNzIEJveWVyTW9vcmVCaXRtYXAgewogICAgICAgICAg
ICAgc2V0QWxsKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZm9y
IChVQ2hhcjMyIGNoYXJhY3RlciA6IGNoYXJhY3RlcnMpCi0gICAgICAgICAgICBhZGQoY2hhcmFj
dGVyKTsKKyAgICAgICAgZm9yIChVQ2hhcjMyIGNoYXJhY3RlciA6IGNoYXJhY3RlcnMpIHsKKyAg
ICAgICAgICAgIGlmIChjaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjggJiYgY2hhcmFjdGVyID4g
MHhmZikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkZChjaGFyU2l6ZSwg
Y2hhcmFjdGVyKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgYWRkUmFuZ2VzKGNvbnN0
IFZlY3RvcjxDaGFyYWN0ZXJSYW5nZT4mIHJhbmdlcykKKyAgICB2b2lkIGFkZFJhbmdlcyhDaGFy
U2l6ZSBjaGFyU2l6ZSwgY29uc3QgVmVjdG9yPENoYXJhY3RlclJhbmdlPiYgcmFuZ2VzKQogICAg
IHsKICAgICAgICAgaWYgKHJhbmdlcy5zaXplKCkgPj0gbWFwU2l6ZSkgewogICAgICAgICAgICAg
c2V0QWxsKCk7CkBAIC0xMDgsMTIgKzE2MCwyMCBAQCBjbGFzcyBCb3llck1vb3JlQml0bWFwIHsK
ICAgICAgICAgZm9yIChDaGFyYWN0ZXJSYW5nZSByYW5nZSA6IHJhbmdlcykgewogICAgICAgICAg
ICAgaWYgKGlzQWxsU2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmQgLSByYW5nZS5iZWdpbiArIDEpID49
IG1hcFNpemUpIHsKKyAgICAgICAgICAgIGF1dG8gYmVnaW4gPSByYW5nZS5iZWdpbjsKKyAgICAg
ICAgICAgIGF1dG8gZW5kID0gcmFuZ2UuZW5kOworICAgICAgICAgICAgaWYgKGNoYXJTaXplID09
IENoYXJTaXplOjpDaGFyOCkgeworICAgICAgICAgICAgICAgIGlmIChiZWdpbiA+IDB4ZmYpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChlbmQgPiAw
eGZmKQorICAgICAgICAgICAgICAgICAgICBlbmQgPSAweGZmOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQgLSBiZWdpbiArIDEpID49IG1h
cFNpemUpIHsKICAgICAgICAgICAgICAgICBzZXRBbGwoKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKFVDaGFyMzIgY2hhcmFjdGVyID0g
cmFuZ2UuYmVnaW47IGNoYXJhY3RlciA8PSByYW5nZS5lbmQ7ICsrY2hhcmFjdGVyKQotICAgICAg
ICAgICAgICAgIGFkZChjaGFyYWN0ZXIpOworICAgICAgICAgICAgZm9yIChVQ2hhcjMyIGNoYXJh
Y3RlciA9IGJlZ2luOyBjaGFyYWN0ZXIgPD0gZW5kOyArK2NoYXJhY3RlcikKKyAgICAgICAgICAg
ICAgICBhZGQoY2hhclNpemUsIGNoYXJhY3Rlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEy
Niw4ICsxODYsOCBAQCBjbGFzcyBCb3llck1vb3JlQml0bWFwIHsKIAogcHJpdmF0ZToKICAgICBN
YXAgbV9tYXAgeyB9OworICAgIEJveWVyTW9vcmVDaGFyYWN0ZXJDYW5kaWRhdGVzIG1fY2hhcmFj
dGVyQ2FuZGlkYXRlczsKICAgICB1bnNpZ25lZCBtX2NvdW50IHsgMCB9OwotICAgIGJvb2wgbV9p
c01hc2tFZmZlY3RpdmUgeyBmYWxzZSB9OwogfTsKIAogI2lmIENQVShBUk02NEUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434965</attachid>
            <date>2021-08-04 23:31:44 -0700</date>
            <delta_ts>2021-08-05 15:14:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228810-20210804233143.patch</filename>
            <type>text/plain</type>
            <size>14782</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
M2MxY2IxMmZhYWMwZGU5OGQyNTY1NWJhYjNiZTA0MjVlZTVlYTY3Li5iYWJkYWZkMTI1OTI0MDNk
MGMxOTNmNGE5YTc4Yzc0ZTcxMDMyOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAyMS0wOC0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFlhcnIncyBjaGFyYWN0ZXIgdHJhY2tpbmcgZm9yIEJveWVyTW9v
cmUgc2VhcmNoIHNob3VsZCBiZSBtb3JlIHByZWNpc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODgxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNob3VsZCB0cmFjayBjYW5kaWRhdGUgY2hhcmFj
dGVycyB3aXRob3V0IG1hc2tpbmcgdXAgdG8gMiBzbworICAgICAgICB0aGF0IHdlIGNhbiBzZWFy
Y2ggYSBjaGFyYWN0ZXIgd2l0aG91dCBtYXNraW5nLiBUbyB0cmFjayBjYW5kaWRhdGVzLAorICAg
ICAgICB3ZSBpbnRyb2R1Y2UgQm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXMuCisKKyAgICAg
ICAgV2UgYWxzbyByZW1vdmUgbV90YWJsZSBnaXZpbmcgdXAuIFRoaXMgaXMgYmVjYXVzZSBtX3Rh
YmxlIGNhbiBiZSB1c2VkCisgICAgICAgIGZvciBpbXBvcnRhbnQgQ2hhcmFjdGVyQ2xhc3MgbGlr
ZSBgXHNgLCBhbmQgc3RpbGwgdGhhdCBkb2VzIG5vdCBoYXZlCisgICAgICAgIG1hbnkgY2hhcmFj
dGVyIGNhbmRpZGF0ZXMgaWYgdGhlIG1vZGUgaXMgQ2hhcjguCisKKyAgICAgICAgVG8gbWFrZSBg
XHNgIHdvcmsgb24gQ2hhcjggY2FzZSwgd2UgdXNlIENoYXI4IC8gQ2hhcjE2IGluZm9ybWF0aW9u
CisgICAgICAgIGVmZmVjdGl2ZWx5IGluIEJveXJlTW9vcmUgc2VhcmNoIGJpdG1hcCBjb25zdHJ1
Y3Rpb24uCisKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpCb3llck1vb3JlSW5mbzo6Qm95ZXJNb29yZUluZm8pOgorICAgICAgICAoSlNDOjpZYXJyOjpC
b3llck1vb3JlSW5mbzo6c2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUluZm86
OmFkZENoYXJhY3RlcnMpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3JlSW5mbzo6YWRk
UmFuZ2VzKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUluZm86OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVJbmZvOjpjcmVhdGVDYW5kaWRhdGVCaXRtYXAg
Y29uc3QpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpC
b3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRlczo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChK
U0M6OllhcnI6OkJveWVyTW9vcmVDaGFyYWN0ZXJDYW5kaWRhdGVzOjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXM6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRl
czo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVDaGFyYWN0ZXJD
YW5kaWRhdGVzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVDaGFy
YWN0ZXJDYW5kaWRhdGVzOjphZGQpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3JlQ2hh
cmFjdGVyQ2FuZGlkYXRlczo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpCb3llck1vb3Jl
Qml0bWFwOjpjaGFyYWN0ZXJDYW5kaWRhdGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6
Qm95ZXJNb29yZUJpdG1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qm95ZXJNb29yZUJp
dG1hcDo6YWRkQ2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVCaXRt
YXA6OmFkZFJhbmdlcyk6CisgICAgICAgIChKU0M6OllhcnI6OkJveWVyTW9vcmVCaXRtYXA6Omlz
TWFza0VmZmVjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjEtMDgtMDMgIFlpamlhIEh1YW5n
ICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtBUk02NF0gVXNlIGxpbmsgcmVn
aXN0ZXIgaW5zdGVhZCBvZiBwaW5uaW5nIGEgcmVnaXN0ZXIgZm9yIG1hdGVyaWFsaXppbmcgYmln
IGxvYWQgY29uc3RhbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCmluZGV4
IDRkYTU2ZWVhYjBhYjUxNTM3M2RkZmExMDZlOGQ5ODUxZmE2MGMyYWUuLmZiMGQwZTY0M2M1ZWUx
YzRiMDBjODBmZjJlNDY3OTRkZWY1NDNjNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCkBAIC01Niw4ICs1Niw5IEBAIGNsYXNzIEJveWVyTW9vcmVJbmZvIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExlbmd0aCA9IDMyOwogCi0gICAg
ZXhwbGljaXQgQm95ZXJNb29yZUluZm8odW5zaWduZWQgbGVuZ3RoKQorICAgIGV4cGxpY2l0IEJv
eWVyTW9vcmVJbmZvKENoYXJTaXplIGNoYXJTaXplLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAg
IDogbV9jaGFyYWN0ZXJzKGxlbmd0aCkKKyAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmxlbmd0aCgpIDw9IG1heExlbmd0aCk7CiAgICAg
fQpAQCAtNzEsNyArNzIsNyBAQCBjbGFzcyBCb3llck1vb3JlSW5mbyB7CiAKICAgICB2b2lkIHNl
dCh1bnNpZ25lZCBpbmRleCwgVUNoYXIzMiBjaGFyYWN0ZXIpCiAgICAgewotICAgICAgICBtX2No
YXJhY3RlcnNbaW5kZXhdLmFkZChjaGFyYWN0ZXIpOworICAgICAgICBtX2NoYXJhY3RlcnNbaW5k
ZXhdLmFkZChtX2NoYXJTaXplLCBjaGFyYWN0ZXIpOwogICAgIH0KIAogICAgIHZvaWQgc2V0QWxs
KHVuc2lnbmVkIGluZGV4KQpAQCAtODEsMjYgKzgyLDI3IEBAIGNsYXNzIEJveWVyTW9vcmVJbmZv
IHsKIAogICAgIHZvaWQgYWRkQ2hhcmFjdGVycyh1bnNpZ25lZCBpbmRleCwgY29uc3QgVmVjdG9y
PFVDaGFyMzI+JiBjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgbV9jaGFyYWN0ZXJzW2luZGV4
XS5hZGRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMpOworICAgICAgICBtX2NoYXJhY3RlcnNbaW5kZXhd
LmFkZENoYXJhY3RlcnMobV9jaGFyU2l6ZSwgY2hhcmFjdGVycyk7CiAgICAgfQogCiAgICAgdm9p
ZCBhZGRSYW5nZXModW5zaWduZWQgaW5kZXgsIGNvbnN0IFZlY3RvcjxDaGFyYWN0ZXJSYW5nZT4m
IHJhbmdlKQogICAgIHsKLSAgICAgICAgbV9jaGFyYWN0ZXJzW2luZGV4XS5hZGRSYW5nZXMocmFu
Z2UpOworICAgICAgICBtX2NoYXJhY3RlcnNbaW5kZXhdLmFkZFJhbmdlcyhtX2NoYXJTaXplLCBy
YW5nZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFVuaXF1ZVJlZjxCb3llck1vb3JlSW5mbz4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICBzdGF0aWMgVW5pcXVlUmVmPEJveWVyTW9vcmVJbmZv
PiBjcmVhdGUoQ2hhclNpemUgY2hhclNpemUsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEJveWVyTW9vcmVJbmZvPihsZW5ndGgpOworICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxCb3llck1vb3JlSW5mbz4oY2hhclNpemUsIGxlbmd0aCk7
CiAgICAgfQogCiAgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnR1cGxlPHVuc2lnbmVkLCB1bnNpZ25l
ZD4+IGZpbmRXb3J0aHdoaWxlQ2hhcmFjdGVyU2VxdWVuY2VGb3JMb29rYWhlYWQoKSBjb25zdDsK
LSAgICBzdGQ6OnR1cGxlPEJveWVyTW9vcmVCaXRtYXA6Ok1hcCwgYm9vbD4gY3JlYXRlQ2FuZGlk
YXRlQml0bWFwKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OworICAgIHN0ZDo6
dHVwbGU8Qm95ZXJNb29yZUJpdG1hcDo6TWFwLCBCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRl
cz4gY3JlYXRlQ2FuZGlkYXRlQml0bWFwKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIHN0ZDo6dHVwbGU8aW50LCB1bnNpZ25lZCwgdW5zaWduZWQ+
IGZpbmRCZXN0Q2hhcmFjdGVyU2VxdWVuY2UodW5zaWduZWQgbnVtYmVyT2ZDYW5kaWRhdGVzTGlt
aXQpIGNvbnN0OwogCiAgICAgVmVjdG9yPEJveWVyTW9vcmVCaXRtYXA+IG1fY2hhcmFjdGVyczsK
KyAgICBDaGFyU2l6ZSBtX2NoYXJTaXplOwogfTsKIAogc3RkOjp0dXBsZTxpbnQsIHVuc2lnbmVk
LCB1bnNpZ25lZD4gQm95ZXJNb29yZUluZm86OmZpbmRCZXN0Q2hhcmFjdGVyU2VxdWVuY2UodW5z
aWduZWQgbnVtYmVyT2ZDYW5kaWRhdGVzTGltaXQpIGNvbnN0CkBAIC0xNTgsMTYgKzE2MCwxNiBA
QCBzdGQ6Om9wdGlvbmFsPHN0ZDo6dHVwbGU8dW5zaWduZWQsIHVuc2lnbmVkPj4gQm95ZXJNb29y
ZUluZm86OmZpbmRXb3J0aHdoaWxlQ2hhcgogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgYmVnaW4s
IGVuZCB9OwogfQogCi1zdGQ6OnR1cGxlPEJveWVyTW9vcmVCaXRtYXA6Ok1hcCwgYm9vbD4gQm95
ZXJNb29yZUluZm86OmNyZWF0ZUNhbmRpZGF0ZUJpdG1hcCh1bnNpZ25lZCBiZWdpbiwgdW5zaWdu
ZWQgZW5kKSBjb25zdAorc3RkOjp0dXBsZTxCb3llck1vb3JlQml0bWFwOjpNYXAsIEJveWVyTW9v
cmVDaGFyYWN0ZXJDYW5kaWRhdGVzPiBCb3llck1vb3JlSW5mbzo6Y3JlYXRlQ2FuZGlkYXRlQml0
bWFwKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0CiB7CiAgICAgQm95ZXJNb29y
ZUJpdG1hcDo6TWFwIG1hcCB7IH07Ci0gICAgYm9vbCBpc01hc2tFZmZlY3RpdmUgPSBmYWxzZTsK
KyAgICBCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRlcyBjYW5kaWRhdGVzOwogICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBiZWdpbjsgaW5kZXggPCBlbmQ7ICsraW5kZXgpIHsKICAgICAgICAg
YXV0byYgYm1CaXRtYXAgPSBtX2NoYXJhY3RlcnNbaW5kZXhdOwogICAgICAgICBtYXAubWVyZ2Uo
Ym1CaXRtYXAubWFwKCkpOwotICAgICAgICBpc01hc2tFZmZlY3RpdmUgfD0gYm1CaXRtYXAuaXNN
YXNrRWZmZWN0aXZlKCk7CisgICAgICAgIGNhbmRpZGF0ZXMubWVyZ2UoYm1CaXRtYXAuY2hhcmFj
dGVyQ2FuZGlkYXRlcygpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBtYXAsIGlz
TWFza0VmZmVjdGl2ZSB9OworICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgV1RGTW92ZShtYXApLCBX
VEZNb3ZlKGNhbmRpZGF0ZXMpIH07CiB9CiAKIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckpJVEluZm8sIHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewpAQCAtMjQwOSw3ICsy
NDExLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbywg
cHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIFti
ZWdpbkluZGV4LCBlbmRJbmRleF0gPSAqcmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZW5kSW5kZXggPD0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIFttYXAsIGlzTWFza0VmZmVjdGl2ZV0gPSBvcC5tX2JtSW5m
by0+Y3JlYXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgsIGVuZEluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gW21hcCwgY2hhcmFjdGVyc10gPSBvcC5tX2JtSW5mby0+Y3Jl
YXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgsIGVuZEluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG1hcENvdW50ID0gbWFwLmNvdW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBjYW5kaWF0ZSBjaGFyYWN0ZXJzIGFyZSA8PSAyLCBjaGVja2luZyBl
YWNoIGlzIGJldHRlciB0aGFuIHVzaW5nIHZlY3Rvci4KICAgICAgICAgICAgICAgICAgICAgICAg
IEp1bXBMaXN0IG91dE9mTGVuZ3RoRmFpbHVyZTsKQEAgLTI0MTgsMjIgKzI0MjAsMTggQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbywgcHJpdmF0ZSBNYWNy
b0Fzc2VtYmxlciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXR0ZXJucyBsaWtlIC9b
XS8gaGF2ZSB6ZXJvIGNhbmRpZGF0ZXMuIFNpbmNlIGl0IGlzIHJhcmUsIHdlIGRvIG5vdCBkbyBu
b3RoaW5nIGZvciBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcENvdW50KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hcENvdW50IDw9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hh
cjMyIGNoYXJhY3RlcjEgPSBtYXAuZmluZEJpdCgwLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVyMSAhPSBCb3llck1vb3JlQml0bWFwOjpNYXA6OnNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVycy5pc1ZhbGlkKCkg
JiYgIWNoYXJhY3RlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydChCb3llck1vb3JlQ2hhcmFjdGVyQ2FuZGlkYXRlczo6bWF4U2l6ZSA9PSAy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjEgPSBjaGFy
YWN0ZXJzLmF0KDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyMiA9IDB4ZmY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcENvdW50ID09
IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyMiA9IG1hcC5m
aW5kQml0KGNoYXJhY3RlcjEgKyAxLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGNoYXJhY3RlcjIgIT0gQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpzaXplKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24oKSwgIkZv
dW5kIDEtb3ItMiBjaGFyYWN0ZXJzIGxvb2thaGVhZCBjaGFyYWN0ZXI6KDB4IiwgaGV4KGNoYXJh
Y3RlcjEpLCAiKSxjaGFyYWN0ZXIyOigiLCBoZXgoY2hhcmFjdGVyMiksICIpLGlzTWFza0VmZmVj
dGl2ZTooIiwgaXNNYXNrRWZmZWN0aXZlLCIpLHJhbmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBl
bmRJbmRleCwgIikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVy
cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIy
ID0gY2hhcmFjdGVycy5hdCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24oKSwgIkZvdW5kICIsIGNoYXJh
Y3RlcnMuc2l6ZSgpLCAiIGNoYXJhY3RlcnMgbG9va2FoZWFkIGNoYXJhY3RlcjooMHgiLCBoZXgo
Y2hhcmFjdGVyMSksICIpLGNoYXJhY3RlcjI6KCIsIGhleChjaGFyYWN0ZXIyKSwgIikscmFuZ2U6
WyIsIGJlZ2luSW5kZXgsICIsICIsIGVuZEluZGV4LCAiKSIpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb29wSGVhZCA9IGxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSBlbmRJbmRleCArIDEsIHJl
Z1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXNrRWZmZWN0aXZlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoQm95ZXJN
b29yZUJpdG1hcDo6bWFwTWFzayksIHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoY2hhcmFjdGVyMSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwQ291
bnQgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVycy5zaXpl
KCkgPiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihjaGFyYWN0ZXIyKSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVtcElmTm9B
dmFpbGFibGVJbnB1dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKQEAgLTM4OTUsNyArMzg5
Myw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckpJVEluZm8sIHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCB1bmljb2Rl
IGZsYWcuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjg2MTEKICAgICAgICAgaWYgKGRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplICYmICFtX3Bh
dHRlcm4uc3RpY2t5KCkgJiYgIW1fcGF0dGVybi51bmljb2RlKCkpIHsKLSAgICAgICAgICAgIGF1
dG8gYm1JbmZvID0gQm95ZXJNb29yZUluZm86OmNyZWF0ZShzdGQ6Om1pbjx1bnNpZ25lZD4oZGlz
anVuY3Rpb24tPm1fbWluaW11bVNpemUsIEJveWVyTW9vcmVJbmZvOjptYXhMZW5ndGgpKTsKKyAg
ICAgICAgICAgIGF1dG8gYm1JbmZvID0gQm95ZXJNb29yZUluZm86OmNyZWF0ZShtX2NoYXJTaXpl
LCBzdGQ6Om1pbjx1bnNpZ25lZD4oZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUsIEJveWVyTW9v
cmVJbmZvOjptYXhMZW5ndGgpKTsKICAgICAgICAgICAgIGlmIChjb2xsZWN0Qm95ZXJNb29yZUlu
Zm8oZGlzanVuY3Rpb24sIGN1cnJlbnRBbHRlcm5hdGl2ZUluZGV4LCBibUluZm8uZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgbV9vcHMubGFzdCgpLm1fYm1JbmZvID0gYm1JbmZvLnB0cigpOwog
ICAgICAgICAgICAgICAgIG1fYm1JbmZvcy5hcHBlbmQoV1RGTW92ZShibUluZm8pKTsKQEAgLTM5
NzUsMTEgKzM5NzMsNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
SVRJbmZvLCBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICsrY3Vyc29yOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckNsYXNzLm1fdGFi
bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJtSW5mby5zZXRBbGwoY3Vyc29yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYg
KCFjaGFyYWN0ZXJDbGFzcy5tX3Jhbmdlc1VuaWNvZGUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYm1JbmZvLmFkZFJhbmdlcyhjdXJzb3IsIGNoYXJhY3RlckNsYXNzLm1fcmFu
Z2VzVW5pY29kZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyQ2xhc3MubV9t
YXRjaGVzVW5pY29kZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgK
aW5kZXggYTdiNjI2N2MzZDY3OGZlOTI5YWI1NzU3ZTMyMGE0YWVkMzU4NTdlZi4uMWI3MTI0NTYz
YjU1MTY0MDI5OTYwYzJmMjQ1NzIxYzA5NDdlZTVjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJKSVQuaApAQCAtNjAsNiArNjAsNTQgQEAgZW51bSBjbGFzcyBKSVRGYWlsdXJlUmVhc29u
IDogdWludDhfdCB7CiAgICAgRXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlLAogfTsK
IAorY2xhc3MgQm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXMgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEKEJveWVyTW9vcmVDaGFyYWN0ZXJDYW5kaWRhdGVzKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNpemUgPSAyOworICAgIHVzaW5nIENoYXJh
Y3RlclZlY3RvciA9IFZlY3RvcjxVQ2hhcjMyLCBtYXhTaXplPjsKKworICAgIEJveWVyTW9vcmVD
aGFyYWN0ZXJDYW5kaWRhdGVzKCkgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7Cisg
ICAgICAgIG1fY2hhcmFjdGVycy5jbGVhcigpOworICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnMu
aXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFj
dGVycy5zaXplKCk7IH0KKyAgICBVQ2hhcjMyIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NoYXJhY3RlcnMuYXQoaW5kZXgpOyB9CisKKyAgICB2b2lkIGFkZChVQ2hhcjMyIGNo
YXJhY3RlcikKKyAgICB7CisgICAgICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIW1fY2hhcmFjdGVycy5jb250YWlucyhjaGFyYWN0ZXIpKSB7Cisg
ICAgICAgICAgICBpZiAobV9jaGFyYWN0ZXJzLnNpemUoKSA8IG1heFNpemUpCisgICAgICAgICAg
ICAgICAgbV9jaGFyYWN0ZXJzLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgbWVyZ2UoY29uc3QgQm95ZXJNb29yZUNoYXJhY3RlckNhbmRpZGF0ZXMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghb3RoZXIuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgb3RoZXIuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICAgICAgYWRkKG90aGVy
LmF0KGluZGV4KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENoYXJhY3RlclZlY3RvciBtX2No
YXJhY3RlcnM7CisgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Cit9OworCiBjbGFzcyBCb3ll
ck1vb3JlQml0bWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCb3llck1vb3JlQml0bWFw
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRChCb3llck1vb3JlQml0bWFwKTsKQEAgLTcy
LDQ4ICsxMjAsNTggQEAgY2xhc3MgQm95ZXJNb29yZUJpdG1hcCB7CiAKICAgICB1bnNpZ25lZCBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KICAgICBjb25zdCBNYXAmIG1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwOyB9Ci0gICAgYm9vbCBpc01hc2tFZmZlY3RpdmUoKSBjb25zdCB7
IHJldHVybiBtX2lzTWFza0VmZmVjdGl2ZTsgfQorICAgIGNvbnN0IEJveWVyTW9vcmVDaGFyYWN0
ZXJDYW5kaWRhdGVzJiBjaGFyYWN0ZXJDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFy
YWN0ZXJDYW5kaWRhdGVzOyB9CiAKLSAgICB2b2lkIGFkZChVQ2hhcjMyIGNoYXJhY3RlcikKKyAg
ICBib29sIGFkZChDaGFyU2l6ZSBjaGFyU2l6ZSwgVUNoYXIzMiBjaGFyYWN0ZXIpCiAgICAgewog
ICAgICAgICBpZiAoaXNBbGxTZXQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGNoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCAm
JiBjaGFyYWN0ZXIgPiAweGZmKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIG1f
Y2hhcmFjdGVyQ2FuZGlkYXRlcy5hZGQoY2hhcmFjdGVyKTsKICAgICAgICAgdW5zaWduZWQgcG9z
aXRpb24gPSBjaGFyYWN0ZXIgJiBtYXBNYXNrOwotICAgICAgICBpZiAocG9zaXRpb24gIT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlcikpCi0gICAgICAgICAgICBtX2lzTWFza0VmZmVj
dGl2ZSA9IHRydWU7CiAgICAgICAgIGlmICghbV9tYXAuZ2V0KHBvc2l0aW9uKSkgewogICAgICAg
ICAgICAgbV9tYXAuc2V0KHBvc2l0aW9uKTsKICAgICAgICAgICAgICsrbV9jb3VudDsKICAgICAg
ICAgfQorICAgICAgICByZXR1cm4gIWlzQWxsU2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRD
aGFyYWN0ZXJzKGNvbnN0IFZlY3RvcjxVQ2hhcjMyPiYgY2hhcmFjdGVycykKKyAgICB2b2lkIGFk
ZENoYXJhY3RlcnMoQ2hhclNpemUgY2hhclNpemUsIGNvbnN0IFZlY3RvcjxVQ2hhcjMyPiYgY2hh
cmFjdGVycykKICAgICB7CiAgICAgICAgIGlmIChpc0FsbFNldCgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAoY2hhcmFjdGVycy5zaXplKCkgPj0gbWFwU2l6ZSkgewotICAgICAg
ICAgICAgc2V0QWxsKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAoVUNoYXIz
MiBjaGFyYWN0ZXIgOiBjaGFyYWN0ZXJzKSB7CisgICAgICAgICAgICAvLyBFYXJseSByZXR1cm4g
c2luY2UgY2hhcmFjdGVycyBhcmUgc29ydGVkLgorICAgICAgICAgICAgaWYgKGNoYXJTaXplID09
IENoYXJTaXplOjpDaGFyOCAmJiBjaGFyYWN0ZXIgPiAweGZmKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGlmICghYWRkKGNoYXJTaXplLCBjaGFyYWN0ZXIpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmb3IgKFVDaGFyMzIgY2hhcmFj
dGVyIDogY2hhcmFjdGVycykKLSAgICAgICAgICAgIGFkZChjaGFyYWN0ZXIpOwogICAgIH0KIAot
ICAgIHZvaWQgYWRkUmFuZ2VzKGNvbnN0IFZlY3RvcjxDaGFyYWN0ZXJSYW5nZT4mIHJhbmdlcykK
KyAgICB2b2lkIGFkZFJhbmdlcyhDaGFyU2l6ZSBjaGFyU2l6ZSwgY29uc3QgVmVjdG9yPENoYXJh
Y3RlclJhbmdlPiYgcmFuZ2VzKQogICAgIHsKLSAgICAgICAgaWYgKHJhbmdlcy5zaXplKCkgPj0g
bWFwU2l6ZSkgewotICAgICAgICAgICAgc2V0QWxsKCk7CisgICAgICAgIGlmIChpc0FsbFNldCgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIGZvciAoQ2hhcmFjdGVy
UmFuZ2UgcmFuZ2UgOiByYW5nZXMpIHsKLSAgICAgICAgICAgIGlmIChpc0FsbFNldCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmFuZ2UuZW5kIC0gcmFuZ2UuYmVnaW4gKyAxKSA+PSBtYXBTaXplKSB7CisgICAgICAgICAg
ICBhdXRvIGJlZ2luID0gcmFuZ2UuYmVnaW47CisgICAgICAgICAgICBhdXRvIGVuZCA9IHJhbmdl
LmVuZDsKKyAgICAgICAgICAgIGlmIChjaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpIHsKKyAg
ICAgICAgICAgICAgICAvLyBFYXJseSByZXR1cm4gc2luY2UgcmFuZ2VzIGFyZSBzb3J0ZWQuCisg
ICAgICAgICAgICAgICAgaWYgKGJlZ2luID4gMHhmZikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChlbmQgPiAweGZmKQorICAgICAgICAgICAgICAgICAg
ICBlbmQgPSAweGZmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlbmQgLSBiZWdpbiArIDEpID49IG1hcFNpemUpIHsKICAgICAgICAgICAgICAg
ICBzZXRBbGwoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmb3IgKFVDaGFyMzIgY2hhcmFjdGVyID0gcmFuZ2UuYmVnaW47IGNoYXJhY3RlciA8
PSByYW5nZS5lbmQ7ICsrY2hhcmFjdGVyKQotICAgICAgICAgICAgICAgIGFkZChjaGFyYWN0ZXIp
OworICAgICAgICAgICAgZm9yIChVQ2hhcjMyIGNoYXJhY3RlciA9IGJlZ2luOyBjaGFyYWN0ZXIg
PD0gZW5kOyArK2NoYXJhY3RlcikgeworICAgICAgICAgICAgICAgIGlmICghYWRkKGNoYXJTaXpl
LCBjaGFyYWN0ZXIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNiw4ICsxODQsOCBAQCBjbGFzcyBCb3llck1vb3Jl
Qml0bWFwIHsKIAogcHJpdmF0ZToKICAgICBNYXAgbV9tYXAgeyB9OworICAgIEJveWVyTW9vcmVD
aGFyYWN0ZXJDYW5kaWRhdGVzIG1fY2hhcmFjdGVyQ2FuZGlkYXRlczsKICAgICB1bnNpZ25lZCBt
X2NvdW50IHsgMCB9OwotICAgIGJvb2wgbV9pc01hc2tFZmZlY3RpdmUgeyBmYWxzZSB9OwogfTsK
IAogI2lmIENQVShBUk02NEUpCg==
</data>
<flag name="review"
          id="457635"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>