<?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>227201</bug_id>
          
          <creation_ts>2021-06-20 21:51:58 -0700</creation_ts>
          <short_desc>Add a new pattern to instruction selector to use BFI supported by ARM64</short_desc>
          <delta_ts>2021-06-24 16:47:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>kdaveport7</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771214</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-20 21:51:58 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772217</commentid>
    <comment_count>1</comment_count>
      <attachid>432140</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-24 01:50:57 -0700</bug_when>
    <thetext>Created attachment 432140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772304</commentid>
    <comment_count>2</comment_count>
      <attachid>432140</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-24 09:22:17 -0700</bug_when>
    <thetext>Comment on attachment 432140
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:28
&gt; +        Pattern 2:
&gt; +            mask1 = (1 &lt;&lt; width) - 1
&gt; +            mask2 = ~(mask1 &lt;&lt; lsb)
&gt; +            d = ((n &amp; mask1) &lt;&lt; lsb) | (d &amp; mask2)
&gt; +
&gt; +        Pattern 3:
&gt; +            mask1 = (1 &lt;&lt; width) - 1
&gt; +            d = ((n &amp; mask1) &lt;&lt; lsb) | d

Is this right?

Say that d = 0x42424242
Say that mask1 = 0xFF
Say that mask2 = 0xFF00FFFF
Say that lsb = 16
Say that n = 0xBC

Note that 0x42 | 0xBC = 0xFE

With pattern 2, we will get:

((0xBC &amp; 0xFF) &lt;&lt; 16) | (0x42424242 &amp; 0xFF00FFFF)
= 0xBC0000 | 0x42004242
= 0x42BC4242

With pattern 3, we will get:

((0xBC &amp; 0xFF) &lt;&lt; 16) | 0x42424242
= 0xBC0000 | 0x42424242
= 0x42FE4242

I don&apos;t think they&apos;re equivalent patterns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772342</commentid>
    <comment_count>3</comment_count>
      <attachid>432184</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-24 10:20:12 -0700</bug_when>
    <thetext>Created attachment 432184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772347</commentid>
    <comment_count>4</comment_count>
      <attachid>432185</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-24 10:29:30 -0700</bug_when>
    <thetext>Created attachment 432185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772356</commentid>
    <comment_count>5</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-24 10:47:17 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #2)
&gt; Comment on attachment 432140 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432140&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:28
&gt; &gt; +        Pattern 2:
&gt; &gt; +            mask1 = (1 &lt;&lt; width) - 1
&gt; &gt; +            mask2 = ~(mask1 &lt;&lt; lsb)
&gt; &gt; +            d = ((n &amp; mask1) &lt;&lt; lsb) | (d &amp; mask2)
&gt; &gt; +
&gt; &gt; +        Pattern 3:
&gt; &gt; +            mask1 = (1 &lt;&lt; width) - 1
&gt; &gt; +            d = ((n &amp; mask1) &lt;&lt; lsb) | d
&gt; 
&gt; Is this right?
&gt; 
&gt; Say that d = 0x42424242
&gt; Say that mask1 = 0xFF
&gt; Say that mask2 = 0xFF00FFFF
&gt; Say that lsb = 16
&gt; Say that n = 0xBC
&gt; 
&gt; Note that 0x42 | 0xBC = 0xFE
&gt; 
&gt; With pattern 2, we will get:
&gt; 
&gt; ((0xBC &amp; 0xFF) &lt;&lt; 16) | (0x42424242 &amp; 0xFF00FFFF)
&gt; = 0xBC0000 | 0x42004242
&gt; = 0x42BC4242
&gt; 
&gt; With pattern 3, we will get:
&gt; 
&gt; ((0xBC &amp; 0xFF) &lt;&lt; 16) | 0x42424242
&gt; = 0xBC0000 | 0x42424242
&gt; = 0x42FE4242
&gt; 
&gt; I don&apos;t think they&apos;re equivalent patterns.

Thanks. I have fixed that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772432</commentid>
    <comment_count>6</comment_count>
      <attachid>432205</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-24 13:31:16 -0700</bug_when>
    <thetext>Created attachment 432205
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772476</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-24 15:50:26 -0700</bug_when>
    <thetext>Committed r279249 (239133@main): &lt;https://commits.webkit.org/239133@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432205.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772486</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-24 16:47:48 -0700</bug_when>
    <thetext>Committed r279253 (239137@main): &lt;https://commits.webkit.org/239137@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432140</attachid>
            <date>2021-06-24 01:50:57 -0700</date>
            <delta_ts>2021-06-24 10:20:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227201-20210624035054.patch</filename>
            <type>text/plain</type>
            <size>31194</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZmViMzViMTY4ZDE3NDQ0NWYyZDc2ZDcwYjAwODJiZjQ5NDg1ZmI5Li4yYjVmZmE4YzhjZjU5ZTMz
MGI4MGFiZDcwZGY0NzA1M2ZkNWVkMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAyMS0wNi0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBCRkkgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCaXRmaWVsZCBpbnNlcnQoQkZJKSwgbGVhdmluZyBv
dGhlciBiaXRzIHVuY2hhbmdlZC4gVGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIAorICAgICAgICBj
YW4gdXRpbGl6ZSB0aGlzIHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gQjMgSVIgYmVm
b3JlIGZ1cnRoZXIgQWlyIAorICAgICAgICBvcHRpbWl6YXRpb24uIEdpdmVuIHRoZSBvcGVyYXRp
b246CisKKyAgICAgICAgYmZpIGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGUgZXF1aXZh
bGVudCBwYXR0ZXJuIHdvdWxkIGJlOgorCisgICAgICAgIFBhdHRlcm4gMToKKyAgICAgICAgICAg
IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgICAgICAgICAgbWFzazIgPSB+
bWFzazEKKyAgICAgICAgICAgIGQgPSAoKG4gPDwgbHNiKSAmIG1hc2sxKSB8IChkICYgbWFzazIp
OworCisgICAgICAgIFBhdHRlcm4gMjoKKyAgICAgICAgICAgIG1hc2sxID0gKDEgPDwgd2lkdGgp
IC0gMQorICAgICAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICAgICAgICAgIGQg
PSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisKKyAgICAgICAgUGF0dGVybiAz
OgorICAgICAgICAgICAgbWFzazEgPSAoMSA8PCB3aWR0aCkgLSAxCisgICAgICAgICAgICBkID0g
KChuICYgbWFzazEpIDw8IGxzYikgfCBkCisKKyAgICAgICAgQ2hvb3NlIGQgPSAoKG4gJiBtYXNr
MSkgPDwgbHNiKSB8IGQgYXMgdGhlIGNhbm9uaWNhbCBmb3JtIGZvciBlYXNpZXIgcmVjb2duaXph
dGlvbi4KKyAgICAgICAgQ3VycmVudCBvcHRpbWl6ZXIgYWxyZWFkeSBoYXMgdGhlIHN0cmVuZ3Ro
IHJlZHVjdGlvbiBydWxlOgorICAgICAgICAgICAgVHVybiBUaGlzOiAobiA8PCBsc2IpICYgbWFz
azEpCisgICAgICAgICAgICBJbnRvIFRoaXM6IChuICYgbWFzazEpIDw8IGxzYikKKworICAgICAg
ICBUaGUgbmV3IHN0cmVuZ3RoIHJlZHVjdGlvbiBydWxlIGFkZGVkIGlzOgorICAgICAgICAgICAg
VHVybiBUaGlzOiBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCAoZCAmIG1hc2syKQorICAgICAg
ICAgICAgSW50byBUaGlzOiBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCBkCisKKyAgICAgICAg
V2l0aCBjb25zdHJhaW50czoKKyAgICAgICAgICAgIDMuIDAgPD0gbHNiIDwgZGF0YXNpemUKKyAg
ICAgICAgICAgIDQuIDAgPCB3aWR0aCA8IGRhdGFzaXplCisgICAgICAgICAgICA1LiBsc2IgKyB3
aWR0aCA8PSBkYXRhc3ppZQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAg
PSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAg
ICAgICAgSW50IEAyID0gbHNiCisgICAgICAgIEludCBAMyA9IG1hc2sKKyAgICAgICAgSW50IEA0
ID0gQml0QW5kKEAxLCBAMykKKyAgICAgICAgSW50IEA1ID0gU2hsKEA0LCBAMikKKyAgICAgICAg
SW50IEA2ID0gQml0T3IoQDAsIEA1KQorICAgICAgICBJbnQgQDcgPSBSZXR1cm4oQDYsIFRlcm1p
bmFsKQorCisgICAgICAgIEJlZm9yZSBBZGRpbmcgQkZJOgorICAgICAgICAvLyBPbGQgb3B0aW1p
emVkIEFJUgorICAgICAgICBBbmQgICBtYXNrLCAleDEsICV4MSwgQDQKKyAgICAgICAgTHNoaWZ0
ICV4MSwgbHNiLCAleDEsIEA1CisgICAgICAgIE9yICAgICAleDEsICV4MCwgJXgwLCBANgorICAg
ICAgICBSZXQgICAgJXgwLCAgICAgICAgICAgQDcKKworICAgICAgICBBZnRlciBBZGRpbmcgQkZJ
OgorICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBCaXRGaWVsZEluc2VydCAl
eDEsIGxzYiwgd2lkdGgsICV4MCwgQDYKKyAgICAgICAgUmV0ICAgICAgICAgICAgJXgwLCAgICAg
ICAgICAgICAgICAgIEA3CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpiaXRGaWVsZEluc2VydDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Yml0RmllbGRJbnNlcnQ2NCk6
CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFVi
ZngzMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZ4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0VWJm
aXozMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejY0KToKKyAgICAgICAgKEpTQzo6dGVzdEJp
dEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0Qml0RmllbGRJbnNlcnQ2NCk6Cisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIuY3BwOgorICAgICAgICAodGVzdEJp
dEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAodGVzdEJpdEZpZWxkSW5zZXJ0NjQpOgorICAgICAg
ICAoYWRkQml0VGVzdHMpOgorCiAyMDIxLTA2LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBCYXNlIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSdz
IGRlZmF1bHQgdmFsdWUgb24gR2lnYWNhZ2U6Omhhc0NhcGFjaXR5VG9Vc2VMYXJnZUdpZ2FjYWdl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmMzUzZmNmMDZkNTQwMDYzNmIyNDRhNWE5MTI5ZGU2ZWU2NTBjYzg2
Li44YmE1YmNjZTQ1YWYxMWI4NmMwMTdhYTk2OTAwODQ1ZDFhM2YwZWQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtMjc1MywxMiArMjc1MywxNSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQml0IGZpZWxk
IG9wZXJhdGlvbnM6CisgICAgdm9pZCBiaXRGaWVsZEluc2VydDMyKFJlZ2lzdGVySUQgc291cmNl
LCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJmaTwzMj4oZGVzdCwgc291cmNlLCBsc2IubV92
YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQogCiAgICAgLy8gZGVzdEJpdE9mZnNldCBpcyB0
aGUgdG9wIGJpdCBvZiB0aGUgZGVzdGluYXRpb24gd2hlcmUgdGhlIGJpdHMgc2hvdWxkIGJlIGNv
cGllZCB0by4gWmVybyBpcyB0aGUgbG93ZXN0IG9yZGVyIGJpdC4KLSAgICB2b2lkIGJpdEZpZWxk
SW5zZXJ0NjQoUmVnaXN0ZXJJRCBzb3VyY2UsIHVuc2lnbmVkIGRlc3RCaXRPZmZzZXQsIHVuc2ln
bmVkIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBiaXRGaWVsZEluc2VydDY0KFJl
Z2lzdGVySUQgc291cmNlLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh3aWR0aCA8PSA2NCAtIGRlc3RC
aXRPZmZzZXQgJiYgZGVzdEJpdE9mZnNldCA8IDY0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIuYmZp
PDY0PihkZXN0LCBzb3VyY2UsIGRlc3RCaXRPZmZzZXQsIHdpZHRoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYmZpPDY0PihkZXN0LCBzb3VyY2UsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsK
ICAgICB9CiAKICAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFsIGNvbnRyb2wgZmxvdyBvcGVyYXRp
b25zOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRl
eCBlMzk0NmUyYjA5ZmJlYmIyYjI0MDYwNTg4NWRhMDcyNjk0NDgwYmM1Li41MDI5ZDIxNGJmZTVl
MjU1MDZhMWJiMDAwMzZkODI5ZGRlMzc2ZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMTA4OSwzMCArMTA4OSw2IEBAIHZvaWQgdGVzdFN1
YjY0QXJnSW1tNjQoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0VWJmeDMyKCkKLXsKLSAgICB1aW50
MzJfdCBzcmMgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwg
MSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OwotICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7
Ci0gICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKLSAgICAgICAgICAgIGlmIChsc2Ig
Pj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgewotICAgICAgICAgICAgICAg
IGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaml0LnViZngzMihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LnJldCgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIENIRUNLX0VR
KGludm9rZTx1aW50MzJfdD4odWJmeDMyLCBzcmMpLCAoKHNyYyA+PiBsc2IpICYgKCgxVSA8PCB3
aWR0aCkgLSAxVSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9p
ZCB0ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkKIHsKICAgICAvLyBkID0gYSAtIFNFeHQzMihuKSAq
ICBTRXh0MzIobSkKQEAgLTExMzYsMTcgKzExMTIsNDEgQEAgdm9pZCB0ZXN0TXVsU3ViU2lnbkV4
dGVuZDMyKCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdFViZngzMigpCit7CisgICAgdWludDMyX3Qg
c3JjID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUs
IDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAoYXV0byBsc2Ig
OiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAgICAgICAgICAg
IGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgeworICAgICAg
ICAgICAgICAgIGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnViZngzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShpbnZva2U8dWludDMyX3Q+KHViZngzMiwgc3JjKSwgKChzcmMgPj4gbHNiKSAmICgo
MVUgPDwgd2lkdGgpIC0gMVUpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKIHZvaWQgdGVzdFViZng2NCgpCiB7CiAgICAgdWludDY0X3Qgc3JjID0gMHhmZmZmZmZmZmZm
ZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgMzAsIDMxLCAzMiwg
NjIsIDYzLCA2NCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywg
MzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CiAgICAgZm9yIChhdXRvIGxzYiA6IGlt
bXMpIHsKICAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewogICAgICAgICAgICAgaWYg
KGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDY0KSB7CiAgICAgICAgICAg
ICAgICAgYXV0byB1YmZ4NjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKIAotICAgICAgICAg
ICAgICAgICAgICBqaXQudWJmeDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnViZng2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCksIAogICAg
ICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpAQCAtMTE2Mywx
NCArMTE2MywxNCBAQCB2b2lkIHRlc3RVYmZ4NjQoKQogdm9pZCB0ZXN0VWJmaXozMigpCiB7CiAg
ICAgdWludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMg
PSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9Owog
ICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CiAgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGlt
bXMpIHsKICAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lk
dGggPCAzMikgewogICAgICAgICAgICAgICAgIGF1dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGppdC51YmZpejMyKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAgICAgICAgaml0LnViZml6MzIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCAKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGxzYiksIAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod2lkdGgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKQEAgLTExODgsMTQgKzExODgsMTQgQEAgdm9pZCB0ZXN0VWJmaXozMigp
CiB2b2lkIHRlc3RVYmZpejY0KCkKIHsKICAgICB1aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZm
ZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2
MiwgNjMsIDY0IH07CisgICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCA1LCA3LCAz
MCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2MywgNjQgfTsKICAgICBmb3IgKGF1dG8gbHNiIDogaW1t
cykgewogICAgICAgICBmb3IgKGF1dG8gd2lkdGggOiBpbW1zKSB7CiAgICAgICAgICAgICBpZiAo
bHNiID49IDAgJiYgd2lkdGggPiAwICYmIGxzYiArIHdpZHRoIDwgNjQpIHsKICAgICAgICAgICAg
ICAgICBhdXRvIHViZml6NjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKIAotICAgICAgICAg
ICAgICAgICAgICBqaXQudWJmaXo2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgCisgICAgICAg
ICAgICAgICAgICAgIGppdC51YmZpejY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjA5
LDYgKzEyMDksNjYgQEAgdm9pZCB0ZXN0VWJmaXo2NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisK
K3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0MzIoKQoreworICAgIHVpbnQzMl90IHNyYyA9IDB4ZmZm
ZmZmZmY7CisgICAgdWludDMyX3QgZHN0ID0gMHhmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9
OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6
IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsg
d2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1dG8gYmZpMzIgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuYml0RmllbGRJbnNlcnQ2NChH
UFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVpbnQzMl90
IG1hc2sxID0gKDFVIDw8IHdpZHRoKSAtIDFVOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG1h
c2syID0gKG1hc2sxIDw8IGxzYikgXiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHJocyA9IGludm9rZTx1aW50MzJfdD4oYmZpMzIsIHNyYywgZHN0KTsKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCBsaHMgPSAoKHNyYyAmIG1hc2sxKSA8PCBsc2IpIHwgKGRzdCAmIG1hc2sy
KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShyaHMsIGxocyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0NjQoKQoreworICAg
IHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICB1aW50NjRfdCBkc3QgPSAw
eGYwZjBmMGYwZjBmMGYwZjA7CisgICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCA1
LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2MywgNjQgfTsKKyAgICBmb3IgKGF1dG8gbHNi
IDogaW1tcykgeworICAgICAgICBmb3IgKGF1dG8gd2lkdGggOiBpbW1zKSB7CisgICAgICAgICAg
ICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYmIGxzYiArIHdpZHRoIDwgNjQpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGJmaTY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaml0LmJpdEZpZWxkSW5zZXJ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxz
YiksIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
d2lkdGgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMSA9ICgxVUxMIDw8IHdp
ZHRoKSAtIDFVTEw7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzazIgPSAobWFzazEgPDwg
bHNiKSBeIDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByaHMg
PSBpbnZva2U8dWludDY0X3Q+KGJmaTY0LCBzcmMsIGRzdCk7CisgICAgICAgICAgICAgICAgdWlu
dDY0X3QgbGhzID0gKChzcmMgJiBtYXNrMSkgPDwgbHNiKSB8IChkc3QgJiBtYXNrMik7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEocmhzLCBsaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQogI2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNNjQpCkBAIC0zMzgwLDYgKzM0NDAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFViZng2NCgp
KTsKICAgICBSVU4odGVzdFViZml6MzIoKSk7CiAgICAgUlVOKHRlc3RVYmZpejY0KCkpOworICAg
IFJVTih0ZXN0Qml0RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0
NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02
NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNzk5YjRj
NmE3ZDI4NDE0MWU2MjgxYTUyZjY5YmI4MWI4ZGQwMjIxYi4uOGI5Y2IzMTFhZmViOWM3OWQ4YjBm
ZTVhMzYwMDQwNTdiODlhMTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKQEAgLTI3OTYsOCArMjc5Niw0NSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBCaXRPcjogewotICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgT3I2NCwg
T3JEb3VibGUsIE9yRmxvYXQsIENvbW11dGF0aXZlPigKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQg
PSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUt
PmNoaWxkKDEpOworCisgICAgICAgICAgICAvLyBkID0gKChuICYgbWFzaykgPDwgbHNiKSB8IGQg
V2hlcmUgbWFzayA9ICgoMSA8PCB3aWR0aCkgLSAxKQorICAgICAgICAgICAgYXV0byB0cnlBcHBl
bmRCRkkgPSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoQml0RmllbGRJbnNl
cnQzMiwgQml0RmllbGRJbnNlcnQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwg
QXJnOjpUbXApKSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBTaGwgfHwgIWNhbkJlSW50ZXJuYWwobGVmdCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIFZh
bHVlKiBhbmRWYWx1ZSA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBs
c2JWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIGlmIChhbmRWYWx1ZS0+
b3Bjb2RlKCkgIT0gQml0QW5kIHx8ICFjYW5CZUludGVybmFsKGFuZFZhbHVlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghaW1tKGxzYlZh
bHVlKSB8fCBsc2JWYWx1ZS0+YXNJbnQoKSA8IDAgfHwgIWFuZFZhbHVlLT5jaGlsZCgxKS0+aGFz
SW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogblZhbHVlID0gYW5kVmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHVp
bnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90
IG1hc2sgPSBhbmRWYWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgaWYg
KCFtYXNrIHx8IG1hc2sgJiAobWFzayArIDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBXVEY6OmJpdENvdW50KG1h
c2spOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gb3Bjb2RlID09IEJpdEZp
ZWxkSW5zZXJ0MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlmIChsc2IgKyB3aWR0aCA+
IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgICAgICBUbXAgcmVzdWx0ID0gdG1wKG1fdmFsdWUpOworICAgICAgICAgICAgICAgIGFwcGVu
ZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoblZhbHVlKSwgaW1tKGxzYlZh
bHVlKSwgaW1tKHdpZHRoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5h
bChhbmRWYWx1ZSk7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBp
ZiAodHJ5QXBwZW5kQkZJKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRCRkkocmlnaHQsIGxlZnQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYXBwZW5kQmluT3A8T3Iz
MiwgT3I2NCwgT3JEb3VibGUsIE9yRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDNkZGFkZTc3MDhlYjRjN2I0MmM1N2JiYTA2
MjljNmU5ZmRmNjU4ZmQuLmEzYmZmYjBiMTUyNTM3ZDZiOWRkNzY3OGFlNjZkZTU0ZTcwYTk0NmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAg
LTEyMDIsNiArMTIwMiw1NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJpdE9yOgogICAgICAg
ICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEJpdE9yKFNobChCaXRBbmQobiwgbWFzazEpLCBsc2IpLCBCaXRBbmQoZCwgbWFzazIpKQorICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRPcihTaGwoQml0QW5kKG4sIG1hc2sxKSwgbHNiKSwg
ZCkKKyAgICAgICAgICAgIC8vIENvbmRpdGlvbnM6IAorICAgICAgICAgICAgLy8gMS4gbWFzazEg
PSAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICAgICAgICAgIC8vIDIuIG1hc2syID0gKG1hc2sxIDw8
IGxzYikgXiAweGZmZmZmZmZmCisgICAgICAgICAgICAvLyAzLiAwIDw9IGxzYiA8IGRhdGFzaXpl
CisgICAgICAgICAgICAvLyA0LiAwIDwgd2lkdGggPCBkYXRhc2l6ZQorICAgICAgICAgICAgLy8g
NS4gbHNiICsgd2lkdGggPD0gZGF0YXN6aWUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHRyeVNoaWZ0QW5kID0gWyZdIChWYWx1ZSomIGxlZnQsIFZhbHVlKiYgcmlnaHQpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gU2hsIHx8
IHJpZ2h0LT5vcGNvZGUoKSAhPSBCaXRBbmQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSBsZWZ0
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gbGVmdC0+
Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0QW5kVmFsdWUtPm9wY29kZSgp
ICE9IEJpdEFuZCB8fCAhbHNiVmFsdWUtPmhhc0ludCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUx
ID0gbGVmdEFuZFZhbHVlLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1h
c2tWYWx1ZTIgPSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWFz
a1ZhbHVlMS0+aGFzSW50KCkgfHwgIW1hc2tWYWx1ZTItPmhhc0ludCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBt
YXNrMSA9IG1hc2tWYWx1ZTEtPmFzSW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWFz
azEgfHwgbWFzazEgJiAobWFzazEgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbHNiID0gbHNiVmFsdWUtPmFz
SW50KCk7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHdpZHRoID0gV1RGOjpiaXRDb3Vu
dChtYXNrMSk7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1
ZS0+dHlwZSgpID09IEludDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxz
YiArIHdpZHRoID4gZGF0YXNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzazIgPSBtYXNrVmFsdWUyLT5h
c0ludCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXNWYWxpZE1hc2syID0gWyZdICgp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9ICgobWFz
azEgPDwgbHNiKSBeIG1hc2syKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxv
d2VyU2V0ID0gMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZ1
bGxTZXQgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGF0YXNpemUgPT0gMzIgPyAhKChtYXNrICYgbG93ZXJTZXQpIF4gbG93ZXJTZXQpIDogISht
YXNrIF4gZnVsbFNldCk7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc1ZhbGlkTWFzazIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJpZ2h0LT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgIGlmICh0cnlTaGlmdEFuZChtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1
ZS0+Y2hpbGQoMSkpIAorICAgICAgICAgICAgICAgICAgICB8fCB0cnlTaGlmdEFuZChtX3ZhbHVl
LT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcihjb25z
dGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIHwg
Y29uc3RhbnQyCiAgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0T3IgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+Yml0T3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXgg
OTYyZDU0MGUwOGNlYzUyNTA1ZDk0MDM0YjU2MzZmZWU3MWQyOWU5Mi4uZTJhZjAwYWE0OTgzODZl
YmNiYmY2ODhmZWYzYzAzNTU0NjFkOTcyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0zNzUsNiArMzc1LDEyIEBAIGFybTY0OiBVYmZp
ejMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKIGFybTY0OiBVYmZpejY0IFU6Rzo2
NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAogICAgIFRtcCwgSW1tLCBJbW0sIFRtcAogCithcm02
NDogQml0RmllbGRJbnNlcnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBEOkc6MzIKKyAgICBU
bXAsIEltbSwgSW1tLCBUbXAKKworYXJtNjQ6IEJpdEZpZWxkSW5zZXJ0NjQgVTpHOjY0LCBVOkc6
MzIsIFU6RzozMiwgRDpHOjY0CisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisKIDY0OiBBbmQ2NCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcAogICAgIGFybTY0OiBCaXRJ
bW02NCwgVG1wLCBUbXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCA2Yjk2YjNiODNi
MjFjYWM4NWFhMjhlZmVjMTlmZGNiOTllOGFmMjM3Li40NGMwYTUwYmExMTI5MGNlNjFlNDhkNjgz
YTQxY2VkMWJiYjVjMjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC00MjgsNiAr
NDI4LDggQEAgdm9pZCB0ZXN0VWJmaXo2NEFuZFNoaWZ0VmFsdWVNYXNrKCk7CiB2b2lkIHRlc3RV
YmZpejY0QW5kU2hpZnRNYXNrVmFsdWUoKTsKIHZvaWQgdGVzdFViZml6NjRTaGlmdEFuZCgpOwog
dm9pZCB0ZXN0VWJmaXo2NEFuZFNoaWZ0KCk7Cit2b2lkIHRlc3RCaXRGaWVsZEluc2VydDMyKCk7
Cit2b2lkIHRlc3RCaXRGaWVsZEluc2VydDY0KCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRS
aWdodEFyZ0ltbU1hc2szMigpOwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1N
YXNrNjQoKTsKIHZvaWQgdGVzdEJhc2ljU2VsZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiM18yLmNwcAppbmRleCBkZmVhNDZlZWQ4YTVjYTIxNzdkNzVmNWY0ZmQzMGVlNmQxNGJhNzAw
Li5mODkzZDY4M2UwMTI5ODljYTQ2YmIzYzRjMWY4MDI5NGQ1Y2UxMTY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTMxNTgsNiArMzE1OCwyNTggQEAgdm9pZCB0ZXN0
VWJmaXo2NEFuZFNoaWZ0KCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0MzIo
KQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAg
ICAgICByZXR1cm47CisgICAgdWludDMyX3QgZCA9IDB4ZjBmMGYwZjA7CisgICAgdWludDMyX3Qg
biA9IDB4ZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQzMl90PiBsc2JzID0geyAxLCAyLCAxNCwg
MzAsIDMwIH07CisgICAgVmVjdG9yPHVpbnQzMl90PiB3aWR0aHMgPSB7IDMwLCAzLCAxNywgMSwg
MiB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCAo
ZCAmIG1hc2syKQorICAgIC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAxKQorICAg
IC8vICAgICAgICBtYXNrMiA9IChtYXNrMSA8PCBsc2IpIF4gMHhmZmZmZmZmZgorICAgIGF1dG8g
dGVzdDEgPSBbJl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzazEsIHVpbnQzMl90IG1hc2sy
KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBsc2JW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2Ip
OworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUyID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKwor
ICAgICAgICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2tWYWx1ZTEpOworICAgICAgICBWYWx1ZSog
c2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwg
bGVmdEFuZFZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIFZhbHVlKiByaWdodEFuZFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBkVmFsdWUsIG1h
c2tWYWx1ZTIpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIHJpZ2h0QW5kVmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiYmZp
Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBkLCBuKTsKKyAgICB9
OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gKGQgJiBtYXNrMikgfCAoKG4gJiBtYXNrMSkg
PDwgbHNiKSAKKyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICAv
LyAgICAgICAgbWFzazIgPSAobWFzazEgPDwgbHNiKSBeIDB4ZmZmZmZmZmYKKyAgICBhdXRvIHRl
c3QyID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2sxLCB1aW50MzJfdCBtYXNrMikg
LT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogZFZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogblZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogbHNiVmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsK
KyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlMiA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMik7CisKKyAg
ICAgICAgVmFsdWUqIGxlZnRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwgZFZhbHVlLCBtYXNrVmFsdWUyKTsKKyAgICAgICAgVmFsdWUqIHJp
Z2h0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2lu
KCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCByaWdodEFuZFZhbHVlLCBs
c2JWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbGVmdEFuZFZhbHVlLCBzaGlmdFZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImJmaSIp
OworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgZCwgbik7CisgICAgfTsK
KworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9ICgobiAmIG1hc2sxKSA8PCBsc2IpIHwgZAorICAg
IC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAxKQorICAgIGF1dG8gdGVzdDMgPSBb
Jl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzazEpIC0+IHVpbnQzMl90IHsKKyAgICAgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIGRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFs
dWUxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sx
KTsKKworICAgICAgICBWYWx1ZSogYW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAgIFZhbHVl
KiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigp
LCBhbmRWYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIGRW
YWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAg
ICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJiZmkiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIGQsIG4pOwor
ICAgIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBkIHwgKChuICYgbWFzazEpIDw8IGxz
YikKKyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICBhdXRvIHRl
c3Q0ID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2sxKSAtPiB1aW50MzJfdCB7Cisg
ICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSog
bWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBtYXNrMSk7CisKKyAgICAgICAgVmFsdWUqIGFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2tWYWx1ZTEpOworICAgICAg
ICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBP
cmlnaW4oKSwgYW5kVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBkVmFsdWUs
IHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
KyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAiYmZpIik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBk
LCBuKTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHVpbnQzMl90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQz
Ml90IG1hc2sxID0gKDFVIDw8IHdpZHRocy5hdChpKSkgLSAxVTsKKyAgICAgICAgdWludDMyX3Qg
bWFzazIgPSAobWFzazEgPDwgbHNiKSBeIDB4ZmZmZmZmZmY7CisgICAgICAgIENIRUNLKHRlc3Qx
KGxzYiwgbWFzazEsIG1hc2syKSA9PSAoKChuICYgbWFzazEpIDw8IGxzYikgfCAoZCAmIG1hc2sy
KSkpOworICAgICAgICBDSEVDSyh0ZXN0Mihsc2IsIG1hc2sxLCBtYXNrMikgPT0gKChkICYgbWFz
azIpIHwgKChuICYgbWFzazEpIDw8IGxzYikpKTsKKyAgICAgICAgQ0hFQ0sodGVzdDMobHNiLCBt
YXNrMSkgPT0gKCgobiAmIG1hc2sxKSA8PCBsc2IpIHwgZCkpOworICAgICAgICBDSEVDSyh0ZXN0
NChsc2IsIG1hc2sxKSA9PSAoZCB8ICgobiAmIG1hc2sxKSA8PCBsc2IpKSk7CisgICAgfQorfQor
Cit2b2lkIHRlc3RCaXRGaWVsZEluc2VydDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQ2NF90IGQg
PSAweGYwZjBmMGYwZjBmMGYwZjA7CisgICAgdWludDY0X3QgbiA9IDB4ZmZmZmZmZmZmZmZmZmZm
ZjsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxzYnMgPSB7IDEsIDMwLCAxNCwgNjIsIDYyIH07Cisg
ICAgVmVjdG9yPHVpbnQ2NF90PiB3aWR0aHMgPSB7IDYyLCAzMywgMTcsIDEsIDIgfTsKKworICAg
IC8vIFRlc3QgUGF0dGVybjogZCA9ICgobiAmIG1hc2sxKSA8PCBsc2IpIHwgKGQgJiBtYXNrMikK
KyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICAvLyAgICAgICAg
bWFzazIgPSAobWFzazEgPDwgbHNiKSBeIDB4ZmZmZmZmZmYKKyAgICBhdXRvIHRlc3QxID0gWyZd
ICh1aW50NjRfdCBsc2IsIHVpbnQ2NF90IG1hc2sxLCB1aW50NjRfdCBtYXNrMikgLT4gdWludDY0
X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogZFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEgPSByb290LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSogbWFz
a1ZhbHVlMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBt
YXNrMik7CisKKyAgICAgICAgVmFsdWUqIGxlZnRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNrVmFsdWUxKTsKKyAgICAg
ICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwg
T3JpZ2luKCksIGxlZnRBbmRWYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICBWYWx1ZSogcmlnaHRB
bmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwg
ZFZhbHVlLCBtYXNrVmFsdWUyKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCByaWdo
dEFuZFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImJmaSIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgZCwg
bik7CisgICAgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChkICYgbWFzazIpIHwgKChu
ICYgbWFzazEpIDw8IGxzYikgCisgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAt
IDEpCisgICAgLy8gICAgICAgIG1hc2syID0gKG1hc2sxIDw8IGxzYikgXiAweGZmZmZmZmZmCisg
ICAgYXV0byB0ZXN0MiA9IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrMSwgdWludDY0
X3QgbWFzazIpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIGRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUx
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sxKTsK
KyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOworCisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGRWYWx1ZSwg
bWFza1ZhbHVlMik7CisgICAgICAgIFZhbHVlKiByaWdodEFuZFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2tWYWx1ZTEpOwor
ICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
U2hsLCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICByb290LT5h
cHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2lu
KCksIGxlZnRBbmRWYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJiZmkiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1
aW50NjRfdD4oKmNvZGUsIGQsIG4pOworICAgIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQg
PSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IGQKKyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwg
d2lkdGgpIC0gMSkKKyAgICBhdXRvIHRlc3QzID0gWyZdICh1aW50NjRfdCBsc2IsIHVpbnQ2NF90
IG1hc2sxKSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFs
dWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlMSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisK
KyAgICAgICAgVmFsdWUqIGFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2tWYWx1ZTEpOworICAgICAgICBWYWx1ZSogc2hp
ZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgYW5k
VmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAor
ICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCBkVmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiYmZp
Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBkLCBuKTsKKyAgICB9
OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gZCB8ICgobiAmIG1hc2sxKSA8PCBsc2IpCisg
ICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpCisgICAgYXV0byB0ZXN0NCA9
IFsmXSAodWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrMSkgLT4gdWludDY0X3QgeworICAgICAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgICAgICBWYWx1ZSogZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogbHNiVmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbHNiKTsK
KyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworCisgICAgICAgIFZhbHVlKiBhbmRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNr
VmFsdWUxKTsKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFNobCwgT3JpZ2luKCksIGFuZFZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBP
cmlnaW4oKSwgZFZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImJmaSIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVp
bnQ2NF90PigqY29kZSwgZCwgbik7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbHNicy5zaXplKCk7ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkp
OworICAgICAgICB1aW50NjRfdCBtYXNrMSA9ICgxVUxMIDw8IHdpZHRocy5hdChpKSkgLSAxVUxM
OworICAgICAgICB1aW50NjRfdCBtYXNrMiA9IChtYXNrMSA8PCBsc2IpIF4gMHhmZmZmZmZmZmZm
ZmZmZmZmOworICAgICAgICBDSEVDSyh0ZXN0MShsc2IsIG1hc2sxLCBtYXNrMikgPT0gKCgobiAm
IG1hc2sxKSA8PCBsc2IpIHwgKGQgJiBtYXNrMikpKTsKKyAgICAgICAgQ0hFQ0sodGVzdDIobHNi
LCBtYXNrMSwgbWFzazIpID09ICgoZCAmIG1hc2syKSB8ICgobiAmIG1hc2sxKSA8PCBsc2IpKSk7
CisgICAgICAgIENIRUNLKHRlc3QzKGxzYiwgbWFzazEpID09ICgoKG4gJiBtYXNrMSkgPDwgbHNi
KSB8IGQpKTsKKyAgICAgICAgQ0hFQ0sodGVzdDQobHNiLCBtYXNrMSkgPT0gKGQgfCAoKG4gJiBt
YXNrMSkgPDwgbHNiKSkpOworICAgIH0KK30KKwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0Umln
aHRBcmdJbW1NYXNrMzIoKQogewogICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYgbWFz
ayAKQEAgLTQwNTAsNiArNDMwMiw4IEBAIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hhciogZmls
dGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0
ZXN0VWJmaXo2NEFuZFNoaWZ0TWFza1ZhbHVlKCkpOwogICAgIFJVTih0ZXN0VWJmaXo2NFNoaWZ0
QW5kKCkpOwogICAgIFJVTih0ZXN0VWJmaXo2NEFuZFNoaWZ0KCkpOworICAgIFJVTih0ZXN0Qml0
RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0NjQoKSk7CiAgICAg
UlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4odGVz
dEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5k
QXJncyg0MywgNDMpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432184</attachid>
            <date>2021-06-24 10:20:12 -0700</date>
            <delta_ts>2021-06-24 10:29:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227201-20210624122011.patch</filename>
            <type>text/plain</type>
            <size>24072</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZmViMzViMTY4ZDE3NDQ0NWYyZDc2ZDcwYjAwODJiZjQ5NDg1ZmI5Li4wYzM4MjgxNzBhOGExZjk4
NzZlN2UxMzQwMThmMDlkMWZhYzliMzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MCBAQAorMjAyMS0wNi0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBCRkkgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCaXRmaWVsZCBpbnNlcnQoQkZJKSwgbGVhdmluZyBv
dGhlciBiaXRzIHVuY2hhbmdlZC4gVGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIAorICAgICAgICBj
YW4gdXRpbGl6ZSB0aGlzIHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gQjMgSVIgYmVm
b3JlIGZ1cnRoZXIgQWlyIAorICAgICAgICBvcHRpbWl6YXRpb24uIEdpdmVuIHRoZSBvcGVyYXRp
b246CisKKyAgICAgICAgYmZpIGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGUgZXF1aXZh
bGVudCBwYXR0ZXJuIHdvdWxkIGJlOgorCisgICAgICAgIFBhdHRlcm4gMToKKyAgICAgICAgICAg
IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgICAgICAgICAgbWFzazIgPSB+
bWFzazEKKyAgICAgICAgICAgIGQgPSAoKG4gPDwgbHNiKSAmIG1hc2sxKSB8IChkICYgbWFzazIp
OworCisgICAgICAgIFBhdHRlcm4gMjoKKyAgICAgICAgICAgIG1hc2sxID0gKDEgPDwgd2lkdGgp
IC0gMQorICAgICAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICAgICAgICAgIGQg
PSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisKKyAgICAgICAgQ3VycmVudCBv
cHRpbWl6ZXIgYWxyZWFkeSBoYXMgdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiBydWxlOgorICAgICAg
ICAgICAgVHVybiBUaGlzOiAobiA8PCBsc2IpICYgbWFzazEpCisgICAgICAgICAgICBJbnRvIFRo
aXM6IChuICYgbWFzazEpIDw8IGxzYikKKworICAgICAgICBUaGVuLCBkID0gKChuICYgbWFzazEp
IDw8IGxzYikgfCAoZCAmIG1hc2syKSBpcyB0aGUgY2Fub25pY2FsIGZvcm0uCisKKyAgICAgICAg
V2l0aCBjb25zdHJhaW50czoKKyAgICAgICAgICAgIDEuIDAgPD0gbHNiIDwgZGF0YXNpemUKKyAg
ICAgICAgICAgIDIuIDAgPCB3aWR0aCA8IGRhdGFzaXplCisgICAgICAgICAgICAzLiBsc2IgKyB3
aWR0aCA8PSBkYXRhc3ppZQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAg
PSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAg
ICAgICAgSW50IEAyID0gbHNiCisgICAgICAgIEludCBAMyA9IG1hc2sKKyAgICAgICAgSW50IEA0
ID0gQml0QW5kKEAxLCBAMykKKyAgICAgICAgSW50IEA1ID0gU2hsKEA0LCBAMikKKyAgICAgICAg
SW50IEA2ID0gQml0T3IoQDAsIEA1KQorICAgICAgICBJbnQgQDcgPSBSZXR1cm4oQDYsIFRlcm1p
bmFsKQorCisgICAgICAgIEJlZm9yZSBBZGRpbmcgQkZJOgorICAgICAgICAvLyBPbGQgb3B0aW1p
emVkIEFJUgorICAgICAgICBBbmQgICBtYXNrLCAleDEsICV4MSwgQDQKKyAgICAgICAgTHNoaWZ0
ICV4MSwgbHNiLCAleDEsIEA1CisgICAgICAgIE9yICAgICAleDEsICV4MCwgJXgwLCBANgorICAg
ICAgICBSZXQgICAgJXgwLCAgICAgICAgICAgQDcKKworICAgICAgICBBZnRlciBBZGRpbmcgQkZJ
OgorICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBCaXRGaWVsZEluc2VydCAl
eDEsIGxzYiwgd2lkdGgsICV4MCwgQDYKKyAgICAgICAgUmV0ICAgICAgICAgICAgJXgwLCAgICAg
ICAgICAgICAgICAgIEA3CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpiaXRGaWVsZEluc2VydDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Yml0RmllbGRJbnNlcnQ2NCk6
CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFVi
ZngzMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZ4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0VWJm
aXozMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejY0KToKKyAgICAgICAgKEpTQzo6dGVzdEJp
dEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0Qml0RmllbGRJbnNlcnQ2NCk6Cisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICog
YjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIuY3BwOgorICAgICAgICAodGVzdEJp
dEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAodGVzdEJpdEZpZWxkSW5zZXJ0NjQpOgorICAgICAg
ICAoYWRkQml0VGVzdHMpOgorCiAyMDIxLTA2LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBCYXNlIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSdz
IGRlZmF1bHQgdmFsdWUgb24gR2lnYWNhZ2U6Omhhc0NhcGFjaXR5VG9Vc2VMYXJnZUdpZ2FjYWdl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmMzUzZmNmMDZkNTQwMDYzNmIyNDRhNWE5MTI5ZGU2ZWU2NTBjYzg2
Li44YmE1YmNjZTQ1YWYxMWI4NmMwMTdhYTk2OTAwODQ1ZDFhM2YwZWQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtMjc1MywxMiArMjc1MywxNSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQml0IGZpZWxk
IG9wZXJhdGlvbnM6CisgICAgdm9pZCBiaXRGaWVsZEluc2VydDMyKFJlZ2lzdGVySUQgc291cmNl
LCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJmaTwzMj4oZGVzdCwgc291cmNlLCBsc2IubV92
YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQogCiAgICAgLy8gZGVzdEJpdE9mZnNldCBpcyB0
aGUgdG9wIGJpdCBvZiB0aGUgZGVzdGluYXRpb24gd2hlcmUgdGhlIGJpdHMgc2hvdWxkIGJlIGNv
cGllZCB0by4gWmVybyBpcyB0aGUgbG93ZXN0IG9yZGVyIGJpdC4KLSAgICB2b2lkIGJpdEZpZWxk
SW5zZXJ0NjQoUmVnaXN0ZXJJRCBzb3VyY2UsIHVuc2lnbmVkIGRlc3RCaXRPZmZzZXQsIHVuc2ln
bmVkIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBiaXRGaWVsZEluc2VydDY0KFJl
Z2lzdGVySUQgc291cmNlLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh3aWR0aCA8PSA2NCAtIGRlc3RC
aXRPZmZzZXQgJiYgZGVzdEJpdE9mZnNldCA8IDY0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIuYmZp
PDY0PihkZXN0LCBzb3VyY2UsIGRlc3RCaXRPZmZzZXQsIHdpZHRoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYmZpPDY0PihkZXN0LCBzb3VyY2UsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsK
ICAgICB9CiAKICAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFsIGNvbnRyb2wgZmxvdyBvcGVyYXRp
b25zOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRl
eCBlMzk0NmUyYjA5ZmJlYmIyYjI0MDYwNTg4NWRhMDcyNjk0NDgwYmM1Li40YTc3NTc0NjhjZDMy
MTM4ZDJmZjQzMjliMTRlYjY4ZTIwNzlkOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMTA4OSwzMCArMTA4OSw2IEBAIHZvaWQgdGVzdFN1
YjY0QXJnSW1tNjQoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0VWJmeDMyKCkKLXsKLSAgICB1aW50
MzJfdCBzcmMgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwg
MSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OwotICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7
Ci0gICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKLSAgICAgICAgICAgIGlmIChsc2Ig
Pj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgewotICAgICAgICAgICAgICAg
IGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaml0LnViZngzMihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LnJldCgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIENIRUNLX0VR
KGludm9rZTx1aW50MzJfdD4odWJmeDMyLCBzcmMpLCAoKHNyYyA+PiBsc2IpICYgKCgxVSA8PCB3
aWR0aCkgLSAxVSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9p
ZCB0ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkKIHsKICAgICAvLyBkID0gYSAtIFNFeHQzMihuKSAq
ICBTRXh0MzIobSkKQEAgLTExMzYsMTcgKzExMTIsNDEgQEAgdm9pZCB0ZXN0TXVsU3ViU2lnbkV4
dGVuZDMyKCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdFViZngzMigpCit7CisgICAgdWludDMyX3Qg
c3JjID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgIFZlY3Rvcjx1
aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMs
IDY0IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdp
ZHRoIDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBs
c2IgKyB3aWR0aCA8IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0byB1YmZ4MzIgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQudWJmeDMyKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odWJmeDMy
LCBzcmMpLCAoKHNyYyA+PiBsc2IpICYgKCgxVSA8PCB3aWR0aCkgLSAxVSkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCB0ZXN0VWJmeDY0KCkKIHsKLSAgICB1
aW50NjRfdCBzcmMgPSAweGZmZmZmZmZmZmZmZmZmZmY7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBp
bW1zID0geyAwLCAxLCAzMCwgMzEsIDMyLCA2MiwgNjMsIDY0IH07CisgICAgdWludDY0X3Qgc3Jj
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0
IH07CiAgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKICAgICAgICAgZm9yIChhdXRvIHdpZHRo
IDogaW1tcykgewogICAgICAgICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2Ig
KyB3aWR0aCA8IDY0KSB7CiAgICAgICAgICAgICAgICAgYXV0byB1YmZ4NjQgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKIAotICAgICAgICAgICAgICAgICAgICBqaXQudWJmeDY0KEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAgICAgICAgaml0LnViZng2NChHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobHNiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMih3aWR0aCksIAogICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwpAQCAtMTE2MiwxNSArMTE2MiwxNSBAQCB2b2lkIHRlc3RVYmZ4NjQo
KQogCiB2b2lkIHRlc3RVYmZpejMyKCkKIHsKLSAgICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZm
OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYz
LCA2NCB9OworICAgIHVpbnQzMl90IHNyYyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAz
MSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OwogICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7
CiAgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKICAgICAgICAgICAgIGlmIChsc2Ig
Pj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAzMikgewogICAgICAgICAgICAgICAg
IGF1dG8gdWJmaXozMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGppdC51YmZpejMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnViZml6MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAogICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKQEAgLTExODcsMTUg
KzExODcsMTUgQEAgdm9pZCB0ZXN0VWJmaXozMigpCiAKIHZvaWQgdGVzdFViZml6NjQoKQogewot
ICAgIHVpbnQ2NF90IHNyYyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICB1aW50NjRf
dCBzcmMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgVmVjdG9y
PHVpbnQzMl90PiBpbW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2
MywgNjQgfTsKICAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgewogICAgICAgICBmb3IgKGF1dG8g
d2lkdGggOiBpbW1zKSB7CiAgICAgICAgICAgICBpZiAobHNiID49IDAgJiYgd2lkdGggPiAwICYm
IGxzYiArIHdpZHRoIDwgNjQpIHsKICAgICAgICAgICAgICAgICBhdXRvIHViZml6NjQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoaml0KTsKIAotICAgICAgICAgICAgICAgICAgICBqaXQudWJmaXo2NChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgCisgICAgICAgICAgICAgICAgICAgIGppdC51YmZpejY0
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CkBAIC0xMjA5LDYgKzEyMDksNjYgQEAgdm9pZCB0ZXN0
VWJmaXo2NCgpCiAgICAgICAgIH0KICAgICB9CiB9CisKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0
MzIoKQoreworICAgIHVpbnQzMl90IHNyYyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKKyAgICB1aW50MzJfdCBkc3QgPSAweGYwZjBmMGYwOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0
IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAgICAgICAgZm9yIChhdXRvIHdpZHRo
IDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2Ig
KyB3aWR0aCA8IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0byBiZmkzMiA9IGNvbXBpbGUoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Q
cm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5iaXRGaWVsZEluc2VydDY0
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdWludDMy
X3QgbWFzazEgPSAoMVUgPDwgd2lkdGgpIC0gMVU7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bWFzazIgPSB+KG1hc2sxIDw8IGxzYik7CisgICAgICAgICAgICAgICAgdWludDMyX3QgcmhzID0g
aW52b2tlPHVpbnQzMl90PihiZmkzMiwgc3JjLCBkc3QpOworICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGxocyA9ICgoc3JjICYgbWFzazEpIDw8IGxzYikgfCAoZHN0ICYgbWFzazIpOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKHJocywgbGhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQ2NCgpCit7CisgICAgdWludDY0X3Qg
c3JjID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgIHVpbnQ2NF90
IGRzdCA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7
IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAgIGZvciAo
YXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKKyAg
ICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCA2NCkg
eworICAgICAgICAgICAgICAgIGF1dG8gYmZpNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsK
KworICAgICAgICAgICAgICAgICAgICBqaXQuYml0RmllbGRJbnNlcnQ2NChHUFJJbmZvOjphcmd1
bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0gKDFV
TEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9IH4o
bWFzazEgPDwgbHNiKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByaHMgPSBpbnZva2U8dWlu
dDY0X3Q+KGJmaTY0LCBzcmMsIGRzdCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbGhzID0g
KChzcmMgJiBtYXNrMSkgPDwgbHNiKSB8IChkc3QgJiBtYXNrMik7CisgICAgICAgICAgICAgICAg
Q0hFQ0tfRVEocmhzLCBsaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQog
I2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBAIC0z
MzgwLDYgKzM0NDAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVT
X1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFViZng2NCgpKTsKICAgICBSVU4o
dGVzdFViZml6MzIoKSk7CiAgICAgUlVOKHRlc3RVYmZpejY0KCkpOworICAgIFJVTih0ZXN0Qml0
RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0NjQoKSk7CiAjZW5k
aWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNzk5YjRjNmE3ZDI4NDE0MWU2
MjgxYTUyZjY5YmI4MWI4ZGQwMjIxYi4uZjQ1MGJjOWU4OTE4OWNlMzRmZmZjYmUyZjdhYmI4NGM1
ZmIyNjM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAg
LTI3OTYsOCArMjc5Niw2OCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBC
aXRPcjogewotICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgT3I2NCwgT3JEb3VibGUsIE9y
RmxvYXQsIENvbW11dGF0aXZlPigKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVlLT5j
aGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEpOwor
CisgICAgICAgICAgICAvLyBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCAoZCAmIG1hc2syKQor
ICAgICAgICAgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpCisgICAgICAg
ICAgICAvLyAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICAgICAgICAgIGF1dG8g
dHJ5QXBwZW5kQkZJID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEJpdEZp
ZWxkSW5zZXJ0MzIsIEJpdEZpZWxkSW5zZXJ0NjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJn
OjpJbW0sIEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gU2hsIHx8ICFjYW5CZUludGVybmFs
KGxlZnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSAhPSBCaXRBbmQgfHwgIWNhbkJlSW50ZXJuYWwocmlnaHQp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBW
YWx1ZSogbGVmdEFuZFZhbHVlID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFs
dWUqIGxzYlZhbHVlID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKGxlZnRB
bmRWYWx1ZS0+b3Bjb2RlKCkgIT0gQml0QW5kIHx8ICFjYW5CZUludGVybmFsKGxlZnRBbmRWYWx1
ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWltbShsc2JWYWx1ZSkgfHwgbHNiVmFsdWUtPmFzSW50KCkgPCAwKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IGxl
ZnRBbmRWYWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEg
PSBsZWZ0QW5kVmFsdWUtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBkVmFsdWUg
PSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTIgPSBy
aWdodC0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2tWYWx1ZTEtPmhhc0lu
dCgpIHx8ICFtYXNrVmFsdWUyLT5oYXNJbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0ludCgp
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0gbWFza1ZhbHVlMS0+YXNJbnQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIW1hc2sxIHx8IG1hc2sxICYgKG1hc2sxICsgMSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBk
YXRhc2l6ZSA9IG9wY29kZSA9PSBCaXRGaWVsZEluc2VydDMyID8gMzIgOiA2NDsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQobWFzazEpOworICAgICAgICAg
ICAgICAgIGlmIChsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9IG1hc2tWYWx1
ZTItPmFzSW50KCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGlzVmFsaWRNYXNrMiA9IFsmXSAo
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9ICgobWFzazEg
PDwgbHNiKSBeIG1hc2syKTsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbG93ZXJTZXQg
PSAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmdWxsU2V0ID0gMHhm
ZmZmZmZmZmZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNpemUgPT0g
MzIgPyAhKChtYXNrICYgbG93ZXJTZXQpIF4gbG93ZXJTZXQpIDogIShtYXNrIF4gZnVsbFNldCk7
CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE1hc2sy
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAg
IFRtcCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4
ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAoZFZhbHVlKSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoblZhbHVlKSwgaW1tKGxzYlZhbHVlKSwg
aW1tKHdpZHRoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0
QW5kVmFsdWUpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRCRkkobGVm
dCwgcmlnaHQpIHx8IHRyeUFwcGVuZEJGSShyaWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBhcHBlbmRCaW5PcDxPcjMyLCBPcjY0LCBPckRvdWJsZSwg
T3JGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlcwppbmRleCA5NjJkNTQwZTA4Y2VjNTI1MDVkOTQwMzRiNTYzNmZlZTcxZDI5ZTkyLi5l
MmFmMDBhYTQ5ODM4NmViY2JiZjY4OGZlZjNjMDM1NTQ2MWQ5NzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTM3NSw2ICszNzUsMTIg
QEAgYXJtNjQ6IFViZml6MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJtNjQ6
IFViZml6NjQgVTpHOjY0LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CiAgICAgVG1wLCBJbW0sIElt
bSwgVG1wCiAKK2FybTY0OiBCaXRGaWVsZEluc2VydDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIs
IEQ6RzozMgorICAgIFRtcCwgSW1tLCBJbW0sIFRtcAorCithcm02NDogQml0RmllbGRJbnNlcnQ2
NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKKyAgICBUbXAsIEltbSwgSW1tLCBUbXAK
KwogNjQ6IEFuZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCiAg
ICAgYXJtNjQ6IEJpdEltbTY0LCBUbXAsIFRtcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmlu
ZGV4IDZiOTZiM2I4M2IyMWNhYzg1YWEyOGVmZWMxOWZkY2I5OWU4YWYyMzcuLjQ0YzBhNTBiYTEx
MjkwY2U2MWU0OGQ2ODNhNDFjZWQxYmJiNWMyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKQEAgLTQyOCw2ICs0MjgsOCBAQCB2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnRWYWx1ZU1hc2so
KTsKIHZvaWQgdGVzdFViZml6NjRBbmRTaGlmdE1hc2tWYWx1ZSgpOwogdm9pZCB0ZXN0VWJmaXo2
NFNoaWZ0QW5kKCk7CiB2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnQoKTsKK3ZvaWQgdGVzdEJpdEZp
ZWxkSW5zZXJ0MzIoKTsKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0NjQoKTsKIHZvaWQgdGVzdEJp
dEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hp
ZnRSaWdodEFyZ0ltbU1hc2s2NCgpOwogdm9pZCB0ZXN0QmFzaWNTZWxlY3QoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCmluZGV4IGRmZWE0NmVlZDhhNWNhMjE3N2Q3NWY1ZjRm
ZDMwZWU2ZDE0YmE3MDAuLjk0YTdlMzRjYzdkODA5ZGM5MmQwZGNkNDcyOTRlZmJiMDMxN2ZjZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAtMzE1OCw2ICszMTU4LDE1
NCBAQCB2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnQoKQogICAgIH0KIH0KIAordm9pZCB0ZXN0Qml0
RmllbGRJbnNlcnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2
ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICB1aW50MzJfdCBkID0gMHhmMGYwZjBmMDsK
KyAgICB1aW50MzJfdCBuID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxzYnMg
PSB7IDEsIDIsIDE0LCAzMCwgMzAgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9IHsg
MzAsIDMsIDE3LCAxLCAyIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAoKG4gJiBtYXNr
MSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdp
ZHRoKSAtIDEpCisgICAgLy8gICAgICAgIG1hc2syID0gfihtYXNrMSA8PCBsc2IpCisgICAgYXV0
byB0ZXN0MSA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNrMSwgdWludDMyX3QgbWFz
azIpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIGRWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGxz
YlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxz
Yik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTIg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOwor
CisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAgIFZhbHVl
KiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigp
LCBsZWZ0QW5kVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0QW5kVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGRWYWx1ZSwg
bWFza1ZhbHVlMik7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgcmlnaHRBbmRWYWx1
ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBp
ZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJi
ZmkiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIGQsIG4pOworICAg
IH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAoZCAmIG1hc2syKSB8ICgobiAmIG1hc2sx
KSA8PCBsc2IpIAorICAgIC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAxKQorICAg
IC8vICAgICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQorICAgIGF1dG8gdGVzdDIgPSBbJl0g
KHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzazEsIHVpbnQzMl90IG1hc2syKSAtPiB1aW50MzJf
dCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAgICBW
YWx1ZSogbWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKworICAgICAgICBWYWx1
ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9y
aWdpbigpLCBkVmFsdWUsIG1hc2tWYWx1ZTIpOworICAgICAgICBWYWx1ZSogcmlnaHRBbmRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVl
LCBtYXNrVmFsdWUxKTsKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIHJpZ2h0QW5kVmFsdWUsIGxzYlZhbHVlKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0T3IsIE9yaWdpbigpLCBsZWZ0QW5kVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiYmZpIik7CisgICAgICAg
IHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBkLCBuKTsKKyAgICB9OworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQzMl90
IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sxID0gKDFVIDw8IHdpZHRo
cy5hdChpKSkgLSAxVTsKKyAgICAgICAgdWludDMyX3QgbWFzazIgPSB+KG1hc2sxIDw8IGxzYik7
CisgICAgICAgIENIRUNLKHRlc3QxKGxzYiwgbWFzazEsIG1hc2syKSA9PSAoKChuICYgbWFzazEp
IDw8IGxzYikgfCAoZCAmIG1hc2syKSkpOworICAgICAgICBDSEVDSyh0ZXN0Mihsc2IsIG1hc2sx
LCBtYXNrMikgPT0gKChkICYgbWFzazIpIHwgKChuICYgbWFzazEpIDw8IGxzYikpKTsKKyAgICB9
Cit9CisKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWludDY0
X3QgZCA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICB1aW50NjRfdCBuID0gMHhmZmZmZmZmZmZm
ZmZmZmZmOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDE0LCA2MiwgNjIg
fTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxNywgMSwgMiB9Owor
CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCAoZCAmIG1h
c2syKQorICAgIC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAxKQorICAgIC8vICAg
ICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQorICAgIGF1dG8gdGVzdDEgPSBbJl0gKHVpbnQ2
NF90IGxzYiwgdWludDY0X3QgbWFzazEsIHVpbnQ2NF90IG1hc2syKSAtPiB1aW50NjRfdCB7Cisg
ICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBs
c2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBs
c2IpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUy
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsK
KworICAgICAgICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2tWYWx1ZTEpOworICAgICAgICBWYWx1
ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4o
KSwgbGVmdEFuZFZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIFZhbHVlKiByaWdodEFuZFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBkVmFsdWUs
IG1hc2tWYWx1ZTIpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIHJpZ2h0QW5kVmFs
dWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAg
aWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAi
YmZpIik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBkLCBuKTsKKyAg
ICB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gKGQgJiBtYXNrMikgfCAoKG4gJiBtYXNr
MSkgPDwgbHNiKSAKKyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkKKyAg
ICAvLyAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICBhdXRvIHRlc3QyID0gWyZd
ICh1aW50NjRfdCBsc2IsIHVpbnQ2NF90IG1hc2sxLCB1aW50NjRfdCBtYXNrMikgLT4gdWludDY0
X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogZFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBW
YWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEgPSByb290LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSogbWFz
a1ZhbHVlMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBt
YXNrMik7CisKKyAgICAgICAgVmFsdWUqIGxlZnRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgZFZhbHVlLCBtYXNrVmFsdWUyKTsKKyAgICAg
ICAgVmFsdWUqIHJpZ2h0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAgIFZhbHVlKiBzaGlm
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCByaWdo
dEFuZFZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbGVmdEFuZFZhbHVlLCBz
aGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImJmaSIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgZCwg
bik7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7ICsr
aSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1aW50NjRf
dCBtYXNrMSA9ICgxVUxMIDw8IHdpZHRocy5hdChpKSkgLSAxVUxMOworICAgICAgICB1aW50NjRf
dCBtYXNrMiA9IH4obWFzazEgPDwgbHNiKTsKKyAgICAgICAgQ0hFQ0sodGVzdDEobHNiLCBtYXNr
MSwgbWFzazIpID09ICgoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpKSk7CisgICAg
ICAgIENIRUNLKHRlc3QyKGxzYiwgbWFzazEsIG1hc2syKSA9PSAoKGQgJiBtYXNrMikgfCAoKG4g
JiBtYXNrMSkgPDwgbHNiKSkpOworICAgIH0KK30KKwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0
UmlnaHRBcmdJbW1NYXNrMzIoKQogewogICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYg
bWFzayAKQEAgLTQwNTAsNiArNDE5OCw4IEBAIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hhciog
ZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJV
Tih0ZXN0VWJmaXo2NEFuZFNoaWZ0TWFza1ZhbHVlKCkpOwogICAgIFJVTih0ZXN0VWJmaXo2NFNo
aWZ0QW5kKCkpOwogICAgIFJVTih0ZXN0VWJmaXo2NEFuZFNoaWZ0KCkpOworICAgIFJVTih0ZXN0
Qml0RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0NjQoKSk7CiAg
ICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4o
dGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0
QW5kQXJncyg0MywgNDMpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432185</attachid>
            <date>2021-06-24 10:29:30 -0700</date>
            <delta_ts>2021-06-24 13:31:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227201-20210624122929.patch</filename>
            <type>text/plain</type>
            <size>23904</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZmViMzViMTY4ZDE3NDQ0NWYyZDc2ZDcwYjAwODJiZjQ5NDg1ZmI5Li5iNjAwNzM0MGNmMWIxMTJm
NTM5MjZmNzIyNjlmMWE0OTk5NTU1MjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAyMS0wNi0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBCRkkgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCaXRmaWVsZCBpbnNlcnQoQkZJKSwgbGVhdmluZyBv
dGhlciBiaXRzIHVuY2hhbmdlZC4gVGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIAorICAgICAgICBj
YW4gdXRpbGl6ZSB0aGlzIHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gQjMgSVIgYmVm
b3JlIGZ1cnRoZXIgQWlyIAorICAgICAgICBvcHRpbWl6YXRpb24uIEdpdmVuIHRoZSBvcGVyYXRp
b246CisKKyAgICAgICAgYmZpIGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGUgZXF1aXZh
bGVudCBwYXR0ZXJuIHdvdWxkIGJlOgorCisgICAgICAgIFBhdHRlcm4gMToKKyAgICAgICAgICAg
IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgICAgICAgICAgbWFzazIgPSB+
bWFzazEKKyAgICAgICAgICAgIGQgPSAoKG4gPDwgbHNiKSAmIG1hc2sxKSB8IChkICYgbWFzazIp
OworCisgICAgICAgIFBhdHRlcm4gMjoKKyAgICAgICAgICAgIG1hc2sxID0gKDEgPDwgd2lkdGgp
IC0gMQorICAgICAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICAgICAgICAgIGQg
PSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisKKyAgICAgICAgQ3VycmVudCBv
cHRpbWl6ZXIgYWxyZWFkeSBoYXMgdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiBydWxlOgorICAgICAg
ICAgICAgVHVybiBUaGlzOiAobiA8PCBsc2IpICYgbWFzazEpCisgICAgICAgICAgICBJbnRvIFRo
aXM6IChuICYgbWFzazEpIDw8IGxzYikKKworICAgICAgICBUaGVuLCBkID0gKChuICYgbWFzazEp
IDw8IGxzYikgfCAoZCAmIG1hc2syKSBpcyB0aGUgY2Fub25pY2FsIGZvcm0uCisKKyAgICAgICAg
V2l0aCBjb25zdHJhaW50czoKKyAgICAgICAgICAgIDEuIDAgPD0gbHNiIDwgZGF0YXNpemUKKyAg
ICAgICAgICAgIDIuIDAgPCB3aWR0aCA8IGRhdGFzaXplCisgICAgICAgICAgICAzLiBsc2IgKyB3
aWR0aCA8PSBkYXRhc3ppZQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAg
PSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAg
ICAgICAgSW50IEAyID0gbHNiCisgICAgICAgIEludCBAMyA9IG1hc2sKKyAgICAgICAgSW50IEA0
ID0gQml0QW5kKEAxLCBAMykKKyAgICAgICAgSW50IEA1ID0gU2hsKEA0LCBAMikKKyAgICAgICAg
SW50IEA2ID0gQml0T3IoQDAsIEA1KQorICAgICAgICBJbnQgQDcgPSBSZXR1cm4oQDYsIFRlcm1p
bmFsKQorCisgICAgICAgIEJlZm9yZSBBZGRpbmcgQkZJOgorICAgICAgICAvLyBPbGQgb3B0aW1p
emVkIEFJUgorICAgICAgICBBbmQgICBtYXNrLCAleDEsICV4MSwgQDQKKyAgICAgICAgTHNoaWZ0
ICV4MSwgbHNiLCAleDEsIEA1CisgICAgICAgIE9yICAgICAleDEsICV4MCwgJXgwLCBANgorICAg
ICAgICBSZXQgICAgJXgwLCAgICAgICAgICAgQDcKKworICAgICAgICBBZnRlciBBZGRpbmcgQkZJ
OgorICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBCaXRGaWVsZEluc2VydCAl
eDEsIGxzYiwgd2lkdGgsICV4MCwgQDYKKyAgICAgICAgUmV0ICAgICAgICAgICAgJXgwLCAgICAg
ICAgICAgICAgICAgIEA3CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpiaXRGaWVsZEluc2VydDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Yml0RmllbGRJbnNlcnQ2NCk6
CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFVi
ZngzMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZ4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0VWJm
aXozMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejY0KToKKyAgICAgICAgKEpTQzo6dGVzdEJp
dEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0Qml0RmllbGRJbnNlcnQ2NCk6Cisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXM6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIu
Y3BwOgorICAgICAgICAodGVzdEJpdEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAodGVzdEJpdEZp
ZWxkSW5zZXJ0NjQpOgorICAgICAgICAoYWRkQml0VGVzdHMpOgorCiAyMDIxLTA2LTIzICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBCYXNlIE9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSdzIGRlZmF1bHQgdmFsdWUgb24gR2lnYWNhZ2U6Omhhc0NhcGFj
aXR5VG9Vc2VMYXJnZUdpZ2FjYWdlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmMzUzZmNmMDZkNTQwMDYzNmIy
NDRhNWE5MTI5ZGU2ZWU2NTBjYzg2Li44YmE1YmNjZTQ1YWYxMWI4NmMwMTdhYTk2OTAwODQ1ZDFh
M2YwZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMjc1MywxMiArMjc1MywxNSBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgLy8gQml0IGZpZWxkIG9wZXJhdGlvbnM6CisgICAgdm9pZCBiaXRGaWVsZEluc2Vy
dDMyKFJlZ2lzdGVySUQgc291cmNlLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lk
dGgsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJmaTwzMj4o
ZGVzdCwgc291cmNlLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQogCiAgICAg
Ly8gZGVzdEJpdE9mZnNldCBpcyB0aGUgdG9wIGJpdCBvZiB0aGUgZGVzdGluYXRpb24gd2hlcmUg
dGhlIGJpdHMgc2hvdWxkIGJlIGNvcGllZCB0by4gWmVybyBpcyB0aGUgbG93ZXN0IG9yZGVyIGJp
dC4KLSAgICB2b2lkIGJpdEZpZWxkSW5zZXJ0NjQoUmVnaXN0ZXJJRCBzb3VyY2UsIHVuc2lnbmVk
IGRlc3RCaXRPZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9p
ZCBiaXRGaWVsZEluc2VydDY0KFJlZ2lzdGVySUQgc291cmNlLCBUcnVzdGVkSW1tMzIgbHNiLCBU
cnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCh3aWR0aCA8PSA2NCAtIGRlc3RCaXRPZmZzZXQgJiYgZGVzdEJpdE9mZnNldCA8IDY0KTsKLSAg
ICAgICAgbV9hc3NlbWJsZXIuYmZpPDY0PihkZXN0LCBzb3VyY2UsIGRlc3RCaXRPZmZzZXQsIHdp
ZHRoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmZpPDY0PihkZXN0LCBzb3VyY2UsIGxzYi5tX3Zh
bHVlLCB3aWR0aC5tX3ZhbHVlKTsKICAgICB9CiAKICAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFs
IGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAppbmRleCBlMzk0NmUyYjA5ZmJlYmIyYjI0MDYwNTg4NWRhMDcyNjk0
NDgwYmM1Li5jOWNmOTY4YjdiNDVmNDIzODdlZGM3ZmQ2NjkzZjA5ZDUzZWU2YTUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMTA4OSwzMCAr
MTA4OSw2IEBAIHZvaWQgdGVzdFN1YjY0QXJnSW1tNjQoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0
VWJmeDMyKCkKLXsKLSAgICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1
aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OwotICAgIGZv
ciAoYXV0byBsc2IgOiBpbW1zKSB7Ci0gICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsK
LSAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAz
MikgewotICAgICAgICAgICAgICAgIGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaml0LnViZngzMihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihsc2IpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHdpZHRoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7Ci0KLSAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
LSAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odWJmeDMyLCBzcmMpLCAoKHNy
YyA+PiBsc2IpICYgKCgxVSA8PCB3aWR0aCkgLSAxVSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCB0ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkKIHsKICAgICAv
LyBkID0gYSAtIFNFeHQzMihuKSAqICBTRXh0MzIobSkKQEAgLTExMzYsMTcgKzExMTIsNDEgQEAg
dm9pZCB0ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdFViZngz
MigpCit7CisgICAgdWludDMyX3Qgc3JjID0gMHhmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9
OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6
IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsg
d2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnViZngzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDMyX3Q+KHViZngzMiwgc3Jj
KSwgKChzcmMgPj4gbHNiKSAmICgoMVUgPDwgd2lkdGgpIC0gMVUpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdFViZng2NCgpCiB7Ci0gICAgdWludDY0
X3Qgc3JjID0gMHhmZmZmZmZmZmZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9
IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIHVpbnQ2NF90IHNyYyA9IDB4
ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUs
IDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OwogICAgIGZvciAoYXV0byBsc2Ig
OiBpbW1zKSB7CiAgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKICAgICAgICAgICAg
IGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCA2NCkgewogICAgICAg
ICAgICAgICAgIGF1dG8gdWJmeDY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgaml0LnViZng2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgCisgICAg
ICAgICAgICAgICAgICAgIGppdC51YmZ4NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKQEAgLTEx
NjIsMTUgKzExNjIsMTUgQEAgdm9pZCB0ZXN0VWJmeDY0KCkKIAogdm9pZCB0ZXN0VWJmaXozMigp
CiB7Ci0gICAgdWludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+
IGltbXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICB1aW50MzJfdCBz
cmMgPSAweGYwZjBmMGYwOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwg
NywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CiAgICAgZm9yIChhdXRvIGxzYiA6
IGltbXMpIHsKICAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewogICAgICAgICAgICAg
aWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDMyKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byB1YmZpejMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgaml0LnViZml6MzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIAorICAg
ICAgICAgICAgICAgICAgICBqaXQudWJmaXozMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCks
IAogICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpAQCAt
MTE4NywxNSArMTE4NywxNSBAQCB2b2lkIHRlc3RVYmZpejMyKCkKIAogdm9pZCB0ZXN0VWJmaXo2
NCgpCiB7Ci0gICAgdWludDY0X3Qgc3JjID0gMHhmZmZmZmZmZmZmZmZmZmZmOwotICAgIFZlY3Rv
cjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAg
IHVpbnQ2NF90IHNyYyA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9Owog
ICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CiAgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGlt
bXMpIHsKICAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lk
dGggPCA2NCkgewogICAgICAgICAgICAgICAgIGF1dG8gdWJmaXo2NCA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGppdC51YmZpejY0KEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAgICAgICAgaml0LnViZml6NjQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCAKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGxzYiksIAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod2lkdGgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKQEAgLTEyMDksNiArMTIwOSw2NiBAQCB2b2lkIHRlc3RVYmZpejY0KCkK
ICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQzMigpCit7Cisg
ICAgdWludDMyX3Qgc3JjID0gMHgwZjBmMGYwZjsKKyAgICB1aW50MzJfdCBkc3QgPSAweGYwZjBm
MGYwOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAz
MiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAg
ICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxzYiA+PSAw
ICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0
byBiZmkzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAg
IGppdC5iaXRGaWVsZEluc2VydDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAg
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgdWludDMyX3QgbWFzazEgPSAoMVUgPDwgd2lkdGgpIC0gMVU7CisgICAg
ICAgICAgICAgICAgdWludDMyX3QgbWFzazIgPSB+KG1hc2sxIDw8IGxzYik7CisgICAgICAgICAg
ICAgICAgdWludDMyX3QgcmhzID0gaW52b2tlPHVpbnQzMl90PihiZmkzMiwgc3JjLCBkc3QpOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGxocyA9ICgoc3JjICYgbWFzazEpIDw8IGxzYikgfCAo
ZHN0ICYgbWFzazIpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHJocywgbGhzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQ2
NCgpCit7CisgICAgdWludDY0X3Qgc3JjID0gMHgwZjBmMGYwZjBmMGYwZjBmOworICAgIHVpbnQ2
NF90IGRzdCA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMg
PSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAgIGZv
ciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsK
KyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCA2
NCkgeworICAgICAgICAgICAgICAgIGF1dG8gYmZpNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuYml0RmllbGRJbnNlcnQ2NChHUFJJbmZvOjph
cmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0g
KDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9
IH4obWFzazEgPDwgbHNiKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByaHMgPSBpbnZva2U8
dWludDY0X3Q+KGJmaTY0LCBzcmMsIGRzdCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbGhz
ID0gKChzcmMgJiBtYXNrMSkgPDwgbHNiKSB8IChkc3QgJiBtYXNrMik7CisgICAgICAgICAgICAg
ICAgQ0hFQ0tfRVEocmhzLCBsaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQogI2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBA
IC0zMzgwLDYgKzM0NDAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05P
UkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFViZng2NCgpKTsKICAgICBS
VU4odGVzdFViZml6MzIoKSk7CiAgICAgUlVOKHRlc3RVYmZpejY0KCkpOworICAgIFJVTih0ZXN0
Qml0RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNzk5YjRjNmE3ZDI4NDE0
MWU2MjgxYTUyZjY5YmI4MWI4ZGQwMjIxYi4uZjQ1MGJjOWU4OTE4OWNlMzRmZmZjYmUyZjdhYmI4
NGM1ZmIyNjM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
QEAgLTI3OTYsOCArMjc5Niw2OCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBCaXRPcjogewotICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgT3I2NCwgT3JEb3VibGUs
IE9yRmxvYXQsIENvbW11dGF0aXZlPigKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEp
OworCisgICAgICAgICAgICAvLyBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCAoZCAmIG1hc2sy
KQorICAgICAgICAgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpCisgICAg
ICAgICAgICAvLyAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICAgICAgICAgIGF1
dG8gdHJ5QXBwZW5kQkZJID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEJp
dEZpZWxkSW5zZXJ0MzIsIEJpdEZpZWxkSW5zZXJ0NjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwg
QXJnOjpJbW0sIEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gU2hsIHx8ICFjYW5CZUludGVy
bmFsKGxlZnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSAhPSBCaXRBbmQgfHwgIWNhbkJlSW50ZXJuYWwocmln
aHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAg
VmFsdWUqIGxzYlZhbHVlID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKGxl
ZnRBbmRWYWx1ZS0+b3Bjb2RlKCkgIT0gQml0QW5kIHx8ICFjYW5CZUludGVybmFsKGxlZnRBbmRW
YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWltbShsc2JWYWx1ZSkgfHwgbHNiVmFsdWUtPmFzSW50KCkgPCAwKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IGxlZnRBbmRWYWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1
ZTEgPSBsZWZ0QW5kVmFsdWUtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBkVmFs
dWUgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTIg
PSByaWdodC0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2tWYWx1ZTEtPmhh
c0ludCgpIHx8ICFtYXNrVmFsdWUyLT5oYXNJbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYlZhbHVlLT5hc0lu
dCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0gbWFza1ZhbHVlMS0+YXNJbnQo
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2sxIHx8IG1hc2sxICYgKG1hc2sxICsgMSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aW50NjRf
dCBkYXRhc2l6ZSA9IG9wY29kZSA9PSBCaXRGaWVsZEluc2VydDMyID8gMzIgOiA2NDsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCB3aWR0aCA9IFdURjo6Yml0Q291bnQobWFzazEpOworICAgICAg
ICAgICAgICAgIGlmIChsc2IgKyB3aWR0aCA+IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9IG1hc2tW
YWx1ZTItPmFzSW50KCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGlzVmFsaWRNYXNrMiA9IFsm
XSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9ICgobWFz
azEgPDwgbHNiKSBeIG1hc2syKTsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbG93ZXJT
ZXQgPSAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmdWxsU2V0ID0g
MHhmZmZmZmZmZmZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNpemUg
PT0gMzIgPyAhKChtYXNrICYgbG93ZXJTZXQpIF4gbG93ZXJTZXQpIDogIShtYXNrIF4gZnVsbFNl
dCk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE1h
c2syKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIFRtcCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAoZFZhbHVlKSwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAoblZhbHVlKSwgaW1tKGxzYlZhbHVl
KSwgaW1tKHdpZHRoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChs
ZWZ0QW5kVmFsdWUpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAg
ICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRCRkko
bGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEJGSShyaWdodCwgbGVmdCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBhcHBlbmRCaW5PcDxPcjMyLCBPcjY0LCBPckRvdWJs
ZSwgT3JGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2RlcwppbmRleCA5NjJkNTQwZTA4Y2VjNTI1MDVkOTQwMzRiNTYzNmZlZTcxZDI5ZTky
Li5lMmFmMDBhYTQ5ODM4NmViY2JiZjY4OGZlZjNjMDM1NTQ2MWQ5NzI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTM3NSw2ICszNzUs
MTIgQEAgYXJtNjQ6IFViZml6MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJt
NjQ6IFViZml6NjQgVTpHOjY0LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CiAgICAgVG1wLCBJbW0s
IEltbSwgVG1wCiAKK2FybTY0OiBCaXRGaWVsZEluc2VydDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6
MzIsIEQ6RzozMgorICAgIFRtcCwgSW1tLCBJbW0sIFRtcAorCithcm02NDogQml0RmllbGRJbnNl
cnQ2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKKyAgICBUbXAsIEltbSwgSW1tLCBU
bXAKKwogNjQ6IEFuZDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1w
CiAgICAgYXJtNjQ6IEJpdEltbTY0LCBUbXAsIFRtcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5o
CmluZGV4IDZiOTZiM2I4M2IyMWNhYzg1YWEyOGVmZWMxOWZkY2I5OWU4YWYyMzcuLjQ0YzBhNTBi
YTExMjkwY2U2MWU0OGQ2ODNhNDFjZWQxYmJiNWMyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmgKQEAgLTQyOCw2ICs0MjgsOCBAQCB2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnRWYWx1ZU1h
c2soKTsKIHZvaWQgdGVzdFViZml6NjRBbmRTaGlmdE1hc2tWYWx1ZSgpOwogdm9pZCB0ZXN0VWJm
aXo2NFNoaWZ0QW5kKCk7CiB2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnQoKTsKK3ZvaWQgdGVzdEJp
dEZpZWxkSW5zZXJ0MzIoKTsKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0NjQoKTsKIHZvaWQgdGVz
dEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCk7CiB2b2lkIHRlc3RCaXRBbmRaZXJv
U2hpZnRSaWdodEFyZ0ltbU1hc2s2NCgpOwogdm9pZCB0ZXN0QmFzaWNTZWxlY3QoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCmluZGV4IGRmZWE0NmVlZDhhNWNhMjE3N2Q3NWY1
ZjRmZDMwZWU2ZDE0YmE3MDAuLjk0YTdlMzRjYzdkODA5ZGM5MmQwZGNkNDcyOTRlZmJiMDMxN2Zj
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAtMzE1OCw2ICszMTU4
LDE1NCBAQCB2b2lkIHRlc3RVYmZpejY0QW5kU2hpZnQoKQogICAgIH0KIH0KIAordm9pZCB0ZXN0
Qml0RmllbGRJbnNlcnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICB1aW50MzJfdCBkID0gMHhmMGYwZjBm
MDsKKyAgICB1aW50MzJfdCBuID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGxz
YnMgPSB7IDEsIDIsIDE0LCAzMCwgMzAgfTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IHdpZHRocyA9
IHsgMzAsIDMsIDE3LCAxLCAyIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAoKG4gJiBt
YXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8
IHdpZHRoKSAtIDEpCisgICAgLy8gICAgICAgIG1hc2syID0gfihtYXNrMSA8PCBsc2IpCisgICAg
YXV0byB0ZXN0MSA9IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNrMSwgdWludDMyX3Qg
bWFzazIpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIGRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG5W
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUq
IGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1
ZTIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIp
OworCisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAgIFZh
bHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdp
bigpLCBsZWZ0QW5kVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0QW5kVmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGRWYWx1
ZSwgbWFza1ZhbHVlMik7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgcmlnaHRBbmRW
YWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAg
ICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJiZmkiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIGQsIG4pOwor
ICAgIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAoZCAmIG1hc2syKSB8ICgobiAmIG1h
c2sxKSA8PCBsc2IpIAorICAgIC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAxKQor
ICAgIC8vICAgICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQorICAgIGF1dG8gdGVzdDIgPSBb
Jl0gKHVpbnQzMl90IGxzYiwgdWludDMyX3QgbWFzazEsIHVpbnQzMl90IG1hc2syKSAtPiB1aW50
MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBsc2IpOworICAgICAg
ICBWYWx1ZSogbWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUyID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKworICAgICAgICBW
YWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQs
IE9yaWdpbigpLCBkVmFsdWUsIG1hc2tWYWx1ZTIpOworICAgICAgICBWYWx1ZSogcmlnaHRBbmRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZh
bHVlLCBtYXNrVmFsdWUxKTsKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIHJpZ2h0QW5kVmFsdWUsIGxzYlZhbHVl
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0T3IsIE9yaWdpbigpLCBsZWZ0QW5kVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiYmZpIik7CisgICAg
ICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBkLCBuKTsKKyAgICB9OworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVpbnQz
Ml90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVpbnQzMl90IG1hc2sxID0gKDFVIDw8IHdp
ZHRocy5hdChpKSkgLSAxVTsKKyAgICAgICAgdWludDMyX3QgbWFzazIgPSB+KG1hc2sxIDw8IGxz
Yik7CisgICAgICAgIENIRUNLKHRlc3QxKGxzYiwgbWFzazEsIG1hc2syKSA9PSAoKChuICYgbWFz
azEpIDw8IGxzYikgfCAoZCAmIG1hc2syKSkpOworICAgICAgICBDSEVDSyh0ZXN0Mihsc2IsIG1h
c2sxLCBtYXNrMikgPT0gKChkICYgbWFzazIpIHwgKChuICYgbWFzazEpIDw8IGxzYikpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdEJpdEZpZWxkSW5zZXJ0NjQoKQoreworICAgIGlmIChKU0M6Ok9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgdWlu
dDY0X3QgZCA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICB1aW50NjRfdCBuID0gMHhmZmZmZmZm
ZmZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbHNicyA9IHsgMSwgMzAsIDE0LCA2Miwg
NjIgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IHdpZHRocyA9IHsgNjIsIDMzLCAxNywgMSwgMiB9
OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gKChuICYgbWFzazEpIDw8IGxzYikgfCAoZCAm
IG1hc2syKQorICAgIC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAxKQorICAgIC8v
ICAgICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQorICAgIGF1dG8gdGVzdDEgPSBbJl0gKHVp
bnQ2NF90IGxzYiwgdWludDY0X3QgbWFzazEsIHVpbnQ2NF90IG1hc2syKSAtPiB1aW50NjRfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVl
KiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBsc2IpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrVmFs
dWUyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sy
KTsKKworICAgICAgICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2tWYWx1ZTEpOworICAgICAgICBW
YWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmln
aW4oKSwgbGVmdEFuZFZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIFZhbHVlKiByaWdodEFuZFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBkVmFs
dWUsIG1hc2tWYWx1ZTIpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIHJpZ2h0QW5k
VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAg
ICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAiYmZpIik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBkLCBuKTsK
KyAgICB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gKGQgJiBtYXNrMikgfCAoKG4gJiBt
YXNrMSkgPDwgbHNiKSAKKyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkK
KyAgICAvLyAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICBhdXRvIHRlc3QyID0g
WyZdICh1aW50NjRfdCBsc2IsIHVpbnQ2NF90IG1hc2sxLCB1aW50NjRfdCBtYXNrMikgLT4gdWlu
dDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogZFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBWYWx1ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSog
bWFza1ZhbHVlMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigp
LCBtYXNrMik7CisKKyAgICAgICAgVmFsdWUqIGxlZnRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgZFZhbHVlLCBtYXNrVmFsdWUyKTsKKyAg
ICAgICAgVmFsdWUqIHJpZ2h0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAgIFZhbHVlKiBz
aGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBy
aWdodEFuZFZhbHVlLCBsc2JWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbGVmdEFuZFZhbHVl
LCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgImJmaSIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwg
ZCwgbik7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbHNicy5zaXplKCk7
ICsraSkgeworICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JzLmF0KGkpOworICAgICAgICB1aW50
NjRfdCBtYXNrMSA9ICgxVUxMIDw8IHdpZHRocy5hdChpKSkgLSAxVUxMOworICAgICAgICB1aW50
NjRfdCBtYXNrMiA9IH4obWFzazEgPDwgbHNiKTsKKyAgICAgICAgQ0hFQ0sodGVzdDEobHNiLCBt
YXNrMSwgbWFzazIpID09ICgoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpKSk7Cisg
ICAgICAgIENIRUNLKHRlc3QyKGxzYiwgbWFzazEsIG1hc2syKSA9PSAoKGQgJiBtYXNrMikgfCAo
KG4gJiBtYXNrMSkgPDwgbHNiKSkpOworICAgIH0KK30KKwogdm9pZCB0ZXN0Qml0QW5kWmVyb1No
aWZ0UmlnaHRBcmdJbW1NYXNrMzIoKQogewogICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0p
ICYgbWFzayAKQEAgLTQwNTAsNiArNDE5OCw4IEBAIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hh
ciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAg
IFJVTih0ZXN0VWJmaXo2NEFuZFNoaWZ0TWFza1ZhbHVlKCkpOwogICAgIFJVTih0ZXN0VWJmaXo2
NFNoaWZ0QW5kKCkpOwogICAgIFJVTih0ZXN0VWJmaXo2NEFuZFNoaWZ0KCkpOworICAgIFJVTih0
ZXN0Qml0RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0NjQoKSk7
CiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBS
VU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0
Qml0QW5kQXJncyg0MywgNDMpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432205</attachid>
            <date>2021-06-24 13:31:16 -0700</date>
            <delta_ts>2021-06-24 15:50:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227201-20210624153115.patch</filename>
            <type>text/plain</type>
            <size>26414</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZmViMzViMTY4ZDE3NDQ0NWYyZDc2ZDcwYjAwODJiZjQ5NDg1ZmI5Li5iNjAwNzM0MGNmMWIxMTJm
NTM5MjZmNzIyNjlmMWE0OTk5NTU1MjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OSBAQAorMjAyMS0wNi0yNCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBCRkkgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcyMDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCaXRmaWVsZCBpbnNlcnQoQkZJKSwgbGVhdmluZyBv
dGhlciBiaXRzIHVuY2hhbmdlZC4gVGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIAorICAgICAgICBj
YW4gdXRpbGl6ZSB0aGlzIHRvIGxvd2VyaW5nIGNlcnRhaW4gcGF0dGVybnMgaW4gQjMgSVIgYmVm
b3JlIGZ1cnRoZXIgQWlyIAorICAgICAgICBvcHRpbWl6YXRpb24uIEdpdmVuIHRoZSBvcGVyYXRp
b246CisKKyAgICAgICAgYmZpIGQsIG4sIGxzYiwgd2lkdGgKKworICAgICAgICBUaGUgZXF1aXZh
bGVudCBwYXR0ZXJuIHdvdWxkIGJlOgorCisgICAgICAgIFBhdHRlcm4gMToKKyAgICAgICAgICAg
IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpIDw8IGxzYgorICAgICAgICAgICAgbWFzazIgPSB+
bWFzazEKKyAgICAgICAgICAgIGQgPSAoKG4gPDwgbHNiKSAmIG1hc2sxKSB8IChkICYgbWFzazIp
OworCisgICAgICAgIFBhdHRlcm4gMjoKKyAgICAgICAgICAgIG1hc2sxID0gKDEgPDwgd2lkdGgp
IC0gMQorICAgICAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAgICAgICAgICAgIGQg
PSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisKKyAgICAgICAgQ3VycmVudCBv
cHRpbWl6ZXIgYWxyZWFkeSBoYXMgdGhlIHN0cmVuZ3RoIHJlZHVjdGlvbiBydWxlOgorICAgICAg
ICAgICAgVHVybiBUaGlzOiAobiA8PCBsc2IpICYgbWFzazEpCisgICAgICAgICAgICBJbnRvIFRo
aXM6IChuICYgbWFzazEpIDw8IGxzYikKKworICAgICAgICBUaGVuLCBkID0gKChuICYgbWFzazEp
IDw8IGxzYikgfCAoZCAmIG1hc2syKSBpcyB0aGUgY2Fub25pY2FsIGZvcm0uCisKKyAgICAgICAg
V2l0aCBjb25zdHJhaW50czoKKyAgICAgICAgICAgIDEuIDAgPD0gbHNiIDwgZGF0YXNpemUKKyAg
ICAgICAgICAgIDIuIDAgPCB3aWR0aCA8IGRhdGFzaXplCisgICAgICAgICAgICAzLiBsc2IgKyB3
aWR0aCA8PSBkYXRhc3ppZQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAg
PSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAg
ICAgICAgSW50IEAyID0gbHNiCisgICAgICAgIEludCBAMyA9IG1hc2sKKyAgICAgICAgSW50IEA0
ID0gQml0QW5kKEAxLCBAMykKKyAgICAgICAgSW50IEA1ID0gU2hsKEA0LCBAMikKKyAgICAgICAg
SW50IEA2ID0gQml0T3IoQDAsIEA1KQorICAgICAgICBJbnQgQDcgPSBSZXR1cm4oQDYsIFRlcm1p
bmFsKQorCisgICAgICAgIEJlZm9yZSBBZGRpbmcgQkZJOgorICAgICAgICAvLyBPbGQgb3B0aW1p
emVkIEFJUgorICAgICAgICBBbmQgICBtYXNrLCAleDEsICV4MSwgQDQKKyAgICAgICAgTHNoaWZ0
ICV4MSwgbHNiLCAleDEsIEA1CisgICAgICAgIE9yICAgICAleDEsICV4MCwgJXgwLCBANgorICAg
ICAgICBSZXQgICAgJXgwLCAgICAgICAgICAgQDcKKworICAgICAgICBBZnRlciBBZGRpbmcgQkZJ
OgorICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBCaXRGaWVsZEluc2VydCAl
eDEsIGxzYiwgd2lkdGgsICV4MCwgQDYKKyAgICAgICAgUmV0ICAgICAgICAgICAgJXgwLCAgICAg
ICAgICAgICAgICAgIEA3CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpiaXRGaWVsZEluc2VydDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Yml0RmllbGRJbnNlcnQ2NCk6
CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdFVi
ZngzMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZ4NjQpOgorICAgICAgICAoSlNDOjp0ZXN0VWJm
aXozMik6CisgICAgICAgIChKU0M6OnRlc3RVYmZpejY0KToKKyAgICAgICAgKEpTQzo6dGVzdEJp
dEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0Qml0RmllbGRJbnNlcnQ2NCk6Cisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXM6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIu
Y3BwOgorICAgICAgICAodGVzdEJpdEZpZWxkSW5zZXJ0MzIpOgorICAgICAgICAodGVzdEJpdEZp
ZWxkSW5zZXJ0NjQpOgorICAgICAgICAoYWRkQml0VGVzdHMpOgorCiAyMDIxLTA2LTIzICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBCYXNlIE9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSdzIGRlZmF1bHQgdmFsdWUgb24gR2lnYWNhZ2U6Omhhc0NhcGFj
aXR5VG9Vc2VMYXJnZUdpZ2FjYWdlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBmMzUzZmNmMDZkNTQwMDYzNmIy
NDRhNWE5MTI5ZGU2ZWU2NTBjYzg2Li44YmE1YmNjZTQ1YWYxMWI4NmMwMTdhYTk2OTAwODQ1ZDFh
M2YwZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMjc1MywxMiArMjc1MywxNSBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgLy8gQml0IGZpZWxkIG9wZXJhdGlvbnM6CisgICAgdm9pZCBiaXRGaWVsZEluc2Vy
dDMyKFJlZ2lzdGVySUQgc291cmNlLCBUcnVzdGVkSW1tMzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lk
dGgsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJmaTwzMj4o
ZGVzdCwgc291cmNlLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CisgICAgfQogCiAgICAg
Ly8gZGVzdEJpdE9mZnNldCBpcyB0aGUgdG9wIGJpdCBvZiB0aGUgZGVzdGluYXRpb24gd2hlcmUg
dGhlIGJpdHMgc2hvdWxkIGJlIGNvcGllZCB0by4gWmVybyBpcyB0aGUgbG93ZXN0IG9yZGVyIGJp
dC4KLSAgICB2b2lkIGJpdEZpZWxkSW5zZXJ0NjQoUmVnaXN0ZXJJRCBzb3VyY2UsIHVuc2lnbmVk
IGRlc3RCaXRPZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9p
ZCBiaXRGaWVsZEluc2VydDY0KFJlZ2lzdGVySUQgc291cmNlLCBUcnVzdGVkSW1tMzIgbHNiLCBU
cnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCh3aWR0aCA8PSA2NCAtIGRlc3RCaXRPZmZzZXQgJiYgZGVzdEJpdE9mZnNldCA8IDY0KTsKLSAg
ICAgICAgbV9hc3NlbWJsZXIuYmZpPDY0PihkZXN0LCBzb3VyY2UsIGRlc3RCaXRPZmZzZXQsIHdp
ZHRoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmZpPDY0PihkZXN0LCBzb3VyY2UsIGxzYi5tX3Zh
bHVlLCB3aWR0aC5tX3ZhbHVlKTsKICAgICB9CiAKICAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFs
IGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAppbmRleCBlMzk0NmUyYjA5ZmJlYmIyYjI0MDYwNTg4NWRhMDcyNjk0
NDgwYmM1Li5jOWNmOTY4YjdiNDVmNDIzODdlZGM3ZmQ2NjkzZjA5ZDUzZWU2YTUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMTA4OSwzMCAr
MTA4OSw2IEBAIHZvaWQgdGVzdFN1YjY0QXJnSW1tNjQoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0
VWJmeDMyKCkKLXsKLSAgICB1aW50MzJfdCBzcmMgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1
aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OwotICAgIGZv
ciAoYXV0byBsc2IgOiBpbW1zKSB7Ci0gICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsK
LSAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCAz
MikgewotICAgICAgICAgICAgICAgIGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaml0LnViZngzMihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihsc2IpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHdpZHRoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7Ci0KLSAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
LSAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odWJmeDMyLCBzcmMpLCAoKHNy
YyA+PiBsc2IpICYgKCgxVSA8PCB3aWR0aCkgLSAxVSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCB0ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkKIHsKICAgICAv
LyBkID0gYSAtIFNFeHQzMihuKSAqICBTRXh0MzIobSkKQEAgLTExMzYsMTcgKzExMTIsNDEgQEAg
dm9pZCB0ZXN0TXVsU3ViU2lnbkV4dGVuZDMyKCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdFViZngz
MigpCit7CisgICAgdWludDMyX3Qgc3JjID0gMHhmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9
OworICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6
IGltbXMpIHsKKyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsg
d2lkdGggPCAzMikgeworICAgICAgICAgICAgICAgIGF1dG8gdWJmeDMyID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnViZngzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDMyX3Q+KHViZngzMiwgc3Jj
KSwgKChzcmMgPj4gbHNiKSAmICgoMVUgPDwgd2lkdGgpIC0gMVUpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdFViZng2NCgpCiB7Ci0gICAgdWludDY0
X3Qgc3JjID0gMHhmZmZmZmZmZmZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9
IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAgIHVpbnQ2NF90IHNyYyA9IDB4
ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUs
IDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OwogICAgIGZvciAoYXV0byBsc2Ig
OiBpbW1zKSB7CiAgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsKICAgICAgICAgICAg
IGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCA2NCkgewogICAgICAg
ICAgICAgICAgIGF1dG8gdWJmeDY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgaml0LnViZng2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgCisgICAg
ICAgICAgICAgICAgICAgIGppdC51YmZ4NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxzYiksIAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod2lkdGgpLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKQEAgLTEx
NjIsMTUgKzExNjIsMTUgQEAgdm9pZCB0ZXN0VWJmeDY0KCkKIAogdm9pZCB0ZXN0VWJmaXozMigp
CiB7Ci0gICAgdWludDMyX3Qgc3JjID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+
IGltbXMgPSB7IDAsIDEsIDMwLCAzMSwgMzIsIDYyLCA2MywgNjQgfTsKKyAgICB1aW50MzJfdCBz
cmMgPSAweGYwZjBmMGYwOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwg
NywgMzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CiAgICAgZm9yIChhdXRvIGxzYiA6
IGltbXMpIHsKICAgICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgewogICAgICAgICAgICAg
aWYgKGxzYiA+PSAwICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDMyKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byB1YmZpejMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgaml0LnViZml6MzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIAorICAg
ICAgICAgICAgICAgICAgICBqaXQudWJmaXozMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3aWR0aCks
IAogICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwpAQCAt
MTE4NywxNSArMTE4NywxNSBAQCB2b2lkIHRlc3RVYmZpejMyKCkKIAogdm9pZCB0ZXN0VWJmaXo2
NCgpCiB7Ci0gICAgdWludDY0X3Qgc3JjID0gMHhmZmZmZmZmZmZmZmZmZmZmOwotICAgIFZlY3Rv
cjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgMzAsIDMxLCAzMiwgNjIsIDYzLCA2NCB9OworICAg
IHVpbnQ2NF90IHNyYyA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9Owog
ICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CiAgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGlt
bXMpIHsKICAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lk
dGggPCA2NCkgewogICAgICAgICAgICAgICAgIGF1dG8gdWJmaXo2NCA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOwogCi0gICAgICAgICAgICAgICAgICAgIGppdC51YmZpejY0KEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCAKKyAgICAgICAgICAgICAgICAgICAgaml0LnViZml6NjQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCAKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGxzYiksIAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod2lkdGgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKQEAgLTEyMDksNiArMTIwOSw2NiBAQCB2b2lkIHRlc3RVYmZpejY0KCkK
ICAgICAgICAgfQogICAgIH0KIH0KKwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQzMigpCit7Cisg
ICAgdWludDMyX3Qgc3JjID0gMHgwZjBmMGYwZjsKKyAgICB1aW50MzJfdCBkc3QgPSAweGYwZjBm
MGYwOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywgMzAsIDMxLCAz
MiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CisgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAg
ICAgICAgZm9yIChhdXRvIHdpZHRoIDogaW1tcykgeworICAgICAgICAgICAgaWYgKGxzYiA+PSAw
ICYmIHdpZHRoID4gMCAmJiBsc2IgKyB3aWR0aCA8IDMyKSB7CisgICAgICAgICAgICAgICAgYXV0
byBiZmkzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAg
IGppdC5iaXRGaWVsZEluc2VydDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsc2IpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdpZHRoKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAg
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgdWludDMyX3QgbWFzazEgPSAoMVUgPDwgd2lkdGgpIC0gMVU7CisgICAg
ICAgICAgICAgICAgdWludDMyX3QgbWFzazIgPSB+KG1hc2sxIDw8IGxzYik7CisgICAgICAgICAg
ICAgICAgdWludDMyX3QgcmhzID0gaW52b2tlPHVpbnQzMl90PihiZmkzMiwgc3JjLCBkc3QpOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGxocyA9ICgoc3JjICYgbWFzazEpIDw8IGxzYikgfCAo
ZHN0ICYgbWFzazIpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHJocywgbGhzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQ2
NCgpCit7CisgICAgdWludDY0X3Qgc3JjID0gMHgwZjBmMGYwZjBmMGYwZjBmOworICAgIHVpbnQ2
NF90IGRzdCA9IDB4ZjBmMGYwZjBmMGYwZjBmMDsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMg
PSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAgIGZv
ciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgIGZvciAoYXV0byB3aWR0aCA6IGltbXMpIHsK
KyAgICAgICAgICAgIGlmIChsc2IgPj0gMCAmJiB3aWR0aCA+IDAgJiYgbHNiICsgd2lkdGggPCA2
NCkgeworICAgICAgICAgICAgICAgIGF1dG8gYmZpNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuYml0RmllbGRJbnNlcnQ2NChHUFJJbmZvOjph
cmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMih3aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0g
KDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9
IH4obWFzazEgPDwgbHNiKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByaHMgPSBpbnZva2U8
dWludDY0X3Q+KGJmaTY0LCBzcmMsIGRzdCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbGhz
ID0gKChzcmMgJiBtYXNrMSkgPDwgbHNiKSB8IChkc3QgJiBtYXNrMik7CisgICAgICAgICAgICAg
ICAgQ0hFQ0tfRVEocmhzLCBsaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQogI2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCkBA
IC0zMzgwLDYgKzM0NDAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05P
UkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFViZng2NCgpKTsKICAgICBS
VU4odGVzdFViZml6MzIoKSk7CiAgICAgUlVOKHRlc3RVYmZpejY0KCkpOworICAgIFJVTih0ZXN0
Qml0RmllbGRJbnNlcnQzMigpKTsKKyAgICBSVU4odGVzdEJpdEZpZWxkSW5zZXJ0NjQoKSk7CiAj
ZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNzk5YjRjNmE3ZDI4NDE0
MWU2MjgxYTUyZjY5YmI4MWI4ZGQwMjIxYi4uODQwNDBmZWY0YTk2YTc1OTEzN2JjNjZlZGU0NTE4
Zjc5MjMxYWFiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
QEAgLTI3NjEsMTcgKzI3NjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChz
cmMgPj4gbHNiKSAmIG1hc2sgd2hlcmUgbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKKyAgICAgICAg
ICAgIC8vIFVCRlggUGF0dGVybjogZGVzdCA9IChzcmMgPj4gbHNiKSAmIG1hc2sgCisgICAgICAg
ICAgICAvLyBXaGVyZTogbWFzayA9ICgxIDw8IHdpZHRoKSAtIDEKICAgICAgICAgICAgIGF1dG8g
dHJ5QXBwZW5kVUJGWCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9w
Y29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFViZngzMiwgVWJmeDY0LCBtX3ZhbHVlLT50eXBl
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwg
QXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpICE9IFpTaHIgfHwg
IWNhbkJlSW50ZXJuYWwobGVmdCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgICAgICAgICAgICAgIFZhbHVlKiBzcmNWYWx1ZSA9IGxlZnQtPmNoaWxkKDApOwogICAg
ICAgICAgICAgICAgIFZhbHVlKiBsc2JWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOwotCi0gICAgICAg
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShVYmZ4MzIsIFViZng2
NCwgc3JjVmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWltbShsc2JW
YWx1ZSkgfHwgbHNiVmFsdWUtPmFzSW50KCkgPCAwIHx8ICFyaWdodC0+aGFzSW50KCkpCisgICAg
ICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKHNyY1ZhbHVlKSB8fCAhaW1tKGxzYlZh
bHVlKSB8fCBsc2JWYWx1ZS0+YXNJbnQoKSA8IDAgfHwgIXJpZ2h0LT5oYXNJbnQoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgdWludDY0X3Qg
bHNiID0gbHNiVmFsdWUtPmFzSW50KCk7CkBAIC0yNzk2LDggKzI3OTcsNjcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQml0T3I6IHsKLSAgICAgICAgICAgIGFwcGVuZEJp
bk9wPE9yMzIsIE9yNjQsIE9yRG91YmxlLCBPckZsb2F0LCBDb21tdXRhdGl2ZT4oCi0gICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAg
ICAgIFZhbHVlKiBsZWZ0ID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBWYWx1ZSog
cmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgLy8gQkZJIFBhdHRlcm46
IGQgPSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCisgICAgICAgICAgICAvLyBX
aGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkKKyAgICAgICAgICAgIC8vICAgICAgICBt
YXNrMiA9IH4obWFzazEgPDwgbHNiKQorICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRCRkkgPSBb
Jl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoQml0RmllbGRJbnNlcnQzMiwgQml0
RmllbGRJbnNlcnQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlz
VmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OkltbSwgQXJnOjpUbXAp
KSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlm
IChsZWZ0LT5vcGNvZGUoKSAhPSBTaGwgfHwgIWNhbkJlSW50ZXJuYWwobGVmdCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPm9w
Y29kZSgpICE9IEJpdEFuZCB8fCAhY2FuQmVJbnRlcm5hbChyaWdodCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+Y2hpbGQoMCkt
Pm9wY29kZSgpICE9IEJpdEFuZCB8fCAhY2FuQmVJbnRlcm5hbChsZWZ0LT5jaGlsZCgwKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIFZhbHVl
KiBuVmFsdWUgPSBsZWZ0LT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFs
dWUqIG1hc2tWYWx1ZTEgPSBsZWZ0LT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAg
ICAgVmFsdWUqIGxzYlZhbHVlID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFs
dWUqIGRWYWx1ZSA9IHJpZ2h0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFz
a1ZhbHVlMiA9IHJpZ2h0LT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQu
Y29udGFpbnMoblZhbHVlKSB8fCBtX2xvY2tlZC5jb250YWlucyhkVmFsdWUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFtYXNrVmFsdWUx
LT5oYXNJbnQoKSB8fCAhaW1tKGxzYlZhbHVlKSB8fCBsc2JWYWx1ZS0+YXNJbnQoKSA8IDAgfHwg
IW1hc2tWYWx1ZTItPmhhc0ludCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsc2IgPSBsc2JWYWx1ZS0+YXNJbnQoKTsKKyAg
ICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMSA9IG1hc2tWYWx1ZTEtPmFzSW50KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFtYXNrMSB8fCBtYXNrMSAmIChtYXNrMSArIDEpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNp
emUgPSBvcGNvZGUgPT0gQml0RmllbGRJbnNlcnQzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAg
ICAgdWludDY0X3Qgd2lkdGggPSBXVEY6OmJpdENvdW50KG1hc2sxKTsKKyAgICAgICAgICAgICAg
ICBpZiAobHNiICsgd2lkdGggPiBkYXRhc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzazIgPSBtYXNrVmFsdWUyLT5h
c0ludCgpOworCisgICAgICAgICAgICAgICAgYXV0byBpc1ZhbGlkTWFzazIgPSBbJl0gKCkgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSAoKG1hc2sxIDw8IGxz
YikgXiBtYXNrMik7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxvd2VyU2V0ID0gMHhm
ZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZnVsbFNldCA9IDB4ZmZmZmZm
ZmZmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzaXplID09IDMyID8g
ISgobWFzayAmIGxvd2VyU2V0KSBeIGxvd2VyU2V0KSA6ICEobWFzayBeIGZ1bGxTZXQpOworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRNYXNrMigpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBUbXAg
cmVzdWx0ID0gdG1wKG1fdmFsdWUpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKGRWYWx1ZSksIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG5WYWx1ZSksIGltbShsc2JWYWx1ZSksIGltbSh3
aWR0aCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdC0+Y2hp
bGQoMCkpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRCRkkobGVmdCwg
cmlnaHQpIHx8IHRyeUFwcGVuZEJGSShyaWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBhcHBlbmRCaW5PcDxPcjMyLCBPcjY0LCBPckRvdWJsZSwgT3JG
bG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0yODM2LDE3ICsyODk2LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBW
YWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAgVmFsdWUqIHJpZ2h0
ID0gbV92YWx1ZS0+Y2hpbGQoMSk7CiAKLSAgICAgICAgICAgIC8vIFVCRklaIFBhdHRlcm46IGQg
PSAobiAmIG1hc2spIDw8IGxzYiB3aGVyZSBtYXNrID0gKDEgPDwgd2lkdGgpIC0gMQorICAgICAg
ICAgICAgLy8gVUJGSVogUGF0dGVybjogZCA9IChuICYgbWFzaykgPDwgbHNiIAorICAgICAgICAg
ICAgLy8gV2hlcmU6IG1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxCiAgICAgICAgICAgICBhdXRvIHRy
eUFwcGVuZFVCRlogPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShVYmZpejMyLCBVYmZpejY0LCBtX3ZhbHVlLT50eXBl
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwg
QXJnOjpJbW0sIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gQml0QW5kIHx8
ICFjYW5CZUludGVybmFsKGxlZnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICAgICAgICAgICAgICBWYWx1ZSogblZhbHVlID0gbGVmdC0+Y2hpbGQoMCk7CiAgICAg
ICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOwotCi0gICAgICAg
ICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShVYmZpejMyLCBVYmZp
ejY0LCBuVmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIW1hc2tWYWx1
ZS0+aGFzSW50KCkgfHwgIWltbShyaWdodCkgfHwgcmlnaHQtPmFzSW50KCkgPCAwKQorICAgICAg
ICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhuVmFsdWUpIHx8ICFtYXNrVmFsdWUtPmhh
c0ludCgpIHx8ICFpbW0ocmlnaHQpIHx8IHJpZ2h0LT5hc0ludCgpIDwgMCkgCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxzYiA9
IHJpZ2h0LT5hc0ludCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMKaW5kZXggOTYyZDU0MGUwOGNlYzUyNTA1ZDk0MDM0YjU2MzZmZWU3MWQyOWU5
Mi4uYTZhMTU4ODY3M2E0MjUxYjMxNGY0MGI2NzFlOGRjMzRlYTJkNTQ2MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0zNzUsNiArMzc1
LDEyIEBAIGFybTY0OiBVYmZpejMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKIGFy
bTY0OiBVYmZpejY0IFU6Rzo2NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAogICAgIFRtcCwgSW1t
LCBJbW0sIFRtcAogCithcm02NDogQml0RmllbGRJbnNlcnQzMiBVOkc6MzIsIFU6RzozMiwgVTpH
OjMyLCBaRDpHOjMyCisgICAgVG1wLCBJbW0sIEltbSwgVG1wCisKK2FybTY0OiBCaXRGaWVsZElu
c2VydDY0IFU6Rzo2NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAorICAgIFRtcCwgSW1tLCBJbW0s
IFRtcAorCiA2NDogQW5kNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBU
bXAKICAgICBhcm02NDogQml0SW1tNjQsIFRtcCwgVG1wCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmgKaW5kZXggNmI5NmIzYjgzYjIxY2FjODVhYTI4ZWZlYzE5ZmRjYjk5ZThhZjIzNy4uNDRjMGE1
MGJhMTEyOTBjZTYxZTQ4ZDY4M2E0MWNlZDFiYmI1YzI1NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuaApAQCAtNDI4LDYgKzQyOCw4IEBAIHZvaWQgdGVzdFViZml6NjRBbmRTaGlmdFZhbHVl
TWFzaygpOwogdm9pZCB0ZXN0VWJmaXo2NEFuZFNoaWZ0TWFza1ZhbHVlKCk7CiB2b2lkIHRlc3RV
YmZpejY0U2hpZnRBbmQoKTsKIHZvaWQgdGVzdFViZml6NjRBbmRTaGlmdCgpOwordm9pZCB0ZXN0
Qml0RmllbGRJbnNlcnQzMigpOwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQ2NCgpOwogdm9pZCB0
ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKTsKIHZvaWQgdGVzdEJpdEFuZFpl
cm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCk7CiB2b2lkIHRlc3RCYXNpY1NlbGVjdCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKaW5kZXggZGZlYTQ2ZWVkOGE1Y2EyMTc3ZDc1
ZjVmNGZkMzBlZTZkMTRiYTcwMC4uOTRhN2UzNGNjN2Q4MDlkYzkyZDBkY2Q0NzI5NGVmYmIwMzE3
ZmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCkBAIC0zMTU4LDYgKzMx
NTgsMTU0IEBAIHZvaWQgdGVzdFViZml6NjRBbmRTaGlmdCgpCiAgICAgfQogfQogCit2b2lkIHRl
c3RCaXRGaWVsZEluc2VydDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQzMl90IGQgPSAweGYwZjBm
MGYwOworICAgIHVpbnQzMl90IG4gPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4g
bHNicyA9IHsgMSwgMiwgMTQsIDMwLCAzMCB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gd2lkdGhz
ID0geyAzMCwgMywgMTcsIDEsIDIgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9ICgobiAm
IG1hc2sxKSA8PCBsc2IpIHwgKGQgJiBtYXNrMikKKyAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEg
PDwgd2lkdGgpIC0gMSkKKyAgICAvLyAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8IGxzYikKKyAg
ICBhdXRvIHRlc3QxID0gWyZdICh1aW50MzJfdCBsc2IsIHVpbnQzMl90IG1hc2sxLCB1aW50MzJf
dCBtYXNrMikgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogZFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSog
blZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1
ZSogbHNiVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbHNiKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTEgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazEpOworICAgICAgICBWYWx1ZSogbWFza1Zh
bHVlMiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNr
Mik7CisKKyAgICAgICAgVmFsdWUqIGxlZnRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNrVmFsdWUxKTsKKyAgICAgICAg
VmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3Jp
Z2luKCksIGxlZnRBbmRWYWx1ZSwgbHNiVmFsdWUpOworICAgICAgICBWYWx1ZSogcmlnaHRBbmRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgZFZh
bHVlLCBtYXNrVmFsdWUyKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAor
ICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCByaWdodEFu
ZFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgImJmaSIpOworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgZCwgbik7
CisgICAgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IChkICYgbWFzazIpIHwgKChuICYg
bWFzazEpIDw8IGxzYikgCisgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEp
CisgICAgLy8gICAgICAgIG1hc2syID0gfihtYXNrMSA8PCBsc2IpCisgICAgYXV0byB0ZXN0MiA9
IFsmXSAodWludDMyX3QgbHNiLCB1aW50MzJfdCBtYXNrMSwgdWludDMyX3QgbWFzazIpIC0+IHVp
bnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIGRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGxzYlZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxzYik7CisgICAg
ICAgIFZhbHVlKiBtYXNrVmFsdWUxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTIgPSByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOworCisgICAgICAg
IFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIGRWYWx1ZSwgbWFza1ZhbHVlMik7CisgICAgICAgIFZhbHVlKiByaWdodEFu
ZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBu
VmFsdWUsIG1hc2tWYWx1ZTEpOworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwgbHNiVmFs
dWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRPciwgT3JpZ2luKCksIGxlZnRBbmRWYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisg
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02
NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJiZmkiKTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIGQsIG4pOworICAgIH07CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxzYnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdWlu
dDMyX3QgbHNiID0gbHNicy5hdChpKTsKKyAgICAgICAgdWludDMyX3QgbWFzazEgPSAoMVUgPDwg
d2lkdGhzLmF0KGkpKSAtIDFVOworICAgICAgICB1aW50MzJfdCBtYXNrMiA9IH4obWFzazEgPDwg
bHNiKTsKKyAgICAgICAgQ0hFQ0sodGVzdDEobHNiLCBtYXNrMSwgbWFzazIpID09ICgoKG4gJiBt
YXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpKSk7CisgICAgICAgIENIRUNLKHRlc3QyKGxzYiwg
bWFzazEsIG1hc2syKSA9PSAoKGQgJiBtYXNrMikgfCAoKG4gJiBtYXNrMSkgPDwgbHNiKSkpOwor
ICAgIH0KK30KKwordm9pZCB0ZXN0Qml0RmllbGRJbnNlcnQ2NCgpCit7CisgICAgaWYgKEpTQzo6
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICB1
aW50NjRfdCBkID0gMHhmMGYwZjBmMGYwZjBmMGYwOworICAgIHVpbnQ2NF90IG4gPSAweGZmZmZm
ZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBsc2JzID0geyAxLCAzMCwgMTQsIDYy
LCA2MiB9OworICAgIFZlY3Rvcjx1aW50NjRfdD4gd2lkdGhzID0geyA2MiwgMzMsIDE3LCAxLCAy
IH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChk
ICYgbWFzazIpCisgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgxIDw8IHdpZHRoKSAtIDEpCisgICAg
Ly8gICAgICAgIG1hc2syID0gfihtYXNrMSA8PCBsc2IpCisgICAgYXV0byB0ZXN0MSA9IFsmXSAo
dWludDY0X3QgbHNiLCB1aW50NjRfdCBtYXNrMSwgdWludDY0X3QgbWFzazIpIC0+IHVpbnQ2NF90
IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIGRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFs
dWUqIGxzYlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGxzYik7CisgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUxID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2tW
YWx1ZTIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFz
azIpOworCisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFza1ZhbHVlMSk7CisgICAgICAg
IFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9y
aWdpbigpLCBsZWZ0QW5kVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0QW5k
VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGRW
YWx1ZSwgbWFza1ZhbHVlMik7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgcmlnaHRB
bmRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
ICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJiZmkiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIGQsIG4p
OworICAgIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSAoZCAmIG1hc2syKSB8ICgobiAm
IG1hc2sxKSA8PCBsc2IpIAorICAgIC8vIFdoZXJlOiBtYXNrMSA9ICgoMSA8PCB3aWR0aCkgLSAx
KQorICAgIC8vICAgICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQorICAgIGF1dG8gdGVzdDIg
PSBbJl0gKHVpbnQ2NF90IGxzYiwgdWludDY0X3QgbWFzazEsIHVpbnQ2NF90IG1hc2syKSAtPiB1
aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBkVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIFZhbHVlKiBsc2JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBsc2IpOworICAgICAgICBWYWx1ZSogbWFza1ZhbHVlMSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVl
KiBtYXNrVmFsdWUyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIG1hc2syKTsKKworICAgICAgICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBkVmFsdWUsIG1hc2tWYWx1ZTIpOwor
ICAgICAgICBWYWx1ZSogcmlnaHRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBtYXNrVmFsdWUxKTsKKyAgICAgICAgVmFsdWUq
IHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCks
IHJpZ2h0QW5kVmFsdWUsIGxzYlZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBsZWZ0QW5kVmFs
dWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAiYmZpIik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2Rl
LCBkLCBuKTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsc2JzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHVpbnQ2NF90IGxzYiA9IGxzYnMuYXQoaSk7CisgICAgICAgIHVp
bnQ2NF90IG1hc2sxID0gKDFVTEwgPDwgd2lkdGhzLmF0KGkpKSAtIDFVTEw7CisgICAgICAgIHVp
bnQ2NF90IG1hc2syID0gfihtYXNrMSA8PCBsc2IpOworICAgICAgICBDSEVDSyh0ZXN0MShsc2Is
IG1hc2sxLCBtYXNrMikgPT0gKCgobiAmIG1hc2sxKSA8PCBsc2IpIHwgKGQgJiBtYXNrMikpKTsK
KyAgICAgICAgQ0hFQ0sodGVzdDIobHNiLCBtYXNrMSwgbWFzazIpID09ICgoZCAmIG1hc2syKSB8
ICgobiAmIG1hc2sxKSA8PCBsc2IpKSk7CisgICAgfQorfQorCiB2b2lkIHRlc3RCaXRBbmRaZXJv
U2hpZnRSaWdodEFyZ0ltbU1hc2szMigpCiB7CiAgICAgLy8gVHVybiB0aGlzOiAodG1wID4+IGlt
bSkgJiBtYXNrIApAQCAtNDA1MCw2ICs0MTk4LDggQEAgdm9pZCBhZGRCaXRUZXN0cyhjb25zdCBj
aGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAg
ICAgUlVOKHRlc3RVYmZpejY0QW5kU2hpZnRNYXNrVmFsdWUoKSk7CiAgICAgUlVOKHRlc3RVYmZp
ejY0U2hpZnRBbmQoKSk7CiAgICAgUlVOKHRlc3RVYmZpejY0QW5kU2hpZnQoKSk7CisgICAgUlVO
KHRlc3RCaXRGaWVsZEluc2VydDMyKCkpOworICAgIFJVTih0ZXN0Qml0RmllbGRJbnNlcnQ2NCgp
KTsKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkpOwogICAg
IFJVTih0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKSk7CiAgICAgUlVOKHRl
c3RCaXRBbmRBcmdzKDQzLCA0MykpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>