<?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>234398</bug_id>
          
          <creation_ts>2021-12-16 09:58:41 -0800</creation_ts>
          <short_desc>[RISCV64] Implement linking and patching support in RISCV64Assembler</short_desc>
          <delta_ts>2022-03-11 05:33:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237775</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pmatos</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1824796</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-12-16 09:58:41 -0800</bug_when>
    <thetext>[RISCV64] Implement linking and patching support in RISCV64Assembler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1824799</commentid>
    <comment_count>1</comment_count>
      <attachid>447366</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-12-16 10:00:53 -0800</bug_when>
    <thetext>Created attachment 447366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825031</commentid>
    <comment_count>2</comment_count>
      <attachid>447366</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-17 02:13:47 -0800</bug_when>
    <thetext>Comment on attachment 447366
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825049</commentid>
    <comment_count>3</comment_count>
      <attachid>447366</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-12-17 05:12:35 -0800</bug_when>
    <thetext>Comment on attachment 447366
Patch

CQ failures are not related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825058</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-17 05:57:15 -0800</bug_when>
    <thetext>Committed r287181 (245350@main): &lt;https://commits.webkit.org/245350@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447366.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825059</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-17 05:58:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/86629258&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447366</attachid>
            <date>2021-12-16 10:00:53 -0800</date>
            <delta_ts>2021-12-17 05:57:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234398-20211216190051.patch</filename>
            <type>text/plain</type>
            <size>37267</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2JkOGEyODIyY2M0MTVhOWU0NTQyOGVmOTg0NmExNmRjNDVkOGJkLi5jOWU0OGRjNmYxYjlhMzcw
YmIyZDk4MmM3ZTZkNGIwYzczZjlmOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAyMS0xMi0xNiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW1JJU0NWNjRdIEltcGxlbWVudCBsaW5raW5nIGFuZCBwYXRjaGluZyBz
dXBwb3J0IGluIFJJU0NWNjRBc3NlbWJsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBvcHVsYXRlIFJJU0NWNjRBc3NlbWJsZXIgY2xhc3Mgd2l0aCB0
aGUgbmVjZXNzYXJ5IGltcGxlbWVudGF0aW9ucyBhbmQKKyAgICAgICAgZmFjaWxpdGllcyB0byBz
dXBwb3J0IGxpbmtpbmcgYW5kIHBhdGNoaW5nIG9wZXJhdGlvbnMuIEltcGxlbWVudGF0aW9ucwor
ICAgICAgICBvZiBkaWZmZXJlbnQgbWV0aG9kcyBpbiBNYWNyb0Fzc2VtYmxlclJJU0NWNjQgY292
ZXJpbmcgY2FsbHMsIGp1bXBzCisgICAgICAgIGFuZCBwYXRjaGVzIGFyZSBhbHNvIGFkZGVkLgor
CisgICAgICAgIEhlbHBlciBzdHJ1Y3RzIGFyZSBhZGRlZCBpbiB0aGUgUklTQ1Y2NEFzc2VtYmxl
ciBjbGFzcyB0aGF0IGNvdmVyCisgICAgICAgIGxpbmtpbmcgb2YganVtcHMsIGNhbGxzIG9yIGJy
YW5jaGVzIGFuZCBwYXRjaGluZyBvZiBwb2ludGVyIHZhbHVlcy4KKyAgICAgICAgUmVsZXZhbnQg
bWV0aG9kcyBhcmUgYWxzbyBpbXBsZW1lbnRlZCB0byB1dGlsaXplIHRoZXNlIGhlbHBlcnMuCisK
KyAgICAgICAgUklTQ1Y2NEFzc2VtYmxlciBhbHNvIGdhaW5zIGhlbHBlciBtZXRob2RzIHRoYXQg
Z2VuZXJhdGUgcGxhY2Vob2xkZXJzCisgICAgICAgIGZvciB0aGUgc3BlY2lmaWMgdHlwZSBvZiBs
aW5raW5nIG9yIHBhdGNoaW5nLiBUaGUgcGFzc2VkLWluIGZ1bmN0b3IgaXMKKyAgICAgICAgdGhl
biBpbnZva2VkLCBlbmFibGluZyB0aGUgdXNlciAoTWFjcm9Bc3NlbWJsZXJSSVNDVjY0IGltcGxl
bWVudGF0aW9uKQorICAgICAgICB0byBhZGRpdGlvbmFsbHkgZ2VuZXJhdGUgdGhlIGRlc2lyZWQg
aW5zdHJ1Y3Rpb24gc2VxdWVuY2UgdGhhdCB1dGlsaXplcworICAgICAgICB0aGUgZ2l2ZW4gcGxh
Y2Vob2xkZXIuCisKKyAgICAgICAgSW4gTWFjcm9Bc3NlbWJsZXJSSVNDVjY0LCBkaWZmZXJlbnQg
bm9vcCBtZXRob2RzIGNvdmVyaW5nIGp1bXBzLCBjYWxscywKKyAgICAgICAgbGlua2luZyBhbmQg
cGF0Y2hpbmcgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGltcGxlbWVudGF0aW9u
cy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJU0NWNjQuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25S
ZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6cmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclJJU0NWNjQ6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJS
SVNDVjY0OjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2
NDo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6ZmFySnVtcCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6bmVhckNhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6Om5lYXJUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6dGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJSSVNDVjY0OjpyZXQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclJJU0NWNjQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clJJU0NWNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2hPbkFkZHJlc3MpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclJJU0NWNjQ6OnN0YXJ0T2ZQYXRj
aGFibGVCcmFuY2gzMldpdGhQYXRjaE9uQWRkcmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyUklTQ1Y2NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clJJU0NWNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0
Y2gpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9SSVNDVjY0QXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OlJJU0NWNjRJbnN0cnVjdGlvbnM6OkltbWVkaWF0ZUJhc2U6OmltbWVkaWF0
ZU1hc2spOgorICAgICAgICAoSlNDOjpSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpJbW1lZGlhdGVCYXNl
Ojp2KToKKyAgICAgICAgKEpTQzo6UklTQ1Y2NEluc3RydWN0aW9uczo6SW1tZWRpYXRlRGVjb21w
b3NpdGlvbjo6SW1tZWRpYXRlRGVjb21wb3NpdGlvbik6CisgICAgICAgIChKU0M6OlJJU0NWNjRB
c3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKToKKyAgICAgICAgKEpTQzo6UklT
Q1Y2NEFzc2VtYmxlcjo6Z2V0Q2FsbFJldHVybk9mZnNldCk6CisgICAgICAgIChKU0M6OlJJU0NW
NjRBc3NlbWJsZXI6OmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OlJJ
U0NWNjRBc3NlbWJsZXI6OmxhYmVsRm9yV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OlJJU0NW
NjRBc3NlbWJsZXI6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6UklTQ1Y2NEFzc2VtYmxlcjo6bGlu
a0p1bXApOgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNzZW1ibGVyOjpsaW5rQ2FsbCk6CisgICAg
ICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OmxpbmtQb2ludGVyKToKKyAgICAgICAgKEpTQzo6
UklTQ1Y2NEFzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSk6CisgICAgICAgIChKU0M6
OlJJU0NWNjRBc3NlbWJsZXI6OnBhdGNoYWJsZUp1bXBTaXplKToKKyAgICAgICAgKEpTQzo6UklT
Q1Y2NEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNz
ZW1ibGVyOjpyZWxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6UklTQ1Y2NEFzc2VtYmxlcjo6cmVs
aW5rSnVtcFRvTm9wKToKKyAgICAgICAgKEpTQzo6UklTQ1Y2NEFzc2VtYmxlcjo6cmVsaW5rQ2Fs
bCk6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCk6Cisg
ICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0
Y2gpOgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldCk6Cisg
ICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OmNhY2hlRmx1c2gpOgorICAgICAgICAoSlND
OjpSSVNDVjY0QXNzZW1ibGVyOjpmaWxsTm9wcyk6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3Nl
bWJsZXI6Omp1bXBQbGFjZWhvbGRlcik6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6
OmJyYW5jaFBsYWNlaG9sZGVyKToKKyAgICAgICAgKEpTQzo6UklTQ1Y2NEFzc2VtYmxlcjo6cG9p
bnRlckNhbGxQbGFjZWhvbGRlcik6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6Om5l
YXJDYWxsUGxhY2Vob2xkZXIpOgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNzZW1ibGVyOjpMaW5r
SnVtcE9yQ2FsbEltcGw6OmFwcGx5KToKKyAgICAgICAgKEpTQzo6UklTQ1Y2NEFzc2VtYmxlcjo6
TGlua0p1bXBJbXBsOjpwbGFjZWhvbGRlckluc24pOgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNz
ZW1ibGVyOjpMaW5rSnVtcEltcGw6OmdlbmVyYXRlUGxhY2Vob2xkZXIpOgorICAgICAgICAoSlND
OjpSSVNDVjY0QXNzZW1ibGVyOjpMaW5rQ2FsbEltcGw6OnBsYWNlaG9sZGVySW5zbik6CisgICAg
ICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OkxpbmtDYWxsSW1wbDo6Z2VuZXJhdGVQbGFjZWhv
bGRlcik6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OkxpbmtCcmFuY2hJbXBsOjpw
bGFjZWhvbGRlckluc24pOgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNzZW1ibGVyOjpMaW5rQnJh
bmNoSW1wbDo6Z2VuZXJhdGVQbGFjZWhvbGRlcik6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3Nl
bWJsZXI6OkxpbmtCcmFuY2hJbXBsOjphcHBseSk6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3Nl
bWJsZXI6OlBhdGNoUG9pbnRlckltcGw6OnBsYWNlaG9sZGVySW5zbik6CisgICAgICAgIChKU0M6
OlJJU0NWNjRBc3NlbWJsZXI6OlBhdGNoUG9pbnRlckltcGw6OmdlbmVyYXRlUGxhY2Vob2xkZXIp
OgorICAgICAgICAoSlNDOjpSSVNDVjY0QXNzZW1ibGVyOjpQYXRjaFBvaW50ZXJJbXBsOjphcHBs
eSk6CisgICAgICAgIChKU0M6OlJJU0NWNjRBc3NlbWJsZXI6OlBhdGNoUG9pbnRlckltcGw6OnJl
YWQpOgorCiAyMDIxLTEyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVuYW1lIFdhc206OkNvZGVCbG9jayB0byBXYXNtOjpDYWxsZWVHcm91cApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJ
U0NWNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJS
SVNDVjY0LmgKaW5kZXggMGQ1YjE2YTJjN2IxMzdjNTAwMGY2ODAwODNhNGFiZjM3MzZiZTFlMC4u
OGQyZjBlMzI3NjMwM2E0ZTA0NWMyYmEzZjljZGNmMjc4OTI4NjlhOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclJJU0NWNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUklTQ1Y2NC5o
CkBAIC0xNTUzLDEzICsxNTUzLDE5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQ
dHJUYWcgcmVzdWx0VGFnLCBQdHJUYWcgbG9jYXRpb25UYWc+Ci0gICAgc3RhdGljIEZ1bmN0aW9u
UHRyPHJlc3VsdFRhZz4gcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbDxsb2NhdGlvblRh
Zz4pIHsgcmV0dXJuIHsgfTsgfQorICAgIHN0YXRpYyBGdW5jdGlvblB0cjxyZXN1bHRUYWc+IHJl
YWRDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkNhbGw8bG9jYXRpb25UYWc+IGNhbGwpCisgICAgewor
ICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHI8cmVzdWx0VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8cmVzdWx0VGFnPihBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9u
KCkpKSk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aFZNSGFsdChDb2RlTG9jYXRpb25MYWJlbDx0YWc+KSB7IH0KIAogICAgIHRl
bXBsYXRlPFB0clRhZyBzdGFydFRhZywgUHRyVGFnIGRlc3RUYWc+Ci0gICAgc3RhdGljIHZvaWQg
cmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsPHN0YXJ0VGFnPiwgQ29kZUxvY2F0aW9u
TGFiZWw8ZGVzdFRhZz4pIHsgfQorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2Rl
TG9jYXRpb25MYWJlbDxzdGFydFRhZz4gaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0aW9uTGFi
ZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBc3NlbWJsZXI6OnJlcGxh
Y2VXaXRoSnVtcChpbnN0cnVjdGlvblN0YXJ0LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5k
YXRhTG9jYXRpb24oKSk7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBtYXhKdW1wUmVw
bGFjZW1lbnRTaXplKCkKICAgICB7CkBAIC0xNTcyLDM3ICsxNTc4LDE0MiBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9u
TGFiZWw8dGFnPiBzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHI8dGFnPikgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIENvZGVMb2Nh
dGlvbkxhYmVsPHRhZz4gc3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4gbGFiZWwpCisgICAgeworICAgICAgICByZXR1cm4gbGFi
ZWwubGFiZWxBdE9mZnNldCgwKTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgot
ICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbDx0YWc+IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPHRhZz4pIHsgcmV0
dXJuIHsgfTsgfQorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNo
UHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4ganVtcCwgUmVnaXN0ZXJJRCwgdm9p
ZCogaW5pdGlhbFZhbHVlKQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVw
bGFjZW1lbnRUb1BhdGNoKGp1bXAuZGF0YUxvY2F0aW9uKCksIGluaXRpYWxWYWx1ZSk7CisgICAg
fQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFi
ZWw8dGFnPiBzdGFydE9mUGF0Y2hhYmxlQnJhbmNoMzJXaXRoUGF0Y2hPbkFkZHJlc3MoQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsMzI8dGFnPikgeyByZXR1cm4geyB9OyB9CisgICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0cjx0YWc+IGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSkKKyAgICAg
ICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQXNzZW1i
bGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnRlbXBsYXRlIHJldGFn
Z2VkRXhlY3V0YWJsZUFkZHJlc3M8Tm9QdHJUYWc+KCkpOworICAgIH0KIAotICAgIHRlbXBsYXRl
PFB0clRhZyB0YWc+Ci0gICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFu
Y2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWw8dGFnPiwgUmVnaXN0ZXJJRCwgdm9pZCop
IHsgfQorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+IGNhbGwsIENv
ZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CiAKLSAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgot
ICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIHZvaWQqKSB7IH0KKyAg
ICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGljIHZv
aWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxjYWxsVGFnPiBjYWxsLCBGdW5jdGlvblB0
cjxkZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBzdGF0aWMgdm9p
ZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaDMyV2l0aFBhdGNoKENvZGVM
b2NhdGlvbkxhYmVsPHRhZz4sIEFkZHJlc3MsIGludDMyX3QpIHsgfQorICAgIEp1bXAganVtcCgp
CisgICAgeworICAgICAgICBhdXRvIGxhYmVsID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuanVtcFBsYWNlaG9sZGVyKAorICAgICAgICAgICAgWyZdIHsKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5qYWxJbnNuKFJJU0NWNjRSZWdpc3RlcnM6Onplcm8sIElt
bTo6SjwwPigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gSnVtcChsYWJlbCk7
CisgICAgfQogCi0gICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgot
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Y2FsbFRhZz4sIENv
ZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+KSB7IH0KKyAgICB2b2lkIGZhckp1bXAoUmVnaXN0ZXJJ
RCB0YXJnZXQsIFB0clRhZykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHJJbnNuKFJJ
U0NWNjRSZWdpc3RlcnM6Onplcm8sIHRhcmdldCwgSW1tOjpJPDA+KCkpOworICAgIH0KIAotICAg
IHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KLSAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPGNhbGxUYWc+LCBGdW5jdGlvblB0cjxkZXN0
VGFnPikgeyB9CisgICAgdm9pZCBmYXJKdW1wKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBQdHJU
YWcpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhPigpOworICAgICAgICBs
b2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHRlbXAuZGF0YSgpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKHRlbXAuZGF0YSgpLCB0ZW1wLmRhdGEoKSwgSW1t
OjpJPDA+KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5qYWxySW5zbihSSVNDVjY0UmVnaXN0ZXJz
Ojp6ZXJvLCB0ZW1wLmRhdGEoKSwgSW1tOjpJPDA+KCkpOworICAgIH0KIAotICAgIE1BQ1JPX0FT
U0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRF9XSVRIX1JFVFVSTihqdW1wLCBK
dW1wKTsKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0Qo
ZmFySnVtcCk7CisgICAgdm9pZCBmYXJKdW1wKEFkZHJlc3MgYWRkcmVzcywgUHRyVGFnKQorICAg
IHsKKyAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YSwgTWVtb3J5PigpOworICAgICAgICBh
dXRvIHJlc29sdXRpb24gPSByZXNvbHZlQWRkcmVzcyhhZGRyZXNzLCB0ZW1wLm1lbW9yeSgpKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubGRJbnNuKHRlbXAuZGF0YSgpLCByZXNvbHV0aW9uLmJhc2Us
IEltbTo6SShyZXNvbHV0aW9uLm9mZnNldCkpOworICAgICAgICBtX2Fzc2VtYmxlci5qYWxySW5z
bihSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvLCB0ZW1wLmRhdGEoKSwgSW1tOjpJPDA+KCkpOworICAg
IH0KIAotICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRF9X
SVRIX1JFVFVSTihuZWFyQ2FsbCwgQ2FsbCk7Ci0gICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRf
VEVNUExBVEVEX05PT1BfTUVUSE9EX1dJVEhfUkVUVVJOKG5lYXJUYWlsQ2FsbCwgQ2FsbCk7Ci0g
ICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EX1dJVEhfUkVU
VVJOKHRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCwgQ2FsbCk7CisgICAgdm9pZCBmYXJKdW1w
KEJhc2VJbmRleCBhZGRyZXNzLCBQdHJUYWcpCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0
ZW1wczxEYXRhLCBNZW1vcnk+KCk7CisgICAgICAgIGF1dG8gcmVzb2x1dGlvbiA9IHJlc29sdmVB
ZGRyZXNzKGFkZHJlc3MsIHRlbXAubWVtb3J5KCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sZElu
c24odGVtcC5kYXRhKCksIHJlc29sdXRpb24uYmFzZSwgSW1tOjpJKHJlc29sdXRpb24ub2Zmc2V0
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHJJbnNuKFJJU0NWNjRSZWdpc3RlcnM6Onplcm8s
IHRlbXAuZGF0YSgpLCBJbW06Okk8MD4oKSk7CisgICAgfQogCi0gICAgdm9pZCByZXQoKSB7IH0K
KyAgICB2b2lkIGZhckp1bXAoVHJ1c3RlZEltbVB0ciBpbW0sIFB0clRhZykKKyAgICB7CisgICAg
ICAgIGF1dG8gdGVtcCA9IHRlbXBzPERhdGE+KCk7CisgICAgICAgIGxvYWRJbW1lZGlhdGUoaW1t
LCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHJJbnNuKFJJU0NWNjRSZWdp
c3RlcnM6Onplcm8sIHRlbXAuZGF0YSgpLCBJbW06Okk8MD4oKSk7CisgICAgfQorCisgICAgdm9p
ZCBmYXJKdW1wKFJlZ2lzdGVySUQgdGFyZ2V0LCBSZWdpc3RlcklEIGp1bXBUYWcpCisgICAgewor
ICAgICAgICBVTlVTRURfUEFSQU0oanVtcFRhZyk7CisgICAgICAgIGZhckp1bXAodGFyZ2V0LCBO
b1B0clRhZyk7CisgICAgfQorCisgICAgdm9pZCBmYXJKdW1wKEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGp1bXBUYWcpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oanVt
cFRhZyk7CisgICAgICAgIGZhckp1bXAoYWRkcmVzcywgTm9QdHJUYWcpOworICAgIH0KKworICAg
IHZvaWQgZmFySnVtcChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQganVtcFRhZykKKyAgICB7
CisgICAgICAgIFVOVVNFRF9QQVJBTShqdW1wVGFnKTsKKyAgICAgICAgZmFySnVtcChhZGRyZXNz
LCBOb1B0clRhZyk7CisgICAgfQorCisgICAgdm9pZCBmYXJKdW1wKEJhc2VJbmRleCBhZGRyZXNz
LCBSZWdpc3RlcklEIGp1bXBUYWcpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oanVtcFRh
Zyk7CisgICAgICAgIGZhckp1bXAoYWRkcmVzcywgTm9QdHJUYWcpOworICAgIH0KKworICAgIENh
bGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgYXV0byBsYWJlbCA9IG1fYXNzZW1ibGVyLmxh
YmVsKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lYXJDYWxsUGxhY2Vob2xkZXIoCisgICAgICAg
ICAgICBbJl0geworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmphbEluc24oUklTQ1Y2NFJl
Z2lzdGVyczo6eDEsIEltbTo6SjwwPigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gQ2FsbChsYWJlbCwgQ2FsbDo6TGlua2FibGVOZWFyKTsKKyAgICB9CisKKyAgICBDYWxsIG5l
YXJUYWlsQ2FsbCgpCisgICAgeworICAgICAgICBhdXRvIGxhYmVsID0gbV9hc3NlbWJsZXIubGFi
ZWwoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVhckNhbGxQbGFjZWhvbGRlcigKKyAgICAgICAg
ICAgIFsmXSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuamFsSW5zbihSSVNDVjY0UmVn
aXN0ZXJzOjp6ZXJvLCBJbW06Oko8MD4oKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIENhbGwobGFiZWwsIENhbGw6OkxpbmthYmxlTmVhclRhaWwpOworICAgIH0KKworICAgIENh
bGwgdGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCkKKyAgICB7CisgICAgICAgIGF1dG8gbGFi
ZWwgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOworICAgICAgICBtX2Fzc2VtYmxlci5uZWFyQ2FsbFBs
YWNlaG9sZGVyKAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5qYWxJbnNuKFJJU0NWNjRSZWdpc3RlcnM6OngxLCBJbW06Oko8MD4oKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIENhbGwobGFiZWwsIENhbGw6OkxpbmthYmxlTmVhcik7Cisg
ICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuamFscklu
c24oUklTQ1Y2NFJlZ2lzdGVyczo6emVybywgUklTQ1Y2NFJlZ2lzdGVyczo6eDEsIEltbTo6STww
PigpKTsKKyAgICB9CiAKICAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFURURfTk9P
UF9NRVRIT0QodGVzdDgpOwogICAgIE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9O
T09QX01FVEhPRCh0ZXN0MzIpOwpAQCAtMTY1Miw4ICsxNzYzLDQzIEBAIHB1YmxpYzoKIAogICAg
IE1BQ1JPX0FTU0VNQkxFUl9SSVNDVjY0X1RFTVBMQVRFRF9OT09QX01FVEhPRChicmFuY2hDb252
ZXJ0RG91YmxlVG9JbnQzMik7CiAKLSAgICBNQUNST19BU1NFTUJMRVJfUklTQ1Y2NF9URU1QTEFU
RURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4oY2FsbCwgQ2FsbCk7Ci0gICAgTUFDUk9fQVNTRU1C
TEVSX1JJU0NWNjRfVEVNUExBVEVEX05PT1BfTUVUSE9EKGNhbGxPcGVyYXRpb24pOworICAgIENh
bGwgY2FsbChQdHJUYWcpCisgICAgeworICAgICAgICBhdXRvIGxhYmVsID0gbV9hc3NlbWJsZXIu
bGFiZWwoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIucG9pbnRlckNhbGxQbGFjZWhvbGRlcigKKyAg
ICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byB0ZW1wID0gdGVtcHM8RGF0YT4o
KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpSW5zbih0ZW1wLmRhdGEoKSwgUklT
Q1Y2NFJlZ2lzdGVyczo6emVybywgSW1tOjpJPDA+KCkpOworICAgICAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmphbHJJbnNuKFJJU0NWNjRSZWdpc3RlcnM6OngxLCB0ZW1wLmRhdGEoKSwgSW1tOjpJ
PDA+KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBDYWxsKGxhYmVsLCBDYWxs
OjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0LCBQ
dHJUYWcpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qYWxySW5zbihSSVNDVjY0UmVnaXN0
ZXJzOjp4MSwgdGFyZ2V0LCBJbW06Okk8MD4oKSk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLmxhYmVsKCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIENhbGwgY2FsbChBZGRy
ZXNzIGFkZHJlc3MsIFB0clRhZykKKyAgICB7CisgICAgICAgIGF1dG8gdGVtcCA9IHRlbXBzPERh
dGEsIE1lbW9yeT4oKTsKKyAgICAgICAgYXV0byByZXNvbHV0aW9uID0gcmVzb2x2ZUFkZHJlc3Mo
YWRkcmVzcywgdGVtcC5tZW1vcnkoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkSW5zbih0ZW1w
LmRhdGEoKSwgcmVzb2x1dGlvbi5iYXNlLCBJbW06OkkocmVzb2x1dGlvbi5vZmZzZXQpKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuamFsckluc24oUklTQ1Y2NFJlZ2lzdGVyczo6eDEsIHRlbXAuZGF0
YSgpLCBJbW06Okk8MD4oKSk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmxhYmVs
KCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIGNhbGxU
YWcpIHsgVU5VU0VEX1BBUkFNKGNhbGxUYWcpOyByZXR1cm4gY2FsbChOb1B0clRhZyk7IH0KKyAg
ICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQsIFJlZ2lzdGVySUQgY2FsbFRhZykgeyBVTlVT
RURfUEFSQU0oY2FsbFRhZyk7IHJldHVybiBjYWxsKHRhcmdldCwgTm9QdHJUYWcpOyB9CisgICAg
Q2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBjYWxsVGFnKSB7IFVOVVNFRF9Q
QVJBTShjYWxsVGFnKTsgcmV0dXJuIGNhbGwoYWRkcmVzcywgTm9QdHJUYWcpOyB9CisKKyAgICB2
b2lkIGNhbGxPcGVyYXRpb24oY29uc3QgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVy
YXRpb24pCisgICAgeworICAgICAgICBhdXRvIHRlbXAgPSB0ZW1wczxEYXRhPigpOworICAgICAg
ICBsb2FkSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpLCB0ZW1wLmRhdGEoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmphbHJJbnNuKFJJU0NWNjRS
ZWdpc3RlcnM6OngxLCB0ZW1wLmRhdGEoKSwgSW1tOjpJPDA+KCkpOworICAgIH0KIAogICAgIHZv
aWQgZ2V0RWZmZWN0aXZlQWRkcmVzcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKQEAgLTIwNzEsOSArMjIxNyw2IEBAIHB1YmxpYzoKICAgICBNQUNST19BU1NFTUJM
RVJfUklTQ1Y2NF9URU1QTEFURURfTk9PUF9NRVRIT0RfV0lUSF9SRVRVUk4oYnJhbmNoQXRvbWlj
V2Vha0NBUzMyLCBKdW1wTGlzdCk7CiAgICAgTUFDUk9fQVNTRU1CTEVSX1JJU0NWNjRfVEVNUExB
VEVEX05PT1BfTUVUSE9EX1dJVEhfUkVUVVJOKGJyYW5jaEF0b21pY1dlYWtDQVM2NCwgSnVtcExp
c3QpOwogCi0gICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2Fs
bCh2b2lkKiwgQ2FsbCwgRnVuY3Rpb25QdHI8dGFnPikgeyB9Ci0KIHByaXZhdGU6CiAgICAgc3Ry
dWN0IEltbSB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JJU0NWNjRBc3NlbWJsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCmluZGV4IDg1ZGVjOTg5
NWRhMWFhNzQ2MDBkZDNkMmU3OTg3NDYwZWEwMzdiMWIuLjAyOTVlOTU5YmFmY2U3MmRlOTcyOGNl
ZTQ1MDdkNmI2ZTBiOTU5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvUklTQ1Y2NEFzc2VtYmxlci5oCkBAIC0xNzYsNiArMTc2LDE0IEBAIHRlbXBsYXRlPHVu
c2lnbmVkIGltbWVkaWF0ZVNpemU+CiBzdHJ1Y3QgSW1tZWRpYXRlQmFzZSB7CiAgICAgc3RhdGlj
X2Fzc2VydChpbW1lZGlhdGVTaXplIDw9IHNpemVvZih1aW50MzJfdCkgKiA4KTsKIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciBUIGltbWVkaWF0ZU1hc2so
KQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByKGltbWVkaWF0ZVNpemUgPCBzaXplb2YodWlu
dDMyX3QpICogOCkKKyAgICAgICAgICAgIHJldHVybiAoKFQoMSkgPDwgaW1tZWRpYXRlU2l6ZSkg
LSAxKTsKKyAgICAgICAgcmV0dXJuIFQofjApOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgc3RhdGljIGF1dG8gaXNWYWxpZChUIGltbVZhbHVlKQogICAgICAgICAtPiBz
dGQ6OmVuYWJsZV9pZl90PChzdGQ6OmlzX3NhbWVfdjxULCBpbnQzMl90PiB8fCBzdGQ6OmlzX3Nh
bWVfdjxULCBpbnQ2NF90PiksIGJvb2w+CkBAIC0xODksNyArMTk3LDcgQEAgc3RydWN0IEltbWVk
aWF0ZUJhc2UgewogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCgoLSgxIDw8IChpbW1lZGlh
dGVTaXplIC0gMSkpIDw9IGltbVZhbHVlKSAmJiAoaW1tVmFsdWUgPD0gKCgxIDw8IChpbW1lZGlh
dGVTaXplIC0gMSkpIC0gMSkpKTsKICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IGltbVZhbHVlOwot
ICAgICAgICByZXR1cm4gSW1tZWRpYXRlVHlwZSgoKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PigmdmFsdWUpKSAmICgoMSA8PCBpbW1lZGlhdGVTaXplKSAtIDEpKTsKKyAgICAgICAgcmV0dXJu
IEltbWVkaWF0ZVR5cGUoKCpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oJnZhbHVlKSkgJiBp
bW1lZGlhdGVNYXNrPHVpbnQzMl90PigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbW1lZGlhdGVUeXBlPgpAQCAtMTk3LDcgKzIwNSw3IEBAIHN0cnVjdCBJbW1lZGlhdGVCYXNl
IHsKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKGltbVZhbHVlKSk7CiAgICAgICAgIHVp
bnQzMl90IHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPigmaW1tVmFsdWUpOwot
ICAgICAgICByZXR1cm4gSW1tZWRpYXRlVHlwZSh2YWx1ZSAmICgoMSA8PCBpbW1lZGlhdGVTaXpl
KSAtIDEpKTsKKyAgICAgICAgcmV0dXJuIEltbWVkaWF0ZVR5cGUodmFsdWUgJiBpbW1lZGlhdGVN
YXNrPHVpbnQzMl90PigpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbW1lZGlh
dGVUeXBlPgpAQCAtMjA1LDcgKzIxMyw3IEBAIHN0cnVjdCBJbW1lZGlhdGVCYXNlIHsKICAgICB7
CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKGltbVZhbHVlKSk7CiAgICAgICAgIHVpbnQ2NF90IHZh
bHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPigmaW1tVmFsdWUpOwotICAgICAgICBy
ZXR1cm4gSW1tZWRpYXRlVHlwZSh1aW50MzJfdCh2YWx1ZSAmICgodWludDY0X3QoMSkgPDwgaW1t
ZWRpYXRlU2l6ZSkgLSAxKSkpOworICAgICAgICByZXR1cm4gSW1tZWRpYXRlVHlwZSh1aW50MzJf
dCh2YWx1ZSAmIGltbWVkaWF0ZU1hc2s8dWludDY0X3Q+KCkpKTsKICAgICB9CiAKICAgICBleHBs
aWNpdCBJbW1lZGlhdGVCYXNlKHVpbnQzMl90IGltbVZhbHVlKQpAQCAtMzAxLDYgKzMwOSwyNSBA
QCBzdHJ1Y3QgSkltbWVkaWF0ZSA6IEltbWVkaWF0ZUJhc2U8MjE+IHsKICAgICB9CiB9OwogCitz
dHJ1Y3QgSW1tZWRpYXRlRGVjb21wb3NpdGlvbiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PChzdGQ6OmlzX3NhbWVfdjxULCBpbnQzMl90PiB8
fCBzdGQ6OmlzX3NhbWVfdjxULCBpbnQ2NF90Pik+PgorICAgIGV4cGxpY2l0IEltbWVkaWF0ZURl
Y29tcG9zaXRpb24oVCBpbW1lZGlhdGUpCisgICAgICAgIDogdXBwZXIoVUltbWVkaWF0ZSgwKSkK
KyAgICAgICAgLCBsb3dlcihJSW1tZWRpYXRlKDApKQorICAgIHsKKyAgICAgICAgQVNTRVJUKElt
bWVkaWF0ZUJhc2U8MzI+Ojppc1ZhbGlkKHZhbHVlKSk7CisgICAgICAgIGludDMyX3QgdmFsdWUg
PSBpbnQzMl90KGltbWVkaWF0ZSk7CisgICAgICAgIGlmICh2YWx1ZSAmICgxIDw8IDExKSkKKyAg
ICAgICAgICAgIHZhbHVlICs9ICgxIDw8IDEyKTsKKworICAgICAgICB1cHBlciA9IFVJbW1lZGlh
dGU6OnY8VUltbWVkaWF0ZT4odmFsdWUpOworICAgICAgICBsb3dlciA9IElJbW1lZGlhdGU6OnY8
SUltbWVkaWF0ZT4odmFsdWUpOworICAgIH0KKworICAgIFVJbW1lZGlhdGUgdXBwZXI7CisgICAg
SUltbWVkaWF0ZSBsb3dlcjsKK307CisKIC8vIEluc3RydWN0aW9uIHR5cGVzCiAKIC8vIEhlbHBl
ciBzdHJ1Y3QgdGhhdCBwcm92aWRlcyBkaWZmZXJlbnQgZ3JvdXBpbmdzIG9mIHJlZ2lzdGVyIHR5
cGVzIGFzIHJlcXVpcmVkIGZvciBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb25zLgpAQCAtNTk2LDggKzYy
MywxMCBAQCBzdHJ1Y3QgQlR5cGVCYXNlIHsKICAgICBzdGF0aWNfYXNzZXJ0KHVuc2lnbmVkKG9w
Y29kZSkgPCAoMSA8PCA3KSk7CiAgICAgc3RhdGljX2Fzc2VydChmdW5jdDMgPCAoMSA8PCAzKSk7
CiAKLSAgICB1c2luZyBCYXNlID0gU1R5cGVCYXNlPG9wY29kZSwgZnVuY3QzLCBSZWdpc3RlclR5
cGVzPjsKLSAgICB1c2luZyBSZWdpc3RlcnMgPSBTVHlwZVJlZ2lzdGVyczxSZWdpc3RlclR5cGVz
PjsKKyAgICB1c2luZyBCYXNlID0gQlR5cGVCYXNlPG9wY29kZSwgZnVuY3QzLCBSZWdpc3RlclR5
cGVzPjsKKyAgICB1c2luZyBSZWdpc3RlcnMgPSBCVHlwZVJlZ2lzdGVyczxSZWdpc3RlclR5cGVz
PjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZnVuY3QzVmFsdWUgPSBmdW5jdDM7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSUzFUeXBlLCB0eXBlbmFtZSBSUzJUeXBlPgogICAg
IHN0YXRpYyB1aW50MzJfdCBjb25zdHJ1Y3QoUlMxVHlwZSByczEsIFJTMlR5cGUgcnMyLCBCSW1t
ZWRpYXRlIGltbSkKQEAgLTE1MDMsNDUgKzE1MzIsMTczIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihj
b2RlKSArIGxhYmVsLm9mZnNldCgpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgaW50IGdldERpZmZl
cmVuY2VCZXR3ZWVuTGFiZWxzKEFzc2VtYmxlckxhYmVsIGEsIEFzc2VtYmxlckxhYmVsIGIpCisg
ICAgeworICAgICAgICByZXR1cm4gYi5vZmZzZXQoKSAtIGEub2Zmc2V0KCk7CisgICAgfQorCiAg
ICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuY29kZVNpemUoKTsg
fQogCi0gICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoQXNzZW1ibGVyTGFi
ZWwpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNl
dChBc3NlbWJsZXJMYWJlbCBjYWxsKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGwuaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiBjYWxsLm9mZnNldCgpOworICAgIH0KIAotICAgIEFzc2VtYmxl
ckxhYmVsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpIHsgcmV0dXJuIHsgfTsgfQotICAgIEFz
c2VtYmxlckxhYmVsIGxhYmVsRm9yV2F0Y2hwb2ludCgpIHsgcmV0dXJuIHsgfTsgfQotICAgIEFz
c2VtYmxlckxhYmVsIGxhYmVsKCkgeyByZXR1cm4geyB9OyB9CisgICAgQXNzZW1ibGVyTGFiZWwg
bGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZl
ci5sYWJlbCgpOworICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqLCBBc3Nl
bWJsZXJMYWJlbCwgdm9pZCopIHsgfQorICAgIEFzc2VtYmxlckxhYmVsIGxhYmVsRm9yV2F0Y2hw
b2ludCgpCisgICAgeworICAgICAgICBBc3NlbWJsZXJMYWJlbCByZXN1bHQgPSBtX2J1ZmZlci5s
YWJlbCgpOworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQub2Zmc2V0KCkpICE9
IG1faW5kZXhPZkxhc3RXYXRjaHBvaW50KQorICAgICAgICAgICAgcmVzdWx0ID0gbGFiZWwoKTsK
KyAgICAgICAgbV9pbmRleE9mTGFzdFdhdGNocG9pbnQgPSByZXN1bHQub2Zmc2V0KCk7CisgICAg
ICAgIG1faW5kZXhPZlRhaWxPZkxhc3RXYXRjaHBvaW50ID0gcmVzdWx0Lm9mZnNldCgpICsgbWF4
SnVtcFJlcGxhY2VtZW50U2l6ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIEFzc2VtYmxlckxhYmVsIGxhYmVsKCkKKyAgICB7CisgICAgICAgIEFzc2VtYmxlckxhYmVs
IHJlc3VsdCA9IG1fYnVmZmVyLmxhYmVsKCk7CisgICAgICAgIHdoaWxlIChVTkxJS0VMWShzdGF0
aWNfY2FzdDxpbnQ+KHJlc3VsdC5vZmZzZXQoKSkgPCBtX2luZGV4T2ZUYWlsT2ZMYXN0V2F0Y2hw
b2ludCkpIHsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAgICAgICAgcmVzdWx0ID0gbV9idWZm
ZXIubGFiZWwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGZyb20s
IHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20uaXNTZXQoKSk7CisgICAgICAg
IGlmICghZnJvbS5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVpbnQz
Ml90KiBsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKGxvY2F0
aW9uWzBdID09IExpbmtKdW1wSW1wbDo6cGxhY2Vob2xkZXJJbnNuKCkpIHsKKyAgICAgICAgICAg
IExpbmtKdW1wSW1wbDo6YXBwbHkobG9jYXRpb24sIHRvKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlua0p1bXAoQXNzZW1ibGVyTGFiZWwsIEFz
c2VtYmxlckxhYmVsKSB7IH0KKyAgICAgICAgaWYgKGxvY2F0aW9uWzBdID09IExpbmtCcmFuY2hJ
bXBsOjpwbGFjZWhvbGRlckluc24oKSkgeworICAgICAgICAgICAgTGlua0JyYW5jaEltcGw6OmFw
cGx5KGxvY2F0aW9uLCB0byk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiwgQXNzZW1ibGVyTGFiZWwsIHZvaWQq
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJl
bCBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQzMl90KiBsb2NhdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29k
ZSkgKyBmcm9tLm9mZnNldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb25bMF0g
PT0gTGlua0NhbGxJbXBsOjpwbGFjZWhvbGRlckluc24oKSk7CisgICAgICAgIExpbmtDYWxsSW1w
bDo6YXBwbHkobG9jYXRpb24sIHRvKTsKKyAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rUG9p
bnRlcih2b2lkKiwgQXNzZW1ibGVyTGFiZWwsIHZvaWQqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBs
aW5rUG9pbnRlcih2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCB3aGVyZSwgdm9pZCogdmFsdWVQ
dHIpCisgICAgeworICAgICAgICB1aW50MzJfdCogbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGUpICsgd2hlcmUub2Zm
c2V0KCkpOworICAgICAgICBQYXRjaFBvaW50ZXJJbXBsOjphcHBseShsb2NhdGlvbiwgdmFsdWVQ
dHIpOworICAgIH0KKworICAgIHZvaWQgbGlua0p1bXAoQXNzZW1ibGVyTGFiZWwgZnJvbSwgQXNz
ZW1ibGVyTGFiZWwgdG8pCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmcm9tLmlzU2V0
KCkgJiYgdG8uaXNTZXQoKSk7CisgICAgICAgIGlmICghZnJvbS5pc1NldCgpIHx8ICF0by5pc1Nl
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVpbnQzMl90KiBsb2NhdGlvbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bV9idWZmZXIuZGF0YSgpKSArIHRvLm9mZnNldCgpKTsKKyAgICAgICAgbGlua0p1bXAobV9idWZm
ZXIuZGF0YSgpLCBmcm9tLCBsb2NhdGlvbik7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZf
dCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkKICAgICB7Ci0gICAgICAgIHJldHVybiA0OworICAg
ICAgICByZXR1cm4gc2l6ZW9mKHVpbnQzMl90KSAqIDg7CiAgICAgfQogCiAgICAgc3RhdGljIGNv
bnN0ZXhwciBwdHJkaWZmX3QgcGF0Y2hhYmxlSnVtcFNpemUoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIDQ7CisgICAgICAgIHJldHVybiBzaXplb2YodWludDMyX3QpICogODsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiB3aGVyZSwgdm9pZCogdmFsdWVQdHIp
CisgICAgeworICAgICAgICB1aW50MzJfdCogbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4od2hlcmUpOworICAgICAgICBQYXRjaFBvaW50ZXJJbXBsOjphcHBseShsb2NhdGlv
biwgdmFsdWVQdHIpOworICAgICAgICBjYWNoZUZsdXNoKGxvY2F0aW9uLCBzaXplb2YodWludDMy
X3QpICogOCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQzMl90KiBsb2NhdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihmcm9tKTsKKyAgICAgICAgTGlua0p1bXBJbXBsOjphcHBseShs
b2NhdGlvbiwgdG8pOworICAgICAgICBjYWNoZUZsdXNoKGxvY2F0aW9uLCBzaXplb2YodWludDMy
X3QpICogMik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcFRvTm9wKHZvaWQq
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgdWludDMyX3QqIGxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGZyb20pOworICAgICAgICBMaW5rQ2FsbEltcGw6OmFwcGx5KGxvY2F0aW9uLCB0byk7CisgICAg
ICAgIGNhY2hlRmx1c2gobG9jYXRpb24sIHNpemVvZih1aW50MzJfdCkgKiAyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisg
ICAgeworICAgICAgICB1aW50MzJfdCogbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZnJvbSk7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHVpbnRwdHJfdCh0bykgLSB1
aW50cHRyX3QoZnJvbSk7CisKKyAgICAgICAgaWYgKEpJbW1lZGlhdGU6OmlzVmFsaWQob2Zmc2V0
KSkgeworICAgICAgICAgICAgbG9jYXRpb25bMF0gPSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpKQUw6
OmNvbnN0cnVjdChSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvLCBKSW1tZWRpYXRlOjp2PEpJbW1lZGlh
dGU+KG9mZnNldCkpOworICAgICAgICAgICAgY2FjaGVGbHVzaChmcm9tLCBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKEltbWVkaWF0ZUJhc2U8MzI+Ojppc1ZhbGlkKG9mZnNldCkpOworICAgICAgICBSSVND
VjY0SW5zdHJ1Y3Rpb25zOjpJbW1lZGlhdGVEZWNvbXBvc2l0aW9uIGltbWVkaWF0ZShvZmZzZXQp
OworCisgICAgICAgIGxvY2F0aW9uWzBdID0gUklTQ1Y2NEluc3RydWN0aW9uczo6QVVJUEM6OmNv
bnN0cnVjdChSSVNDVjY0UmVnaXN0ZXJzOjp4MzAsIGltbWVkaWF0ZS51cHBlcik7CisgICAgICAg
IGxvY2F0aW9uWzFdID0gUklTQ1Y2NEluc3RydWN0aW9uczo6SkFMUjo6Y29uc3RydWN0KFJJU0NW
NjRSZWdpc3RlcnM6Onplcm8sIFJJU0NWNjRSZWdpc3RlcnM6OngzMCwgaW1tZWRpYXRlLmxvd2Vy
KTsKKyAgICAgICAgY2FjaGVGbHVzaChmcm9tLCBzaXplb2YodWludDMyX3QpICogMik7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCosIHZvaWQqKSB7IH0KKyAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoKHZvaWQqIGZyb20sIHZv
aWQqIHZhbHVlUHRyKQorICAgIHsKKyAgICAgICAgdWludDMyX3QqIGxvY2F0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGZyb20pOworICAgICAgICBQYXRjaFBvaW50ZXJJbXBsOjph
cHBseShsb2NhdGlvbiwgUklTQ1Y2NFJlZ2lzdGVyczo6eDMwLCB2YWx1ZVB0cik7CisgICAgICAg
IGNhY2hlRmx1c2gobG9jYXRpb24sIHNpemVvZih1aW50MzJfdCkgKiA4KTsKKyAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQqLCB2b2lkKikgeyB9Ci0gICAgc3RhdGljIHZv
aWQgcmVsaW5rSnVtcFRvTm9wKHZvaWQqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxs
KHZvaWQqLCB2b2lkKikgeyB9CisgICAgc3RhdGljIHZvaWQqIHJlYWRDYWxsVGFyZ2V0KHZvaWQq
IGZyb20pCisgICAgeworICAgICAgICB1aW50MzJfdCogbG9jYXRpb24gPSByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oZnJvbSk7CisgICAgICAgIHJldHVybiBQYXRjaFBvaW50ZXJJbXBsOjpy
ZWFkKGxvY2F0aW9uKTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBkZWJ1Z09mZnNldCgpIHsgcmV0
dXJuIG1fYnVmZmVyLmRlYnVnT2Zmc2V0KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1
c2godm9pZCosIHNpemVfdCkgeyB9CisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBj
b2RlLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGludHB0cl90IGVuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgc2l6ZTsKKyAgICAgICAgX19idWlsdGluX19fY2xl
YXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGVuZCkpOworICAgIH0KIAogICAgIHVzaW5nIENvcHlGdW5jdGlvbiA9IHZvaWQqKCYp
KHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZSA8Q29weUZ1bmN0aW9u
IGNvcHk+Ci0gICAgc3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCosIHNpemVfdCkgeyB9CisgICAg
c3RhdGljIHZvaWQgZmlsbE5vcHModm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCisgICAgeworICAg
ICAgICB1aW50MzJfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGJhc2UpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50MzJf
dCk+KHB0cikgPT0gcHRyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzaXplICUgc2l6ZW9m
KHVpbnQzMl90KSkpOworCisgICAgICAgIHVpbnQzMl90IG5vcCA9IFJJU0NWNjRJbnN0cnVjdGlv
bnM6OkFEREk6OmNvbnN0cnVjdChSSVNDVjY0UmVnaXN0ZXJzOjp6ZXJvLCBSSVNDVjY0UmVnaXN0
ZXJzOjp6ZXJvLCBJSW1tZWRpYXRlOjp2PElJbW1lZGlhdGUsIDA+KCkpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMCwgbiA9IHNpemUgLyBzaXplb2YodWludDMyX3QpOyBpIDwgbjsgKytpKQor
ICAgICAgICAgICAgY29weSgmcHRyW2ldLCAmbm9wLCBzaXplb2YodWludDMyX3QpKTsKKyAgICB9
CiAKICAgICB0eXBlZGVmIGVudW0gewogICAgICAgICBDb25kaXRpb25FUSwKQEAgLTE5ODcsNiAr
MjE0NCwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHNybGlJbnNuPDY0IC0gYml0U2l6ZT4ocmQsIHJk
KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPgorICAgIHZvaWQganVtcFBsYWNl
aG9sZGVyKGNvbnN0IEYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBMaW5rSnVtcEltcGw6Omdl
bmVyYXRlUGxhY2Vob2xkZXIoKnRoaXMsIGZ1bmN0b3IpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEY+CisgICAgdm9pZCBicmFuY2hQbGFjZWhvbGRlcihjb25zdCBGJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgTGlua0JyYW5jaEltcGw6OmdlbmVyYXRlUGxhY2Vob2xkZXIoKnRo
aXMsIGZ1bmN0b3IpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+CisgICAgdm9p
ZCBwb2ludGVyQ2FsbFBsYWNlaG9sZGVyKGNvbnN0IEYmIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBQYXRjaFBvaW50ZXJJbXBsOjpnZW5lcmF0ZVBsYWNlaG9sZGVyKCp0aGlzLCBmdW5jdG9yKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPgorICAgIHZvaWQgbmVhckNhbGxQbGFj
ZWhvbGRlcihjb25zdCBGJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgTGlua0NhbGxJbXBsOjpn
ZW5lcmF0ZVBsYWNlaG9sZGVyKCp0aGlzLCBmdW5jdG9yKTsKKyAgICB9CisKICAgICBzdHJ1Y3Qg
SW1tZWRpYXRlTG9hZGVyIHsKICAgICAgICAgZW51bSBQbGFjZWhvbGRlclRhZyB7IFBsYWNlaG9s
ZGVyIH07CiAKQEAgLTIxMDgsNyArMjI4OSwyMzggQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1
cm4gYW1vdW50IDwgKDEgPDwgc2hpZnRCaXRzaXplKTsKICAgICB9CiAKKyAgICBzdHJ1Y3QgTGlu
a0p1bXBPckNhbGxJbXBsIHsKKyAgICAgICAgc3RhdGljIHZvaWQgYXBwbHkodWludDMyX3QqIGxv
Y2F0aW9uLCB2b2lkKiB0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJJU0NWNjRJbnN0
cnVjdGlvbnM6Okluc3RydWN0aW9uVmFsdWUgaW5zdHJ1Y3Rpb24obG9jYXRpb25bMV0pOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24ub3Bjb2RlKCkgPT0gdW5zaWduZWQo
UklTQ1Y2NEluc3RydWN0aW9uczo6T3Bjb2RlOjpKQUxSKSB8fCBpbnN0cnVjdGlvbi5vcGNvZGUo
KSA9PSB1bnNpZ25lZChSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpPcGNvZGU6OkpBTCkpOworICAgICAg
ICAgICAgYXV0byBkZXN0aW5hdGlvbiA9IFJlZ2lzdGVySUQoaW5zdHJ1Y3Rpb24uZmllbGQ8Nywg
NT4oKSk7CisKKyAgICAgICAgICAgIGludHB0cl90IG9mZnNldCA9IHVpbnRwdHJfdCh0YXJnZXQp
IC0gdWludHB0cl90KCZsb2NhdGlvblsxXSk7CisgICAgICAgICAgICBpZiAoSkltbWVkaWF0ZTo6
aXNWYWxpZChvZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgbG9jYXRpb25bMF0gPSBSSVNDVjY0
SW5zdHJ1Y3Rpb25zOjpBRERJOjpjb25zdHJ1Y3QoUklTQ1Y2NFJlZ2lzdGVyczo6eDAsIFJJU0NW
NjRSZWdpc3RlcnM6OngwLCBJSW1tZWRpYXRlOjp2PElJbW1lZGlhdGUsIDA+KCkpOworICAgICAg
ICAgICAgICAgIGxvY2F0aW9uWzFdID0gUklTQ1Y2NEluc3RydWN0aW9uczo6SkFMOjpjb25zdHJ1
Y3QoZGVzdGluYXRpb24sIEpJbW1lZGlhdGU6OnY8SkltbWVkaWF0ZT4ob2Zmc2V0KSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvZmZzZXQg
Kz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEltbWVkaWF0
ZUJhc2U8MzI+Ojppc1ZhbGlkKG9mZnNldCkpOworICAgICAgICAgICAgUklTQ1Y2NEluc3RydWN0
aW9uczo6SW1tZWRpYXRlRGVjb21wb3NpdGlvbiBpbW1lZGlhdGUob2Zmc2V0KTsKKworICAgICAg
ICAgICAgbG9jYXRpb25bMF0gPSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpBVUlQQzo6Y29uc3RydWN0
KFJJU0NWNjRSZWdpc3RlcnM6OngzMCwgaW1tZWRpYXRlLnVwcGVyKTsKKyAgICAgICAgICAgIGxv
Y2F0aW9uWzFdID0gUklTQ1Y2NEluc3RydWN0aW9uczo6SkFMUjo6Y29uc3RydWN0KGRlc3RpbmF0
aW9uLCBSSVNDVjY0UmVnaXN0ZXJzOjp4MzAsIGltbWVkaWF0ZS5sb3dlcik7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgc3RydWN0IExpbmtKdW1wSW1wbCA6IExpbmtKdW1wT3JDYWxsSW1wbCB7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgUGxhY2Vob2xkZXJWYWx1ZSA9IDE7
CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCBwbGFjZWhvbGRlckluc24oKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gUklTQ1Y2NEluc3RydWN0aW9uczo6QURESTo6Y29uc3RydWN0KFJJ
U0NWNjRSZWdpc3RlcnM6OngwLCBSSVNDVjY0UmVnaXN0ZXJzOjp4MCwgSUltbWVkaWF0ZTo6djxJ
SW1tZWRpYXRlLCBQbGFjZWhvbGRlclZhbHVlPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEY+CisgICAgICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlUGxhY2Vob2xk
ZXIoUklTQ1Y2NEFzc2VtYmxlciYgYXNzZW1ibGVyLCBjb25zdCBGJiBmdW5jdG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBhc3NlbWJsZXIuaW5zbihwbGFjZWhvbGRlckluc24oKSk7CisgICAg
ICAgICAgICBmdW5jdG9yKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IExpbmtD
YWxsSW1wbCA6IExpbmtKdW1wT3JDYWxsSW1wbCB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgUGxhY2Vob2xkZXJWYWx1ZSA9IDI7CisgICAgICAgIHN0YXRpYyB1aW50MzJfdCBw
bGFjZWhvbGRlckluc24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUklTQ1Y2NElu
c3RydWN0aW9uczo6QURESTo6Y29uc3RydWN0KFJJU0NWNjRSZWdpc3RlcnM6OngwLCBSSVNDVjY0
UmVnaXN0ZXJzOjp4MCwgSUltbWVkaWF0ZTo6djxJSW1tZWRpYXRlLCBQbGFjZWhvbGRlclZhbHVl
PigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEY+CisgICAgICAg
IHN0YXRpYyB2b2lkIGdlbmVyYXRlUGxhY2Vob2xkZXIoUklTQ1Y2NEFzc2VtYmxlciYgYXNzZW1i
bGVyLCBjb25zdCBGJiBmdW5jdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlbWJsZXIu
aW5zbihwbGFjZWhvbGRlckluc24oKSk7CisgICAgICAgICAgICBmdW5jdG9yKCk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgc3RydWN0IExpbmtCcmFuY2hJbXBsIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBQbGFjZWhvbGRlclZhbHVlID0gMzsKKyAgICAgICAgc3RhdGlj
IHVpbnQzMl90IHBsYWNlaG9sZGVySW5zbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpBRERJOjpjb25zdHJ1Y3QoUklTQ1Y2NFJlZ2lzdGVyczo6
eDAsIFJJU0NWNjRSZWdpc3RlcnM6OngwLCBJSW1tZWRpYXRlOjp2PElJbW1lZGlhdGUsIFBsYWNl
aG9sZGVyVmFsdWU+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Rj4KKyAgICAgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQbGFjZWhvbGRlcihSSVNDVjY0QXNzZW1i
bGVyJiBhc3NlbWJsZXIsIGNvbnN0IEYmIGZ1bmN0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gaW5zblZhbHVlID0gcGxhY2Vob2xkZXJJbnNuKCk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICAgICAgICAgIGFzc2VtYmxlci5pbnNu
KGluc25WYWx1ZSk7CisgICAgICAgICAgICBmdW5jdG9yKCk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgdm9pZCBhcHBseSh1aW50MzJfdCogbG9jYXRpb24sIHZvaWQqIHRhcmdldCkKKyAg
ICAgICAgeworICAgICAgICAgICAgUklTQ1Y2NEluc3RydWN0aW9uczo6SW5zdHJ1Y3Rpb25WYWx1
ZSBpbnN0cnVjdGlvbihsb2NhdGlvblsyXSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnN0cnVjdGlvbi5vcGNvZGUoKSA9PSB1bnNpZ25lZChSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpPcGNv
ZGU6OkJSQU5DSCkpOworCisgICAgICAgICAgICBhdXRvIGJyYW5jaEluc3RydWN0aW9uRm9yRnVu
Y3QzID0KKyAgICAgICAgICAgICAgICBbXSh1aW50MzJfdCBmdW5jdDMsIFJlZ2lzdGVySUQgcnMx
LCBSZWdpc3RlcklEIHJzMiwgQkltbWVkaWF0ZSBpbW0pCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1bmN0MykgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIFJJU0NWNjRJbnN0cnVjdGlvbnM6OkJFUTo6ZnVuY3QzVmFsdWU6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUklTQ1Y2NEluc3RydWN0aW9uczo6QkVROjpjb25zdHJ1Y3QocnMx
LCByczIsIGltbSk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUklTQ1Y2NEluc3RydWN0aW9u
czo6Qk5FOjpmdW5jdDNWYWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSSVND
VjY0SW5zdHJ1Y3Rpb25zOjpCTkU6OmNvbnN0cnVjdChyczEsIHJzMiwgaW1tKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpCTFQ6OmZ1bmN0M1ZhbHVlOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJJU0NWNjRJbnN0cnVjdGlvbnM6OkJMVDo6
Y29uc3RydWN0KHJzMSwgcnMyLCBpbW0pOworICAgICAgICAgICAgICAgICAgICBjYXNlIFJJU0NW
NjRJbnN0cnVjdGlvbnM6OkJHRTo6ZnVuY3QzVmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUklTQ1Y2NEluc3RydWN0aW9uczo6QkdFOjpjb25zdHJ1Y3QocnMxLCByczIsIGlt
bSk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUklTQ1Y2NEluc3RydWN0aW9uczo6QkxUVTo6
ZnVuY3QzVmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUklTQ1Y2NEluc3Ry
dWN0aW9uczo6QkxUVTo6Y29uc3RydWN0KHJzMSwgcnMyLCBpbW0pOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIFJJU0NWNjRJbnN0cnVjdGlvbnM6OkJHRVU6OmZ1bmN0M1ZhbHVlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFJJU0NWNjRJbnN0cnVjdGlvbnM6OkJHRVU6OmNvbnN0
cnVjdChyczEsIHJzMiwgaW1tKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJJU0NWNjRJbnN0cnVjdGlvbnM6OkFEREk6OmNvbnN0cnVjdChSSVND
VjY0UmVnaXN0ZXJzOjp4MCwgUklTQ1Y2NFJlZ2lzdGVyczo6eDAsIElJbW1lZGlhdGU6OnY8SUlt
bWVkaWF0ZSwgMD4oKSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGF1dG8gbGhz
ID0gUmVnaXN0ZXJJRChpbnN0cnVjdGlvbi5maWVsZDwxNSwgNT4oKSk7CisgICAgICAgICAgICBh
dXRvIHJocyA9IFJlZ2lzdGVySUQoaW5zdHJ1Y3Rpb24uZmllbGQ8MjAsIDU+KCkpOworCisgICAg
ICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSB1aW50cHRyX3QodGFyZ2V0KSAtIHVpbnRwdHJfdCgm
bG9jYXRpb25bMl0pOworICAgICAgICAgICAgaWYgKEJJbW1lZGlhdGU6OmlzVmFsaWQob2Zmc2V0
KSkgeworICAgICAgICAgICAgICAgIGxvY2F0aW9uWzBdID0gUklTQ1Y2NEluc3RydWN0aW9uczo6
QURESTo6Y29uc3RydWN0KFJJU0NWNjRSZWdpc3RlcnM6OngwLCBSSVNDVjY0UmVnaXN0ZXJzOjp4
MCwgSUltbWVkaWF0ZTo6djxJSW1tZWRpYXRlLCAwPigpKTsKKyAgICAgICAgICAgICAgICBsb2Nh
dGlvblsxXSA9IFJJU0NWNjRJbnN0cnVjdGlvbnM6OkFEREk6OmNvbnN0cnVjdChSSVNDVjY0UmVn
aXN0ZXJzOjp4MCwgUklTQ1Y2NFJlZ2lzdGVyczo6eDAsIElJbW1lZGlhdGU6OnY8SUltbWVkaWF0
ZSwgMD4oKSk7CisgICAgICAgICAgICAgICAgbG9jYXRpb25bMl0gPSBicmFuY2hJbnN0cnVjdGlv
bkZvckZ1bmN0MyhpbnN0cnVjdGlvbi5maWVsZDwxMiwgMz4oKSwgbGhzLCByaHMsIEJJbW1lZGlh
dGU6OnY8QkltbWVkaWF0ZT4ob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoSkltbWVkaWF0ZTo6aXNWYWxpZChvZmZzZXQp
KSB7CisgICAgICAgICAgICAgICAgbG9jYXRpb25bMF0gPSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpB
RERJOjpjb25zdHJ1Y3QoUklTQ1Y2NFJlZ2lzdGVyczo6eDAsIFJJU0NWNjRSZWdpc3RlcnM6Ongw
LCBJSW1tZWRpYXRlOjp2PElJbW1lZGlhdGUsIDA+KCkpOworICAgICAgICAgICAgICAgIGxvY2F0
aW9uWzFdID0gYnJhbmNoSW5zdHJ1Y3Rpb25Gb3JGdW5jdDMoaW5zdHJ1Y3Rpb24uZmllbGQ8MTIs
IDM+KCkgXiAwYjAwMSwgbGhzLCByaHMsIEJJbW1lZGlhdGU6OnY8QkltbWVkaWF0ZSwgOD4oKSk7
CisgICAgICAgICAgICAgICAgbG9jYXRpb25bMl0gPSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpKQUw6
OmNvbnN0cnVjdChSSVNDVjY0UmVnaXN0ZXJzOjp4MCwgSkltbWVkaWF0ZTo6djxKSW1tZWRpYXRl
PihvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG9mZnNldCArPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoSW1tZWRpYXRlQmFzZTwzMj46OmlzVmFsaWQob2Zmc2V0KSk7CisgICAgICAgICAg
ICBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpJbW1lZGlhdGVEZWNvbXBvc2l0aW9uIGltbWVkaWF0ZShv
ZmZzZXQpOworCisgICAgICAgICAgICBsb2NhdGlvblswXSA9IGJyYW5jaEluc3RydWN0aW9uRm9y
RnVuY3QzKGluc3RydWN0aW9uLmZpZWxkPDEyLCAzPigpIF4gMGIwMDEsIGxocywgcmhzLCBCSW1t
ZWRpYXRlOjp2PEJJbW1lZGlhdGUsIDEyPigpKTsKKyAgICAgICAgICAgIGxvY2F0aW9uWzFdID0g
UklTQ1Y2NEluc3RydWN0aW9uczo6QVVJUEM6OmNvbnN0cnVjdChSSVNDVjY0UmVnaXN0ZXJzOjp4
MzEsIGltbWVkaWF0ZS51cHBlcik7CisgICAgICAgICAgICBsb2NhdGlvblsyXSA9IFJJU0NWNjRJ
bnN0cnVjdGlvbnM6OkpBTFI6OmNvbnN0cnVjdChSSVNDVjY0UmVnaXN0ZXJzOjp4MCwgUklTQ1Y2
NFJlZ2lzdGVyczo6eDMxLCBpbW1lZGlhdGUubG93ZXIpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHN0cnVjdCBQYXRjaFBvaW50ZXJJbXBsIHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBQbGFjZWhvbGRlclZhbHVlID0gNDsKKyAgICAgICAgc3RhdGljIHVpbnQzMl90IHBs
YWNlaG9sZGVySW5zbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSSVNDVjY0SW5z
dHJ1Y3Rpb25zOjpBRERJOjpjb25zdHJ1Y3QoUklTQ1Y2NFJlZ2lzdGVyczo6eDAsIFJJU0NWNjRS
ZWdpc3RlcnM6OngwLCBJSW1tZWRpYXRlOjp2PElJbW1lZGlhdGUsIFBsYWNlaG9sZGVyVmFsdWU+
KCkpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KKyAgICAgICAg
c3RhdGljIHZvaWQgZ2VuZXJhdGVQbGFjZWhvbGRlcihSSVNDVjY0QXNzZW1ibGVyJiBhc3NlbWJs
ZXIsIGNvbnN0IEYmIGZ1bmN0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaW5zblZh
bHVlID0gcGxhY2Vob2xkZXJJbnNuKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgNzsgKytpKQorICAgICAgICAgICAgICAgIGFzc2VtYmxlci5pbnNuKGluc25WYWx1ZSk7
CisgICAgICAgICAgICBmdW5jdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9p
ZCBhcHBseSh1aW50MzJfdCogbG9jYXRpb24sIHZvaWQqIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpJbnN0cnVjdGlvblZhbHVlIGluc3RydWN0aW9u
KGxvY2F0aW9uWzddKTsKKyAgICAgICAgICAgIC8vIFJFTEVBU0VfQVNTRVJULCBiZWluZyBhIG1h
Y3JvLCBnZXRzIGNvbmZ1c2VkIGJ5IHRoZSBjb21tYS1zZXBhcmF0ZWQgdGVtcGxhdGUgcGFyYW1l
dGVycy4KKyAgICAgICAgICAgIGJvb2wgdmFsaWRMb2NhdGlvbiA9IGluc3RydWN0aW9uLm9wY29k
ZSgpID09IHVuc2lnbmVkKFJJU0NWNjRJbnN0cnVjdGlvbnM6Ok9wY29kZTo6T1BfSU1NKSAmJiBp
bnN0cnVjdGlvbi5maWVsZDwxMiwgMz4oKSA9PSAwYjAwMDsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHZhbGlkTG9jYXRpb24pOworCisgICAgICAgICAgICBhcHBseShsb2NhdGlvbiwgUmVn
aXN0ZXJJRChpbnN0cnVjdGlvbi5maWVsZDw3LCA1PigpKSwgdmFsdWUpOworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIHZvaWQgYXBwbHkodWludDMyX3QqIGxvY2F0aW9uLCBSZWdpc3RlcklE
IGRlc3RpbmF0aW9uLCB2b2lkKiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcg
SW1tZWRpYXRlTG9hZGVyID0gUklTQ1Y2NEFzc2VtYmxlcjo6SW1tZWRpYXRlTG9hZGVyOworICAg
ICAgICAgICAgSW1tZWRpYXRlTG9hZGVyIGltbWwoSW1tZWRpYXRlTG9hZGVyOjpQbGFjZWhvbGRl
ciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odmFsdWUpKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGltbWwubV9vcENvdW50ID09IDgpOworCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW1tbC5tX29wQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIG9wID0gaW1tbC5tX29wc1tpbW1sLm1fb3BDb3VudCAtIChpICsgMSldOworICAgICAgICAg
ICAgICAgIHN3aXRjaCAob3AudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgSW1tZWRpYXRl
TG9hZGVyOjpPcDo6VHlwZTo6SUltbWVkaWF0ZToKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b25baV0gPSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpBRERJOjpjb25zdHJ1Y3QoZGVzdGluYXRpb24s
IFJJU0NWNjRSZWdpc3RlcnM6Onplcm8sIElJbW1lZGlhdGUob3AudmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbW1lZGlhdGVMb2FkZXI6
Ok9wOjpUeXBlOjpMVUk6CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uW2ldID0gUklTQ1Y2
NEluc3RydWN0aW9uczo6TFVJOjpjb25zdHJ1Y3QoZGVzdGluYXRpb24sIFVJbW1lZGlhdGUob3Au
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbW1lZGlhdGVMb2FkZXI6Ok9wOjpUeXBlOjpBRERJOgorICAgICAgICAgICAgICAgICAgICBs
b2NhdGlvbltpXSA9IFJJU0NWNjRJbnN0cnVjdGlvbnM6OkFEREk6OmNvbnN0cnVjdChkZXN0aW5h
dGlvbiwgZGVzdGluYXRpb24sIElJbW1lZGlhdGUob3AudmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbW1lZGlhdGVMb2FkZXI6Ok9wOjpU
eXBlOjpMU0hJRlQxMjoKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25baV0gPSBSSVNDVjY0
SW5zdHJ1Y3Rpb25zOjpTTExJOjpjb25zdHJ1Y3Q8MTI+KGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSW1t
ZWRpYXRlTG9hZGVyOjpPcDo6VHlwZTo6Tk9QOgorICAgICAgICAgICAgICAgICAgICBsb2NhdGlv
bltpXSA9IFJJU0NWNjRJbnN0cnVjdGlvbnM6OkFEREk6OmNvbnN0cnVjdChSSVNDVjY0UmVnaXN0
ZXJzOjp4MCwgUklTQ1Y2NFJlZ2lzdGVyczo6eDAsIElJbW1lZGlhdGU6OnY8SUltbWVkaWF0ZSwg
MD4oKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkKiByZWFkKHVpbnQz
Ml90KiBsb2NhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgUklTQ1Y2NEluc3RydWN0aW9u
czo6SW5zdHJ1Y3Rpb25WYWx1ZSBpbnN0cnVjdGlvbihsb2NhdGlvbls3XSk7CisgICAgICAgICAg
ICAvLyBSRUxFQVNFX0FTU0VSVCwgYmVpbmcgYSBtYWNybywgZ2V0cyBjb25mdXNlZCBieSB0aGUg
Y29tbWEtc2VwYXJhdGVkIHRlbXBsYXRlIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBib29sIHZh
bGlkTG9jYXRpb24gPSBpbnN0cnVjdGlvbi5vcGNvZGUoKSA9PSB1bnNpZ25lZChSSVNDVjY0SW5z
dHJ1Y3Rpb25zOjpPcGNvZGU6Ok9QX0lNTSkgJiYgaW5zdHJ1Y3Rpb24uZmllbGQ8MTIsIDM+KCkg
PT0gMGIwMDA7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YWxpZExvY2F0aW9uKTsKKwor
ICAgICAgICAgICAgYXV0byBkZXN0ID0gUmVnaXN0ZXJJRChpbnN0cnVjdGlvbi5maWVsZDw3LCA1
PigpKTsKKworICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBJbW1lZGlhdGVMb2FkZXI6Ok9wOjpU
eXBlOjpOT1AgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBw
bGFjZWhvbGRlci4KKyAgICAgICAgICAgICAgICB1aW50MzJfdCBub3BJbnNuID0gUklTQ1Y2NElu
c3RydWN0aW9uczo6QURESTo6Y29uc3RydWN0KFJJU0NWNjRSZWdpc3RlcnM6OngwLCBSSVNDVjY0
UmVnaXN0ZXJzOjp4MCwgSUltbWVkaWF0ZTo6djxJSW1tZWRpYXRlLCAwPigpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKDsgaSA8IDg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobG9j
YXRpb25baV0gIT0gbm9wSW5zbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50cHRyX3QgdGFy
Z2V0ID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBpIDwgODsgKytpKSB7CisgICAgICAgICAgICAg
ICAgUklTQ1Y2NEluc3RydWN0aW9uczo6SW5zdHJ1Y3Rpb25WYWx1ZSBpbnNuKGxvY2F0aW9uW2ld
KTsKKworICAgICAgICAgICAgICAgIC8vIENvdW50ZXJwYXJ0IHRvIEltbWVkaWF0ZUxvYWRlcjo6
T3A6OlR5cGU6OkxVSS4KKyAgICAgICAgICAgICAgICBpZiAoaW5zbi5vcGNvZGUoKSA9PSB1bnNp
Z25lZChSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpPcGNvZGU6OkxVSSkgJiYgaW5zbi5maWVsZDw3LCA1
PigpID09IHVuc2lnbmVkKGRlc3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGlu
dDMyX3QoVUltbWVkaWF0ZTo6dmFsdWUoaW5zbikpOworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDb3VudGVycGFy
dCB0byBJbW1lZGlhdGVMb2FkZXI6Ok9wOjpUeXBlOjp7SUltbWVkaWF0ZSwgQURESX0uCisgICAg
ICAgICAgICAgICAgaWYgKGluc24ub3Bjb2RlKCkgPT0gdW5zaWduZWQoUklTQ1Y2NEluc3RydWN0
aW9uczo6T3Bjb2RlOjpPUF9JTU0pICYmIGluc24uZmllbGQ8MTIsIDM+KCkgPT0gMGIwMDAKKyAg
ICAgICAgICAgICAgICAgICAgJiYgaW5zbi5maWVsZDw3LCA1PigpID09IHVuc2lnbmVkKGRlc3Qp
ICYmIGluc24uZmllbGQ8MTUsIDU+KCkgPT0gdW5zaWduZWQoZGVzdCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0ICs9IElJbW1lZGlhdGU6OnZhbHVlKGluc24pOworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBDb3VudGVycGFydCB0byBJbW1lZGlhdGVMb2FkZXI6Ok9wOjpUeXBlOjpMU0hJRlQxMi4KKyAg
ICAgICAgICAgICAgICBpZiAoaW5zbi52YWx1ZSA9PSBSSVNDVjY0SW5zdHJ1Y3Rpb25zOjpTTExJ
Ojpjb25zdHJ1Y3Q8MTI+KGRlc3QsIGRlc3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdl
dCA8PD0gMTI7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPih0YXJnZXQpOworICAgICAgICB9CisgICAg
fTsKKwogICAgIEFzc2VtYmxlckJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBpbnQgbV9pbmRleE9mTGFz
dFdhdGNocG9pbnQgeyBJTlRfTUlOIH07CisgICAgaW50IG1faW5kZXhPZlRhaWxPZkxhc3RXYXRj
aHBvaW50IHsgSU5UX01JTiB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>