<?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>171206</bug_id>
          
          <creation_ts>2017-04-23 16:28:00 -0700</creation_ts>
          <short_desc>Add ML to ARES6</short_desc>
          <delta_ts>2017-04-24 17:04:47 -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>Safari Technology Preview</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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jond</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1300376</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-23 16:28:00 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300377</commentid>
    <comment_count>1</comment_count>
      <attachid>307944</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-23 16:28:41 -0700</bug_when>
    <thetext>Created attachment 307944
WIP

Need to write a changelog and edit the about page. Otherwise, I think it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300732</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-24 17:04:47 -0700</bug_when>
    <thetext>Was rubber stamped by Pizlo in person.

landed in:
https://trac.webkit.org/changeset/215704/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307944</attachid>
            <date>2017-04-23 16:28:41 -0700</date>
            <delta_ts>2017-04-23 16:28:41 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>231023</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L2NsaS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL0FSRVMtNi9jbGkuanMJKHJldmlzaW9uIDIxNTY3OSkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvQVJFUy02L2NsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBs
b2FkKCJzdGF0cy5qcyIpOwogbG9hZCgiYWlyX2JlbmNobWFyay5qcyIpOwogbG9hZCgiYmFzaWNf
YmVuY2htYXJrLmpzIik7CiBsb2FkKCJiYWJ5bG9uX2JlbmNobWFyay5qcyIpOworbG9hZCgibWxf
YmVuY2htYXJrLmpzIik7CiBsb2FkKCJnbHVlLmpzIik7CiAKLWRyaXZlci5zdGFydCg4KTsKK2Ry
aXZlci5zdGFydCg2KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L2dsdWUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvZ2x1ZS5qcwkocmV2aXNpb24gMjE1
Njc5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvZ2x1ZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQCBjb25zdCBkcml2ZXIgPSBuZXcgRHJpdmVyKAogICAgIGlzSW5Ccm93
c2VyID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1cyIpIDogbnVsbCwKICAgICBpc0lu
QnJvd3NlciA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0cmlnZ2VyIikgOiBudWxsLAogICAg
IGZ1bmN0aW9uKCkgewotICAgICAgICBkcml2ZXIuc3RhcnQoOCkKKyAgICAgICAgZHJpdmVyLnN0
YXJ0KDYpCiAgICAgfSwKICAgICBpc0luQnJvd3NlciA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJtYWdpYyIpIDogbnVsbCwKICAgICBpc0luQnJvd3NlciA/IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJHZW9tZWFuIikgOiBudWxsLApAQCAtNDEsNCArNDEsNSBAQCBmdW5jdGlvbiByZXBvcnRS
ZXN1bHQoLi4uYXJncykgewogZHJpdmVyLmFkZEJlbmNobWFyayhBaXJCZW5jaG1hcmtSdW5uZXIp
OwogZHJpdmVyLmFkZEJlbmNobWFyayhCYXNpY0JlbmNobWFya1J1bm5lcik7CiBkcml2ZXIuYWRk
QmVuY2htYXJrKEJhYnlsb25CZW5jaG1hcmtSdW5uZXIpOworZHJpdmVyLmFkZEJlbmNobWFyayhN
TEJlbmNobWFya1J1bm5lcik7CiBkcml2ZXIucmVhZHlUcmlnZ2VyKCk7CkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0FSRVMtNi9pbmRleC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVz
dHMvQVJFUy02L2luZGV4Lmh0bWwJKHJldmlzaW9uIDIxNTY3OSkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvQVJFUy02L2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksMzMgQEAK
ICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9k
aXY+CisKKyAgICAgICAgPGRpdiBjbGFzcz0iTUwgdGVzdCI+CisgICAgICAgICAgICA8ZGl2IGlk
PSJNTE1lc3NhZ2UiIGNsYXNzPSJpbmRpY2F0b3IiPi48L2Rpdj4KKyAgICAgICAgICAgIDxoMj5N
TDwvaDI+IAorICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZSI+Cisg
ICAgICAgICAgICAgICAgPGxhYmVsPkZpcnN0IEl0ZXJhdGlvbjwvbGFiZWw+CisgICAgICAgICAg
ICAgICAgPHNwYW4gaWQ9Ik1MRmlyc3RJdGVyYXRpb24iPgorICAgICAgICAgICAgICAgICAgICA8
c3BhbiBjbGFzcz0idmFsdWUiPiYjODcwOTs8L3NwYW4+PHNwYW4gY2xhc3M9InVuaXRzIj5tczwv
c3Bhbj4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAg
ICAgICAgIDwvZGl2PgorIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUiPgorICAgICAg
ICAgICAgICAgIDxsYWJlbD5Xb3JzdCA0IEl0ZXJhdGlvbnM8L2xhYmVsPgorICAgICAgICAgICAg
ICAgIDxzcGFuIGlkPSJNTEF2ZXJhZ2VXb3JzdENhc2UiPgorICAgICAgICAgICAgICAgICAgICA8
c3BhbiBjbGFzcz0idmFsdWUiPiYjODcwOTs8L3NwYW4+PHNwYW4gY2xhc3M9InVuaXRzIj5tczwv
c3Bhbj4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAg
ICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZSI+CisgICAgICAg
ICAgICAgICAgPGxhYmVsPkF2ZXJhZ2U8L2xhYmVsPgorICAgICAgICAgICAgICAgIDxzcGFuIGlk
PSJNTFN0ZWFkeVN0YXRlIj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVl
Ij4mIzg3MDk7PC9zcGFuPjxzcGFuIGNsYXNzPSJ1bml0cyI+bXM8L3NwYW4+ICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj4KKyAg
ICAgICAgPC9kaXY+CisKICAgICA8L2Rpdj4KICAgICA8L21haW4+CiAgICAgCkBAIC0xMjYsNiAr
MTUzLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iYWlyX2JlbmNobWFyay5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9ImJhc2ljX2JlbmNobWFyay5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9ImJhYnlsb25fYmVuY2htYXJrLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
bWxfYmVuY2htYXJrLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iZ2x1ZS5qcyI+PC9z
Y3JpcHQ+CiAgICAgICAgIAogPC9ib2R5PgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYv
bWxfYmVuY2htYXJrLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQVJFUy02L21s
X2JlbmNobWFyay5qcwkobm9uZXhpc3RlbnQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FSRVMtNi9t
bF9iZW5jaG1hcmsuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjb25z
dCBNTEJlbmNobWFya0NvZGUgPSBTdHJpbmcucmF3YAorPHNjcmlwdCBzcmM9Im1sL2luZGV4Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJtbC9iZW5jaG1hcmsuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK3ZhciByZXN1bHRzID0gW107Cit2YXIgYmVuY2htYXJrID0gbmV3IE1MQmVuY2htYXJr
KCk7Cit2YXIgbnVtSXRlcmF0aW9ucyA9IDYwOworZm9yICh2YXIgaSA9IDA7IGkgPCBudW1JdGVy
YXRpb25zOyArK2kpIHsKKyAgICB2YXIgYmVmb3JlID0gY3VycmVudFRpbWUoKTsKKyAgICBiZW5j
aG1hcmsucnVuSXRlcmF0aW9uKCk7CisgICAgdmFyIGFmdGVyID0gY3VycmVudFRpbWUoKTsKKyAg
ICByZXN1bHRzLnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworfQorcmVwb3J0UmVzdWx0KHJlc3VsdHMp
OworPC9zY3JpcHQ+YDsKKworCitsZXQgcnVuTUxCZW5jaG1hcmsgPSBudWxsOworaWYgKCFpc0lu
QnJvd3NlcikgeworICAgIGxldCBzb3VyY2VzID0gWworICAgICAgICAibWwvaW5kZXguanMiCisg
ICAgICAgICwgIm1sL2JlbmNobWFyay5qcyIKKyAgICBdOworCisgICAgcnVuTUxCZW5jaG1hcmsg
PSBtYWtlQmVuY2htYXJrUnVubmVyKHNvdXJjZXMsICJNTEJlbmNobWFyayIpOworfQorCitjb25z
dCBNTEJlbmNobWFya1J1bm5lciA9IHsKKyAgICBuYW1lOiAiTUwiLAorICAgIGNvZGU6IE1MQmVu
Y2htYXJrQ29kZSwKKyAgICBydW46IHJ1bk1MQmVuY2htYXJrLAorICAgIGNlbGxzOiB7fQorfTsK
KworaWYgKGlzSW5Ccm93c2VyKSB7CisgICAgTUxCZW5jaG1hcmtSdW5uZXIuY2VsbHMgPSB7Cisg
ICAgICAgIGZpcnN0SXRlcmF0aW9uOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTUxGaXJzdEl0
ZXJhdGlvbiIpLAorICAgICAgICBhdmVyYWdlV29yc3RDYXNlOiBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiTUxBdmVyYWdlV29yc3RDYXNlIiksCisgICAgICAgIHN0ZWFkeVN0YXRlOiBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiTUxTdGVhZHlTdGF0ZSIpLAorICAgICAgICBtZXNzYWdlOiBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiTUxNZXNzYWdlIikKKyAgICB9OworfQpJbmRleDogUGVyZm9y
bWFuY2VUZXN0cy9BUkVTLTYvbWwvYmVuY2htYXJrLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQVJFUy02L21sL2JlbmNobWFyay5qcwkobm9uZXhpc3RlbnQpCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0FSRVMtNi9tbC9iZW5jaG1hcmsuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
InVzZSBzdHJpY3QiOworCitsZXQgY3VycmVudFRpbWU7CitpZiAodGhpcy5wZXJmb3JtYW5jZSAm
JiBwZXJmb3JtYW5jZS5ub3cpCisgICAgY3VycmVudFRpbWUgPSBmdW5jdGlvbigpIHsgcmV0dXJu
IHBlcmZvcm1hbmNlLm5vdygpIH07CitlbHNlIGlmICh0aGlzLnByZWNpc2VUaW1lKQorICAgIGN1
cnJlbnRUaW1lID0gZnVuY3Rpb24oKSB7IHJldHVybiBwcmVjaXNlVGltZSgpICogMTAwMDsgfTsK
K2Vsc2UKKyAgICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gK25ldyBEYXRlKCk7
IH07CisKK2NsYXNzIE1MQmVuY2htYXJrIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgfQorCisgICAg
cnVuSXRlcmF0aW9uKCkKKyAgICB7CisgICAgICAgIGxldCBNYXRyaXggPSBNTE1hdHJpeDsKKyAg
ICAgICAgbGV0IEFDVElWQVRJT05fRlVOQ1RJT05TID0gRmVlZGZvcndhcmROZXVyYWxOZXR3b3Jr
c0FjdGl2YXRpb25GdW5jdGlvbnM7CisKKyAgICAgICAgZnVuY3Rpb24gcnVuKCkgeworICAgICAg
ICAgICAgCisgICAgICAgICAgICBsZXQgaXQgPSAobmFtZSwgZikgPT4geworICAgICAgICAgICAg
ICAgIGYoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFzc2VydChi
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFiKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZnVuY3Rp
b25zID0gT2JqZWN0LmtleXMoQUNUSVZBVElPTl9GVU5DVElPTlMpOworCisgICAgICAgICAgICBp
dCgnVHJhaW5pbmcgdGhlIG5ldXJhbCBuZXR3b3JrIHdpdGggWE9SIG9wZXJhdG9yJywgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIHZhciB0cmFpbmluZ1NldCA9IG5ldyBNYXRyaXgoW1sw
LCAwXSwgWzAsIDFdLCBbMSwgMF0sIFsxLCAxXV0pOworICAgICAgICAgICAgICAgIHZhciBwcmVk
aWN0aW9ucyA9IFtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2VdOworCisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5M
YXllcnM6IFs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDQwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmdSYXRlOiAwLjMsCisgICAgICAgICAgICAgICAg
ICAgICAgICBhY3RpdmF0aW9uOiBmdW5jdGlvbnNbaV0KKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHhvck5OID0gbmV3IEZlZWRmb3J3YXJkTmV1cmFsTmV0
d29yayhvcHRpb25zKTsKKworICAgICAgICAgICAgICAgICAgICB4b3JOTi50cmFpbih0cmFpbmlu
Z1NldCwgcHJlZGljdGlvbnMpOworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHhv
ck5OLnByZWRpY3QodHJhaW5pbmdTZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBpdCgnVHJhaW5pbmcgdGhlIG5ldXJhbCBuZXR3b3JrIHdpdGgg
QU5EIG9wZXJhdG9yJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHZhciB0cmFpbmlu
Z1NldCA9IFtbMCwgMF0sIFswLCAxXSwgWzEsIDBdLCBbMSwgMV1dOworICAgICAgICAgICAgICAg
IHZhciBwcmVkaWN0aW9ucyA9IFtbMSwgMF0sIFsxLCAwXSwgWzEsIDBdLCBbMCwgMV1dOworCisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBoaWRkZW5MYXllcnM6IFszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJh
dGlvbnM6IDc1LAorICAgICAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmdSYXRlOiAwLjMsCisg
ICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uOiBmdW5jdGlvbnNbaV0KKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFuZE5OID0gbmV3IEZlZWRm
b3J3YXJkTmV1cmFsTmV0d29yayhvcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgYW5kTk4u
dHJhaW4odHJhaW5pbmdTZXQsIHByZWRpY3Rpb25zKTsKKworICAgICAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0cyA9IGFuZE5OLnByZWRpY3QodHJhaW5pbmdTZXQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpdCgnRXhwb3J0IGFuZCBpbXBvcnQn
LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIHRyYWluaW5nU2V0ID0gW1swLCAw
XSwgWzAsIDFdLCBbMSwgMF0sIFsxLCAxXV07CisgICAgICAgICAgICAgICAgdmFyIHByZWRpY3Rp
b25zID0gWzAsIDEsIDEsIDFdOworCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmdW5jdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlv
bnMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5MYXllcnM6IFs0XSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDQwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbGVhcm5pbmdSYXRlOiAwLjMsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9u
OiBmdW5jdGlvbnNbaV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG9yTk4gPSBuZXcgRmVlZGZvcndhcmROZXVyYWxOZXR3b3JrKG9wdGlvbnMpOworICAg
ICAgICAgICAgICAgICAgICBvck5OLnRyYWluKHRyYWluaW5nU2V0LCBwcmVkaWN0aW9ucyk7CisK
KyAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lm
eShvck5OKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBuZXR3b3JrTk4gPSBGZWVkZm9yd2Fy
ZE5ldXJhbE5ldHdvcmsubG9hZChtb2RlbCk7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJl
c3VsdHMgPSBuZXR3b3JrTk4ucHJlZGljdCh0cmFpbmluZ1NldCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGl0KCdNdWx0aWNsYXNzIGNsYXNpZmlj
YXRpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIHRyYWluaW5nU2V0ID0g
W1swLCAwXSwgWzAsIDFdLCBbMSwgMF0sIFsxLCAxXV07CisgICAgICAgICAgICAgICAgdmFyIHBy
ZWRpY3Rpb25zID0gWzIsIDAsIDEsIDBdOworCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5MYXllcnM6IFs0XSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDQwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbGVhcm5pbmdSYXRlOiAwLjUsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rp
dmF0aW9uOiBmdW5jdGlvbnNbaV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG5uID0gbmV3IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29yayhvcHRpb25zKTsK
KyAgICAgICAgICAgICAgICAgICAgbm4udHJhaW4odHJhaW5pbmdTZXQsIHByZWRpY3Rpb25zKTsK
KworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbm4ucHJlZGljdCh0cmFpbmluZ1Nl
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGl0
KCdCaWcgY2FzZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhaW5pbmdT
ZXQgPSBbWzEsIDFdLCBbMSwgMl0sIFsyLCAxXSwgWzIsIDJdLCBbMywgMV0sIFsxLCAzXSwgWzEs
IDRdLCBbNCwgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNiwgMV0s
IFs2LCAyXSwgWzYsIDNdLCBbNiwgNF0sIFs2LCA1XSwgWzUsIDVdLCBbNCwgNV0sIFszLCA1XV07
CisgICAgICAgICAgICAgICAgdmFyIHByZWRpY3Rpb25zID0gW1sxLCAwXSwgWzEsIDBdLCBbMSwg
MF0sIFsxLCAwXSwgWzEsIDBdLCBbMSwgMF0sIFsxLCAwXSwgWzEsIDBdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDFdLCBbMCwgMV0sIFswLCAxXSwgWzAsIDFdLCBb
MCwgMV0sIFswLCAxXSwgWzAsIDFdLCBbMCwgMV1dOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZnVuY3Rpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBvcHRpb25zID0geworICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuTGF5ZXJzOiBb
MjBdLAorICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uczogNjAsCisgICAgICAgICAg
ICAgICAgICAgICAgICBsZWFybmluZ1JhdGU6IDAuMDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICBhY3RpdmF0aW9uOiBmdW5jdGlvbnNbaV0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5uID0gbmV3IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29yayhvcHRp
b25zKTsKKyAgICAgICAgICAgICAgICAgICAgbm4udHJhaW4odHJhaW5pbmdTZXQsIHByZWRpY3Rp
b25zKTsKKworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbm4ucHJlZGljdChbWzUs
IDRdXSk7CisKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdFswXVswXSA8IHJlc3Vs
dFswXVsxXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICBydW4oKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1bkJlbmNobWFyaygpCit7
CisgICAgY29uc3QgbnVtSXRlcmF0aW9ucyA9IDYwOworCisgICAgbGV0IGJlZm9yZSA9IGN1cnJl
bnRUaW1lKCk7CisKKyAgICBsZXQgYmVuY2htYXJrID0gbmV3IEJlbmNobWFyaygpOworCisgICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgICAgIGJlbmNobWFyay5ydW5JdGVyYXRpb24oKTsKKworICAgIGxldCBhZnRl
ciA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIGFmdGVyIC0gYmVmb3JlOworfQpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvbWwvaW5kZXguanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9BUkVTLTYvbWwvaW5kZXguanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9BUkVTLTYvbWwvaW5kZXguanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MzMw
IEBACisvKgorICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCisgKiAKKyAqIENvcHlyaWdodCAoYykg
MjAxNSBtbC5qcworICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwg
dG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICog
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
IFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKKyAqIGNvcGll
cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBT
T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQor
ICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg
REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD
T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJ
TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO
R1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyovCisndXNlIHN0cmljdCc7CisKKy8vIG1sLXN0YXQg
YXJyYXkuanMKK2NvbnN0IE1MU3RhdEFycmF5ID0ge307Cit7CisgICAgZnVuY3Rpb24gY29tcGFy
ZU51bWJlcnMoYSwgYikgeworICAgICAgICByZXR1cm4gYSAtIGI7CisgICAgfQorCisgICAgLyoq
CisgICAgICogQ29tcHV0ZXMgdGhlIHN1bSBvZiB0aGUgZ2l2ZW4gdmFsdWVzCisgICAgICogQHBh
cmFtIHtBcnJheX0gdmFsdWVzCisgICAgICogQHJldHVybnMge251bWJlcn0KKyAgICAgKi8KKyAg
ICBNTFN0YXRBcnJheS5zdW0gPSBmdW5jdGlvbiBzdW0odmFsdWVzKSB7CisgICAgICAgIHZhciBz
dW0gPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgc3VtICs9IHZhbHVlc1tpXTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gc3VtOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0aGUgbWF4aW11bSBv
ZiB0aGUgZ2l2ZW4gdmFsdWVzCisgICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCisgICAgICog
QHJldHVybnMge251bWJlcn0KKyAgICAgKi8KKyAgICBNTFN0YXRBcnJheS5tYXggPSBmdW5jdGlv
biBtYXgodmFsdWVzKSB7CisgICAgICAgIHZhciBtYXggPSB2YWx1ZXNbMF07CisgICAgICAgIHZh
ciBsID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsOyBpKysp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gPiBtYXgpIG1heCA9IHZhbHVlc1tpXTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbWF4OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBD
b21wdXRlcyB0aGUgbWluaW11bSBvZiB0aGUgZ2l2ZW4gdmFsdWVzCisgICAgICogQHBhcmFtIHtB
cnJheX0gdmFsdWVzCisgICAgICogQHJldHVybnMge251bWJlcn0KKyAgICAgKi8KKyAgICBNTFN0
YXRBcnJheS5taW4gPSBmdW5jdGlvbiBtaW4odmFsdWVzKSB7CisgICAgICAgIHZhciBtaW4gPSB2
YWx1ZXNbMF07CisgICAgICAgIHZhciBsID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gPCBtaW4p
IG1pbiA9IHZhbHVlc1tpXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWluOworICAgIH07
CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0aGUgbWluIGFuZCBtYXggb2YgdGhlIGdpdmVu
IHZhbHVlcworICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcworICAgICAqIEByZXR1cm5zIHt7
bWluOiBudW1iZXIsIG1heDogbnVtYmVyfX0KKyAgICAgKi8KKyAgICBNTFN0YXRBcnJheS5taW5N
YXggPSBmdW5jdGlvbiBtaW5NYXgodmFsdWVzKSB7CisgICAgICAgIHZhciBtaW4gPSB2YWx1ZXNb
MF07CisgICAgICAgIHZhciBtYXggPSB2YWx1ZXNbMF07CisgICAgICAgIHZhciBsID0gdmFsdWVz
Lmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZXNbaV0gPCBtaW4pIG1pbiA9IHZhbHVlc1tpXTsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZXNbaV0gPiBtYXgpIG1heCA9IHZhbHVlc1tpXTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgbWluOiBtaW4sCisgICAgICAgICAgICBtYXg6IG1heAorICAg
ICAgICB9OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0aGUgYXJpdGhtZXRp
YyBtZWFuIG9mIHRoZSBnaXZlbiB2YWx1ZXMKKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMK
KyAgICAgKiBAcmV0dXJucyB7bnVtYmVyfQorICAgICAqLworICAgIE1MU3RhdEFycmF5LmFyaXRo
bWV0aWNNZWFuID0gZnVuY3Rpb24gYXJpdGhtZXRpY01lYW4odmFsdWVzKSB7CisgICAgICAgIHZh
ciBzdW0gPSAwOworICAgICAgICB2YXIgbCA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICBzdW0gKz0gdmFsdWVzW2ldOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzdW0gLyBsOworICAgIH07CisKKyAgICAvKioKKyAg
ICAgKiB7QGxpbmsgYXJpdGhtZXRpY01lYW59CisgICAgICovCisgICAgTUxTdGF0QXJyYXkubWVh
biA9IE1MU3RhdEFycmF5LmFyaXRobWV0aWNNZWFuOworCisgICAgLyoqCisgICAgICogQ29tcHV0
ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIHRoZSBnaXZlbiB2YWx1ZXMKKyAgICAgKiBAcGFyYW0g
e0FycmF5fSB2YWx1ZXMKKyAgICAgKiBAcmV0dXJucyB7bnVtYmVyfQorICAgICAqLworICAgIE1M
U3RhdEFycmF5Lmdlb21ldHJpY01lYW4gPSBmdW5jdGlvbiBnZW9tZXRyaWNNZWFuKHZhbHVlcykg
eworICAgICAgICB2YXIgbXVsID0gMTsKKyAgICAgICAgdmFyIGwgPSB2YWx1ZXMubGVuZ3RoOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgbXVsICo9
IHZhbHVlc1tpXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTWF0aC5wb3cobXVsLCAxIC8g
bCk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbXB1dGVzIHRoZSBtZWFuIG9mIHRoZSBs
b2cgb2YgdGhlIGdpdmVuIHZhbHVlcworICAgICAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgZXhw
b25lbnRpYXRlZCwgaXQgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZQorICAgICAqIGdlb21l
dHJpYyBtZWFuLgorICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcworICAgICAqIEByZXR1cm5z
IHtudW1iZXJ9CisgICAgICovCisgICAgTUxTdGF0QXJyYXkubG9nTWVhbiA9IGZ1bmN0aW9uIGxv
Z01lYW4odmFsdWVzKSB7CisgICAgICAgIHZhciBsbnN1bSA9IDA7CisgICAgICAgIHZhciBsID0g
dmFsdWVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAg
ICAgICAgICAgIGxuc3VtICs9IE1hdGgubG9nKHZhbHVlc1tpXSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGxuc3VtIC8gbDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQ29tcHV0ZXMg
dGhlIHdlaWdodGVkIGdyYW5kIG1lYW4gZm9yIGEgbGlzdCBvZiBtZWFucyBhbmQgc2FtcGxlIHNp
emVzCisgICAgICogQHBhcmFtIHtBcnJheX0gbWVhbnMgLSBNZWFuIHZhbHVlcyBmb3IgZWFjaCBz
ZXQgb2Ygc2FtcGxlcworICAgICAqIEBwYXJhbSB7QXJyYXl9IHNhbXBsZXMgLSBOdW1iZXIgb2Yg
b3JpZ2luYWwgdmFsdWVzIGZvciBlYWNoIHNldCBvZiBzYW1wbGVzCisgICAgICogQHJldHVybnMg
e251bWJlcn0KKyAgICAgKi8KKyAgICBNTFN0YXRBcnJheS5ncmFuZE1lYW4gPSBmdW5jdGlvbiBn
cmFuZE1lYW4obWVhbnMsIHNhbXBsZXMpIHsKKyAgICAgICAgdmFyIHN1bSA9IDA7CisgICAgICAg
IHZhciBuID0gMDsKKyAgICAgICAgdmFyIGwgPSBtZWFucy5sZW5ndGg7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICBzdW0gKz0gc2FtcGxlc1tpXSAq
IG1lYW5zW2ldOworICAgICAgICAgICAgbiArPSBzYW1wbGVzW2ldOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzdW0gLyBuOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0
aGUgdHJ1bmNhdGVkIG1lYW4gb2YgdGhlIGdpdmVuIHZhbHVlcyB1c2luZyBhIGdpdmVuIHBlcmNl
bnRhZ2UKKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0gcGVyY2VudCAtIFRoZSBwZXJjZW50YWdlIG9mIHZhbHVlcyB0byBrZWVwIChyYW5nZTogWzAs
MV0pCisgICAgICogQHBhcmFtIHtib29sZWFufSBbYWxyZWFkeVNvcnRlZD1mYWxzZV0KKyAgICAg
KiBAcmV0dXJucyB7bnVtYmVyfQorICAgICAqLworICAgIE1MU3RhdEFycmF5LnRydW5jYXRlZE1l
YW4gPSBmdW5jdGlvbiB0cnVuY2F0ZWRNZWFuKHZhbHVlcywgcGVyY2VudCwgYWxyZWFkeVNvcnRl
ZCkgeworICAgICAgICBpZiAoYWxyZWFkeVNvcnRlZCA9PT0gdW5kZWZpbmVkKSBhbHJlYWR5U29y
dGVkID0gZmFsc2U7CisgICAgICAgIGlmICghYWxyZWFkeVNvcnRlZCkgeworICAgICAgICAgICAg
dmFsdWVzID0gW10uY29uY2F0KHZhbHVlcykuc29ydChjb21wYXJlTnVtYmVycyk7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGwgPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgayA9IE1hdGgu
Zmxvb3IobCAqIHBlcmNlbnQpOworICAgICAgICB2YXIgc3VtID0gMDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IGs7IGkgPCAobCAtIGspOyBpKyspIHsKKyAgICAgICAgICAgIHN1bSArPSB2YWx1ZXNb
aV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1bSAvIChsIC0gMiAqIGspOworICAgIH07
CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0aGUgaGFybW9uaWMgbWVhbiBvZiB0aGUgZ2l2
ZW4gdmFsdWVzCisgICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCisgICAgICogQHJldHVybnMg
e251bWJlcn0KKyAgICAgKi8KKyAgICBNTFN0YXRBcnJheS5oYXJtb25pY01lYW4gPSBmdW5jdGlv
biBoYXJtb25pY01lYW4odmFsdWVzKSB7CisgICAgICAgIHZhciBzdW0gPSAwOworICAgICAgICB2
YXIgbCA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsr
KSB7CisgICAgICAgICAgICBpZiAodmFsdWVzW2ldID09PSAwKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZhbHVlIGF0IGluZGV4ICcgKyBpICsgJ2lzIHplcm8nKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1bSArPSAxIC8gdmFsdWVzW2ldOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBsIC8gc3VtOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBD
b21wdXRlcyB0aGUgY29udHJhaGFybW9uaWMgbWVhbiBvZiB0aGUgZ2l2ZW4gdmFsdWVzCisgICAg
ICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCisgICAgICogQHJldHVybnMge251bWJlcn0KKyAgICAg
Ki8KKyAgICBNTFN0YXRBcnJheS5jb250cmFIYXJtb25pY01lYW4gPSBmdW5jdGlvbiBjb250cmFI
YXJtb25pY01lYW4odmFsdWVzKSB7CisgICAgICAgIHZhciByMSA9IDA7CisgICAgICAgIHZhciBy
MiA9IDA7CisgICAgICAgIHZhciBsID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHIxICs9IHZhbHVlc1tpXSAqIHZhbHVl
c1tpXTsKKyAgICAgICAgICAgIHIyICs9IHZhbHVlc1tpXTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocjIgPCAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc3VtIG9mIHZh
bHVlcyBpcyBuZWdhdGl2ZScpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByMSAvIHIyOwor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBDb21wdXRlcyB0aGUgbWVkaWFuIG9mIHRoZSBnaXZl
biB2YWx1ZXMKKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMKKyAgICAgKiBAcGFyYW0ge2Jv
b2xlYW59IFthbHJlYWR5U29ydGVkPWZhbHNlXQorICAgICAqIEByZXR1cm5zIHtudW1iZXJ9Cisg
ICAgICovCisgICAgTUxTdGF0QXJyYXkubWVkaWFuID0gZnVuY3Rpb24gbWVkaWFuKHZhbHVlcywg
YWxyZWFkeVNvcnRlZCkgeworICAgICAgICBpZiAoYWxyZWFkeVNvcnRlZCA9PT0gdW5kZWZpbmVk
KSBhbHJlYWR5U29ydGVkID0gZmFsc2U7CisgICAgICAgIGlmICghYWxyZWFkeVNvcnRlZCkgewor
ICAgICAgICAgICAgdmFsdWVzID0gW10uY29uY2F0KHZhbHVlcykuc29ydChjb21wYXJlTnVtYmVy
cyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGwgPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2
YXIgaGFsZiA9IE1hdGguZmxvb3IobCAvIDIpOworICAgICAgICBpZiAobCAlIDIgPT09IDApIHsK
KyAgICAgICAgICAgIHJldHVybiAodmFsdWVzW2hhbGYgLSAxXSArIHZhbHVlc1toYWxmXSkgKiAw
LjU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2hhbGZdOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIENvbXB1dGVzIHRoZSB2YXJpYW5j
ZSBvZiB0aGUgZ2l2ZW4gdmFsdWVzCisgICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCisgICAg
ICogQHBhcmFtIHtib29sZWFufSBbdW5iaWFzZWQ9dHJ1ZV0gLSBpZiB0cnVlLCBkaXZpZGUgYnkg
KG4tMSk7IGlmIGZhbHNlLCBkaXZpZGUgYnkgbi4KKyAgICAgKiBAcmV0dXJucyB7bnVtYmVyfQor
ICAgICAqLworICAgIE1MU3RhdEFycmF5LnZhcmlhbmNlID0gZnVuY3Rpb24gdmFyaWFuY2UodmFs
dWVzLCB1bmJpYXNlZCkgeworICAgICAgICBpZiAodW5iaWFzZWQgPT09IHVuZGVmaW5lZCkgdW5i
aWFzZWQgPSB0cnVlOworICAgICAgICB2YXIgdGhlTWVhbiA9IE1MU3RhdEFycmF5Lm1lYW4odmFs
dWVzKTsKKyAgICAgICAgdmFyIHRoZVZhcmlhbmNlID0gMDsKKyAgICAgICAgdmFyIGwgPSB2YWx1
ZXMubGVuZ3RoOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAg
ICAgICAgICB2YXIgeCA9IHZhbHVlc1tpXSAtIHRoZU1lYW47CisgICAgICAgICAgICB0aGVWYXJp
YW5jZSArPSB4ICogeDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1bmJpYXNlZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRoZVZhcmlhbmNlIC8gKGwgLSAxKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGVWYXJpYW5jZSAvIGw7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoqCisgICAgICogQ29tcHV0ZXMgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUg
Z2l2ZW4gdmFsdWVzCisgICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCisgICAgICogQHBhcmFt
IHtib29sZWFufSBbdW5iaWFzZWQ9dHJ1ZV0gLSBpZiB0cnVlLCBkaXZpZGUgYnkgKG4tMSk7IGlm
IGZhbHNlLCBkaXZpZGUgYnkgbi4KKyAgICAgKiBAcmV0dXJucyB7bnVtYmVyfQorICAgICAqLwor
ICAgIE1MU3RhdEFycmF5LnN0YW5kYXJkRGV2aWF0aW9uID0gZnVuY3Rpb24gc3RhbmRhcmREZXZp
YXRpb24odmFsdWVzLCB1bmJpYXNlZCkgeworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KE1MU3Rh
dEFycmF5LnZhcmlhbmNlKHZhbHVlcywgdW5iaWFzZWQpKTsKKyAgICB9OworCisgICAgTUxTdGF0
QXJyYXkuc3RhbmRhcmRFcnJvciA9IGZ1bmN0aW9uIHN0YW5kYXJkRXJyb3IodmFsdWVzKSB7Cisg
ICAgICAgIHJldHVybiBNTFN0YXRBcnJheS5zdGFuZGFyZERldmlhdGlvbih2YWx1ZXMpIC8gTWF0
aC5zcXJ0KHZhbHVlcy5sZW5ndGgpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBJRUVFIFRy
YW5zYWN0aW9ucyBvbiBiaW9tZWRpY2FsIGVuZ2luZWVyaW5nLCB2b2wuIDUyLCBuby4gMSwgamFu
dWFyeSAyMDA1LCBwLiA3Ni0KKyAgICAgKiBDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRldmlhdGlv
biB2aWEgdGhlIE1lZGlhbiBvZiB0aGUgYWJzb2x1dGUgZGV2aWF0aW9uCisgICAgICogIFRoZSBm
b3JtdWxhIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9ubHkgaG9sZHMgZm9yIEdhdXNzaWFu
IHJhbmRvbSB2YXJpYWJsZXMuCisgICAgICogQHJldHVybnMge3ttZWFuOiBudW1iZXIsIHN0ZGV2
OiBudW1iZXJ9fQorICAgICAqLworICAgIE1MU3RhdEFycmF5LnJvYnVzdE1lYW5BbmRTdGRldiA9
IGZ1bmN0aW9uIHJvYnVzdE1lYW5BbmRTdGRldih5KSB7CisgICAgICAgIHZhciBtZWFuID0gMCwg
c3RkZXYgPSAwOworICAgICAgICB2YXIgbGVuZ3RoID0geS5sZW5ndGgsIGkgPSAwOworICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIG1lYW4gKz0geVtp
XTsKKyAgICAgICAgfQorICAgICAgICBtZWFuIC89IGxlbmd0aDsKKyAgICAgICAgdmFyIGF2ZXJh
Z2VEZXZpYXRpb25zID0gbmV3IEFycmF5KGxlbmd0aCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGF2ZXJhZ2VEZXZpYXRpb25zW2ldID0gTWF0aC5h
YnMoeVtpXSAtIG1lYW4pOworICAgICAgICBhdmVyYWdlRGV2aWF0aW9ucy5zb3J0KGNvbXBhcmVO
dW1iZXJzKTsKKyAgICAgICAgaWYgKGxlbmd0aCAlIDIgPT09IDEpIHsKKyAgICAgICAgICAgIHN0
ZGV2ID0gYXZlcmFnZURldmlhdGlvbnNbKGxlbmd0aCAtIDEpIC8gMl0gLyAwLjY3NDU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGRldiA9IDAuNSAqIChhdmVyYWdlRGV2aWF0aW9u
c1tsZW5ndGggLyAyXSArIGF2ZXJhZ2VEZXZpYXRpb25zW2xlbmd0aCAvIDIgLSAxXSkgLyAwLjY3
NDU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbWVhbjogbWVh
biwKKyAgICAgICAgICAgIHN0ZGV2OiBzdGRldgorICAgICAgICB9OworICAgIH07CisKKyAgICBN
TFN0YXRBcnJheS5xdWFydGlsZXMgPSBmdW5jdGlvbiBxdWFydGlsZXModmFsdWVzLCBhbHJlYWR5
U29ydGVkKSB7CisgICAgICAgIGlmICh0eXBlb2YgKGFscmVhZHlTb3J0ZWQpID09PSAndW5kZWZp
bmVkJykgYWxyZWFkeVNvcnRlZCA9IGZhbHNlOworICAgICAgICBpZiAoIWFscmVhZHlTb3J0ZWQp
IHsKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdLmNvbmNhdCh2YWx1ZXMpLnNvcnQoY29tcGFyZU51
bWJlcnMpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHF1YXJ0ID0gdmFsdWVzLmxlbmd0aCAv
IDQ7CisgICAgICAgIHZhciBxMSA9IHZhbHVlc1tNYXRoLmNlaWwocXVhcnQpIC0gMV07CisgICAg
ICAgIHZhciBxMiA9IE1MU3RhdEFycmF5Lm1lZGlhbih2YWx1ZXMsIHRydWUpOworICAgICAgICB2
YXIgcTMgPSB2YWx1ZXNbTWF0aC5jZWlsKHF1YXJ0ICogMykgLSAxXTsKKworICAgICAgICByZXR1
cm4ge3ExOiBxMSwgcTI6IHEyLCBxMzogcTN9OworICAgIH07CisKKyAgICBNTFN0YXRBcnJheS5w
b29sZWRTdGFuZGFyZERldmlhdGlvbiA9IGZ1bmN0aW9uIHBvb2xlZFN0YW5kYXJkRGV2aWF0aW9u
KHNhbXBsZXMsIHVuYmlhc2VkKSB7CisgICAgICAgIHJldHVybiBNYXRoLnNxcnQoTUxTdGF0QXJy
YXkucG9vbGVkVmFyaWFuY2Uoc2FtcGxlcywgdW5iaWFzZWQpKTsKKyAgICB9OworCisgICAgTUxT
dGF0QXJyYXkucG9vbGVkVmFyaWFuY2UgPSBmdW5jdGlvbiBwb29sZWRWYXJpYW5jZShzYW1wbGVz
LCB1bmJpYXNlZCkgeworICAgICAgICBpZiAodHlwZW9mICh1bmJpYXNlZCkgPT09ICd1bmRlZmlu
ZWQnKSB1bmJpYXNlZCA9IHRydWU7CisgICAgICAgIHZhciBzdW0gPSAwOworICAgICAgICB2YXIg
bGVuZ3RoID0gMCwgbCA9IHNhbXBsZXMubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGw7IGkrKykgeworICAgICAgICAgICAgdmFyIHZhbHVlcyA9IHNhbXBsZXNbaV07CisgICAg
ICAgICAgICB2YXIgdmFyaSA9IE1MU3RhdEFycmF5LnZhcmlhbmNlKHZhbHVlcyk7CisKKyAgICAg
ICAgICAgIHN1bSArPSAodmFsdWVzLmxlbmd0aCAtIDEpICogdmFyaTsKKworICAgICAgICAgICAg
aWYgKHVuYmlhc2VkKQorICAgICAgICAgICAgICAgIGxlbmd0aCArPSB2YWx1ZXMubGVuZ3RoIC0g
MTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gdmFsdWVzLmxl
bmd0aDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VtIC8gbGVuZ3RoOworICAgIH07CisK
KyAgICBNTFN0YXRBcnJheS5tb2RlID0gZnVuY3Rpb24gbW9kZSh2YWx1ZXMpIHsKKyAgICAgICAg
dmFyIGwgPSB2YWx1ZXMubGVuZ3RoLAorICAgICAgICAgICAgaXRlbUNvdW50ID0gbmV3IEFycmF5
KGwpLAorICAgICAgICAgICAgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykgewor
ICAgICAgICAgICAgaXRlbUNvdW50W2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICB2YXIgaXRl
bUFycmF5ID0gbmV3IEFycmF5KGwpOworICAgICAgICB2YXIgY291bnQgPSAwOworCisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IGl0ZW1B
cnJheS5pbmRleE9mKHZhbHVlc1tpXSk7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkKKyAg
ICAgICAgICAgICAgICBpdGVtQ291bnRbaW5kZXhdKys7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpdGVtQXJyYXlbY291bnRdID0gdmFsdWVzW2ldOworICAgICAgICAgICAg
ICAgIGl0ZW1Db3VudFtjb3VudF0gPSAxOworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgbWF4VmFsdWUgPSAwLCBtYXhJbmRl
eCA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICBpZiAoaXRlbUNvdW50W2ldID4gbWF4VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBtYXhWYWx1
ZSA9IGl0ZW1Db3VudFtpXTsKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IGk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaXRlbUFycmF5W21heEluZGV4XTsK
KyAgICB9OworCisgICAgTUxTdGF0QXJyYXkuY292YXJpYW5jZSA9IGZ1bmN0aW9uIGNvdmFyaWFu
Y2UodmVjdG9yMSwgdmVjdG9yMiwgdW5iaWFzZWQpIHsKKyAgICAgICAgaWYgKHR5cGVvZiAodW5i
aWFzZWQpID09PSAndW5kZWZpbmVkJykgdW5iaWFzZWQgPSB0cnVlOworICAgICAgICB2YXIgbWVh
bjEgPSBNTFN0YXRBcnJheS5tZWFuKHZlY3RvcjEpOworICAgICAgICB2YXIgbWVhbjIgPSBNTFN0
YXRBcnJheS5tZWFuKHZlY3RvcjIpOworCisgICAgICAgIGlmICh2ZWN0b3IxLmxlbmd0aCAhPT0g
dmVjdG9yMi5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyAnVmVjdG9ycyBkbyBub3QgaGF2ZSB0
aGUgc2FtZSBkaW1lbnNpb25zJzsKKworICAgICAgICB2YXIgY292ID0gMCwgbCA9IHZlY3RvcjEu
bGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAg
ICAgdmFyIHggPSB2ZWN0b3IxW2ldIC0gbWVhbjE7CisgICAgICAgICAgICB2YXIgeSA9IHZlY3Rv
cjJbaV0gLSBtZWFuMjsKKyAgICAgICAgICAgIGNvdiArPSB4ICogeTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh1bmJpYXNlZCkKKyAgICAgICAgICAgIHJldHVybiBjb3YgLyAobCAtIDEpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gY292IC8gbDsKKyAgICB9OworCisgICAg
TUxTdGF0QXJyYXkuc2tld25lc3MgPSBmdW5jdGlvbiBza2V3bmVzcyh2YWx1ZXMsIHVuYmlhc2Vk
KSB7CisgICAgICAgIGlmICh0eXBlb2YgKHVuYmlhc2VkKSA9PT0gJ3VuZGVmaW5lZCcpIHVuYmlh
c2VkID0gdHJ1ZTsKKyAgICAgICAgdmFyIHRoZU1lYW4gPSBNTFN0YXRBcnJheS5tZWFuKHZhbHVl
cyk7CisKKyAgICAgICAgdmFyIHMyID0gMCwgczMgPSAwLCBsID0gdmFsdWVzLmxlbmd0aDsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBkZXYg
PSB2YWx1ZXNbaV0gLSB0aGVNZWFuOworICAgICAgICAgICAgczIgKz0gZGV2ICogZGV2OworICAg
ICAgICAgICAgczMgKz0gZGV2ICogZGV2ICogZGV2OworICAgICAgICB9CisgICAgICAgIHZhciBt
MiA9IHMyIC8gbDsKKyAgICAgICAgdmFyIG0zID0gczMgLyBsOworCisgICAgICAgIHZhciBnID0g
bTMgLyAoTWF0aC5wb3cobTIsIDMgLyAyLjApKTsKKyAgICAgICAgaWYgKHVuYmlhc2VkKSB7Cisg
ICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChsICogKGwgLSAxKSk7CisgICAgICAgICAgICB2
YXIgYiA9IGwgLSAyOworICAgICAgICAgICAgcmV0dXJuIChhIC8gYikgKiBnOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGc7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
TUxTdGF0QXJyYXkua3VydG9zaXMgPSBmdW5jdGlvbiBrdXJ0b3Npcyh2YWx1ZXMsIHVuYmlhc2Vk
KSB7CisgICAgICAgIGlmICh0eXBlb2YgKHVuYmlhc2VkKSA9PT0gJ3VuZGVmaW5lZCcpIHVuYmlh
c2VkID0gdHJ1ZTsKKyAgICAgICAgdmFyIHRoZU1lYW4gPSBNTFN0YXRBcnJheS5tZWFuKHZhbHVl
cyk7CisgICAgICAgIHZhciBuID0gdmFsdWVzLmxlbmd0aCwgczIgPSAwLCBzNCA9IDA7CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBkZXYg
PSB2YWx1ZXNbaV0gLSB0aGVNZWFuOworICAgICAgICAgICAgczIgKz0gZGV2ICogZGV2OworICAg
ICAgICAgICAgczQgKz0gZGV2ICogZGV2ICogZGV2ICogZGV2OworICAgICAgICB9CisgICAgICAg
IHZhciBtMiA9IHMyIC8gbjsKKyAgICAgICAgdmFyIG00ID0gczQgLyBuOworCisgICAgICAgIGlm
ICh1bmJpYXNlZCkgeworICAgICAgICAgICAgdmFyIHYgPSBzMiAvIChuIC0gMSk7CisgICAgICAg
ICAgICB2YXIgYSA9IChuICogKG4gKyAxKSkgLyAoKG4gLSAxKSAqIChuIC0gMikgKiAobiAtIDMp
KTsKKyAgICAgICAgICAgIHZhciBiID0gczQgLyAodiAqIHYpOworICAgICAgICAgICAgdmFyIGMg
PSAoKG4gLSAxKSAqIChuIC0gMSkpIC8gKChuIC0gMikgKiAobiAtIDMpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIGEgKiBiIC0gMyAqIGM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm4gbTQgLyAobTIgKiBtMikgLSAzOworICAgICAgICB9CisgICAgfTsKKworICAgIE1MU3Rh
dEFycmF5LmVudHJvcHkgPSBmdW5jdGlvbiBlbnRyb3B5KHZhbHVlcywgZXBzKSB7CisgICAgICAg
IGlmICh0eXBlb2YgKGVwcykgPT09ICd1bmRlZmluZWQnKSBlcHMgPSAwOworICAgICAgICB2YXIg
c3VtID0gMCwgbCA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bDsgaSsrKQorICAgICAgICAgICAgc3VtICs9IHZhbHVlc1tpXSAqIE1hdGgubG9nKHZhbHVlc1tp
XSArIGVwcyk7CisgICAgICAgIHJldHVybiAtc3VtOworICAgIH07CisKKyAgICBNTFN0YXRBcnJh
eS53ZWlnaHRlZE1lYW4gPSBmdW5jdGlvbiB3ZWlnaHRlZE1lYW4odmFsdWVzLCB3ZWlnaHRzKSB7
CisgICAgICAgIHZhciBzdW0gPSAwLCBsID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsOyBpKyspCisgICAgICAgICAgICBzdW0gKz0gdmFsdWVzW2ldICogd2Vp
Z2h0c1tpXTsKKyAgICAgICAgcmV0dXJuIHN1bTsKKyAgICB9OworCisgICAgTUxTdGF0QXJyYXku
d2VpZ2h0ZWRTdGFuZGFyZERldmlhdGlvbiA9IGZ1bmN0aW9uIHdlaWdodGVkU3RhbmRhcmREZXZp
YXRpb24odmFsdWVzLCB3ZWlnaHRzKSB7CisgICAgICAgIHJldHVybiBNYXRoLnNxcnQoTUxTdGF0
QXJyYXkud2VpZ2h0ZWRWYXJpYW5jZSh2YWx1ZXMsIHdlaWdodHMpKTsKKyAgICB9OworCisgICAg
TUxTdGF0QXJyYXkud2VpZ2h0ZWRWYXJpYW5jZSA9IGZ1bmN0aW9uIHdlaWdodGVkVmFyaWFuY2Uo
dmFsdWVzLCB3ZWlnaHRzKSB7CisgICAgICAgIHZhciB0aGVNZWFuID0gTUxTdGF0QXJyYXkud2Vp
Z2h0ZWRNZWFuKHZhbHVlcywgd2VpZ2h0cyk7CisgICAgICAgIHZhciB2YXJpID0gMCwgbCA9IHZh
bHVlcy5sZW5ndGg7CisgICAgICAgIHZhciBhID0gMCwgYiA9IDA7CisKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHZhciB6ID0gdmFsdWVzW2ldIC0g
dGhlTWVhbjsKKyAgICAgICAgICAgIHZhciB3ID0gd2VpZ2h0c1tpXTsKKworICAgICAgICAgICAg
dmFyaSArPSB3ICogKHogKiB6KTsKKyAgICAgICAgICAgIGIgKz0gdzsKKyAgICAgICAgICAgIGEg
Kz0gdyAqIHc7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdmFyaSAqIChiIC8gKGIgKiBi
IC0gYSkpOworICAgIH07CisKKyAgICBNTFN0YXRBcnJheS5jZW50ZXIgPSBmdW5jdGlvbiBjZW50
ZXIodmFsdWVzLCBpblBsYWNlKSB7CisgICAgICAgIGlmICh0eXBlb2YgKGluUGxhY2UpID09PSAn
dW5kZWZpbmVkJykgaW5QbGFjZSA9IGZhbHNlOworCisgICAgICAgIHZhciByZXN1bHQgPSB2YWx1
ZXM7CisgICAgICAgIGlmICghaW5QbGFjZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IFtdLmNvbmNh
dCh2YWx1ZXMpOworCisgICAgICAgIHZhciB0aGVNZWFuID0gTUxTdGF0QXJyYXkubWVhbihyZXN1
bHQpLCBsID0gcmVzdWx0Lmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBp
KyspCisgICAgICAgICAgICByZXN1bHRbaV0gLT0gdGhlTWVhbjsKKyAgICB9OworCisgICAgTUxT
dGF0QXJyYXkuc3RhbmRhcmRpemUgPSBmdW5jdGlvbiBzdGFuZGFyZGl6ZSh2YWx1ZXMsIHN0YW5k
YXJkRGV2LCBpblBsYWNlKSB7CisgICAgICAgIGlmICh0eXBlb2YgKHN0YW5kYXJkRGV2KSA9PT0g
J3VuZGVmaW5lZCcpIHN0YW5kYXJkRGV2ID0gTUxTdGF0QXJyYXkuc3RhbmRhcmREZXZpYXRpb24o
dmFsdWVzKTsKKyAgICAgICAgaWYgKHR5cGVvZiAoaW5QbGFjZSkgPT09ICd1bmRlZmluZWQnKSBp
blBsYWNlID0gZmFsc2U7CisgICAgICAgIHZhciBsID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGluUGxhY2UgPyB2YWx1ZXMgOiBuZXcgQXJyYXkobCk7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKQorICAgICAgICAgICAgcmVzdWx0W2ldID0gdmFsdWVz
W2ldIC8gc3RhbmRhcmREZXY7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAg
IE1MU3RhdEFycmF5LmN1bXVsYXRpdmVTdW0gPSBmdW5jdGlvbiBjdW11bGF0aXZlU3VtKGFycmF5
KSB7CisgICAgICAgIHZhciBsID0gYXJyYXkubGVuZ3RoOworICAgICAgICB2YXIgcmVzdWx0ID0g
bmV3IEFycmF5KGwpOworICAgICAgICByZXN1bHRbMF0gPSBhcnJheVswXTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCBsOyBpKyspCisgICAgICAgICAgICByZXN1bHRbaV0gPSByZXN1bHRb
aSAtIDFdICsgYXJyYXlbaV07CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKwor
CisvLyBtbC1zdGF0IG1hdHJpeC5qcworY29uc3QgTUxTdGF0TWF0cml4ID0ge307Cit7CisgICAg
bGV0IGFycmF5U3RhdCA9IE1MU3RhdEFycmF5OworCisgICAgZnVuY3Rpb24gY29tcGFyZU51bWJl
cnMoYSwgYikgeworICAgICAgICByZXR1cm4gYSAtIGI7CisgICAgfQorCisgICAgTUxTdGF0TWF0
cml4Lm1heCA9IGZ1bmN0aW9uIG1heChtYXRyaXgpIHsKKyAgICAgICAgdmFyIG1heCA9IC1JbmZp
bml0eTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRyaXgubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0cml4W2ldLmxlbmd0aDsgaisrKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1hdHJpeFtpXVtqXSA+IG1heCkgbWF4ID0gbWF0cml4W2ld
W2pdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXg7CisgICAg
fTsKKworICAgIE1MU3RhdE1hdHJpeC5taW4gPSBmdW5jdGlvbiBtaW4obWF0cml4KSB7CisgICAg
ICAgIHZhciBtaW4gPSBJbmZpbml0eTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRy
aXgubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0cml4
W2ldLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdHJpeFtpXVtqXSA8IG1p
bikgbWluID0gbWF0cml4W2ldW2pdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBtaW47CisgICAgfTsKKworICAgIE1MU3RhdE1hdHJpeC5taW5NYXggPSBmdW5jdGlv
biBtaW5NYXgobWF0cml4KSB7CisgICAgICAgIHZhciBtaW4gPSBJbmZpbml0eTsKKyAgICAgICAg
dmFyIG1heCA9IC1JbmZpbml0eTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRyaXgu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0cml4W2ld
Lmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdHJpeFtpXVtqXSA8IG1pbikg
bWluID0gbWF0cml4W2ldW2pdOworICAgICAgICAgICAgICAgIGlmIChtYXRyaXhbaV1bal0gPiBt
YXgpIG1heCA9IG1hdHJpeFtpXVtqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgbWluOm1pbiwKKyAgICAgICAgICAgIG1heDptYXgKKyAg
ICAgICAgfTsKKyAgICB9OworCisgICAgTUxTdGF0TWF0cml4LmVudHJvcHkgPSBmdW5jdGlvbiBl
bnRyb3B5KG1hdHJpeCwgZXBzKSB7CisgICAgICAgIGlmICh0eXBlb2YgKGVwcykgPT09ICd1bmRl
ZmluZWQnKSB7CisgICAgICAgICAgICBlcHMgPSAwOworICAgICAgICB9CisgICAgICAgIHZhciBz
dW0gPSAwLAorICAgICAgICAgICAgbDEgPSBtYXRyaXgubGVuZ3RoLAorICAgICAgICAgICAgbDIg
PSBtYXRyaXhbMF0ubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGwxOyBpKysp
IHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbDI7IGorKykgeworICAgICAgICAg
ICAgICAgIHN1bSArPSBtYXRyaXhbaV1bal0gKiBNYXRoLmxvZyhtYXRyaXhbaV1bal0gKyBlcHMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtc3VtOworICAgIH07
CisKKyAgICBNTFN0YXRNYXRyaXgubWVhbiA9IGZ1bmN0aW9uIG1lYW4obWF0cml4LCBkaW1lbnNp
b24pIHsKKyAgICAgICAgaWYgKHR5cGVvZiAoZGltZW5zaW9uKSA9PT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgIGRpbWVuc2lvbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvd3Mg
PSBtYXRyaXgubGVuZ3RoLAorICAgICAgICAgICAgY29scyA9IG1hdHJpeFswXS5sZW5ndGgsCisg
ICAgICAgICAgICB0aGVNZWFuLCBOLCBpLCBqOworCisgICAgICAgIGlmIChkaW1lbnNpb24gPT09
IC0xKSB7CisgICAgICAgICAgICB0aGVNZWFuID0gWzBdOworICAgICAgICAgICAgTiA9IHJvd3Mg
KiBjb2xzOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgeworICAgICAg
ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhlTWVhblswXSArPSBtYXRyaXhbaV1bal07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhlTWVhblswXSAvPSBOOworICAgICAgICB9IGVsc2UgaWYg
KGRpbWVuc2lvbiA9PT0gMCkgeworICAgICAgICAgICAgdGhlTWVhbiA9IG5ldyBBcnJheShjb2xz
KTsKKyAgICAgICAgICAgIE4gPSByb3dzOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNv
bHM7IGorKykgeworICAgICAgICAgICAgICAgIHRoZU1lYW5bal0gPSAwOworICAgICAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhl
TWVhbltqXSArPSBtYXRyaXhbaV1bal07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRoZU1lYW5bal0gLz0gTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChk
aW1lbnNpb24gPT09IDEpIHsKKyAgICAgICAgICAgIHRoZU1lYW4gPSBuZXcgQXJyYXkocm93cyk7
CisgICAgICAgICAgICBOID0gY29sczsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCByb3dz
OyBqKyspIHsKKyAgICAgICAgICAgICAgICB0aGVNZWFuW2pdID0gMDsKKyAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgY29sczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoZU1l
YW5bal0gKz0gbWF0cml4W2pdW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB0aGVNZWFuW2pdIC89IE47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGltZW5zaW9uJyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoZU1lYW47CisgICAgfTsKKworICAgIE1MU3RhdE1hdHJpeC5zdW0g
PSBmdW5jdGlvbiBzdW0obWF0cml4LCBkaW1lbnNpb24pIHsKKyAgICAgICAgaWYgKHR5cGVvZiAo
ZGltZW5zaW9uKSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGRpbWVuc2lvbiA9IDA7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvd3MgPSBtYXRyaXgubGVuZ3RoLAorICAgICAgICAg
ICAgY29scyA9IG1hdHJpeFswXS5sZW5ndGgsCisgICAgICAgICAgICB0aGVTdW0sIGksIGo7CisK
KyAgICAgICAgaWYgKGRpbWVuc2lvbiA9PT0gLTEpIHsKKyAgICAgICAgICAgIHRoZVN1bSA9IFsw
XTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgY29sczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
ZVN1bVswXSArPSBtYXRyaXhbaV1bal07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGRpbWVuc2lvbiA9PT0gMCkgeworICAgICAgICAgICAgdGhl
U3VtID0gbmV3IEFycmF5KGNvbHMpOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvbHM7
IGorKykgeworICAgICAgICAgICAgICAgIHRoZVN1bVtqXSA9IDA7CisgICAgICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0aGVTdW1b
al0gKz0gbWF0cml4W2ldW2pdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChkaW1lbnNpb24gPT09IDEpIHsKKyAgICAgICAgICAgIHRoZVN1bSA9
IG5ldyBBcnJheShyb3dzKTsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCByb3dzOyBqKysp
IHsKKyAgICAgICAgICAgICAgICB0aGVTdW1bal0gPSAwOworICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBjb2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhlU3VtW2pdICs9
IG1hdHJpeFtqXVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGltZW5zaW9u
Jyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoZVN1bTsKKyAgICB9OworCisgICAgTUxT
dGF0TWF0cml4LnByb2R1Y3QgPSBmdW5jdGlvbiBwcm9kdWN0KG1hdHJpeCwgZGltZW5zaW9uKSB7
CisgICAgICAgIGlmICh0eXBlb2YgKGRpbWVuc2lvbikgPT09ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgICAgICBkaW1lbnNpb24gPSAwOworICAgICAgICB9CisgICAgICAgIHZhciByb3dzID0gbWF0
cml4Lmxlbmd0aCwKKyAgICAgICAgICAgIGNvbHMgPSBtYXRyaXhbMF0ubGVuZ3RoLAorICAgICAg
ICAgICAgdGhlUHJvZHVjdCwgaSwgajsKKworICAgICAgICBpZiAoZGltZW5zaW9uID09PSAtMSkg
eworICAgICAgICAgICAgdGhlUHJvZHVjdCA9IFsxXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCByb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29sczsg
aisrKSB7CisgICAgICAgICAgICAgICAgICAgIHRoZVByb2R1Y3RbMF0gKj0gbWF0cml4W2ldW2pd
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChk
aW1lbnNpb24gPT09IDApIHsKKyAgICAgICAgICAgIHRoZVByb2R1Y3QgPSBuZXcgQXJyYXkoY29s
cyk7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29sczsgaisrKSB7CisgICAgICAgICAg
ICAgICAgdGhlUHJvZHVjdFtqXSA9IDE7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IHJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB0aGVQcm9kdWN0W2pdICo9IG1hdHJp
eFtpXVtqXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoZGltZW5zaW9uID09PSAxKSB7CisgICAgICAgICAgICB0aGVQcm9kdWN0ID0gbmV3IEFy
cmF5KHJvd3MpOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJvd3M7IGorKykgeworICAg
ICAgICAgICAgICAgIHRoZVByb2R1Y3Rbal0gPSAxOworICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBjb2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhlUHJvZHVjdFtqXSAq
PSBtYXRyaXhbal1baV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpbWVuc2lv
bicpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGVQcm9kdWN0OworICAgIH07CisKKyAg
ICBNTFN0YXRNYXRyaXguc3RhbmRhcmREZXZpYXRpb24gPSBmdW5jdGlvbiBzdGFuZGFyZERldmlh
dGlvbihtYXRyaXgsIG1lYW5zLCB1bmJpYXNlZCkgeworICAgICAgICB2YXIgdmFyaSA9IE1MU3Rh
dE1hdHJpeC52YXJpYW5jZShtYXRyaXgsIG1lYW5zLCB1bmJpYXNlZCksIGwgPSB2YXJpLmxlbmd0
aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHZh
cmlbaV0gPSBNYXRoLnNxcnQodmFyaVtpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
cmk7CisgICAgfTsKKworICAgIE1MU3RhdE1hdHJpeC52YXJpYW5jZSA9IGZ1bmN0aW9uIHZhcmlh
bmNlKG1hdHJpeCwgbWVhbnMsIHVuYmlhc2VkKSB7CisgICAgICAgIGlmICh0eXBlb2YgKHVuYmlh
c2VkKSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIHVuYmlhc2VkID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtZWFucyA9IG1lYW5zIHx8IE1MU3RhdE1hdHJpeC5tZWFuKG1hdHJp
eCk7CisgICAgICAgIHZhciByb3dzID0gbWF0cml4Lmxlbmd0aDsKKyAgICAgICAgaWYgKHJvd3Mg
PT09IDApIHJldHVybiBbXTsKKyAgICAgICAgdmFyIGNvbHMgPSBtYXRyaXhbMF0ubGVuZ3RoOwor
ICAgICAgICB2YXIgdmFyaSA9IG5ldyBBcnJheShjb2xzKTsKKworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IGNvbHM7IGorKykgeworICAgICAgICAgICAgdmFyIHN1bTEgPSAwLCBzdW0yID0g
MCwgeCA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykgewor
ICAgICAgICAgICAgICAgIHggPSBtYXRyaXhbaV1bal0gLSBtZWFuc1tqXTsKKyAgICAgICAgICAg
ICAgICBzdW0xICs9IHg7CisgICAgICAgICAgICAgICAgc3VtMiArPSB4ICogeDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh1bmJpYXNlZCkgeworICAgICAgICAgICAgICAgIHZhcmlb
al0gPSAoc3VtMiAtICgoc3VtMSAqIHN1bTEpIC8gcm93cykpIC8gKHJvd3MgLSAxKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaVtqXSA9IChzdW0yIC0gKChzdW0x
ICogc3VtMSkgLyByb3dzKSkgLyByb3dzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YXJpOworICAgIH07CisKKyAgICBNTFN0YXRNYXRyaXgubWVkaWFuID0gZnVu
Y3Rpb24gbWVkaWFuKG1hdHJpeCkgeworICAgICAgICB2YXIgcm93cyA9IG1hdHJpeC5sZW5ndGgs
IGNvbHMgPSBtYXRyaXhbMF0ubGVuZ3RoOworICAgICAgICB2YXIgbWVkaWFucyA9IG5ldyBBcnJh
eShjb2xzKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHM7IGkrKykgeworICAg
ICAgICAgICAgdmFyIGRhdGEgPSBuZXcgQXJyYXkocm93cyk7CisgICAgICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IHJvd3M7IGorKykgeworICAgICAgICAgICAgICAgIGRhdGFbal0gPSBtYXRy
aXhbal1baV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLnNvcnQoY29tcGFyZU51
bWJlcnMpOworICAgICAgICAgICAgdmFyIE4gPSBkYXRhLmxlbmd0aDsKKyAgICAgICAgICAgIGlm
IChOICUgMiA9PT0gMCkgeworICAgICAgICAgICAgICAgIG1lZGlhbnNbaV0gPSAoZGF0YVtOIC8g
Ml0gKyBkYXRhWyhOIC8gMikgLSAxXSkgKiAwLjU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIG1lZGlhbnNbaV0gPSBkYXRhW01hdGguZmxvb3IoTiAvIDIpXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWVkaWFuczsKKyAgICB9OworCisg
ICAgTUxTdGF0TWF0cml4Lm1vZGUgPSBmdW5jdGlvbiBtb2RlKG1hdHJpeCkgeworICAgICAgICB2
YXIgcm93cyA9IG1hdHJpeC5sZW5ndGgsCisgICAgICAgICAgICBjb2xzID0gbWF0cml4WzBdLmxl
bmd0aCwKKyAgICAgICAgICAgIG1vZGVzID0gbmV3IEFycmF5KGNvbHMpLAorICAgICAgICAgICAg
aSwgajsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHM7IGkrKykgeworICAgICAgICAgICAg
dmFyIGl0ZW1Db3VudCA9IG5ldyBBcnJheShyb3dzKTsKKyAgICAgICAgICAgIGZvciAodmFyIGsg
PSAwOyBrIDwgcm93czsgaysrKSB7CisgICAgICAgICAgICAgICAgaXRlbUNvdW50W2tdID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpdGVtQXJyYXkgPSBuZXcgQXJyYXkocm93
cyk7CisgICAgICAgICAgICB2YXIgY291bnQgPSAwOworCisgICAgICAgICAgICBmb3IgKGogPSAw
OyBqIDwgcm93czsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gaXRlbUFycmF5
LmluZGV4T2YobWF0cml4W2pdW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkg
eworICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnRbaW5kZXhdKys7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaXRlbUFycmF5W2NvdW50XSA9IG1hdHJp
eFtqXVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50W2NvdW50XSA9IDE7CisgICAg
ICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgbWF4VmFsdWUgPSAwLCBtYXhJbmRleCA9IDA7CisgICAgICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChp
dGVtQ291bnRbal0gPiBtYXhWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9
IGl0ZW1Db3VudFtqXTsKKyAgICAgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBqOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbW9kZXNbaV0gPSBpdGVt
QXJyYXlbbWF4SW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtb2RlczsKKyAgICB9
OworCisgICAgTUxTdGF0TWF0cml4LnNrZXduZXNzID0gZnVuY3Rpb24gc2tld25lc3MobWF0cml4
LCB1bmJpYXNlZCkgeworICAgICAgICBpZiAodHlwZW9mICh1bmJpYXNlZCkgPT09ICd1bmRlZmlu
ZWQnKSB1bmJpYXNlZCA9IHRydWU7CisgICAgICAgIHZhciBtZWFucyA9IE1MU3RhdE1hdHJpeC5t
ZWFuKG1hdHJpeCk7CisgICAgICAgIHZhciBuID0gbWF0cml4Lmxlbmd0aCwgbCA9IG1lYW5zLmxl
bmd0aDsKKyAgICAgICAgdmFyIHNrZXcgPSBuZXcgQXJyYXkobCk7CisKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCBsOyBqKyspIHsKKyAgICAgICAgICAgIHZhciBzMiA9IDAsIHMzID0gMDsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGRldiA9IG1hdHJpeFtpXVtqXSAtIG1lYW5zW2pdOworICAgICAgICAgICAgICAgIHMy
ICs9IGRldiAqIGRldjsKKyAgICAgICAgICAgICAgICBzMyArPSBkZXYgKiBkZXYgKiBkZXY7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtMiA9IHMyIC8gbjsKKyAgICAgICAgICAg
IHZhciBtMyA9IHMzIC8gbjsKKyAgICAgICAgICAgIHZhciBnID0gbTMgLyBNYXRoLnBvdyhtMiwg
MyAvIDIpOworCisgICAgICAgICAgICBpZiAodW5iaWFzZWQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgYSA9IE1hdGguc3FydChuICogKG4gLSAxKSk7CisgICAgICAgICAgICAgICAgdmFyIGIgPSBu
IC0gMjsKKyAgICAgICAgICAgICAgICBza2V3W2pdID0gKGEgLyBiKSAqIGc7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNrZXdbal0gPSBnOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBza2V3OworICAgIH07CisKKyAgICBNTFN0YXRNYXRy
aXgua3VydG9zaXMgPSBmdW5jdGlvbiBrdXJ0b3NpcyhtYXRyaXgsIHVuYmlhc2VkKSB7CisgICAg
ICAgIGlmICh0eXBlb2YgKHVuYmlhc2VkKSA9PT0gJ3VuZGVmaW5lZCcpIHVuYmlhc2VkID0gdHJ1
ZTsKKyAgICAgICAgdmFyIG1lYW5zID0gTUxTdGF0TWF0cml4Lm1lYW4obWF0cml4KTsKKyAgICAg
ICAgdmFyIG4gPSBtYXRyaXgubGVuZ3RoLCBtID0gbWF0cml4WzBdLmxlbmd0aDsKKyAgICAgICAg
dmFyIGt1cnQgPSBuZXcgQXJyYXkobSk7CisKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBt
OyBqKyspIHsKKyAgICAgICAgICAgIHZhciBzMiA9IDAsIHM0ID0gMDsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRldiA9IG1h
dHJpeFtpXVtqXSAtIG1lYW5zW2pdOworICAgICAgICAgICAgICAgIHMyICs9IGRldiAqIGRldjsK
KyAgICAgICAgICAgICAgICBzNCArPSBkZXYgKiBkZXYgKiBkZXYgKiBkZXY7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgbTIgPSBzMiAvIG47CisgICAgICAgICAgICB2YXIgbTQgPSBz
NCAvIG47CisKKyAgICAgICAgICAgIGlmICh1bmJpYXNlZCkgeworICAgICAgICAgICAgICAgIHZh
ciB2ID0gczIgLyAobiAtIDEpOworICAgICAgICAgICAgICAgIHZhciBhID0gKG4gKiAobiArIDEp
KSAvICgobiAtIDEpICogKG4gLSAyKSAqIChuIC0gMykpOworICAgICAgICAgICAgICAgIHZhciBi
ID0gczQgLyAodiAqIHYpOworICAgICAgICAgICAgICAgIHZhciBjID0gKChuIC0gMSkgKiAobiAt
IDEpKSAvICgobiAtIDIpICogKG4gLSAzKSk7CisgICAgICAgICAgICAgICAga3VydFtqXSA9IGEg
KiBiIC0gMyAqIGM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGt1cnRb
al0gPSBtNCAvIChtMiAqIG0yKSAtIDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGt1cnQ7CisgICAgfTsKKworICAgIE1MU3RhdE1hdHJpeC5zdGFuZGFyZEVycm9y
ID0gZnVuY3Rpb24gc3RhbmRhcmRFcnJvcihtYXRyaXgpIHsKKyAgICAgICAgdmFyIHNhbXBsZXMg
PSBtYXRyaXgubGVuZ3RoOworICAgICAgICB2YXIgc3RhbmRhcmREZXZpYXRpb25zID0gTUxTdGF0
TWF0cml4LnN0YW5kYXJkRGV2aWF0aW9uKG1hdHJpeCk7CisgICAgICAgIHZhciBsID0gc3RhbmRh
cmREZXZpYXRpb25zLmxlbmd0aDsKKyAgICAgICAgdmFyIHN0YW5kYXJkRXJyb3JzID0gbmV3IEFy
cmF5KGwpOworICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQoc2FtcGxlcyk7CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIHN0YW5kYXJkRXJy
b3JzW2ldID0gc3RhbmRhcmREZXZpYXRpb25zW2ldIC8gc3FydE47CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHN0YW5kYXJkRXJyb3JzOworICAgIH07CisKKyAgICBNTFN0YXRNYXRyaXguY292
YXJpYW5jZSA9IGZ1bmN0aW9uIGNvdmFyaWFuY2UobWF0cml4LCBkaW1lbnNpb24pIHsKKyAgICAg
ICAgcmV0dXJuIE1MU3RhdE1hdHJpeC5zY2F0dGVyKG1hdHJpeCwgdW5kZWZpbmVkLCBkaW1lbnNp
b24pOworICAgIH07CisKKyAgICBNTFN0YXRNYXRyaXguc2NhdHRlciA9IGZ1bmN0aW9uIHNjYXR0
ZXIobWF0cml4LCBkaXZpc29yLCBkaW1lbnNpb24pIHsKKyAgICAgICAgaWYgKHR5cGVvZiAoZGlt
ZW5zaW9uKSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGRpbWVuc2lvbiA9IDA7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiAoZGl2aXNvcikgPT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgICAgICBpZiAoZGltZW5zaW9uID09PSAwKSB7CisgICAgICAgICAgICAgICAgZGl2
aXNvciA9IG1hdHJpeC5sZW5ndGggLSAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChkaW1lbnNp
b24gPT09IDEpIHsKKyAgICAgICAgICAgICAgICBkaXZpc29yID0gbWF0cml4WzBdLmxlbmd0aCAt
IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1lYW5zID0gTUxTdGF0
TWF0cml4Lm1lYW4obWF0cml4LCBkaW1lbnNpb24pOworICAgICAgICB2YXIgcm93cyA9IG1hdHJp
eC5sZW5ndGg7CisgICAgICAgIGlmIChyb3dzID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4g
W1tdXTsKKyAgICAgICAgfQorICAgICAgICB2YXIgY29scyA9IG1hdHJpeFswXS5sZW5ndGgsCisg
ICAgICAgICAgICBjb3YsIGksIGosIHMsIGs7CisKKyAgICAgICAgaWYgKGRpbWVuc2lvbiA9PT0g
MCkgeworICAgICAgICAgICAgY292ID0gbmV3IEFycmF5KGNvbHMpOworICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGNvbHM7IGkrKykgeworICAgICAgICAgICAgICAgIGNvdltpXSA9IG5ldyBB
cnJheShjb2xzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBj
b2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgY29sczsgaisrKSB7
CisgICAgICAgICAgICAgICAgICAgIHMgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGsg
PSAwOyBrIDwgcm93czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzICs9IChtYXRy
aXhba11bal0gLSBtZWFuc1tqXSkgKiAobWF0cml4W2tdW2ldIC0gbWVhbnNbaV0pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHMgLz0gZGl2aXNvcjsKKyAgICAg
ICAgICAgICAgICAgICAgY292W2ldW2pdID0gczsKKyAgICAgICAgICAgICAgICAgICAgY292W2pd
W2ldID0gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoZGltZW5zaW9uID09PSAxKSB7CisgICAgICAgICAgICBjb3YgPSBuZXcgQXJyYXkocm93
cyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgY292W2ldID0gbmV3IEFycmF5KHJvd3MpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaiA9
IGk7IGogPCByb3dzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcyA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2xzOyBrKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHMgKz0gKG1hdHJpeFtqXVtrXSAtIG1lYW5zW2pdKSAqIChtYXRyaXhbaV1ba10g
LSBtZWFuc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cyAvPSBkaXZpc29yOworICAgICAgICAgICAgICAgICAgICBjb3ZbaV1bal0gPSBzOworICAgICAg
ICAgICAgICAgICAgICBjb3Zbal1baV0gPSBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52
YWxpZCBkaW1lbnNpb24nKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb3Y7CisgICAg
fTsKKworICAgIE1MU3RhdE1hdHJpeC5jb3JyZWxhdGlvbiA9IGZ1bmN0aW9uIGNvcnJlbGF0aW9u
KG1hdHJpeCkgeworICAgICAgICB2YXIgbWVhbnMgPSBNTFN0YXRNYXRyaXgubWVhbihtYXRyaXgp
LAorICAgICAgICAgICAgc3RhbmRhcmREZXZpYXRpb25zID0gTUxTdGF0TWF0cml4LnN0YW5kYXJk
RGV2aWF0aW9uKG1hdHJpeCwgdHJ1ZSwgbWVhbnMpLAorICAgICAgICAgICAgc2NvcmVzID0gTUxT
dGF0TWF0cml4LnpTY29yZXMobWF0cml4LCBtZWFucywgc3RhbmRhcmREZXZpYXRpb25zKSwKKyAg
ICAgICAgICAgIHJvd3MgPSBtYXRyaXgubGVuZ3RoLAorICAgICAgICAgICAgY29scyA9IG1hdHJp
eFswXS5sZW5ndGgsCisgICAgICAgICAgICBpLCBqOworCisgICAgICAgIHZhciBjb3IgPSBuZXcg
QXJyYXkoY29scyk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xzOyBpKyspIHsKKyAgICAg
ICAgICAgIGNvcltpXSA9IG5ldyBBcnJheShjb2xzKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgY29sczsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgY29s
czsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGMgPSAwOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGsgPSAwLCBsID0gc2NvcmVzLmxlbmd0aDsgayA8IGw7IGsrKykgeworICAgICAgICAg
ICAgICAgICAgICBjICs9IHNjb3Jlc1trXVtqXSAqIHNjb3Jlc1trXVtpXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYyAvPSByb3dzIC0gMTsKKyAgICAgICAgICAgICAgICBj
b3JbaV1bal0gPSBjOworICAgICAgICAgICAgICAgIGNvcltqXVtpXSA9IGM7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvcjsKKyAgICB9OworCisgICAgTUxTdGF0
TWF0cml4LnpTY29yZXMgPSBmdW5jdGlvbiB6U2NvcmVzKG1hdHJpeCwgbWVhbnMsIHN0YW5kYXJk
RGV2aWF0aW9ucykgeworICAgICAgICBtZWFucyA9IG1lYW5zIHx8IE1MU3RhdE1hdHJpeC5tZWFu
KG1hdHJpeCk7CisgICAgICAgIGlmICh0eXBlb2YgKHN0YW5kYXJkRGV2aWF0aW9ucykgPT09ICd1
bmRlZmluZWQnKSBzdGFuZGFyZERldmlhdGlvbnMgPSBNTFN0YXRNYXRyaXguc3RhbmRhcmREZXZp
YXRpb24obWF0cml4LCB0cnVlLCBtZWFucyk7CisgICAgICAgIHJldHVybiBNTFN0YXRNYXRyaXgu
c3RhbmRhcmRpemUoTUxTdGF0TWF0cml4LmNlbnRlcihtYXRyaXgsIG1lYW5zLCBmYWxzZSksIHN0
YW5kYXJkRGV2aWF0aW9ucywgdHJ1ZSk7CisgICAgfTsKKworICAgIE1MU3RhdE1hdHJpeC5jZW50
ZXIgPSBmdW5jdGlvbiBjZW50ZXIobWF0cml4LCBtZWFucywgaW5QbGFjZSkgeworICAgICAgICBt
ZWFucyA9IG1lYW5zIHx8IE1MU3RhdE1hdHJpeC5tZWFuKG1hdHJpeCk7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBtYXRyaXgsCisgICAgICAgICAgICBsID0gbWF0cml4Lmxlbmd0aCwKKyAgICAgICAg
ICAgIGksIGosIGpqOworCisgICAgICAgIGlmICghaW5QbGFjZSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gbmV3IEFycmF5KGwpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykg
eworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IG5ldyBBcnJheShtYXRyaXhbaV0ubGVuZ3Ro
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciByb3cgPSByZXN1bHRbaV07CisgICAgICAgICAgICBm
b3IgKGogPSAwLCBqaiA9IHJvdy5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAg
ICAgcm93W2pdID0gbWF0cml4W2ldW2pdIC0gbWVhbnNbal07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgTUxTdGF0TWF0cml4
LnN0YW5kYXJkaXplID0gZnVuY3Rpb24gc3RhbmRhcmRpemUobWF0cml4LCBzdGFuZGFyZERldmlh
dGlvbnMsIGluUGxhY2UpIHsKKyAgICAgICAgaWYgKHR5cGVvZiAoc3RhbmRhcmREZXZpYXRpb25z
KSA9PT0gJ3VuZGVmaW5lZCcpIHN0YW5kYXJkRGV2aWF0aW9ucyA9IE1MU3RhdE1hdHJpeC5zdGFu
ZGFyZERldmlhdGlvbihtYXRyaXgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0cml4LAorICAg
ICAgICAgICAgbCA9IG1hdHJpeC5sZW5ndGgsCisgICAgICAgICAgICBpLCBqLCBqajsKKworICAg
ICAgICBpZiAoIWluUGxhY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBBcnJheShsKTsK
KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRbaV0gPSBuZXcgQXJyYXkobWF0cml4W2ldLmxlbmd0aCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgcmVzdWx0Um93ID0gcmVzdWx0W2ldOworICAgICAgICAgICAgdmFyIHNvdXJjZVJvdyA9
IG1hdHJpeFtpXTsKKyAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gcmVzdWx0Um93Lmxlbmd0
aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhbmRhcmREZXZpYXRpb25z
W2pdICE9PSAwICYmICFpc05hTihzdGFuZGFyZERldmlhdGlvbnNbal0pKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdFJvd1tqXSA9IHNvdXJjZVJvd1tqXSAvIHN0YW5kYXJkRGV2aWF0aW9u
c1tqXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgTUxTdGF0TWF0cml4LndlaWdodGVkVmFy
aWFuY2UgPSBmdW5jdGlvbiB3ZWlnaHRlZFZhcmlhbmNlKG1hdHJpeCwgd2VpZ2h0cykgeworICAg
ICAgICB2YXIgbWVhbnMgPSBNTFN0YXRNYXRyaXgubWVhbihtYXRyaXgpOworICAgICAgICB2YXIg
cm93cyA9IG1hdHJpeC5sZW5ndGg7CisgICAgICAgIGlmIChyb3dzID09PSAwKSByZXR1cm4gW107
CisgICAgICAgIHZhciBjb2xzID0gbWF0cml4WzBdLmxlbmd0aDsKKyAgICAgICAgdmFyIHZhcmkg
PSBuZXcgQXJyYXkoY29scyk7CisKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xzOyBq
KyspIHsKKyAgICAgICAgICAgIHZhciBzdW0gPSAwOworICAgICAgICAgICAgdmFyIGEgPSAwLCBi
ID0gMDsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgeiA9IG1hdHJpeFtpXVtqXSAtIG1lYW5zW2pdOworICAgICAgICAg
ICAgICAgIHZhciB3ID0gd2VpZ2h0c1tpXTsKKworICAgICAgICAgICAgICAgIHN1bSArPSB3ICog
KHogKiB6KTsKKyAgICAgICAgICAgICAgICBiICs9IHc7CisgICAgICAgICAgICAgICAgYSArPSB3
ICogdzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyaVtqXSA9IHN1bSAqIChiIC8g
KGIgKiBiIC0gYSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZhcmk7CisgICAgfTsK
KworICAgIE1MU3RhdE1hdHJpeC53ZWlnaHRlZE1lYW4gPSBmdW5jdGlvbiB3ZWlnaHRlZE1lYW4o
bWF0cml4LCB3ZWlnaHRzLCBkaW1lbnNpb24pIHsKKyAgICAgICAgaWYgKHR5cGVvZiAoZGltZW5z
aW9uKSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGRpbWVuc2lvbiA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHJvd3MgPSBtYXRyaXgubGVuZ3RoOworICAgICAgICBpZiAocm93
cyA9PT0gMCkgcmV0dXJuIFtdOworICAgICAgICB2YXIgY29scyA9IG1hdHJpeFswXS5sZW5ndGgs
CisgICAgICAgICAgICBtZWFucywgaSwgaWksIGosIHcsIHJvdzsKKworICAgICAgICBpZiAoZGlt
ZW5zaW9uID09PSAwKSB7CisgICAgICAgICAgICBtZWFucyA9IG5ldyBBcnJheShjb2xzKTsKKyAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBt
ZWFuc1tpXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
cm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgcm93ID0gbWF0cml4W2ldOworICAgICAgICAg
ICAgICAgIHcgPSB3ZWlnaHRzW2ldOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBj
b2xzOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbWVhbnNbal0gKz0gcm93W2pdICogdzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZGlt
ZW5zaW9uID09PSAxKSB7CisgICAgICAgICAgICBtZWFucyA9IG5ldyBBcnJheShyb3dzKTsKKyAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBt
ZWFuc1tpXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg
cm93czsgaisrKSB7CisgICAgICAgICAgICAgICAgcm93ID0gbWF0cml4W2pdOworICAgICAgICAg
ICAgICAgIHcgPSB3ZWlnaHRzW2pdOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBj
b2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbWVhbnNbal0gKz0gcm93W2ldICogdzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGltZW5zaW9uJyk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgd2VpZ2h0U3VtID0gYXJyYXlTdGF0LnN1bSh3ZWlnaHRzKTsKKyAgICAg
ICAgaWYgKHdlaWdodFN1bSAhPT0gMCkgeworICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBt
ZWFucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgbWVhbnNbaV0gLz0g
d2VpZ2h0U3VtOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtZWFu
czsKKyAgICB9OworCisgICAgTUxTdGF0TWF0cml4LndlaWdodGVkQ292YXJpYW5jZSA9IGZ1bmN0
aW9uIHdlaWdodGVkQ292YXJpYW5jZShtYXRyaXgsIHdlaWdodHMsIG1lYW5zLCBkaW1lbnNpb24p
IHsKKyAgICAgICAgZGltZW5zaW9uID0gZGltZW5zaW9uIHx8IDA7CisgICAgICAgIG1lYW5zID0g
bWVhbnMgfHwgTUxTdGF0TWF0cml4LndlaWdodGVkTWVhbihtYXRyaXgsIHdlaWdodHMsIGRpbWVu
c2lvbik7CisgICAgICAgIHZhciBzMSA9IDAsIHMyID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGlpID0gd2VpZ2h0cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICBzMSAr
PSB3ZWlnaHRzW2ldOworICAgICAgICAgICAgczIgKz0gd2VpZ2h0c1tpXSAqIHdlaWdodHNbaV07
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGZhY3RvciA9IHMxIC8gKHMxICogczEgLSBzMik7Cisg
ICAgICAgIHJldHVybiBNTFN0YXRNYXRyaXgud2VpZ2h0ZWRTY2F0dGVyKG1hdHJpeCwgd2VpZ2h0
cywgbWVhbnMsIGZhY3RvciwgZGltZW5zaW9uKTsKKyAgICB9OworCisgICAgTUxTdGF0TWF0cml4
LndlaWdodGVkU2NhdHRlciA9IGZ1bmN0aW9uIHdlaWdodGVkU2NhdHRlcihtYXRyaXgsIHdlaWdo
dHMsIG1lYW5zLCBmYWN0b3IsIGRpbWVuc2lvbikgeworICAgICAgICBkaW1lbnNpb24gPSBkaW1l
bnNpb24gfHwgMDsKKyAgICAgICAgbWVhbnMgPSBtZWFucyB8fCBNTFN0YXRNYXRyaXgud2VpZ2h0
ZWRNZWFuKG1hdHJpeCwgd2VpZ2h0cywgZGltZW5zaW9uKTsKKyAgICAgICAgaWYgKHR5cGVvZiAo
ZmFjdG9yKSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGZhY3RvciA9IDE7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHJvd3MgPSBtYXRyaXgubGVuZ3RoOworICAgICAgICBpZiAocm93
cyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIFtbXV07CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGNvbHMgPSBtYXRyaXhbMF0ubGVuZ3RoLAorICAgICAgICAgICAgY292LCBpLCBqLCBrLCBz
OworCisgICAgICAgIGlmIChkaW1lbnNpb24gPT09IDApIHsKKyAgICAgICAgICAgIGNvdiA9IG5l
dyBBcnJheShjb2xzKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xzOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBjb3ZbaV0gPSBuZXcgQXJyYXkoY29scyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sczsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChqID0gaTsgaiA8IGNvbHM7IGorKykgeworICAgICAgICAgICAgICAgICAgICBzID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHJvd3M7IGsrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcyArPSB3ZWlnaHRzW2tdICogKG1hdHJpeFtrXVtqXSAtIG1l
YW5zW2pdKSAqIChtYXRyaXhba11baV0gLSBtZWFuc1tpXSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgY292W2ldW2pdID0gcyAqIGZhY3RvcjsKKyAgICAgICAg
ICAgICAgICAgICAgY292W2pdW2ldID0gcyAqIGZhY3RvcjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZGltZW5zaW9uID09PSAxKSB7CisgICAg
ICAgICAgICBjb3YgPSBuZXcgQXJyYXkocm93cyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgcm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgY292W2ldID0gbmV3IEFycmF5KHJvd3Mp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykg
eworICAgICAgICAgICAgICAgIGZvciAoaiA9IGk7IGogPCByb3dzOyBqKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBj
b2xzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gd2VpZ2h0c1trXSAqICht
YXRyaXhbal1ba10gLSBtZWFuc1tqXSkgKiAobWF0cml4W2ldW2tdIC0gbWVhbnNbaV0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvdltpXVtqXSA9IHMgKiBm
YWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGNvdltqXVtpXSA9IHMgKiBmYWN0b3I7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpbWVuc2lvbicpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGNvdjsKKyAgICB9OworfQorCisvLyBtbC1zdGF0IGluZGV4LmpzCitjb25z
dCBNTFN0YXQgPSB7fTsKK3sKKyAgICBNTFN0YXQuYXJyYXkgPSBNTFN0YXRBcnJheTsKKyAgICBN
TFN0YXQubWF0cml4ID0gTUxTdGF0TWF0cml4OworfQorCisKKy8vIG1sLWFycmF5LXV0aWxzIEFy
cmF5VXRpbHMuanMKK2NvbnN0IE1MQXJyYXlVdGlsc0FycmF5VXRpbHMgPSB7fTsKK3sKKyAgICBj
b25zdCBTdGF0ID0gTUxTdGF0LmFycmF5OworICAgIC8qKgorICAgICAqIEZ1bmN0aW9uIHRoYXQg
cmV0dXJucyBhbiBhcnJheSBvZiBwb2ludHMgZ2l2ZW4gMUQgYXJyYXkgYXMgZm9sbG93czoKKyAg
ICAgKgorICAgICAqIFt4MSwgeTEsIC4uICwgeDIsIHkyLCAuLl0KKyAgICAgKgorICAgICAqIEFu
ZCByZWNlaXZlIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyBvZiBlYWNoIHBvaW50LgorICAgICAq
IEBwYXJhbSBhcnJheQorICAgICAqIEBwYXJhbSBkaW1lbnNpb25zCisgICAgICogQHJldHVybnMg
e0FycmF5fSAtIEFycmF5IG9mIHBvaW50cy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjb29yZEFy
cmF5VG9Qb2ludHMoYXJyYXksIGRpbWVuc2lvbnMpIHsKKyAgICAgICAgaWYoYXJyYXkubGVuZ3Ro
ICUgZGltZW5zaW9ucyAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3Io
J0RpbWVuc2lvbnMgbnVtYmVyIG11c3QgYmUgYWNjb3JkYW5jZSB3aXRoIHRoZSBzaXplIG9mIHRo
ZSBhcnJheS4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5n
dGggLyBkaW1lbnNpb25zOworICAgICAgICB2YXIgcG9pbnRzQXJyID0gbmV3IEFycmF5KGxlbmd0
aCk7CisKKyAgICAgICAgdmFyIGsgPSAwOworICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJy
YXkubGVuZ3RoOyBpICs9IGRpbWVuc2lvbnMpIHsKKyAgICAgICAgICAgIHZhciBwb2ludCA9IG5l
dyBBcnJheShkaW1lbnNpb25zKTsKKyAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBkaW1l
bnNpb25zOyArK2opIHsKKyAgICAgICAgICAgICAgICBwb2ludFtqXSA9IGFycmF5W2kgKyBqXTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcG9pbnRzQXJyW2tdID0gcG9pbnQ7CisgICAg
ICAgICAgICBrKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcG9pbnRzQXJyOworICAg
IH0KKworCisgICAgLyoqCisgICAgICogRnVuY3Rpb24gdGhhdCBnaXZlbiBhbiBhcnJheSBhcyBm
b2xsb3dzOgorICAgICAqIFt4MSwgeTEsIC4uICwgeDIsIHkyLCAuLl0KKyAgICAgKgorICAgICAq
IFJldHVybnMgYW4gYXJyYXkgYXMgZm9sbG93czoKKyAgICAgKiBbW3gxLCB4MiwgLi5dLCBbeTEs
IHkyLCAuLl0sIFsgLi4gXV0KKyAgICAgKgorICAgICAqIEFuZCByZWNlaXZlcyB0aGUgbnVtYmVy
IG9mIGRpbWVuc2lvbnMgb2YgZWFjaCBjb29yZGluYXRlLgorICAgICAqIEBwYXJhbSBhcnJheQor
ICAgICAqIEBwYXJhbSBkaW1lbnNpb25zCisgICAgICogQHJldHVybnMge0FycmF5fSAtIE1hdHJp
eCBvZiBjb29yZGluYXRlcworICAgICAqLworICAgIGZ1bmN0aW9uIGNvb3JkQXJyYXlUb0Nvb3Jk
TWF0cml4KGFycmF5LCBkaW1lbnNpb25zKSB7CisgICAgICAgIGlmKGFycmF5Lmxlbmd0aCAlIGRp
bWVuc2lvbnMgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1l
bnNpb25zIG51bWJlciBtdXN0IGJlIGFjY29yZGFuY2Ugd2l0aCB0aGUgc2l6ZSBvZiB0aGUgYXJy
YXkuJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29vcmRpbmF0ZXNBcnJheSA9IG5ldyBB
cnJheShkaW1lbnNpb25zKTsKKyAgICAgICAgdmFyIHBvaW50cyA9IGFycmF5Lmxlbmd0aCAvIGRp
bWVuc2lvbnM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29vcmRpbmF0ZXNBcnJheS5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY29vcmRpbmF0ZXNBcnJheVtpXSA9IG5ldyBBcnJh
eShwb2ludHMpOworICAgICAgICB9CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgYXJyYXkubGVu
Z3RoOyBpICs9IGRpbWVuc2lvbnMpIHsKKyAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBk
aW1lbnNpb25zOyArK2opIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvaW50ID0gTWF0
aC5mbG9vcihpIC8gZGltZW5zaW9ucyk7CisgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNBcnJh
eVtqXVtjdXJyZW50UG9pbnRdID0gYXJyYXlbaSArIGpdOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzQXJyYXk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogRnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIGNvb3JkaW5hdGUgbWF0cml4IGFzIGZv
bGxvd3M6CisgICAgICogW1t4MSwgeDIsIC4uXSwgW3kxLCB5MiwgLi5dLCBbIC4uIF1dCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvb3JkaW5hdGVzIGFzIGZvbGxvd3M6Cisg
ICAgICogW3gxLCB5MSwgLi4gLCB4MiwgeTIsIC4uXQorICAgICAqCisgICAgICogQHBhcmFtIGNv
b3JkTWF0cml4CisgICAgICogQHJldHVybnMge0FycmF5fQorICAgICAqLworICAgIGZ1bmN0aW9u
IGNvb3JkTWF0cml4VG9Db29yZEFycmF5KGNvb3JkTWF0cml4KSB7CisgICAgICAgIHZhciBjb29k
aW5hdGVzQXJyYXkgPSBuZXcgQXJyYXkoY29vcmRNYXRyaXgubGVuZ3RoICogY29vcmRNYXRyaXhb
MF0ubGVuZ3RoKTsKKyAgICAgICAgdmFyIGsgPSAwOworICAgICAgICBmb3IodmFyIGkgPSAwOyBp
IDwgY29vcmRNYXRyaXhbMF0ubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvcih2YXIgaiA9
IDA7IGogPCBjb29yZE1hdHJpeC5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgIGNvb2Rp
bmF0ZXNBcnJheVtrXSA9IGNvb3JkTWF0cml4W2pdW2ldOworICAgICAgICAgICAgICAgICsrazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb29kaW5hdGVzQXJy
YXk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVHJhbnBvc2UgYSBtYXRyaXgsIHRoaXMgbWV0
aG9kIGlzIGZvciBjb29yZE1hdHJpeFRvUG9pbnRzIGFuZAorICAgICAqIHBvaW50c1RvQ29vcmRN
YXRyaXgsIHRoYXQgYmVjYXVzZSBvbmx5IHRyYW5zcG9zaW5nIHRoZSBtYXRyaXgKKyAgICAgKiB5
b3UgY2FuIGNoYW5nZSB5b3VyIHJlcHJlc2VudGF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFt
IG1hdHJpeAorICAgICAqIEByZXR1cm5zIHtBcnJheX0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiB0
cmFuc3Bvc2UobWF0cml4KSB7CisgICAgICAgIHZhciByZXN1bHRNYXRyaXggPSBuZXcgQXJyYXko
bWF0cml4WzBdLmxlbmd0aCk7CisgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCByZXN1bHRNYXRy
aXgubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHJlc3VsdE1hdHJpeFtpXSA9IG5ldyBBcnJh
eShtYXRyaXgubGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBt
YXRyaXgubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBtYXRy
aXhbMF0ubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICByZXN1bHRNYXRyaXhbal1baV0g
PSBtYXRyaXhbaV1bal07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gcmVzdWx0TWF0cml4OworICAgIH0KKworICAgIC8qKgorICAgICAqIEZ1bmN0aW9uIHRoYXQg
dHJhbnNmb3JtIGFuIGFycmF5IG9mIHBvaW50cyBpbnRvIGEgY29vcmRpbmF0ZXMgYXJyYXkKKyAg
ICAgKiBhcyBmb2xsb3dzOgorICAgICAqIFt4MSwgeTEsIC4uICwgeDIsIHkyLCAuLl0KKyAgICAg
KgorICAgICAqIEBwYXJhbSBwb2ludHMKKyAgICAgKiBAcmV0dXJucyB7QXJyYXl9CisgICAgICov
CisgICAgZnVuY3Rpb24gcG9pbnRzVG9Db29yZEFycmF5KHBvaW50cykgeworICAgICAgICB2YXIg
Y29vZGluYXRlc0FycmF5ID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGggKiBwb2ludHNbMF0ubGVu
Z3RoKTsKKyAgICAgICAgdmFyIGsgPSAwOworICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcG9p
bnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgcG9pbnRz
WzBdLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgY29vZGluYXRlc0FycmF5W2tdID0g
cG9pbnRzW2ldW2pdOworICAgICAgICAgICAgICAgICsrazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBjb29kaW5hdGVzQXJyYXk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogQXBwbHkgdGhlIGRvdCBwcm9kdWN0IGJldHdlZW4gdGhlIHNtYWxsZXIgdmVjdG9y
IGFuZCBhIHN1YnNldHMgb2YgdGhlCisgICAgICogbGFyZ2VzdCBvbmUuCisgICAgICoKKyAgICAg
KiBAcGFyYW0gZmlyc3RWZWN0b3IKKyAgICAgKiBAcGFyYW0gc2Vjb25kVmVjdG9yCisgICAgICog
QHJldHVybnMge0FycmF5fSBlYWNoIGRvdCBwcm9kdWN0IG9mIHNpemUgb2YgdGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgIGxhcmdlciBhbmQgdGhlIHNt
YWxsZXN0IG9uZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhcHBseURvdFByb2R1Y3QoZmlyc3RW
ZWN0b3IsIHNlY29uZFZlY3RvcikgeworICAgICAgICB2YXIgbGFyZ2VzdFZlY3Rvciwgc21hbGxl
c3RWZWN0b3I7CisgICAgICAgIGlmKGZpcnN0VmVjdG9yLmxlbmd0aCA8PSBzZWNvbmRWZWN0b3Iu
bGVuZ3RoKSB7CisgICAgICAgICAgICBzbWFsbGVzdFZlY3RvciA9IGZpcnN0VmVjdG9yOworICAg
ICAgICAgICAgbGFyZ2VzdFZlY3RvciA9IHNlY29uZFZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHNtYWxsZXN0VmVjdG9yID0gc2Vjb25kVmVjdG9yOworICAgICAgICAgICAg
bGFyZ2VzdFZlY3RvciA9IGZpcnN0VmVjdG9yOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRp
ZmZlcmVuY2UgPSBsYXJnZXN0VmVjdG9yLmxlbmd0aCAtIHNtYWxsZXN0VmVjdG9yLmxlbmd0aCAr
IDE7CisgICAgICAgIHZhciBkb3RQcm9kdWN0QXBwbGllZCA9IG5ldyBBcnJheShkaWZmZXJlbmNl
KTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmZlcmVuY2U7ICsraSkgeworICAg
ICAgICAgICAgdmFyIHN1bSA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNt
YWxsZXN0VmVjdG9yLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgc3VtICs9IHNtYWxs
ZXN0VmVjdG9yW2pdICogbGFyZ2VzdFZlY3RvcltpICsgal07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkb3RQcm9kdWN0QXBwbGllZFtpXSA9IHN1bTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBkb3RQcm9kdWN0QXBwbGllZDsKKyAgICB9CisgICAgLyoqCisgICAgICogVG8gc2Nh
bGUgdGhlIGlucHV0IGFycmF5IGJldHdlZW4gdGhlIHNwZWNpZmllZCBtaW4gYW5kIG1heCB2YWx1
ZXMuIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGlucGxhY2UKKyAgICAgKiBpZiB0aGUgb3B0
aW9ucy5pbnBsYWNlIGlzIHNwZWNpZmllZC4gSWYgb25seSBvbmUgb2YgdGhlIG1pbiBvciBtYXgg
cGFyYW1ldGVycyBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIHNjYWxpbmcKKyAgICAgKiB3aWxsIG11
bHRpcGx5IHRoZSBpbnB1dCBhcnJheSBieSBtaW4vbWluKGlucHV0KSBvciBtYXgvbWF4KGlucHV0
KQorICAgICAqIEBwYXJhbSBpbnB1dAorICAgICAqIEBwYXJhbSBvcHRpb25zCisgICAgICogQHJl
dHVybnMgeyp9CisgICAgICovCisgICAgZnVuY3Rpb24gc2NhbGUoaW5wdXQsIG9wdGlvbnMpewor
ICAgICAgICB2YXIgeTsKKyAgICAgICAgaWYob3B0aW9ucy5pblBsYWNlKXsKKyAgICAgICAgICAg
IHkgPSBpbnB1dDsKKyAgICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgeSA9IG5l
dyBBcnJheShpbnB1dC5sZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IG1heCA9IG9w
dGlvbnMubWF4OworICAgICAgICBjb25zdCBtaW4gPSBvcHRpb25zLm1pbjsKKyAgICAgICAgaWYo
dHlwZW9mIG1heCA9PT0gIm51bWJlciIpeworICAgICAgICAgICAgaWYodHlwZW9mIG1pbiA9PT0g
Im51bWJlciIpeworICAgICAgICAgICAgICAgIHZhciBtaW5NYXggPSBTdGF0Lm1pbk1heChpbnB1
dCk7CisgICAgICAgICAgICAgICAgdmFyIGZhY3RvciA9IChtYXggLSBtaW4pLyhtaW5NYXgubWF4
LW1pbk1heC5taW4pOworICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8IHkubGVuZ3RoO2kr
Kyl7CisgICAgICAgICAgICAgICAgICAgIHlbaV09KGlucHV0W2ldLW1pbk1heC5taW4pKmZhY3Rv
cittaW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZXsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IFN0YXQubWF4KGlucHV0KTsKKyAg
ICAgICAgICAgICAgICB2YXIgZmFjdG9yID0gbWF4L2N1cnJlbnRNaW47CisgICAgICAgICAgICAg
ICAgZm9yKHZhciBpPTA7aTwgeS5sZW5ndGg7aSsrKXsKKyAgICAgICAgICAgICAgICAgICAgeVtp
XSA9IGlucHV0W2ldKmZhY3RvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICAgIGlmKHR5cGVvZiBtaW4gPT09ICJu
dW1iZXIiKXsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IFN0YXQubWluKGlucHV0
KTsKKyAgICAgICAgICAgICAgICB2YXIgZmFjdG9yID0gbWluL2N1cnJlbnRNaW47CisgICAgICAg
ICAgICAgICAgZm9yKHZhciBpPTA7aTwgeS5sZW5ndGg7aSsrKXsKKyAgICAgICAgICAgICAgICAg
ICAgeVtpXSA9IGlucHV0W2ldKmZhY3RvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHk7CisgICAgfQorCisgICAgTUxBcnJheVV0
aWxzQXJyYXlVdGlscy5jb29yZEFycmF5VG9Qb2ludHMgPSBjb29yZEFycmF5VG9Qb2ludHM7Cisg
ICAgTUxBcnJheVV0aWxzQXJyYXlVdGlscy5jb29yZEFycmF5VG9Db29yZE1hdHJpeCA9IGNvb3Jk
QXJyYXlUb0Nvb3JkTWF0cml4OworICAgIE1MQXJyYXlVdGlsc0FycmF5VXRpbHMuY29vcmRNYXRy
aXhUb0Nvb3JkQXJyYXkgPSBjb29yZE1hdHJpeFRvQ29vcmRBcnJheTsKKyAgICBNTEFycmF5VXRp
bHNBcnJheVV0aWxzLmNvb3JkTWF0cml4VG9Qb2ludHMgPSB0cmFuc3Bvc2U7CisgICAgTUxBcnJh
eVV0aWxzQXJyYXlVdGlscy5wb2ludHNUb0Nvb3JkQXJyYXkgPSBwb2ludHNUb0Nvb3JkQXJyYXk7
CisgICAgTUxBcnJheVV0aWxzQXJyYXlVdGlscy5wb2ludHNUb0Nvb3JkTWF0cml4ID0gdHJhbnNw
b3NlOworICAgIE1MQXJyYXlVdGlsc0FycmF5VXRpbHMuYXBwbHlEb3RQcm9kdWN0ID0gYXBwbHlE
b3RQcm9kdWN0OworICAgIE1MQXJyYXlVdGlsc0FycmF5VXRpbHMuc2NhbGUgPSBzY2FsZTsKK30K
KworCisvLyBtbC1hcnJheS11dGlscyBnZXRFcXVhbGx5U3BhY2VkLmpzCitjb25zdCBNTEFycmF5
VXRpbHNHZXRFcXVhbGx5U3BhY2VkID0ge307Cit7CisgICAgLyoqCisgICAgICoKKyAgICAgKiBG
dW5jdGlvbiB0aGF0IHJldHVybnMgYSBOdW1iZXIgYXJyYXkgb2YgZXF1YWxseSBzcGFjZWQgbnVt
YmVyT2ZQb2ludHMKKyAgICAgKiBjb250YWluaW5nIGEgcmVwcmVzZW50YXRpb24gb2YgaW50ZW5z
aXRpZXMgb2YgdGhlIHNwZWN0cmEgYXJndW1lbnRzIHgKKyAgICAgKiBhbmQgeS4KKyAgICAgKgor
ICAgICAqIFRoZSBvcHRpb25zIHBhcmFtZXRlciBjb250YWlucyBhbiBvYmplY3QgaW4gdGhlIGZv
bGxvd2luZyBmb3JtOgorICAgICAqIGZyb206IHN0YXJ0aW5nIHBvaW50CisgICAgICogdG86IGxh
c3QgcG9pbnQKKyAgICAgKiBudW1iZXJPZlBvaW50czogbnVtYmVyIG9mIHBvaW50cyBiZXR3ZWVu
IGZyb20gYW5kIHRvCisgICAgICogdmFyaWFudDogInNsb3QiIG9yICJzbW9vdGgiIC0gc21vb3Ro
IGlzIHRoZSBkZWZhdWx0IG9wdGlvbgorICAgICAqCisgICAgICogVGhlIHNsb3QgdmFyaWFudCBj
b25zaXN0IHRoYXQgZWFjaCBwb2ludCBpbiB0aGUgbmV3IGFycmF5IGlzIGNhbGN1bGF0ZWQKKyAg
ICAgKiBhdmVyYWdpbmcgdGhlIGV4aXN0aW5nIHBvaW50cyBiZXR3ZWVuIHRoZSBzbG90IHRoYXQg
YmVsb25ncyB0byB0aGUgY3VycmVudAorICAgICAqIHZhbHVlLiBUaGUgc21vb3RoIHZhcmlhbnQg
aXMgdGhlIHNhbWUgYnV0IHRha2VzIHRoZSBpbnRlZ3JhbCBvZiB0aGUgcmFuZ2UKKyAgICAgKiBv
ZiB0aGUgc2xvdCBhbmQgZGl2aWRlIGJ5IHRoZSBzdGVwIHNpemUgYmV0d2VlbiB0d28gcG9pbnRz
IGluIHRoZSBuZXcgYXJyYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0geCAtIHNvcnRlZCBpbmNy
ZWFzaW5nIHggdmFsdWVzCisgICAgICogQHBhcmFtIHkKKyAgICAgKiBAcGFyYW0gb3B0aW9ucwor
ICAgICAqIEByZXR1cm5zIHtBcnJheX0gbmV3IGFycmF5IHdpdGggdGhlIGVxdWFsbHkgc3BhY2Vk
IGRhdGEuCisgICAgICoKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRFcXVhbGx5U3BhY2VkRGF0
YSh4LCB5LCBvcHRpb25zKSB7CisgICAgICAgIGlmICh4Lmxlbmd0aD4xICYmIHhbMF0+eFsxXSkg
eworICAgICAgICAgICAgeD14LnNsaWNlKCkucmV2ZXJzZSgpOworICAgICAgICAgICAgeT15LnNs
aWNlKCkucmV2ZXJzZSgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHhMZW5ndGggPSB4Lmxl
bmd0aDsKKyAgICAgICAgaWYoeExlbmd0aCAhPT0geS5sZW5ndGgpCisgICAgICAgICAgICB0aHJv
dyBuZXcgUmFuZ2VFcnJvcigidGhlIHggYW5kIHkgdmVjdG9yIGRvZXNuJ3QgaGF2ZSB0aGUgc2Ft
ZSBzaXplLiIpOworCisgICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIG9wdGlvbnMg
PSB7fTsKKworICAgICAgICB2YXIgZnJvbSA9IG9wdGlvbnMuZnJvbSA9PT0gdW5kZWZpbmVkID8g
eFswXSA6IG9wdGlvbnMuZnJvbQorICAgICAgICBpZiAoaXNOYU4oZnJvbSkgfHwgIWlzRmluaXRl
KGZyb20pKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ0Zyb20nIHZhbHVl
IG11c3QgYmUgYSBudW1iZXIiKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgdG8gPSBvcHRpb25z
LnRvID09PSB1bmRlZmluZWQgPyB4W3gubGVuZ3RoIC0gMV0gOiBvcHRpb25zLnRvOworICAgICAg
ICBpZiAoaXNOYU4odG8pIHx8ICFpc0Zpbml0ZSh0bykpIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBSYW5nZUVycm9yKCInVG8nIHZhbHVlIG11c3QgYmUgYSBudW1iZXIiKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciByZXZlcnNlID0gZnJvbSA+IHRvOworICAgICAgICBpZihyZXZlcnNlKSB7
CisgICAgICAgICAgICB2YXIgdGVtcCA9IGZyb207CisgICAgICAgICAgICBmcm9tID0gdG87Cisg
ICAgICAgICAgICB0byA9IHRlbXA7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbnVtYmVyT2ZQ
b2ludHMgPSBvcHRpb25zLm51bWJlck9mUG9pbnRzID09PSB1bmRlZmluZWQgPyAxMDAgOiBvcHRp
b25zLm51bWJlck9mUG9pbnRzOworICAgICAgICBpZiAoaXNOYU4obnVtYmVyT2ZQb2ludHMpIHx8
ICFpc0Zpbml0ZShudW1iZXJPZlBvaW50cykpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSYW5n
ZUVycm9yKCInTnVtYmVyIG9mIHBvaW50cycgdmFsdWUgbXVzdCBiZSBhIG51bWJlciIpOworICAg
ICAgICB9CisgICAgICAgIGlmKG51bWJlck9mUG9pbnRzIDwgMSkKKyAgICAgICAgICAgIHRocm93
IG5ldyBSYW5nZUVycm9yKCJ0aGUgbnVtYmVyIG9mIHBvaW50IG11c3QgYmUgaGlnaGVyIHRoYW4g
MSIpOworCisgICAgICAgIHZhciBhbGdvcml0aG0gPSBvcHRpb25zLnZhcmlhbnQgPT09ICJzbG90
IiA/ICJzbG90IiA6ICJzbW9vdGgiOyAvLyBkZWZhdWx0IHZhbHVlOiBzbW9vdGgKKworICAgICAg
ICB2YXIgb3V0cHV0ID0gYWxnb3JpdGhtID09PSAic2xvdCIgPyBnZXRFcXVhbGx5U3BhY2VkU2xv
dCh4LCB5LCBmcm9tLCB0bywgbnVtYmVyT2ZQb2ludHMpIDogZ2V0RXF1YWxseVNwYWNlZFNtb290
aCh4LCB5LCBmcm9tLCB0bywgbnVtYmVyT2ZQb2ludHMpOworCisgICAgICAgIHJldHVybiByZXZl
cnNlID8gb3V0cHV0LnJldmVyc2UoKSA6IG91dHB1dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBmdW5jdGlvbiB0aGF0IHJldHJpZXZlcyB0aGUgZ2V0RXF1YWxseVNwYWNlZERhdGEgd2l0aCB0
aGUgdmFyaWFudCAic21vb3RoIgorICAgICAqCisgICAgICogQHBhcmFtIHgKKyAgICAgKiBAcGFy
YW0geQorICAgICAqIEBwYXJhbSBmcm9tIC0gSW5pdGlhbCBwb2ludAorICAgICAqIEBwYXJhbSB0
byAtIEZpbmFsIHBvaW50CisgICAgICogQHBhcmFtIG51bWJlck9mUG9pbnRzCisgICAgICogQHJl
dHVybnMge0FycmF5fSAtIEFycmF5IG9mIHkncyBlcXVhbGx5IHNwYWNlZCB3aXRoIHRoZSB2YXJp
YW50ICJzbW9vdGgiCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0RXF1YWxseVNwYWNlZFNtb290
aCh4LCB5LCBmcm9tLCB0bywgbnVtYmVyT2ZQb2ludHMpIHsKKyAgICAgICAgdmFyIHhMZW5ndGgg
PSB4Lmxlbmd0aDsKKworICAgICAgICB2YXIgc3RlcCA9ICh0byAtIGZyb20pIC8gKG51bWJlck9m
UG9pbnRzIC0gMSk7CisgICAgICAgIHZhciBoYWxmU3RlcCA9IHN0ZXAgLyAyOworCisgICAgICAg
IHZhciBzdGFydCA9IGZyb20gLSBoYWxmU3RlcDsKKyAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBB
cnJheShudW1iZXJPZlBvaW50cyk7CisKKyAgICAgICAgdmFyIGluaXRpYWxPcmlnaW5hbFN0ZXAg
PSB4WzFdIC0geFswXTsKKyAgICAgICAgdmFyIGxhc3RPcmlnaW5hbFN0ZXAgPSB4W3gubGVuZ3Ro
IC0gMV0gLSB4W3gubGVuZ3RoIC0gMl07CisKKyAgICAgICAgLy8gSW5pdCBtYWluIHZhcmlhYmxl
cworICAgICAgICB2YXIgbWluID0gc3RhcnQ7CisgICAgICAgIHZhciBtYXggPSBzdGFydCArIHN0
ZXA7CisKKyAgICAgICAgdmFyIHByZXZpb3VzWCA9IE51bWJlci5NSU5fVkFMVUU7CisgICAgICAg
IHZhciBwcmV2aW91c1kgPSAwOworICAgICAgICB2YXIgbmV4dFggPSB4WzBdIC0gaW5pdGlhbE9y
aWdpbmFsU3RlcDsKKyAgICAgICAgdmFyIG5leHRZID0gMDsKKworICAgICAgICB2YXIgY3VycmVu
dFZhbHVlID0gMDsKKyAgICAgICAgdmFyIHNsb3BlID0gMDsKKyAgICAgICAgdmFyIGludGVyY2Vw
dCA9IDA7CisgICAgICAgIHZhciBzdW1BdE1pbiA9IDA7CisgICAgICAgIHZhciBzdW1BdE1heCA9
IDA7CisKKyAgICAgICAgdmFyIGkgPSAwOyAvLyBpbmRleCBvZiBpbnB1dAorICAgICAgICB2YXIg
aiA9IDA7IC8vIGluZGV4IG9mIG91dHB1dAorCisgICAgICAgIGZ1bmN0aW9uIGdldFNsb3BlKHgw
LCB5MCwgeDEsIHkxKSB7CisgICAgICAgICAgICByZXR1cm4gKHkxIC0geTApIC8gKHgxIC0geDAp
OworICAgICAgICB9CisKKyAgICAgICAgbWFpbjogd2hpbGUodHJ1ZSkgeworICAgICAgICAgICAg
d2hpbGUgKG5leHRYIC0gbWF4ID49IDApIHsKKyAgICAgICAgICAgICAgICAvLyBubyBvdmVybGFw
IHdpdGggb3JpZ2luYWwgcG9pbnQsIGp1c3QgY29uc3VtZSBjdXJyZW50IHZhbHVlCisgICAgICAg
ICAgICAgICAgdmFyIGFkZCA9IGludGVncmFsKDAsIG1heCAtIHByZXZpb3VzWCwgc2xvcGUsIHBy
ZXZpb3VzWSk7CisgICAgICAgICAgICAgICAgc3VtQXRNYXggPSBjdXJyZW50VmFsdWUgKyBhZGQ7
CisKKyAgICAgICAgICAgICAgICBvdXRwdXRbal0gPSAoc3VtQXRNYXggLSBzdW1BdE1pbikgLyBz
dGVwOworICAgICAgICAgICAgICAgIGorKzsKKworICAgICAgICAgICAgICAgIGlmIChqID09PSBu
dW1iZXJPZlBvaW50cykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgbWFpbjsKKworICAgICAg
ICAgICAgICAgIG1pbiA9IG1heDsKKyAgICAgICAgICAgICAgICBtYXggKz0gc3RlcDsKKyAgICAg
ICAgICAgICAgICBzdW1BdE1pbiA9IHN1bUF0TWF4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZihwcmV2aW91c1ggPD0gbWluICYmIG1pbiA8PSBuZXh0WCkgeworICAgICAgICAgICAg
ICAgIGFkZCA9IGludGVncmFsKDAsIG1pbiAtIHByZXZpb3VzWCwgc2xvcGUsIHByZXZpb3VzWSk7
CisgICAgICAgICAgICAgICAgc3VtQXRNaW4gPSBjdXJyZW50VmFsdWUgKyBhZGQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSArPSBpbnRlZ3JhbChwcmV2aW91c1gs
IG5leHRYLCBzbG9wZSwgaW50ZXJjZXB0KTsKKworICAgICAgICAgICAgcHJldmlvdXNYID0gbmV4
dFg7CisgICAgICAgICAgICBwcmV2aW91c1kgPSBuZXh0WTsKKworICAgICAgICAgICAgaWYgKGkg
PCB4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbmV4dFggPSB4W2ldOworICAgICAgICAgICAg
ICAgIG5leHRZID0geVtpXTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGkgPT09IHhMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBuZXh0WCArPSBsYXN0T3Jp
Z2luYWxTdGVwOworICAgICAgICAgICAgICAgIG5leHRZID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIHVwZGF0aW5nIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIHNsb3BlID0gZ2V0
U2xvcGUocHJldmlvdXNYLCBwcmV2aW91c1ksIG5leHRYLCBuZXh0WSk7CisgICAgICAgICAgICBp
bnRlcmNlcHQgPSAtc2xvcGUqcHJldmlvdXNYICsgcHJldmlvdXNZOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBmdW5jdGlvbiB0
aGF0IHJldHJpZXZlcyB0aGUgZ2V0RXF1YWxseVNwYWNlZERhdGEgd2l0aCB0aGUgdmFyaWFudCAi
c2xvdCIKKyAgICAgKgorICAgICAqIEBwYXJhbSB4CisgICAgICogQHBhcmFtIHkKKyAgICAgKiBA
cGFyYW0gZnJvbSAtIEluaXRpYWwgcG9pbnQKKyAgICAgKiBAcGFyYW0gdG8gLSBGaW5hbCBwb2lu
dAorICAgICAqIEBwYXJhbSBudW1iZXJPZlBvaW50cworICAgICAqIEByZXR1cm5zIHtBcnJheX0g
LSBBcnJheSBvZiB5J3MgZXF1YWxseSBzcGFjZWQgd2l0aCB0aGUgdmFyaWFudCAic2xvdCIKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBnZXRFcXVhbGx5U3BhY2VkU2xvdCh4LCB5LCBmcm9tLCB0bywg
bnVtYmVyT2ZQb2ludHMpIHsKKyAgICAgICAgdmFyIHhMZW5ndGggPSB4Lmxlbmd0aDsKKworICAg
ICAgICB2YXIgc3RlcCA9ICh0byAtIGZyb20pIC8gKG51bWJlck9mUG9pbnRzIC0gMSk7CisgICAg
ICAgIHZhciBoYWxmU3RlcCA9IHN0ZXAgLyAyOworICAgICAgICB2YXIgbGFzdFN0ZXAgPSB4W3gu
bGVuZ3RoIC0gMV0gLSB4W3gubGVuZ3RoIC0gMl07CisKKyAgICAgICAgdmFyIHN0YXJ0ID0gZnJv
bSAtIGhhbGZTdGVwOworICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IEFycmF5KG51bWJlck9mUG9p
bnRzKTsKKworICAgICAgICAvLyBJbml0IG1haW4gdmFyaWFibGVzCisgICAgICAgIHZhciBtaW4g
PSBzdGFydDsKKyAgICAgICAgdmFyIG1heCA9IHN0YXJ0ICsgc3RlcDsKKworICAgICAgICB2YXIg
cHJldmlvdXNYID0gLU51bWJlci5NQVhfVkFMVUU7CisgICAgICAgIHZhciBwcmV2aW91c1kgPSAw
OworICAgICAgICB2YXIgbmV4dFggPSB4WzBdOworICAgICAgICB2YXIgbmV4dFkgPSB5WzBdOwor
ICAgICAgICB2YXIgZnJvbnRPdXRzaWRlU3BlY3RyYSA9IDA7CisgICAgICAgIHZhciBiYWNrT3V0
c2lkZVNwZWN0cmEgPSB0cnVlOworCisgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSAwOworCisg
ICAgICAgIC8vIGZvciBzbG90IGFsZ29yaXRobQorICAgICAgICB2YXIgY3VycmVudFBvaW50cyA9
IDA7CisKKyAgICAgICAgdmFyIGkgPSAxOyAvLyBpbmRleCBvZiBpbnB1dAorICAgICAgICB2YXIg
aiA9IDA7IC8vIGluZGV4IG9mIG91dHB1dAorCisgICAgICAgIG1haW46IHdoaWxlKHRydWUpIHsK
KyAgICAgICAgICAgIGlmIChwcmV2aW91c1g+PW5leHRYKSB0aHJvdyAobmV3IEVycm9yKCd4IG11
c3QgYmUgYW4gaW5jcmVhc2luZyBzZXJpZScpKTsKKyAgICAgICAgICAgIHdoaWxlIChwcmV2aW91
c1ggLSBtYXggPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gbm8gb3ZlcmxhcCB3aXRoIG9yaWdp
bmFsIHBvaW50LCBqdXN0IGNvbnN1bWUgY3VycmVudCB2YWx1ZQorICAgICAgICAgICAgICAgIGlm
KGJhY2tPdXRzaWRlU3BlY3RyYSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnRz
Kys7CisgICAgICAgICAgICAgICAgICAgIGJhY2tPdXRzaWRlU3BlY3RyYSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1dFtqXSA9IGN1cnJlbnRQb2lu
dHMgPD0gMCA/IDAgOiBjdXJyZW50VmFsdWUgLyBjdXJyZW50UG9pbnRzOworICAgICAgICAgICAg
ICAgIGorKzsKKworICAgICAgICAgICAgICAgIGlmIChqID09PSBudW1iZXJPZlBvaW50cykKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsgbWFpbjsKKworICAgICAgICAgICAgICAgIG1pbiA9IG1h
eDsKKyAgICAgICAgICAgICAgICBtYXggKz0gc3RlcDsKKyAgICAgICAgICAgICAgICBjdXJyZW50
VmFsdWUgPSAwOworICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludHMgPSAwOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZihwcmV2aW91c1ggPiBtaW4pIHsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50VmFsdWUgKz0gcHJldmlvdXNZOworICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lu
dHMrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYocHJldmlvdXNYID09PSAtTnVt
YmVyLk1BWF9WQUxVRSB8fCBmcm9udE91dHNpZGVTcGVjdHJhID4gMSkKKyAgICAgICAgICAgICAg
ICBjdXJyZW50UG9pbnRzLS07CisKKyAgICAgICAgICAgIHByZXZpb3VzWCA9IG5leHRYOworICAg
ICAgICAgICAgcHJldmlvdXNZID0gbmV4dFk7CisKKyAgICAgICAgICAgIGlmIChpIDwgeExlbmd0
aCkgeworICAgICAgICAgICAgICAgIG5leHRYID0geFtpXTsKKyAgICAgICAgICAgICAgICBuZXh0
WSA9IHlbaV07CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBuZXh0WCArPSBsYXN0U3RlcDsKKyAgICAgICAgICAgICAgICBuZXh0WSA9
IDA7CisgICAgICAgICAgICAgICAgZnJvbnRPdXRzaWRlU3BlY3RyYSsrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICB9CisgICAgLyoqCisg
ICAgICogRnVuY3Rpb24gdGhhdCBjYWxjdWxhdGVzIHRoZSBpbnRlZ3JhbCBvZiB0aGUgbGluZSBi
ZXR3ZWVuIHR3bworICAgICAqIHgtY29vcmRpbmF0ZXMsIGdpdmVuIHRoZSBzbG9wZSBhbmQgaW50
ZXJjZXB0IG9mIHRoZSBsaW5lLgorICAgICAqCisgICAgICogQHBhcmFtIHgwCisgICAgICogQHBh
cmFtIHgxCisgICAgICogQHBhcmFtIHNsb3BlCisgICAgICogQHBhcmFtIGludGVyY2VwdAorICAg
ICAqIEByZXR1cm5zIHtudW1iZXJ9IGludGVncmFsIHZhbHVlLgorICAgICAqLworICAgIGZ1bmN0
aW9uIGludGVncmFsKHgwLCB4MSwgc2xvcGUsIGludGVyY2VwdCkgeworICAgICAgICByZXR1cm4g
KDAuNSAqIHNsb3BlICogeDEgKiB4MSArIGludGVyY2VwdCAqIHgxKSAtICgwLjUgKiBzbG9wZSAq
IHgwICogeDAgKyBpbnRlcmNlcHQgKiB4MCk7CisgICAgfQorCisgICAgTUxBcnJheVV0aWxzR2V0
RXF1YWxseVNwYWNlZC5nZXRFcXVhbGx5U3BhY2VkRGF0YSA9IGdldEVxdWFsbHlTcGFjZWREYXRh
OworICAgIE1MQXJyYXlVdGlsc0dldEVxdWFsbHlTcGFjZWQuaW50ZWdyYWwgPSBpbnRlZ3JhbDsK
K30KKworCisvLyBtbC1hcnJheS11dGlscyBzbnYuanMKK2NvbnN0IE1MQXJyYXlVdGlsc1NOViA9
IHt9OworeworICAgIE1MQXJyYXlVdGlsc1NOVi5TTlYgPSBTTlY7CisgICAgbGV0IFN0YXQgPSBN
TFN0YXQuYXJyYXk7CisKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB0aGF0IGFwcGxpZXMgdGhl
IHN0YW5kYXJkIG5vcm1hbCB2YXJpYXRlIChTTlYpIHRvIGFuIGFycmF5IG9mIHZhbHVlcy4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSBkYXRhIC0gQXJyYXkgb2YgdmFsdWVzLgorICAgICAqIEByZXR1
cm5zIHtBcnJheX0gLSBhcHBsaWVkIHRoZSBTTlYuCisgICAgICovCisgICAgZnVuY3Rpb24gU05W
KGRhdGEpIHsKKyAgICAgICAgdmFyIG1lYW4gPSBTdGF0Lm1lYW4oZGF0YSk7CisgICAgICAgIHZh
ciBzdGQgPSBTdGF0LnN0YW5kYXJkRGV2aWF0aW9uKGRhdGEpOworICAgICAgICB2YXIgcmVzdWx0
ID0gZGF0YS5zbGljZSgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IChyZXN1bHRbaV0gLSBtZWFuKSAvIHN0
ZDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworLy8gbWwt
YXJyYXktdXRpbHMgaW5kZXguanMKK2NvbnN0IE1MQXJyYXlVdGlscyA9IHt9OworeworICAgIE1M
QXJyYXlVdGlscy5nZXRFcXVhbGx5U3BhY2VkRGF0YSA9IE1MQXJyYXlVdGlsc0dldEVxdWFsbHlT
cGFjZWQuZ2V0RXF1YWxseVNwYWNlZERhdGE7CisgICAgTUxBcnJheVV0aWxzLlNOViA9IE1MQXJy
YXlVdGlsc1NOVi5TTlY7Cit9CisKKworCisvLyBkbyB0aGlzIGVhcmx5IHNvIHRoaW5ncyBjYW4g
dXNlIGl0LiBUaGlzIGlzIGZyb20gbWwtbWF0cml4IHNyYy9tYXRyaXguanMKK2NvbnN0IE1MTWF0
cml4TWF0cml4ID0ge307CisKKy8vIG1sLW1hdHJpeCBzcmMvdXRpbC5qcworY29uc3QgTUxNYXRy
aXhVdGlsID0ge307Cit7CisgICAgbGV0IGV4cG9ydHMgPSBNTE1hdHJpeFV0aWw7CisgICAgbGV0
IE1hdHJpeCA9IE1MTWF0cml4TWF0cml4OworCisgICAgLyoqCisgICAgICogQHByaXZhdGUKKyAg
ICAgKiBDaGVjayB0aGF0IGEgcm93IGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzCisgICAgICog
QHBhcmFtIHtNYXRyaXh9IG1hdHJpeAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAorICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gW291dGVyXQorICAgICAqLworICAgIGV4cG9ydHMuY2hlY2tS
b3dJbmRleCA9IGZ1bmN0aW9uIGNoZWNrUm93SW5kZXgobWF0cml4LCBpbmRleCwgb3V0ZXIpIHsK
KyAgICAgICAgdmFyIG1heCA9IG91dGVyID8gbWF0cml4LnJvd3MgOiBtYXRyaXgucm93cyAtIDE7
CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtYXgpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBSYW5nZUVycm9yKCdSb3cgaW5kZXggb3V0IG9mIHJhbmdlJyk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoqCisgICAgICogQHByaXZhdGUKKyAgICAgKiBDaGVjayB0aGF0IGEg
Y29sdW1uIGluZGV4IGlzIG5vdCBvdXQgb2YgYm91bmRzCisgICAgICogQHBhcmFtIHtNYXRyaXh9
IG1hdHJpeAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAorICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gW291dGVyXQorICAgICAqLworICAgIGV4cG9ydHMuY2hlY2tDb2x1bW5JbmRleCA9IGZ1
bmN0aW9uIGNoZWNrQ29sdW1uSW5kZXgobWF0cml4LCBpbmRleCwgb3V0ZXIpIHsKKyAgICAgICAg
dmFyIG1heCA9IG91dGVyID8gbWF0cml4LmNvbHVtbnMgOiBtYXRyaXguY29sdW1ucyAtIDE7Cisg
ICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBtYXgpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBSYW5nZUVycm9yKCdDb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlJyk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoqCisgICAgICogQHByaXZhdGUKKyAgICAgKiBDaGVjayB0aGF0IHRo
ZSBwcm92aWRlZCB2ZWN0b3IgaXMgYW4gYXJyYXkgd2l0aCB0aGUgcmlnaHQgbGVuZ3RoCisgICAg
ICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeAorICAgICAqIEBwYXJhbSB7QXJyYXl8TWF0cml4fSB2
ZWN0b3IKKyAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgKiBAdGhyb3dzIHtSYW5nZUVycm9y
fQorICAgICAqLworICAgIGV4cG9ydHMuY2hlY2tSb3dWZWN0b3IgPSBmdW5jdGlvbiBjaGVja1Jv
d1ZlY3RvcihtYXRyaXgsIHZlY3RvcikgeworICAgICAgICBpZiAodmVjdG9yLnRvMURBcnJheSkg
eworICAgICAgICAgICAgdmVjdG9yID0gdmVjdG9yLnRvMURBcnJheSgpOworICAgICAgICB9Cisg
ICAgICAgIGlmICh2ZWN0b3IubGVuZ3RoICE9PSBtYXRyaXguY29sdW1ucykgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMg
dGhlIG51bWJlciBvZiBjb2x1bW5zJyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlY3Rv
cjsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQHByaXZhdGUKKyAgICAgKiBDaGVjayB0aGF0
IHRoZSBwcm92aWRlZCB2ZWN0b3IgaXMgYW4gYXJyYXkgd2l0aCB0aGUgcmlnaHQgbGVuZ3RoCisg
ICAgICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeAorICAgICAqIEBwYXJhbSB7QXJyYXl8TWF0cml4
fSB2ZWN0b3IKKyAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgKiBAdGhyb3dzIHtSYW5nZUVy
cm9yfQorICAgICAqLworICAgIGV4cG9ydHMuY2hlY2tDb2x1bW5WZWN0b3IgPSBmdW5jdGlvbiBj
aGVja0NvbHVtblZlY3RvcihtYXRyaXgsIHZlY3RvcikgeworICAgICAgICBpZiAodmVjdG9yLnRv
MURBcnJheSkgeworICAgICAgICAgICAgdmVjdG9yID0gdmVjdG9yLnRvMURBcnJheSgpOworICAg
ICAgICB9CisgICAgICAgIGlmICh2ZWN0b3IubGVuZ3RoICE9PSBtYXRyaXgucm93cykgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNh
bWUgYXMgdGhlIG51bWJlciBvZiByb3dzJyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZl
Y3RvcjsKKyAgICB9OworCisgICAgZXhwb3J0cy5jaGVja0luZGljZXMgPSBmdW5jdGlvbiBjaGVj
a0luZGljZXMobWF0cml4LCByb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKSB7CisgICAgICAgIHZh
ciByb3dPdXQgPSByb3dJbmRpY2VzLnNvbWUociA9PiB7CisgICAgICAgICAgICByZXR1cm4gciA8
IDAgfHwgciA+PSBtYXRyaXgucm93czsKKworICAgICAgICB9KTsKKworICAgICAgICB2YXIgY29s
dW1uT3V0ID0gY29sdW1uSW5kaWNlcy5zb21lKGMgPT4geworICAgICAgICAgICAgcmV0dXJuIGMg
PCAwIHx8IGMgPj0gbWF0cml4LmNvbHVtbnM7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChy
b3dPdXQgfHwgY29sdW1uT3V0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcign
SW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlw
ZW9mIHJvd0luZGljZXMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBjb2x1bW5JbmRpY2VzICE9PSAn
b2JqZWN0JykgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0
eXBlIGZvciByb3cvY29sdW1uIGluZGljZXMnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUFy
cmF5LmlzQXJyYXkocm93SW5kaWNlcykpIHJvd0luZGljZXMgPSBBcnJheS5mcm9tKHJvd0luZGlj
ZXMpOworICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1uSW5kaWNlcykpIHJvd0luZGlj
ZXMgPSBBcnJheS5mcm9tKGNvbHVtbkluZGljZXMpOworCisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICByb3c6IHJvd0luZGljZXMsCisgICAgICAgICAgICBjb2x1bW46IGNvbHVtbkluZGlj
ZXMKKyAgICAgICAgfTsKKyAgICB9OworCisgICAgZXhwb3J0cy5jaGVja1JhbmdlID0gZnVuY3Rp
b24gY2hlY2tSYW5nZShtYXRyaXgsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRD
b2x1bW4pIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDUpIHRocm93IG5ldyBU
eXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgdHlwZScpOworICAgICAgICB2YXIgbm90QWxsTnVt
YmVycyA9IEFycmF5LmZyb20oYXJndW1lbnRzKS5zbGljZSgxKS5zb21lKGZ1bmN0aW9uIChhcmcp
IHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJnICE9PSAnbnVtYmVyJzsKKyAgICAgICAg
fSk7CisgICAgICAgIGlmIChub3RBbGxOdW1iZXJzKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZh
bGlkIGFyZ3VtZW50IHR5cGUnKTsKKyAgICAgICAgaWYgKHN0YXJ0Um93ID4gZW5kUm93IHx8IHN0
YXJ0Q29sdW1uID4gZW5kQ29sdW1uIHx8IHN0YXJ0Um93IDwgMCB8fCBzdGFydFJvdyA+PSBtYXRy
aXgucm93cyB8fCBlbmRSb3cgPCAwIHx8IGVuZFJvdyA+PSBtYXRyaXgucm93cyB8fCBzdGFydENv
bHVtbiA8IDAgfHwgc3RhcnRDb2x1bW4gPj0gbWF0cml4LmNvbHVtbnMgfHwgZW5kQ29sdW1uIDwg
MCB8fCBlbmRDb2x1bW4gPj0gbWF0cml4LmNvbHVtbnMpIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBSYW5nZUVycm9yKCdTdWJtYXRyaXggaW5kaWNlcyBhcmUgb3V0IG9mIHJhbmdlJyk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgZXhwb3J0cy5nZXRSYW5nZSA9IGZ1bmN0aW9uIGdldFJhbmdl
KGZyb20sIHRvKSB7CisgICAgICAgIHZhciBhcnIgPSBuZXcgQXJyYXkodG8gLSBmcm9tICsgMSk7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBhcnJbaV0gPSBmcm9tICsgaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyOwor
ICAgIH07CisKKyAgICBleHBvcnRzLnN1bUJ5Um93ID0gZnVuY3Rpb24gc3VtQnlSb3cobWF0cml4
KSB7CisgICAgICAgIHZhciBzdW0gPSBNYXRyaXguTWF0cml4Lnplcm9zKG1hdHJpeC5yb3dzLCAx
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHsKKyAgICAg
ICAgICAgICAgICBzdW0uc2V0KGksIDAsIHN1bS5nZXQoaSwgMCkgKyBtYXRyaXguZ2V0KGksIGop
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VtOworICAgIH07
CisKKyAgICBleHBvcnRzLnN1bUJ5Q29sdW1uID0gZnVuY3Rpb24gc3VtQnlDb2x1bW4obWF0cml4
KSB7CisgICAgICAgIHZhciBzdW0gPSBNYXRyaXguTWF0cml4Lnplcm9zKDEsIG1hdHJpeC5jb2x1
bW5zKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRyaXgucm93czsgKytpKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hdHJpeC5jb2x1bW5zOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBzdW0uc2V0KDAsIGosIHN1bS5nZXQoMCwgaikgKyBtYXRyaXguZ2V0KGks
IGopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VtOworICAg
IH07CisKKyAgICBleHBvcnRzLnN1bUFsbCA9IGZ1bmN0aW9uIHN1bUFsbChtYXRyaXgpIHsKKyAg
ICAgICAgdmFyIHYgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdHJpeC5yb3dz
OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnM7
IGorKykgeworICAgICAgICAgICAgICAgIHYgKz0gbWF0cml4LmdldChpLCBqKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjsKKyAgICB9OworfQorCisvLyBtbC1t
YXRyaXggc3ltYm9sc3NwZWNpZXMuanMKK2lmICghU3ltYm9sLnNwZWNpZXMpIHsKKyAgICBTeW1i
b2wuc3BlY2llcyA9IFN5bWJvbC5mb3IoJ0BAc3BlY2llcycpOworfQorCisKKy8vIG1sLW1hdHJp
eCBzcmMvZGMvdXRpbC5qcworY29uc3QgTUxNYXRyaXhEQ1V0aWwgPSB7fTsKK3sKKyAgICBsZXQg
ZXhwb3J0cyA9IE1MTWF0cml4RENVdGlsOworICAgIGV4cG9ydHMuaHlwb3RlbnVzZSA9IGZ1bmN0
aW9uIGh5cG90ZW51c2UoYSwgYikgeworICAgICAgICB2YXIgcjsKKyAgICAgICAgaWYgKE1hdGgu
YWJzKGEpID4gTWF0aC5hYnMoYikpIHsKKyAgICAgICAgICAgIHIgPSBiIC8gYTsKKyAgICAgICAg
ICAgIHJldHVybiBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpOworICAgICAgICB9
CisgICAgICAgIGlmIChiICE9PSAwKSB7CisgICAgICAgICAgICByID0gYSAvIGI7CisgICAgICAg
ICAgICByZXR1cm4gTWF0aC5hYnMoYikgKiBNYXRoLnNxcnQoMSArIHIgKiByKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gMDsKKyAgICB9OworCisgICAgLy8gRm9yIHVzZSBpbiB0aGUgZGVj
b21wb3NpdGlvbiBhbGdvcml0aG1zLiBXaXRoIGJpZyBtYXRyaWNlcywgYWNjZXNzIHRpbWUgaXMK
KyAgICAvLyB0b28gbG9uZyBvbiBlbGVtZW50cyBmcm9tIGFycmF5IHN1YmNsYXNzCisgICAgLy8g
dG9kbyBjaGVjayB3aGVuIGl0IGlzIGZpeGVkIGluIHY4CisgICAgLy8gaHR0cDovL2pzcGVyZi5j
b20vYWNjZXNzLWFuZC13cml0ZS1hcnJheS1zdWJjbGFzcworICAgIGV4cG9ydHMuZ2V0RW1wdHky
REFycmF5ID0gZnVuY3Rpb24gKHJvd3MsIGNvbHVtbnMpIHsKKyAgICAgICAgdmFyIGFycmF5ID0g
bmV3IEFycmF5KHJvd3MpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykg
eworICAgICAgICAgICAgYXJyYXlbaV0gPSBuZXcgQXJyYXkoY29sdW1ucyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH07CisKKyAgICBleHBvcnRzLmdldEZpbGxlZDJE
QXJyYXkgPSBmdW5jdGlvbiAocm93cywgY29sdW1ucywgdmFsdWUpIHsKKyAgICAgICAgdmFyIGFy
cmF5ID0gbmV3IEFycmF5KHJvd3MpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7
IGkrKykgeworICAgICAgICAgICAgYXJyYXlbaV0gPSBuZXcgQXJyYXkoY29sdW1ucyk7CisgICAg
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgeworICAgICAgICAgICAg
ICAgIGFycmF5W2ldW2pdID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGFycmF5OworICAgIH07Cit9CisKKy8vIG1sLW1hdHJpeCBzcmMvZGMvbHUuanMK
K2xldCBNTE1hdHJpeERDTFUgPSB7fTsKK3sKKyAgICBsZXQgTWF0cml4ID0gTUxNYXRyaXhNYXRy
aXg7CisKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbHV0enJvZWRlci9NYXBhY2svYmxvYi9t
YXN0ZXIvU291cmNlL0x1RGVjb21wb3NpdGlvbi5jcworICAgIGZ1bmN0aW9uIEx1RGVjb21wb3Np
dGlvbihtYXRyaXgpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEx1RGVjb21wb3Np
dGlvbikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTHVEZWNvbXBvc2l0aW9uKG1hdHJpeCk7
CisgICAgICAgIH0KKworICAgICAgICBtYXRyaXggPSBNYXRyaXguTWF0cml4LmNoZWNrTWF0cml4
KG1hdHJpeCk7CisKKyAgICAgICAgdmFyIGx1ID0gbWF0cml4LmNsb25lKCksCisgICAgICAgICAg
ICByb3dzID0gbHUucm93cywKKyAgICAgICAgICAgIGNvbHVtbnMgPSBsdS5jb2x1bW5zLAorICAg
ICAgICAgICAgcGl2b3RWZWN0b3IgPSBuZXcgQXJyYXkocm93cyksCisgICAgICAgICAgICBwaXZv
dFNpZ24gPSAxLAorICAgICAgICAgICAgaSwgaiwgaywgcCwgcywgdCwgdiwKKyAgICAgICAgICAg
IExVcm93aSwgTFVjb2xqLCBrbWF4OworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBp
KyspIHsKKyAgICAgICAgICAgIHBpdm90VmVjdG9yW2ldID0gaTsKKyAgICAgICAgfQorCisgICAg
ICAgIExVY29saiA9IG5ldyBBcnJheShyb3dzKTsKKworICAgICAgICBmb3IgKGogPSAwOyBqIDwg
Y29sdW1uczsgaisrKSB7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBMVWNvbGpbaV0gPSBsdVtpXVtqXTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgeworICAgICAgICAgICAg
ICAgIExVcm93aSA9IGx1W2ldOworICAgICAgICAgICAgICAgIGttYXggPSBNYXRoLm1pbihpLCBq
KTsKKyAgICAgICAgICAgICAgICBzID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBr
IDwga21heDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIHMgKz0gTFVyb3dpW2tdICogTFVj
b2xqW2tdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBMVXJvd2lbal0gPSBM
VWNvbGpbaV0gLT0gczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcCA9IGo7CisgICAg
ICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykgeworICAgICAgICAgICAgICAg
IGlmIChNYXRoLmFicyhMVWNvbGpbaV0pID4gTWF0aC5hYnMoTFVjb2xqW3BdKSkgeworICAgICAg
ICAgICAgICAgICAgICBwID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChwICE9PSBqKSB7CisgICAgICAgICAgICAgICAgZm9yIChrID0gMDsg
ayA8IGNvbHVtbnM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICB0ID0gbHVbcF1ba107Cisg
ICAgICAgICAgICAgICAgICAgIGx1W3BdW2tdID0gbHVbal1ba107CisgICAgICAgICAgICAgICAg
ICAgIGx1W2pdW2tdID0gdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2
ID0gcGl2b3RWZWN0b3JbcF07CisgICAgICAgICAgICAgICAgcGl2b3RWZWN0b3JbcF0gPSBwaXZv
dFZlY3RvcltqXTsKKyAgICAgICAgICAgICAgICBwaXZvdFZlY3RvcltqXSA9IHY7CisKKyAgICAg
ICAgICAgICAgICBwaXZvdFNpZ24gPSAtcGl2b3RTaWduOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaiA8IHJvd3MgJiYgbHVbal1bal0gIT09IDApIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBs
dVtpXVtqXSAvPSBsdVtqXVtqXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLkxVID0gbHU7CisgICAgICAgIHRoaXMucGl2b3RWZWN0
b3IgPSBwaXZvdFZlY3RvcjsKKyAgICAgICAgdGhpcy5waXZvdFNpZ24gPSBwaXZvdFNpZ247Cisg
ICAgfQorCisgICAgTHVEZWNvbXBvc2l0aW9uLnByb3RvdHlwZSA9IHsKKyAgICAgICAgaXNTaW5n
dWxhcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLkxVLAorICAg
ICAgICAgICAgICAgIGNvbCA9IGRhdGEuY29sdW1uczsKKyAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgY29sOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtqXVtqXSA9PT0g
MCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisg
ICAgICAgIGdldCBkZXRlcm1pbmFudCgpIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5M
VTsKKyAgICAgICAgICAgIGlmICghZGF0YS5pc1NxdWFyZSgpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhciBkZXRlcm1pbmFudCA9IHRoaXMucGl2b3RTaWduLCBjb2wgPSBkYXRh
LmNvbHVtbnM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbDsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgZGV0ZXJtaW5hbnQgKj0gZGF0YVtqXVtqXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmFudDsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0
IGxvd2VyVHJpYW5ndWxhck1hdHJpeCgpIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5M
VSwKKyAgICAgICAgICAgICAgICByb3dzID0gZGF0YS5yb3dzLAorICAgICAgICAgICAgICAgIGNv
bHVtbnMgPSBkYXRhLmNvbHVtbnMsCisgICAgICAgICAgICAgICAgWCA9IG5ldyBNYXRyaXguTWF0
cml4KHJvd3MsIGNvbHVtbnMpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dz
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGor
KykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IGopIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFhbaV1bal0gPSBkYXRhW2ldW2pdOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGkgPT09IGopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFhbaV1bal0gPSAxOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgWFtpXVtq
XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gWDsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0IHVw
cGVyVHJpYW5ndWxhck1hdHJpeCgpIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5MVSwK
KyAgICAgICAgICAgICAgICByb3dzID0gZGF0YS5yb3dzLAorICAgICAgICAgICAgICAgIGNvbHVt
bnMgPSBkYXRhLmNvbHVtbnMsCisgICAgICAgICAgICAgICAgWCA9IG5ldyBNYXRyaXguTWF0cml4
KHJvd3MsIGNvbHVtbnMpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8PSBqKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBYW2ldW2pdID0gZGF0YVtpXVtqXTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFhbaV1bal0gPSAwOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IFg7CisgICAgICAgIH0sCisgICAgICAgIGdldCBwaXZvdFBlcm11dGF0aW9uVmVjdG9yKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RWZWN0b3Iuc2xpY2UoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgc29sdmU6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgdmFsdWUgPSBN
YXRyaXguTWF0cml4LmNoZWNrTWF0cml4KHZhbHVlKTsKKworICAgICAgICAgICAgdmFyIGx1ID0g
dGhpcy5MVSwKKyAgICAgICAgICAgICAgICByb3dzID0gbHUucm93czsKKworICAgICAgICAgICAg
aWYgKHJvd3MgIT09IHZhbHVlLnJvd3MpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ0ludmFsaWQgbWF0cml4IGRpbWVuc2lvbnMnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0aGlzLmlzU2luZ3VsYXIoKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcignTFUgbWF0cml4IGlzIHNpbmd1bGFyJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHZhciBjb3VudCA9IHZhbHVlLmNvbHVtbnM7CisgICAgICAgICAgICB2YXIgWCA9IHZhbHVl
LnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLCAwLCBjb3VudCAtIDEpOworICAgICAgICAg
ICAgdmFyIGNvbHVtbnMgPSBsdS5jb2x1bW5zOworICAgICAgICAgICAgdmFyIGksIGosIGs7CisK
KyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2x1bW5zOyBrKyspIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IGNvbHVtbnM7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgWFtpXVtqXSAtPSBYW2tdW2pdICogbHVbaV1ba107CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGsgPSBj
b2x1bW5zIC0gMTsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBq
IDwgY291bnQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICBYW2tdW2pdIC89IGx1W2tdW2td
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgazsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBYW2ldW2pdIC09IFhba11bal0gKiBsdVtpXVtrXTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBYOworICAgICAgICB9CisgICAgfTsKKworICAgIE1MTWF0cml4
RENMVSA9IEx1RGVjb21wb3NpdGlvbjsKK30KKworCisvLyBtbC1tYXRyaXggc3JjL2RjL3N2ZC5q
cworbGV0IE1MTWF0cml4RENTVkQgPSB7fTsKK3sKKyAgICBsZXQgTWF0cml4ID0gTUxNYXRyaXhN
YXRyaXg7CisgICAgbGV0IHV0aWwgPSBNTE1hdHJpeERDVXRpbDsKKyAgICBsZXQgaHlwb3RlbnVz
ZSA9IHV0aWwuaHlwb3RlbnVzZTsKKyAgICBsZXQgZ2V0RmlsbGVkMkRBcnJheSA9IHV0aWwuZ2V0
RmlsbGVkMkRBcnJheTsKKworICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sdXR6cm9lZGVyL01h
cGFjay9ibG9iL21hc3Rlci9Tb3VyY2UvU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24uY3MKKyAg
ICBmdW5jdGlvbiBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbih2YWx1ZSwgb3B0aW9ucykgewor
ICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24p
KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uKHZh
bHVlLCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IE1hdHJpeC5NYXRyaXgu
Y2hlY2tNYXRyaXgodmFsdWUpOworCisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9Owor
CisgICAgICAgIHZhciBtID0gdmFsdWUucm93cywKKyAgICAgICAgICAgIG4gPSB2YWx1ZS5jb2x1
bW5zLAorICAgICAgICAgICAgbnUgPSBNYXRoLm1pbihtLCBuKTsKKworICAgICAgICB2YXIgd2Fu
dHUgPSB0cnVlLCB3YW50diA9IHRydWU7CisgICAgICAgIGlmIChvcHRpb25zLmNvbXB1dGVMZWZ0
U2luZ3VsYXJWZWN0b3JzID09PSBmYWxzZSkgd2FudHUgPSBmYWxzZTsKKyAgICAgICAgaWYgKG9w
dGlvbnMuY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzID09PSBmYWxzZSkgd2FudHYgPSBmYWxz
ZTsKKyAgICAgICAgdmFyIGF1dG9UcmFuc3Bvc2UgPSBvcHRpb25zLmF1dG9UcmFuc3Bvc2UgPT09
IHRydWU7CisKKyAgICAgICAgdmFyIHN3YXBwZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGE7Cisg
ICAgICAgIGlmIChtIDwgbikgeworICAgICAgICAgICAgaWYgKCFhdXRvVHJhbnNwb3NlKSB7Cisg
ICAgICAgICAgICAgICAgYSA9IHZhbHVlLmNsb25lKCk7CisgICAgICAgICAgICAgICAgLy8gZXNs
aW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUKKyAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oJ0NvbXB1dGluZyBTVkQgb24gYSBtYXRyaXggd2l0aCBtb3JlIGNvbHVtbnMgdGhhbiBy
b3dzLiBDb25zaWRlciBlbmFibGluZyBhdXRvVHJhbnNwb3NlJyk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGEgPSB2YWx1ZS50cmFuc3Bvc2UoKTsKKyAgICAgICAgICAg
ICAgICBtID0gYS5yb3dzOworICAgICAgICAgICAgICAgIG4gPSBhLmNvbHVtbnM7CisgICAgICAg
ICAgICAgICAgc3dhcHBlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgdmFyIGF1eCA9IHdhbnR1
OworICAgICAgICAgICAgICAgIHdhbnR1ID0gd2FudHY7CisgICAgICAgICAgICAgICAgd2FudHYg
PSBhdXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhID0g
dmFsdWUuY2xvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzID0gbmV3IEFycmF5KE1h
dGgubWluKG0gKyAxLCBuKSksCisgICAgICAgICAgICBVID0gZ2V0RmlsbGVkMkRBcnJheShtLCBu
dSwgMCksCisgICAgICAgICAgICBWID0gZ2V0RmlsbGVkMkRBcnJheShuLCBuLCAwKSwKKyAgICAg
ICAgICAgIGUgPSBuZXcgQXJyYXkobiksCisgICAgICAgICAgICB3b3JrID0gbmV3IEFycmF5KG0p
OworCisgICAgICAgIHZhciBuY3QgPSBNYXRoLm1pbihtIC0gMSwgbik7CisgICAgICAgIHZhciBu
cnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMiwgbSkpOworCisgICAgICAgIHZhciBpLCBq
LCBrLCBwLCB0LCBrcywgZiwgY3MsIHNuLCBtYXgsIGthc2UsCisgICAgICAgICAgICBzY2FsZSwg
c3AsIHNwbTEsIGVwbTEsIHNrLCBlaywgYiwgYywgc2hpZnQsIGc7CisKKyAgICAgICAgZm9yIChr
ID0gMCwgbWF4ID0gTWF0aC5tYXgobmN0LCBucnQpOyBrIDwgbWF4OyBrKyspIHsKKyAgICAgICAg
ICAgIGlmIChrIDwgbmN0KSB7CisgICAgICAgICAgICAgICAgc1trXSA9IDA7CisgICAgICAgICAg
ICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzW2td
ID0gaHlwb3RlbnVzZShzW2tdLCBhW2ldW2tdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKHNba10gIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFba11b
a10gPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzW2tdID0gLXNba107CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgYVtpXVtrXSAvPSBzW2tdOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFba11ba10gKz0gMTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgc1trXSA9IC1zW2tdOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKGogPSBrICsgMTsgaiA8IG47IGorKykgeworICAgICAgICAgICAg
ICAgIGlmICgoayA8IG5jdCkgJiYgKHNba10gIT09IDApKSB7CisgICAgICAgICAgICAgICAgICAg
IHQgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ICs9IGFbaV1ba10gKiBhW2ldW2pdOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHQgPSAtdCAvIGFba11ba107CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFbaV1bal0gKz0gdCAqIGFbaV1ba107CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZVtqXSA9IGFba11bal07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3YW50dSAmJiAoayA8IG5jdCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IFVbaV1ba10gPSBhW2ldW2tdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGsgPCBucnQpIHsKKyAgICAgICAgICAgICAgICBlW2tdID0gMDsKKyAg
ICAgICAgICAgICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IG47IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBlW2tdID0gaHlwb3RlbnVzZShlW2tdLCBlW2ldKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGVba10gIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGVbayArIDFdIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZVtrXSA9IDAgLSBl
W2tdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9
IGsgKyAxOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlW2ldIC89IGVb
a107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZVtrICsgMV0g
Kz0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZVtrXSA9IC1lW2tdOwor
ICAgICAgICAgICAgICAgIGlmICgoayArIDEgPCBtKSAmJiAoZVtrXSAhPT0gMCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpID0gayArIDE7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmtbaV0gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaiA9IGsgKyAxOyBqIDwgbjsgaisrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IG07IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmtbaV0gKz0gZVtqXSAqIGFbaV1bal07CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9y
IChqID0gayArIDE7IGogPCBuOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAt
ZVtqXSAvIGVbayArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gayArIDE7
IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2ldW2pdICs9IHQg
KiB3b3JrW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3YW50dikgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IG47IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgVltpXVtrXSA9IGVbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwID0g
TWF0aC5taW4obiwgbSArIDEpOworICAgICAgICBpZiAobmN0IDwgbikgeworICAgICAgICAgICAg
c1tuY3RdID0gYVtuY3RdW25jdF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG0gPCBwKSB7Cisg
ICAgICAgICAgICBzW3AgLSAxXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ydCArIDEg
PCBwKSB7CisgICAgICAgICAgICBlW25ydF0gPSBhW25ydF1bcCAtIDFdOworICAgICAgICB9Cisg
ICAgICAgIGVbcCAtIDFdID0gMDsKKworICAgICAgICBpZiAod2FudHUpIHsKKyAgICAgICAgICAg
IGZvciAoaiA9IG5jdDsgaiA8IG51OyBqKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFVbaV1bal0gPSAwOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVW2pdW2pdID0gMTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAoayA9IG5jdCAtIDE7IGsgPj0gMDsgay0tKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNba10gIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gayAr
IDE7IGogPCBudTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ICs9IFVbaV1ba10gKiBVW2ldW2pdOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC10IC8gVVtrXVtrXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVW2ldW2pdICs9IHQgKiBVW2ldW2tdOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGZvciAoaSA9IGs7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVbaV1b
a10gPSAtVVtpXVtrXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBVW2tdW2tdID0gMSArIFVba11ba107CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBrIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBVW2ldW2tdID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVbaV1ba10gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIFVba11ba10gPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh3YW50dikgeworICAgICAgICAgICAgZm9yIChrID0gbiAt
IDE7IGsgPj0gMDsgay0tKSB7CisgICAgICAgICAgICAgICAgaWYgKChrIDwgbnJ0KSAmJiAoZVtr
XSAhPT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gayArIDE7IGogPCBuOyBq
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gayArIDE7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ICs9IFZbaV1ba10gKiBWW2ldW2pdOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgdCA9IC10IC8gVltrICsgMV1ba107CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IG47IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZbaV1bal0gKz0gdCAqIFZbaV1ba107CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBWW2ldW2tdID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVltr
XVtrXSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgcHAgPSBw
IC0gMSwKKyAgICAgICAgICAgIGl0ZXIgPSAwLAorICAgICAgICAgICAgZXBzID0gTWF0aC5wb3co
MiwgLTUyKTsKKyAgICAgICAgd2hpbGUgKHAgPiAwKSB7CisgICAgICAgICAgICBmb3IgKGsgPSBw
IC0gMjsgayA+PSAtMTsgay0tKSB7CisgICAgICAgICAgICAgICAgaWYgKGsgPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoTWF0aC5hYnMoZVtrXSkgPD0gZXBzICogKE1hdGguYWJzKHNba10pICsgTWF0aC5h
YnMoc1trICsgMV0pKSkgeworICAgICAgICAgICAgICAgICAgICBlW2tdID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGsgPT09IHAgLSAyKSB7CisgICAgICAgICAgICAgICAga2FzZSA9IDQ7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoa3MgPSBwIC0gMTsga3Mg
Pj0gazsga3MtLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoa3MgPT09IGspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHQgPSAoa3MgIT09IHAgPyBNYXRoLmFicyhlW2tzXSkgOiAwKSArIChrcyAh
PT0gayArIDEgPyBNYXRoLmFicyhlW2tzIC0gMV0pIDogMCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChNYXRoLmFicyhzW2tzXSkgPD0gZXBzICogdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc1trc10gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGtzID09
PSBrKSB7CisgICAgICAgICAgICAgICAgICAgIGthc2UgPSAzOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoa3MgPT09IHAgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGthc2UgPSAxOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGthc2UgPSAyOwor
ICAgICAgICAgICAgICAgICAgICBrID0ga3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBrKys7CisKKyAgICAgICAgICAgIHN3aXRjaCAoa2FzZSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAgICAgICAgICBmID0gZVtwIC0g
Ml07CisgICAgICAgICAgICAgICAgICAgIGVbcCAtIDJdID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChqID0gcCAtIDI7IGogPj0gazsgai0tKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0ID0gaHlwb3RlbnVzZShzW2pdLCBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNzID0g
c1tqXSAvIHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzbiA9IGYgLyB0OworICAgICAgICAg
ICAgICAgICAgICAgICAgc1tqXSA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiAh
PT0gaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAtc24gKiBlW2ogLSAxXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlW2ogLSAxXSA9IGNzICogZVtqIC0gMV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2Fu
dHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBjcyAqIFZbaV1bal0gKyBz
biAqIFZbaV1bcCAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWW2ldW3Ag
LSAxXSA9IC1zbiAqIFZbaV1bal0gKyBjcyAqIFZbaV1bcCAtIDFdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWW2ldW2pdID0gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGNhc2UgMiA6IHsKKyAgICAgICAgICAgICAgICAgICAgZiA9IGVbayAtIDFdOworICAgICAg
ICAgICAgICAgICAgICBlW2sgLSAxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9
IGs7IGogPCBwOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBoeXBvdGVudXNl
KHNbal0sIGYpOworICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBzW2pdIC8gdDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNuID0gZiAvIHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBz
W2pdID0gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAtc24gKiBlW2pdOworICAgICAg
ICAgICAgICAgICAgICAgICAgZVtqXSA9IGNzICogZVtqXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh3YW50dSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGNzICog
VVtpXVtqXSArIHNuICogVVtpXVtrIC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVbaV1bayAtIDFdID0gLXNuICogVVtpXVtqXSArIGNzICogVVtpXVtrIC0gMV07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVbaV1bal0gPSB0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY2FzZSAzIDogeworICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IE1h
dGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGguYWJzKHNbcCAtIDFdKSwgTWF0
aC5hYnMoc1twIC0gMl0pKSwgTWF0aC5hYnMoZVtwIC0gMl0pKSwgTWF0aC5hYnMoc1trXSkpLCBN
YXRoLmFicyhlW2tdKSk7CisgICAgICAgICAgICAgICAgICAgIHNwID0gc1twIC0gMV0gLyBzY2Fs
ZTsKKyAgICAgICAgICAgICAgICAgICAgc3BtMSA9IHNbcCAtIDJdIC8gc2NhbGU7CisgICAgICAg
ICAgICAgICAgICAgIGVwbTEgPSBlW3AgLSAyXSAvIHNjYWxlOworICAgICAgICAgICAgICAgICAg
ICBzayA9IHNba10gLyBzY2FsZTsKKyAgICAgICAgICAgICAgICAgICAgZWsgPSBlW2tdIC8gc2Nh
bGU7CisgICAgICAgICAgICAgICAgICAgIGIgPSAoKHNwbTEgKyBzcCkgKiAoc3BtMSAtIHNwKSAr
IGVwbTEgKiBlcG0xKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIGMgPSAoc3AgKiBlcG0xKSAq
IChzcCAqIGVwbTEpOworICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgoYiAhPT0gMCkgfHwgKGMgIT09IDApKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzaGlmdCA9IE1hdGguc3FydChiICogYiArIGMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSAt
c2hpZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaGlmdCA9IGMgLyAoYiArIHNoaWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBmID0gKHNrICsgc3ApICogKHNrIC0gc3ApICsgc2hpZnQ7CisgICAgICAg
ICAgICAgICAgICAgIGcgPSBzayAqIGVrOworICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBr
OyBqIDwgcCAtIDE7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGh5cG90ZW51
c2UoZiwgZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjcyA9IGYgLyB0OworICAgICAgICAg
ICAgICAgICAgICAgICAgc24gPSBnIC8gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChq
ICE9PSBrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVtqIC0gMV0gPSB0OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGNzICog
c1tqXSArIHNuICogZVtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVbal0gPSBjcyAqIGVb
al0gLSBzbiAqIHNbal07CisgICAgICAgICAgICAgICAgICAgICAgICBnID0gc24gKiBzW2ogKyAx
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbaiArIDFdID0gY3MgKiBzW2ogKyAxXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh3YW50dikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdCA9IGNzICogVltpXVtqXSArIHNuICogVltpXVtqICsgMV07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZbaV1baiArIDFdID0gLXNuICogVltpXVtqXSArIGNzICog
VltpXVtqICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZbaV1bal0gPSB0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBoeXBvdGVudXNlKGYsIGcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY3MgPSBmIC8gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNu
ID0gZyAvIHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzW2pdID0gdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGYgPSBjcyAqIGVbal0gKyBzbiAqIHNbaiArIDFdOworICAgICAgICAgICAg
ICAgICAgICAgICAgc1tqICsgMV0gPSAtc24gKiBlW2pdICsgY3MgKiBzW2ogKyAxXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGcgPSBzbiAqIGVbaiArIDFdOworICAgICAgICAgICAgICAgICAg
ICAgICAgZVtqICsgMV0gPSBjcyAqIGVbaiArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHdhbnR1ICYmIChqIDwgbSAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IG07IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ID0gY3MgKiBVW2ldW2pdICsgc24gKiBVW2ldW2ogKyAxXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVtpXVtqICsgMV0gPSAtc24gKiBVW2ldW2pdICsgY3MgKiBVW2ldW2og
KyAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVtpXVtqXSA9IHQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVbcCAtIDJdID0gZjsKKyAg
ICAgICAgICAgICAgICAgICAgaXRlciA9IGl0ZXIgKyAxOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSA0OiB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzW2tdIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNba10gPSAoc1trXSA8IDAgPyAtc1trXSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHdhbnR2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
PSBwcDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZbaV1ba10gPSAt
VltpXVtrXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKGsgPCBwcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNba10gPj0gc1trICsg
MV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzW2tdOworICAgICAgICAg
ICAgICAgICAgICAgICAgc1trXSA9IHNbayArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAg
c1trICsgMV0gPSB0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhbnR2ICYmIChrIDwg
biAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47
IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gVltpXVtrICsgMV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZbaV1bayArIDFdID0gVltpXVtrXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVltpXVtrXSA9IHQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHdhbnR1ICYmIChrIDwgbSAtIDEpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ID0gVVtpXVtrICsgMV07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVbaV1bayArIDFdID0gVVtpXVtrXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVtpXVtrXSA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaysrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSAwOworICAgICAg
ICAgICAgICAgICAgICBwLS07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc3dhcHBlZCkgeworICAgICAgICAgICAgdmFyIHRtcCA9
IFY7CisgICAgICAgICAgICBWID0gVTsKKyAgICAgICAgICAgIFUgPSB0bXA7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLm0gPSBtOworICAgICAgICB0aGlzLm4gPSBuOworICAgICAgICB0aGlz
LnMgPSBzOworICAgICAgICB0aGlzLlUgPSBVOworICAgICAgICB0aGlzLlYgPSBWOworICAgIH0K
KworICAgIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uLnByb3RvdHlwZSA9IHsKKyAgICAgICAg
Z2V0IGNvbmRpdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNbMF0gLyB0aGlzLnNb
TWF0aC5taW4odGhpcy5tLCB0aGlzLm4pIC0gMV07CisgICAgICAgIH0sCisgICAgICAgIGdldCBu
b3JtMigpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNbMF07CisgICAgICAgIH0sCisgICAg
ICAgIGdldCByYW5rKCkgeworICAgICAgICAgICAgdmFyIGVwcyA9IE1hdGgucG93KDIsIC01Miks
CisgICAgICAgICAgICAgICAgdG9sID0gTWF0aC5tYXgodGhpcy5tLCB0aGlzLm4pICogdGhpcy5z
WzBdICogZXBzLAorICAgICAgICAgICAgICAgIHIgPSAwLAorICAgICAgICAgICAgICAgIHMgPSB0
aGlzLnM7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzLmxlbmd0aDsgaSA8IGlp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoc1tpXSA+IHRvbCkgeworICAgICAgICAgICAg
ICAgICAgICByKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHI7CisgICAgICAgIH0sCisgICAgICAgIGdldCBkaWFnb25hbCgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLnM7CisgICAgICAgIH0sCisgICAgICAgIC8vIGh0dHBzOi8vZ2l0
aHViLmNvbS9hY2NvcmQtbmV0L2ZyYW1ld29yay9ibG9iL2RldmVsb3BtZW50L1NvdXJjZXMvQWNj
b3JkLk1hdGgvRGVjb21wb3NpdGlvbnMvU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24uY3MKKyAg
ICAgICAgZ2V0IHRocmVzaG9sZCgpIHsKKyAgICAgICAgICAgIHJldHVybiAoTWF0aC5wb3coMiwg
LTUyKSAvIDIpICogTWF0aC5tYXgodGhpcy5tLCB0aGlzLm4pICogdGhpcy5zWzBdOworICAgICAg
ICB9LAorICAgICAgICBnZXQgbGVmdFNpbmd1bGFyVmVjdG9ycygpIHsKKyAgICAgICAgICAgIGlm
ICghTWF0cml4Lk1hdHJpeC5pc01hdHJpeCh0aGlzLlUpKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5VID0gbmV3IE1hdHJpeC5NYXRyaXgodGhpcy5VKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLlU7CisgICAgICAgIH0sCisgICAgICAgIGdldCByaWdodFNpbmd1bGFy
VmVjdG9ycygpIHsKKyAgICAgICAgICAgIGlmICghTWF0cml4Lk1hdHJpeC5pc01hdHJpeCh0aGlz
LlYpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5WID0gbmV3IE1hdHJpeC5NYXRyaXgodGhpcy5W
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLlY7CisgICAgICAgIH0s
CisgICAgICAgIGdldCBkaWFnb25hbE1hdHJpeCgpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRy
aXguTWF0cml4LmRpYWcodGhpcy5zKTsKKyAgICAgICAgfSwKKyAgICAgICAgc29sdmU6IGZ1bmN0
aW9uICh2YWx1ZSkgeworCisgICAgICAgICAgICB2YXIgWSA9IHZhbHVlLAorICAgICAgICAgICAg
ICAgIGUgPSB0aGlzLnRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICBzY29scyA9IHRoaXMucy5s
ZW5ndGgsCisgICAgICAgICAgICAgICAgTHMgPSBNYXRyaXguTWF0cml4Lnplcm9zKHNjb2xzLCBz
Y29scyksCisgICAgICAgICAgICAgICAgaTsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IHNjb2xzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2ldKSA8
PSBlKSB7CisgICAgICAgICAgICAgICAgICAgIExzW2ldW2ldID0gMDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBMc1tpXVtpXSA9IDEgLyB0aGlzLnNbaV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgVSA9
IHRoaXMuVTsKKyAgICAgICAgICAgIHZhciBWID0gdGhpcy5yaWdodFNpbmd1bGFyVmVjdG9yczsK
KworICAgICAgICAgICAgdmFyIFZMID0gVi5tbXVsKExzKSwKKyAgICAgICAgICAgICAgICB2cm93
cyA9IFYucm93cywKKyAgICAgICAgICAgICAgICB1cm93cyA9IFUubGVuZ3RoLAorICAgICAgICAg
ICAgICAgIFZMVSA9IE1hdHJpeC5NYXRyaXguemVyb3ModnJvd3MsIHVyb3dzKSwKKyAgICAgICAg
ICAgICAgICBqLCBrLCBzdW07CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2cm93czsg
aSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHVyb3dzOyBqKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChrID0g
MDsgayA8IHNjb2xzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSBWTFtp
XVtrXSAqIFVbal1ba107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgVkxVW2ldW2pdID0gc3VtOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIFZMVS5tbXVsKFkpOworICAgICAgICB9LAorICAgICAgICBzb2x2
ZUZvckRpYWdvbmFsOiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LnNvbHZlKE1hdHJpeC5NYXRyaXguZGlhZyh2YWx1ZSkpOworICAgICAgICB9LAorICAgICAgICBp
bnZlcnNlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgViA9IHRoaXMuVjsKKyAgICAg
ICAgICAgIHZhciBlID0gdGhpcy50aHJlc2hvbGQsCisgICAgICAgICAgICAgICAgdnJvd3MgPSBW
Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICB2Y29scyA9IFZbMF0ubGVuZ3RoLAorICAgICAgICAg
ICAgICAgIFggPSBuZXcgTWF0cml4Lk1hdHJpeCh2cm93cywgdGhpcy5zLmxlbmd0aCksCisgICAg
ICAgICAgICAgICAgaSwgajsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZyb3dzOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdmNvbHM7IGorKykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2pdKSA+IGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFhbaV1bal0gPSBWW2ldW2pdIC8gdGhpcy5zW2pdOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgWFtpXVtqXSA9IDA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBVID0gdGhpcy5VOworCisgICAgICAgICAgICB2YXIgdXJvd3Mg
PSBVLmxlbmd0aCwKKyAgICAgICAgICAgICAgICB1Y29scyA9IFVbMF0ubGVuZ3RoLAorICAgICAg
ICAgICAgICAgIFkgPSBuZXcgTWF0cml4Lk1hdHJpeCh2cm93cywgdXJvd3MpLAorICAgICAgICAg
ICAgICAgIGssIHN1bTsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHZyb3dzOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdXJvd3M7IGorKykgeworICAgICAg
ICAgICAgICAgICAgICBzdW0gPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBr
IDwgdWNvbHM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IFhbaV1ba10g
KiBVW2pdW2tdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFlb
aV1bal0gPSBzdW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gWTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBNTE1hdHJpeERDU1ZEID0g
U2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb247Cit9CisKKy8vIG1sLW1hdHJpeCBzcmMvYWJzdHJh
Y3RNYXRyaXguanMKK2xldCBNTE1hdHJpeEFic3RyYWN0TWF0cml4OworeworICAgIGxldCBMdURl
Y29tcG9zaXRpb24gPSBNTE1hdHJpeERDTFU7CisgICAgbGV0IFN2RGVjb21wb3NpdGlvbiA9IE1M
TWF0cml4RENTVkQ7CisgICAgbGV0IGFycmF5VXRpbHMgPSBNTEFycmF5VXRpbHM7CisgICAgbGV0
IHV0aWwgPSBNTE1hdHJpeFV0aWw7CisKKyAgICBNTE1hdHJpeEFic3RyYWN0TWF0cml4ID0gZnVu
Y3Rpb24gYWJzdHJhY3RNYXRyaXgoc3VwZXJDdG9yKSB7CisgICAgICAgIGlmIChzdXBlckN0b3Ig
PT09IHVuZGVmaW5lZCkgc3VwZXJDdG9yID0gT2JqZWN0OworCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBSZWFsIG1hdHJpeAorICAgICAgICAgKiBAY2xhc3MgTWF0cml4CisgICAgICAgICAqIEBw
YXJhbSB7bnVtYmVyfEFycmF5fE1hdHJpeH0gblJvd3MgLSBOdW1iZXIgb2Ygcm93cyBvZiB0aGUg
bmV3IG1hdHJpeCwKKyAgICAgICAgICogMkQgYXJyYXkgY29udGFpbmluZyB0aGUgZGF0YSBvciBN
YXRyaXggaW5zdGFuY2UgdG8gY2xvbmUKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtuQ29s
dW1uc10gLSBOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbmV3IG1hdHJpeAorICAgICAgICAgKi8K
KyAgICAgICAgY2xhc3MgTWF0cml4IGV4dGVuZHMgc3VwZXJDdG9yIHsKKyAgICAgICAgICAgIHN0
YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDb25z
dHJ1Y3RzIGEgTWF0cml4IHdpdGggdGhlIGNob3NlbiBkaW1lbnNpb25zIGZyb20gYSAxRCBhcnJh
eQorICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5ld1Jvd3MgLSBOdW1iZXIgb2Ygcm93
cworICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5ld0NvbHVtbnMgLSBOdW1iZXIgb2Yg
Y29sdW1ucworICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gbmV3RGF0YSAtIEEgMUQgYXJy
YXkgY29udGFpbmluZyBkYXRhIGZvciB0aGUgbWF0cml4CisgICAgICAgICAgICAgKiBAcmV0dXJu
IHtNYXRyaXh9IC0gVGhlIG5ldyBtYXRyaXgKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg
c3RhdGljIGZyb20xREFycmF5KG5ld1Jvd3MsIG5ld0NvbHVtbnMsIG5ld0RhdGEpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgbGVuZ3RoID0gbmV3Um93cyAqIG5ld0NvbHVtbnM7CisgICAgICAgICAg
ICAgICAgaWYgKGxlbmd0aCAhPT0gbmV3RGF0YS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVu
IGRpbWVuc2lvbnMnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG5l
d01hdHJpeCA9IG5ldyB0aGlzKG5ld1Jvd3MsIG5ld0NvbHVtbnMpOworICAgICAgICAgICAgICAg
IGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG5ld1Jvd3M7IHJvdysrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG5ld0NvbHVtbnM7IGNvbHVtbisr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdNYXRyaXguc2V0KHJvdywgY29sdW1uLCBu
ZXdEYXRhW3JvdyAqIG5ld0NvbHVtbnMgKyBjb2x1bW5dKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3TWF0cml4Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENyZWF0ZXMg
YSByb3cgdmVjdG9yLCBhIG1hdHJpeCB3aXRoIG9ubHkgb25lIHJvdy4KKyAgICAgICAgICAgICAq
IEBwYXJhbSB7QXJyYXl9IG5ld0RhdGEgLSBBIDFEIGFycmF5IGNvbnRhaW5pbmcgZGF0YSBmb3Ig
dGhlIHZlY3RvcgorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSAtIFRoZSBuZXcgbWF0
cml4CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0YXRpYyByb3dWZWN0b3IobmV3RGF0
YSkgeworICAgICAgICAgICAgICAgIHZhciB2ZWN0b3IgPSBuZXcgdGhpcygxLCBuZXdEYXRhLmxl
bmd0aCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5zZXQoMCwgaSwgbmV3RGF0YVtp
XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2ZWN0b3I7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ3JlYXRlcyBh
IGNvbHVtbiB2ZWN0b3IsIGEgbWF0cml4IHdpdGggb25seSBvbmUgY29sdW1uLgorICAgICAgICAg
ICAgICogQHBhcmFtIHtBcnJheX0gbmV3RGF0YSAtIEEgMUQgYXJyYXkgY29udGFpbmluZyBkYXRh
IGZvciB0aGUgdmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IC0gVGhlIG5l
dyBtYXRyaXgKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdGljIGNvbHVtblZlY3Rv
cihuZXdEYXRhKSB7CisgICAgICAgICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyB0aGlzKG5ld0Rh
dGEubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0Rh
dGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNldChpLCAwLCBu
ZXdEYXRhW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZl
Y3RvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBD
cmVhdGVzIGFuIGVtcHR5IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBkaW1lbnNpb25zLiBWYWx1ZXMg
d2lsbCBiZSB1bmRlZmluZWQuIFNhbWUgYXMgdXNpbmcgbmV3IE1hdHJpeChyb3dzLCBjb2x1bW5z
KS4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzIC0gTnVtYmVyIG9mIHJvd3MK
KyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5zIC0gTnVtYmVyIG9mIGNvbHVt
bnMKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0gLSBUaGUgbmV3IG1hdHJpeAorICAg
ICAgICAgICAgICovCisgICAgICAgICAgICBzdGF0aWMgZW1wdHkocm93cywgY29sdW1ucykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhyb3dzLCBjb2x1bW5zKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbWF0cml4
IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMuIFZhbHVlcyB3aWxsIGJlIHNldCB0byB6ZXJvLgor
ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgLSBOdW1iZXIgb2Ygcm93cworICAg
ICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgLSBOdW1iZXIgb2YgY29sdW1ucwor
ICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSAtIFRoZSBuZXcgbWF0cml4CisgICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIHN0YXRpYyB6ZXJvcyhyb3dzLCBjb2x1bW5zKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHkocm93cywgY29sdW1ucykuZmlsbCgwKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDcmVhdGVzIGEg
bWF0cml4IHdpdGggdGhlIGdpdmVuIGRpbWVuc2lvbnMuIFZhbHVlcyB3aWxsIGJlIHNldCB0byBv
bmUuCisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAtIE51bWJlciBvZiByb3dz
CisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1ucyAtIE51bWJlciBvZiBjb2x1
bW5zCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IC0gVGhlIG5ldyBtYXRyaXgKKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdGljIG9uZXMocm93cywgY29sdW1ucykgewor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5KHJvd3MsIGNvbHVtbnMpLmZpbGwoMSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ3JlYXRl
cyBhIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBkaW1lbnNpb25zLiBWYWx1ZXMgd2lsbCBiZSByYW5k
b21seSBzZXQuCisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAtIE51bWJlciBv
ZiByb3dzCisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1ucyAtIE51bWJlciBv
ZiBjb2x1bW5zCisgICAgICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbcm5nPU1hdGgucmFu
ZG9tXSAtIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtN
YXRyaXh9IFRoZSBuZXcgbWF0cml4CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN0YXRp
YyByYW5kKHJvd3MsIGNvbHVtbnMsIHJuZykgeworICAgICAgICAgICAgICAgIGlmIChybmcgPT09
IHVuZGVmaW5lZCkgcm5nID0gTWF0aC5yYW5kb207CisgICAgICAgICAgICAgICAgdmFyIG1hdHJp
eCA9IHRoaXMuZW1wdHkocm93cywgY29sdW1ucyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5z
ZXQoaSwgaiwgcm5nKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8qKgorICAgICAgICAgICAgICogQ3JlYXRlcyBhIG1hdHJpeCB3aXRoIHRoZSBnaXZl
biBkaW1lbnNpb25zLiBWYWx1ZXMgd2lsbCBiZSByYW5kb20gaW50ZWdlcnMuCisgICAgICAgICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAtIE51bWJlciBvZiByb3dzCisgICAgICAgICAgICAg
KiBAcGFyYW0ge251bWJlcn0gY29sdW1ucyAtIE51bWJlciBvZiBjb2x1bW5zCisgICAgICAgICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gW21heFZhbHVlPTEwMDBdIC0gTWF4aW11bSB2YWx1ZQorICAg
ICAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW3JuZz1NYXRoLnJhbmRvbV0gLSBSYW5kb20g
bnVtYmVyIGdlbmVyYXRvcgorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSBUaGUgbmV3
IG1hdHJpeAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzdGF0aWMgcmFuZEludChyb3dz
LCBjb2x1bW5zLCBtYXhWYWx1ZSwgcm5nKSB7CisgICAgICAgICAgICAgICAgaWYgKG1heFZhbHVl
ID09PSB1bmRlZmluZWQpIG1heFZhbHVlID0gMTAwMDsKKyAgICAgICAgICAgICAgICBpZiAocm5n
ID09PSB1bmRlZmluZWQpIHJuZyA9IE1hdGgucmFuZG9tOworICAgICAgICAgICAgICAgIHZhciBt
YXRyaXggPSB0aGlzLmVtcHR5KHJvd3MsIGNvbHVtbnMpOworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dmFsdWUgPSBNYXRoLmZsb29yKHJuZygpICogbWF4VmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0cml4LnNldChpLCBqLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDcmVhdGVzIGFuIGlkZW50
aXR5IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBkaW1lbnNpb24uIFZhbHVlcyBvZiB0aGUgZGlhZ29u
YWwgd2lsbCBiZSAxIGFuZCBvdGhlcnMgd2lsbCBiZSAwLgorICAgICAgICAgICAgICogQHBhcmFt
IHtudW1iZXJ9IHJvd3MgLSBOdW1iZXIgb2Ygcm93cworICAgICAgICAgICAgICogQHBhcmFtIHtu
dW1iZXJ9IFtjb2x1bW5zPXJvd3NdIC0gTnVtYmVyIG9mIGNvbHVtbnMKKyAgICAgICAgICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MV0gLSBWYWx1ZSB0byBmaWxsIHRoZSBkaWFnb25hbCB3
aXRoCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IC0gVGhlIG5ldyBpZGVudGl0eSBt
YXRyaXgKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdGljIGV5ZShyb3dzLCBjb2x1
bW5zLCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zID09PSB1bmRlZmluZWQp
IGNvbHVtbnMgPSByb3dzOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVk
KSB2YWx1ZSA9IDE7CisgICAgICAgICAgICAgICAgdmFyIG1pbiA9IE1hdGgubWluKHJvd3MsIGNv
bHVtbnMpOworICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSB0aGlzLnplcm9zKHJvd3MsIGNv
bHVtbnMpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWluOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgbWF0cml4LnNldChpLCBpLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ3JlYXRlcyBhIGRpYWdvbmFsIG1hdHJp
eCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkuCisgICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5
fSBkYXRhIC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGF0YSBmb3IgdGhlIGRpYWdvbmFsCisgICAg
ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Jvd3NdIC0gTnVtYmVyIG9mIHJvd3MgKERlZmF1
bHQ6IGRhdGEubGVuZ3RoKQorICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5z
XSAtIE51bWJlciBvZiBjb2x1bW5zIChEZWZhdWx0OiByb3dzKQorICAgICAgICAgICAgICogQHJl
dHVybiB7TWF0cml4fSAtIFRoZSBuZXcgZGlhZ29uYWwgbWF0cml4CisgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIHN0YXRpYyBkaWFnKGRhdGEsIHJvd3MsIGNvbHVtbnMpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbCA9IGRhdGEubGVuZ3RoOworICAgICAgICAgICAgICAgIGlmIChyb3dzID09
PSB1bmRlZmluZWQpIHJvd3MgPSBsOworICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zID09PSB1
bmRlZmluZWQpIGNvbHVtbnMgPSByb3dzOworICAgICAgICAgICAgICAgIHZhciBtaW4gPSBNYXRo
Lm1pbihsLCByb3dzLCBjb2x1bW5zKTsKKyAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gdGhp
cy56ZXJvcyhyb3dzLCBjb2x1bW5zKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1pbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5zZXQoaSwgaSwgZGF0
YVtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXg7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJu
cyBhIG1hdHJpeCB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIG1pbmltdW0gYmV0d2VlbiBtYXRyaXgx
IGFuZCBtYXRyaXgyCisgICAgICAgICAgICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4MQorICAg
ICAgICAgICAgICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeDIKKyAgICAgICAgICAgICAqIEByZXR1
cm4ge01hdHJpeH0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhdGljIG1pbihtYXRy
aXgxLCBtYXRyaXgyKSB7CisgICAgICAgICAgICAgICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRy
aXgobWF0cml4MSk7CisgICAgICAgICAgICAgICAgbWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgo
bWF0cml4Mik7CisgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSBtYXRyaXgxLnJvd3M7CisgICAg
ICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBtYXRyaXgxLmNvbHVtbnM7CisgICAgICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9IG5ldyB0aGlzKHJvd3MsIGNvbHVtbnMpOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuc2V0KGksIGosIE1hdGgubWluKG1hdHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdl
dChpLCBqKSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8qKgorICAgICAgICAgICAgICogUmV0dXJucyBhIG1hdHJpeCB3aG9zZSBlbGVtZW50cyBhcmUg
dGhlIG1heGltdW0gYmV0d2VlbiBtYXRyaXgxIGFuZCBtYXRyaXgyCisgICAgICAgICAgICAgKiBA
cGFyYW0ge01hdHJpeH0gbWF0cml4MQorICAgICAgICAgICAgICogQHBhcmFtIHtNYXRyaXh9IG1h
dHJpeDIKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0KKyAgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgc3RhdGljIG1heChtYXRyaXgxLCBtYXRyaXgyKSB7CisgICAgICAgICAgICAg
ICAgbWF0cml4MSA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4MSk7CisgICAgICAgICAgICAgICAg
bWF0cml4MiA9IHRoaXMuY2hlY2tNYXRyaXgobWF0cml4Mik7CisgICAgICAgICAgICAgICAgdmFy
IHJvd3MgPSBtYXRyaXgxLnJvd3M7CisgICAgICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBtYXRy
aXgxLmNvbHVtbnM7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyB0aGlzKHJvd3Ms
IGNvbHVtbnMpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGksIGosIE1hdGgubWF4KG1h
dHJpeDEuZ2V0KGksIGopLCBtYXRyaXgyLmdldChpLCBqKSkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hlY2sgdGhh
dCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYSBNYXRyaXggYW5kIHRyaWVzIHRvIGluc3RhbnRpYXRl
IG9uZSBpZiBub3QKKyAgICAgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUg
dG8gY2hlY2sKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0KKyAgICAgICAgICAgICAq
LworICAgICAgICAgICAgc3RhdGljIGNoZWNrTWF0cml4KHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1hdHJpeC5pc01hdHJpeCh2YWx1ZSkgPyB2YWx1ZSA6IG5ldyB0aGlzKHZhbHVl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1
cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgTWF0cml4LCBmYWxzZSBvdGhlcndpc2UKKyAg
ICAgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2sKKyAgICAg
ICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IHN0YXRpYyBpc01hdHJpeCh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAodmFsdWUg
IT0gbnVsbCkgJiYgKHZhbHVlLmtsYXNzID09PSAnTWF0cml4Jyk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQHByb3Age251bWJlcn0gc2l6ZSAtIFRo
ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIG1hdHJpeC4KKyAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgZ2V0IHNpemUoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93cyAq
IHRoaXMuY29sdW1uczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAg
ICAgICAgKiBBcHBsaWVzIGEgY2FsbGJhY2sgZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4
LiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBtYXRyaXggKHRoaXMpIGNvbnRleHQuCisg
ICAgICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRoYXQg
d2lsbCBiZSBjYWxsZWQgd2l0aCB0d28gcGFyYW1ldGVycyA6IGkgKHJvdykgYW5kIGogKGNvbHVt
bikKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0gdGhpcworICAgICAgICAgICAgICov
CisgICAgICAgICAgICBhcHBseShjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcignY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBpaSA9IHRoaXMucm93czsKKyAgICAgICAgICAg
ICAgICB2YXIgamogPSB0aGlzLmNvbHVtbnM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgamo7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlz
LCBpLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoq
CisgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IDFEIGFycmF5IGZpbGxlZCByb3cgYnkgcm93
IHdpdGggdGhlIG1hdHJpeCB2YWx1ZXMKKyAgICAgICAgICAgICAqIEByZXR1cm4ge0FycmF5fQor
ICAgICAgICAgICAgICovCisgICAgICAgICAgICB0bzFEQXJyYXkoKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHRoaXMuc2l6ZSk7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcnJheVtpICogdGhpcy5jb2x1bW5zICsgal0gPSB0aGlzLmdldChpLCBqKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAg
ICAgICogUmV0dXJucyBhIDJEIGFycmF5IGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBkYXRhCisg
ICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgICAgICAgICAqLworICAgICAgICAg
ICAgdG8yREFycmF5KCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEFycmF5KHRo
aXMucm93cyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb3B5W2ldID0gbmV3IEFycmF5KHRoaXMuY29s
dW1ucyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1
bW5zOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlbaV1bal0gPSB0aGlzLmdl
dChpLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29weTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoq
CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBtYXRyaXggaGFz
IG9uZSByb3cKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaXNSb3dWZWN0b3IoKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93cyA9PT0gMTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlm
IHRoZSBtYXRyaXggaGFzIG9uZSBjb2x1bW4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg
aXNDb2x1bW5WZWN0b3IoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucyA9
PT0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBA
cmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBtYXRyaXggaGFzIG9uZSByb3cgb3Igb25lIGNv
bHVtbgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpc1ZlY3RvcigpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKHRoaXMucm93cyA9PT0gMSkgfHwgKHRoaXMuY29sdW1ucyA9PT0gMSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQHJldHVy
biB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgbWF0cml4IGhhcyB0aGUgc2FtZSBudW1iZXIgb2Ygcm93
cyBhbmQgY29sdW1ucworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpc1NxdWFyZSgpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dzID09PSB0aGlzLmNvbHVtbnM7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQHJldHVybiB7Ym9v
bGVhbn0gdHJ1ZSBpZiB0aGUgbWF0cml4IGlzIHNxdWFyZSBhbmQgaGFzIHRoZSBzYW1lIHZhbHVl
cyBvbiBib3RoIHNpZGVzIG9mIHRoZSBkaWFnb25hbAorICAgICAgICAgICAgICovCisgICAgICAg
ICAgICBpc1N5bW1ldHJpYygpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NxdWFyZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDw9IGk7IGor
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldChpLCBqKSAhPT0g
dGhpcy5nZXQoaiwgaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFNldHMg
YSBnaXZlbiBlbGVtZW50IG9mIHRoZSBtYXRyaXguIG1hdC5zZXQoMyw0LDEpIGlzIGVxdWl2YWxl
bnQgdG8gbWF0WzNdWzRdPTEKKyAgICAgICAgICAgICAqIEBhYnN0cmFjdAorICAgICAgICAgICAg
ICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IC0gSW5kZXggb2YgdGhlIHJvdworICAgICAgICAg
ICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IC0gSW5kZXggb2YgdGhlIGNvbHVtbgor
ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIG5ldyB2YWx1ZSBmb3Ig
dGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0gdGhpcworICAgICAg
ICAgICAgICovCisgICAgICAgICAgICBzZXQocm93SW5kZXgsIGNvbHVtbkluZGV4LCB2YWx1ZSkg
eyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdzZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQnKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBnaXZl
biBlbGVtZW50IG9mIHRoZSBtYXRyaXguIG1hdC5nZXQoMyw0KSBpcyBlcXVpdmFsZW50IHRvIG1h
dHJpeFszXVs0XQorICAgICAgICAgICAgICogQGFic3RyYWN0CisgICAgICAgICAgICAgKiBAcGFy
YW0ge251bWJlcn0gcm93SW5kZXggLSBJbmRleCBvZiB0aGUgcm93CisgICAgICAgICAgICAgKiBA
cGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggLSBJbmRleCBvZiB0aGUgY29sdW1uCisgICAgICAg
ICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdl
dChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVz
ZWQtdmFycworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0IG1ldGhvZCBpcyB1
bmltcGxlbWVudGVkJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogQ3JlYXRlcyBhIG5ldyBtYXRyaXggdGhhdCBpcyBhIHJlcGV0aXRpb24gb2YgdGhl
IGN1cnJlbnQgbWF0cml4LiBOZXcgbWF0cml4IGhhcyByb3dSZXAgdGltZXMgdGhlIG51bWJlciBv
ZgorICAgICAgICAgICAgICogcm93cyBvZiB0aGUgbWF0cml4LCBhbmQgY29sUmVwIHRpbWVzIHRo
ZSBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4CisgICAgICAgICAgICAgKiBAcGFyYW0g
e251bWJlcn0gcm93UmVwIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSByb3dzIHNob3VsZCBiZSByZXBl
YXRlZAorICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbFJlcCAtIE51bWJlciBvZiB0
aW1lcyB0aGUgY29sdW1ucyBzaG91bGQgYmUgcmUKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01h
dHJpeH0KKyAgICAgICAgICAgICAqIEBleGFtcGxlCisgICAgICAgICAgICAgKiB2YXIgbWF0cml4
ID0gbmV3IE1hdHJpeChbWzEsMl1dKTsKKyAgICAgICAgICAgICAqIG1hdHJpeC5yZXBlYXQoMik7
IC8vIFtbMSwyXSxbMSwyXV0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmVwZWF0KHJv
d1JlcCwgY29sUmVwKSB7CisgICAgICAgICAgICAgICAgcm93UmVwID0gcm93UmVwIHx8IDE7Cisg
ICAgICAgICAgICAgICAgY29sUmVwID0gY29sUmVwIHx8IDE7CisgICAgICAgICAgICAgICAgdmFy
IG1hdHJpeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yW1N5bWJvbC5zcGVjaWVzXSh0aGlzLnJvd3Mg
KiByb3dSZXAsIHRoaXMuY29sdW1ucyAqIGNvbFJlcCk7CisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCByb3dSZXA7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IGNvbFJlcDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRy
aXguc2V0U3ViTWF0cml4KHRoaXMsIHRoaXMucm93cyAqIGksIHRoaXMuY29sdW1ucyAqIGopOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBtYXRyaXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogRmlsbHMgdGhlIG1hdHJpeCB3aXRoIGEgZ2l2ZW4gdmFsdWUuIEFsbCBlbGVtZW50
cyB3aWxsIGJlIHNldCB0byB0aGlzIHZhbHVlLgorICAgICAgICAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IHZhbHVlIC0gTmV3IHZhbHVlCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRo
aXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZmlsbCh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaSwgaiwgdmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIE5lZ2F0ZXMg
dGhlIG1hdHJpeC4gQWxsIGVsZW1lbnRzIHdpbGwgYmUgbXVsdGlwbGllZCBieSAoLTEpCisgICAg
ICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRoaXMKKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbmVnKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm11bFMoLTEpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgYSBu
ZXcgYXJyYXkgZnJvbSB0aGUgZ2l2ZW4gcm93IGluZGV4CisgICAgICAgICAgICAgKiBAcGFyYW0g
e251bWJlcn0gaW5kZXggLSBSb3cgaW5kZXgKKyAgICAgICAgICAgICAqIEByZXR1cm4ge0FycmF5
fQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBnZXRSb3coaW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICB1dGlsLmNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpOworICAgICAgICAgICAgICAg
IHZhciByb3cgPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHJvd1tpXSA9IHRoaXMuZ2V0KGluZGV4LCBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJvdzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisg
ICAgICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IHJvdyB2ZWN0b3IgZnJvbSB0aGUgZ2l2ZW4gcm93
IGluZGV4CisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBSb3cgaW5kZXgK
KyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0KKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgZ2V0Um93VmVjdG9yKGluZGV4KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y29uc3RydWN0b3Iucm93VmVjdG9yKHRoaXMuZ2V0Um93KGluZGV4KSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogU2V0cyBhIHJvdyBhdCB0aGUgZ2l2
ZW4gaW5kZXgKKyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFJvdyBpbmRl
eAorICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IGFycmF5IC0gQXJyYXkgb3Ig
dmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRoaXMKKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgc2V0Um93KGluZGV4LCBhcnJheSkgeworICAgICAgICAgICAgICAg
IHV0aWwuY2hlY2tSb3dJbmRleCh0aGlzLCBpbmRleCk7CisgICAgICAgICAgICAgICAgYXJyYXkg
PSB1dGlsLmNoZWNrUm93VmVjdG9yKHRoaXMsIGFycmF5KTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuc2V0KGluZGV4LCBpLCBhcnJheVtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioK
KyAgICAgICAgICAgICAqIFN3YXBzIHR3byByb3dzCisgICAgICAgICAgICAgKiBAcGFyYW0ge251
bWJlcn0gcm93MSAtIEZpcnN0IHJvdyBpbmRleAorICAgICAgICAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IHJvdzIgLSBTZWNvbmQgcm93IGluZGV4CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRy
aXh9IHRoaXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dhcFJvd3Mocm93MSwgcm93
MikgeworICAgICAgICAgICAgICAgIHV0aWwuY2hlY2tSb3dJbmRleCh0aGlzLCByb3cxKTsKKyAg
ICAgICAgICAgICAgICB1dGlsLmNoZWNrUm93SW5kZXgodGhpcywgcm93Mik7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMuZ2V0KHJvdzEsIGkpOworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNldChyb3cxLCBpLCB0aGlzLmdldChyb3cyLCBpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuc2V0KHJvdzIsIGksIHRlbXApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoq
CisgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IGZyb20gdGhlIGdpdmVuIGNvbHVt
biBpbmRleAorICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gQ29sdW1uIGlu
ZGV4CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgZ2V0Q29sdW1uKGluZGV4KSB7CisgICAgICAgICAgICAgICAgdXRpbC5jaGVja0Nv
bHVtbkluZGV4KHRoaXMsIGluZGV4KTsKKyAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbmV3
IEFycmF5KHRoaXMucm93cyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW5baV0gPSB0aGlzLmdl
dChpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBj
b2x1bW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICog
UmV0dXJucyBhIG5ldyBjb2x1bW4gdmVjdG9yIGZyb20gdGhlIGdpdmVuIGNvbHVtbiBpbmRleAor
ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gQ29sdW1uIGluZGV4CisgICAg
ICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IGdldENvbHVtblZlY3RvcihpbmRleCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNv
bnN0cnVjdG9yLmNvbHVtblZlY3Rvcih0aGlzLmdldENvbHVtbihpbmRleCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFNldHMgYSBjb2x1bW4gYXQg
dGhlIGdpdmVuIGluZGV4CisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBD
b2x1bW4gaW5kZXgKKyAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl8TWF0cml4fSBhcnJheSAt
IEFycmF5IG9yIHZlY3RvcgorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSB0aGlzCisg
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNldENvbHVtbihpbmRleCwgYXJyYXkpIHsKKyAg
ICAgICAgICAgICAgICB1dGlsLmNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpOworICAgICAg
ICAgICAgICAgIGFycmF5ID0gdXRpbC5jaGVja0NvbHVtblZlY3Rvcih0aGlzLCBhcnJheSk7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLnNldChpLCBpbmRleCwgYXJyYXlbaV0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBTd2FwcyB0d28gY29sdW1ucworICAgICAg
ICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbjEgLSBGaXJzdCBjb2x1bW4gaW5kZXgKKyAg
ICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4yIC0gU2Vjb25kIGNvbHVtbiBpbmRl
eAorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSB0aGlzCisgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIHN3YXBDb2x1bW5zKGNvbHVtbjEsIGNvbHVtbjIpIHsKKyAgICAgICAgICAg
ICAgICB1dGlsLmNoZWNrQ29sdW1uSW5kZXgodGhpcywgY29sdW1uMSk7CisgICAgICAgICAgICAg
ICAgdXRpbC5jaGVja0NvbHVtbkluZGV4KHRoaXMsIGNvbHVtbjIpOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHRlbXAgPSB0aGlzLmdldChpLCBjb2x1bW4xKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5zZXQoaSwgY29sdW1uMSwgdGhpcy5nZXQoaSwgY29sdW1uMikpOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNldChpLCBjb2x1bW4yLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8qKgorICAgICAgICAgICAgICogQWRkcyB0aGUgdmFsdWVzIG9mIGEgdmVjdG9yIHRvIGVhY2gg
cm93CisgICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yIC0gQXJyYXkg
b3IgdmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRoaXMKKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgYWRkUm93VmVjdG9yKHZlY3RvcikgeworICAgICAgICAgICAg
ICAgIHZlY3RvciA9IHV0aWwuY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICsgdmVjdG9y
W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisg
ICAgICAgICAgICAgKiBTdWJ0cmFjdHMgdGhlIHZhbHVlcyBvZiBhIHZlY3RvciBmcm9tIGVhY2gg
cm93CisgICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yIC0gQXJyYXkg
b3IgdmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRoaXMKKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgc3ViUm93VmVjdG9yKHZlY3RvcikgeworICAgICAgICAgICAg
ICAgIHZlY3RvciA9IHV0aWwuY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC0gdmVjdG9y
W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisg
ICAgICAgICAgICAgKiBNdWx0aXBsaWVzIHRoZSB2YWx1ZXMgb2YgYSB2ZWN0b3Igd2l0aCBlYWNo
IHJvdworICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheXxNYXRyaXh9IHZlY3RvciAtIEFycmF5
IG9yIHZlY3RvcgorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSB0aGlzCisgICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIG11bFJvd1ZlY3Rvcih2ZWN0b3IpIHsKKyAgICAgICAgICAg
ICAgICB2ZWN0b3IgPSB1dGlsLmNoZWNrUm93VmVjdG9yKHRoaXMsIHZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChpLCBqLCB0aGlzLmdldChpLCBqKSAqIHZlY3Rv
cltqXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgor
ICAgICAgICAgICAgICogRGl2aWRlcyB0aGUgdmFsdWVzIG9mIGVhY2ggcm93IGJ5IHRob3NlIG9m
IGEgdmVjdG9yCisgICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gdmVjdG9yIC0g
QXJyYXkgb3IgdmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRoaXMKKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgZGl2Um93VmVjdG9yKHZlY3RvcikgeworICAgICAg
ICAgICAgICAgIHZlY3RvciA9IHV0aWwuY2hlY2tSb3dWZWN0b3IodGhpcywgdmVjdG9yKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopIC8g
dmVjdG9yW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBBZGRzIHRoZSB2YWx1ZXMgb2YgYSB2ZWN0b3IgdG8gZWFjaCBj
b2x1bW4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl8TWF0cml4fSB2ZWN0b3IgLSBBcnJh
eSBvciB2ZWN0b3IKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0gdGhpcworICAgICAg
ICAgICAgICovCisgICAgICAgICAgICBhZGRDb2x1bW5WZWN0b3IodmVjdG9yKSB7CisgICAgICAg
ICAgICAgICAgdmVjdG9yID0gdXRpbC5jaGVja0NvbHVtblZlY3Rvcih0aGlzLCB2ZWN0b3IpOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikg
KyB2ZWN0b3JbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvKioKKyAgICAgICAgICAgICAqIFN1YnRyYWN0cyB0aGUgdmFsdWVzIG9mIGEgdmVjdG9yIGZy
b20gZWFjaCBjb2x1bW4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl8TWF0cml4fSB2ZWN0
b3IgLSBBcnJheSBvciB2ZWN0b3IKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0gdGhp
cworICAgICAgICAgICAgICovCisgICAgICAgICAgICBzdWJDb2x1bW5WZWN0b3IodmVjdG9yKSB7
CisgICAgICAgICAgICAgICAgdmVjdG9yID0gdXRpbC5jaGVja0NvbHVtblZlY3Rvcih0aGlzLCB2
ZWN0b3IpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVt
bnM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5n
ZXQoaSwgaikgLSB2ZWN0b3JbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIE11bHRpcGxpZXMgdGhlIHZhbHVlcyBvZiBh
IHZlY3RvciB3aXRoIGVhY2ggY29sdW1uCisgICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE1h
dHJpeH0gdmVjdG9yIC0gQXJyYXkgb3IgdmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtN
YXRyaXh9IHRoaXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbXVsQ29sdW1uVmVjdG9y
KHZlY3RvcikgeworICAgICAgICAgICAgICAgIHZlY3RvciA9IHV0aWwuY2hlY2tDb2x1bW5WZWN0
b3IodGhpcywgdmVjdG9yKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMucm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
dGhpcy5jb2x1bW5zOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGks
IGosIHRoaXMuZ2V0KGksIGopICogdmVjdG9yW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBEaXZpZGVzIHRoZSB2YWx1
ZXMgb2YgZWFjaCBjb2x1bW4gYnkgdGhvc2Ugb2YgYSB2ZWN0b3IKKyAgICAgICAgICAgICAqIEBw
YXJhbSB7QXJyYXl8TWF0cml4fSB2ZWN0b3IgLSBBcnJheSBvciB2ZWN0b3IKKyAgICAgICAgICAg
ICAqIEByZXR1cm4ge01hdHJpeH0gdGhpcworICAgICAgICAgICAgICovCisgICAgICAgICAgICBk
aXZDb2x1bW5WZWN0b3IodmVjdG9yKSB7CisgICAgICAgICAgICAgICAgdmVjdG9yID0gdXRpbC5j
aGVja0NvbHVtblZlY3Rvcih0aGlzLCB2ZWN0b3IpOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgLyB2ZWN0b3JbaV0pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIE11
bHRpcGxpZXMgdGhlIHZhbHVlcyBvZiBhIHJvdyB3aXRoIGEgc2NhbGFyCisgICAgICAgICAgICAg
KiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBSb3cgaW5kZXgKKyAgICAgICAgICAgICAqIEBwYXJh
bSB7bnVtYmVyfSB2YWx1ZQorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSB0aGlzCisg
ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG11bFJvdyhpbmRleCwgdmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICB1dGlsLmNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgpOworICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZXQoaW5kZXgsIGksIHRoaXMuZ2V0KGluZGV4LCBpKSAqIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogTXVsdGlwbGllcyB0aGUg
dmFsdWVzIG9mIGEgY29sdW1uIHdpdGggYSBzY2FsYXIKKyAgICAgICAgICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBpbmRleCAtIENvbHVtbiBpbmRleAorICAgICAgICAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IHZhbHVlCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9IHRoaXMKKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgbXVsQ29sdW1uKGluZGV4LCB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHV0aWwuY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBpbmRleCk7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNldChpLCBpbmRleCwgdGhpcy5nZXQoaSwgaW5kZXgpICogdmFsdWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVt
IHZhbHVlIG9mIHRoZSBtYXRyaXgKKyAgICAgICAgICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbWF4KCkgeworICAgICAgICAgICAgICAgIHZhciB2
ID0gdGhpcy5nZXQoMCwgMCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IHRoaXMuY29sdW1uczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5n
ZXQoaSwgaikgPiB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHRoaXMuZ2V0
KGksIGopOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGluZGV4
IG9mIHRoZSBtYXhpbXVtIHZhbHVlCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgbWF4SW5kZXgoKSB7CisgICAgICAgICAgICAgICAg
dmFyIHYgPSB0aGlzLmdldCgwLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIgaWR4ID0gWzAsIDBd
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGor
KykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGopID4gdikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBqKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZHhbMF0gPSBpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlkeFsxXSA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkeDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5z
IHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBtYXRyaXgKKyAgICAgICAgICAgICAqIEByZXR1cm4g
e251bWJlcn0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWluKCkgeworICAgICAgICAg
ICAgICAgIHZhciB2ID0gdGhpcy5nZXQoMCwgMCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5nZXQoaSwgaikgPCB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
diA9IHRoaXMuZ2V0KGksIGopOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVy
bnMgdGhlIGluZGV4IG9mIHRoZSBtaW5pbXVtIHZhbHVlCisgICAgICAgICAgICAgKiBAcmV0dXJu
IHtBcnJheX0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWluSW5kZXgoKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHYgPSB0aGlzLmdldCgwLCAwKTsKKyAgICAgICAgICAgICAgICB2YXIg
aWR4ID0gWzAsIDBdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5y
b3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlz
LmNvbHVtbnM7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KGks
IGopIDwgdikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBq
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhbMF0gPSBpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkeFsxXSA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGlkeDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAg
ICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIG9mIG9uZSByb3cKKyAgICAgICAgICAgICAq
IEBwYXJhbSB7bnVtYmVyfSByb3cgLSBSb3cgaW5kZXgKKyAgICAgICAgICAgICAqIEByZXR1cm4g
e251bWJlcn0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWF4Um93KHJvdykgeworICAg
ICAgICAgICAgICAgIHV0aWwuY2hlY2tSb3dJbmRleCh0aGlzLCByb3cpOworICAgICAgICAgICAg
ICAgIHZhciB2ID0gdGhpcy5nZXQocm93LCAwKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLmdldChyb3csIGkpID4gdikgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHRoaXMu
Z2V0KHJvdywgaSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8q
KgorICAgICAgICAgICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1heGltdW0gdmFsdWUg
b2Ygb25lIHJvdworICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAtIFJvdyBpbmRl
eAorICAgICAgICAgICAgICogQHJldHVybiB7QXJyYXl9CisgICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIG1heFJvd0luZGV4KHJvdykgeworICAgICAgICAgICAgICAgIHV0aWwuY2hlY2tSb3dJ
bmRleCh0aGlzLCByb3cpOworICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5nZXQocm93LCAw
KTsKKyAgICAgICAgICAgICAgICB2YXIgaWR4ID0gW3JvdywgMF07CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5nZXQocm93LCBpKSA+IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHYgPSB0aGlzLmdldChyb3csIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWR4WzFdID0g
aTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gaWR4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAg
ICAgICAgICAqIFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgb2Ygb25lIHJvdworICAgICAgICAg
ICAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAtIFJvdyBpbmRleAorICAgICAgICAgICAgICogQHJl
dHVybiB7bnVtYmVyfQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtaW5Sb3cocm93KSB7
CisgICAgICAgICAgICAgICAgdXRpbC5jaGVja1Jvd0luZGV4KHRoaXMsIHJvdyk7CisgICAgICAg
ICAgICAgICAgdmFyIHYgPSB0aGlzLmdldChyb3csIDApOworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAxOyBpIDwgdGhpcy5jb2x1bW5zOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuZ2V0KHJvdywgaSkgPCB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0g
dGhpcy5nZXQocm93LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF4aW11bSB2
YWx1ZSBvZiBvbmUgcm93CisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93IC0gUm93
IGluZGV4CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0KKyAgICAgICAgICAgICAqLwor
ICAgICAgICAgICAgbWluUm93SW5kZXgocm93KSB7CisgICAgICAgICAgICAgICAgdXRpbC5jaGVj
a1Jvd0luZGV4KHRoaXMsIHJvdyk7CisgICAgICAgICAgICAgICAgdmFyIHYgPSB0aGlzLmdldChy
b3csIDApOworICAgICAgICAgICAgICAgIHZhciBpZHggPSBbcm93LCAwXTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuY29sdW1uczsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmdldChyb3csIGkpIDwgdikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdiA9IHRoaXMuZ2V0KHJvdywgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZHhb
MV0gPSBpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBpZHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgor
ICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBvbmUgY29sdW1uCisg
ICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIC0gQ29sdW1uIGluZGV4CisgICAg
ICAgICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1heENvbHVtbihjb2x1bW4pIHsKKyAgICAgICAgICAgICAgICB1dGlsLmNoZWNrQ29sdW1uSW5k
ZXgodGhpcywgY29sdW1uKTsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuZ2V0KDAsIGNv
bHVtbik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA+IHYpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biB2OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJl
dHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXhpbXVtIHZhbHVlIG9mIG9uZSBjb2x1bW4KKyAgICAg
ICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gLSBDb2x1bW4gaW5kZXgKKyAgICAgICAg
ICAgICAqIEByZXR1cm4ge0FycmF5fQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBtYXhD
b2x1bW5JbmRleChjb2x1bW4pIHsKKyAgICAgICAgICAgICAgICB1dGlsLmNoZWNrQ29sdW1uSW5k
ZXgodGhpcywgY29sdW1uKTsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHRoaXMuZ2V0KDAsIGNv
bHVtbik7CisgICAgICAgICAgICAgICAgdmFyIGlkeCA9IFswLCBjb2x1bW5dOworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuZ2V0KGksIGNvbHVtbikgPiB2KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2ID0gdGhpcy5nZXQoaSwgY29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlkeFswXSA9IGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGlkeDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIG9mIG9uZSBjb2x1
bW4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gLSBDb2x1bW4gaW5kZXgK
KyAgICAgICAgICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbWluQ29sdW1uKGNvbHVtbikgeworICAgICAgICAgICAgICAgIHV0aWwuY2hlY2tDb2x1
bW5JbmRleCh0aGlzLCBjb2x1bW4pOworICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5nZXQo
MCwgY29sdW1uKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMucm93
czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldChpLCBjb2x1bW4pIDwg
dikgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHRoaXMuZ2V0KGksIGNvbHVtbik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAg
ICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1pbmltdW0gdmFsdWUgb2Ygb25lIGNvbHVtbgor
ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAtIENvbHVtbiBpbmRleAorICAg
ICAgICAgICAgICogQHJldHVybiB7QXJyYXl9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1pbkNvbHVtbkluZGV4KGNvbHVtbikgeworICAgICAgICAgICAgICAgIHV0aWwuY2hlY2tDb2x1
bW5JbmRleCh0aGlzLCBjb2x1bW4pOworICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5nZXQo
MCwgY29sdW1uKTsKKyAgICAgICAgICAgICAgICB2YXIgaWR4ID0gWzAsIGNvbHVtbl07CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoaSwgY29sdW1uKSA8IHYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHYgPSB0aGlzLmdldChpLCBjb2x1bW4pOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWR4WzBdID0gaTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gaWR4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUg
ZGlhZ29uYWwgdmFsdWVzIG9mIHRoZSBtYXRyaXgKKyAgICAgICAgICAgICAqIEByZXR1cm4ge0Fy
cmF5fQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBkaWFnKCkgeworICAgICAgICAgICAg
ICAgIHZhciBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7CisgICAgICAg
ICAgICAgICAgdmFyIGRpYWcgPSBuZXcgQXJyYXkobWluKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG1pbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRpYWdbaV0g
PSB0aGlzLmdldChpLCBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRpYWc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAg
ICogUmV0dXJucyB0aGUgc3VtIGJ5IHRoZSBhcmd1bWVudCBnaXZlbiwgaWYgbm8gYXJndW1lbnQg
Z2l2ZW4sCisgICAgICAgICAgICAgKiBpdCByZXR1cm5zIHRoZSBzdW0gb2YgYWxsIGVsZW1lbnRz
IG9mIHRoZSBtYXRyaXguCisgICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYnkgLSBzdW0g
YnkgJ3Jvdycgb3IgJ2NvbHVtbicuCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh8bnVt
YmVyfQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzdW0oYnkpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGJ5KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jvdyc6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5zdW1CeVJvdyh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnY29sdW1uJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB1dGlsLnN1bUJ5Q29sdW1uKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuc3VtQWxsKHRoaXMpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAg
ICAgKiBSZXR1cm5zIHRoZSBtZWFuIG9mIGFsbCBlbGVtZW50cyBvZiB0aGUgbWF0cml4CisgICAg
ICAgICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IG1lYW4oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtKCkgLyB0aGlzLnNpemU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJu
cyB0aGUgcHJvZHVjdCBvZiBhbGwgZWxlbWVudHMgb2YgdGhlIG1hdHJpeAorICAgICAgICAgICAg
ICogQHJldHVybiB7bnVtYmVyfQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwcm9kKCkg
eworICAgICAgICAgICAgICAgIHZhciBwcm9kID0gMTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2QgKj0gdGhpcy5nZXQoaSwgaik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Q7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ29tcHV0ZXMgdGhlIGN1bXVsYXRp
dmUgc3VtIG9mIHRoZSBtYXRyaXggZWxlbWVudHMgKGluIHBsYWNlLCByb3cgYnkgcm93KQorICAg
ICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSB0aGlzCisgICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIGN1bXVsYXRpdmVTdW0oKSB7CisgICAgICAgICAgICAgICAgdmFyIHN1bSA9IDA7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gdGhpcy5nZXQoaSwgaik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnNldChpLCBqLCBzdW0pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENvbXB1dGVzIHRo
ZSBkb3QgKHNjYWxhcikgcHJvZHVjdCBiZXR3ZWVuIHRoZSBtYXRyaXggYW5kIGFub3RoZXIKKyAg
ICAgICAgICAgICAqIEBwYXJhbSB7TWF0cml4fSB2ZWN0b3IyIHZlY3RvcgorICAgICAgICAgICAg
ICogQHJldHVybiB7bnVtYmVyfQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBkb3QodmVj
dG9yMikgeworICAgICAgICAgICAgICAgIGlmIChNYXRyaXguaXNNYXRyaXgodmVjdG9yMikpIHZl
Y3RvcjIgPSB2ZWN0b3IyLnRvMURBcnJheSgpOworICAgICAgICAgICAgICAgIHZhciB2ZWN0b3Ix
ID0gdGhpcy50bzFEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBpZiAodmVjdG9yMS5sZW5ndGgg
IT09IHZlY3RvcjIubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5n
ZUVycm9yKCd2ZWN0b3JzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUnKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGRvdCA9IDA7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB2ZWN0b3IxLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRvdCArPSB2ZWN0b3IxW2ldICogdmVjdG9yMltpXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRvdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBtYXRyaXggcHJvZHVjdCBiZXR3ZWVuIHRo
aXMgYW5kIG90aGVyCisgICAgICAgICAgICAgKiBAcGFyYW0ge01hdHJpeH0gb3RoZXIKKyAgICAg
ICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg
bW11bChvdGhlcikgeworICAgICAgICAgICAgICAgIG90aGVyID0gdGhpcy5jb25zdHJ1Y3Rvci5j
aGVja01hdHJpeChvdGhlcik7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAhPT0g
b3RoZXIucm93cykgeworICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0
LWxpbmUgbm8tY29uc29sZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ051bWJl
ciBvZiBjb2x1bW5zIG9mIGxlZnQgbWF0cml4IGFyZSBub3QgZXF1YWwgdG8gbnVtYmVyIG9mIHJv
d3Mgb2YgcmlnaHQgbWF0cml4LicpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHZhciBtID0gdGhpcy5yb3dzOworICAgICAgICAgICAgICAgIHZhciBuID0gdGhpcy5jb2x1
bW5zOworICAgICAgICAgICAgICAgIHZhciBwID0gb3RoZXIuY29sdW1uczsKKworICAgICAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcltTeW1ib2wuc3BlY2llc10o
bSwgcCk7CisKKyAgICAgICAgICAgICAgICB2YXIgQmNvbGogPSBuZXcgQXJyYXkobik7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwOyBqKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJjb2xqW2tdID0gb3RoZXIuZ2V0KGssIGopOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoayA9IDA7IGsgPCBuOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICs9
IHRoaXMuZ2V0KGksIGspICogQmNvbGpba107CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoaSwgaiwgcyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyYXNzZW4yeDIob3RoZXIpIHsK
KyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29uc3RydWN0b3JbU3ltYm9s
LnNwZWNpZXNdKDIsIDIpOworICAgICAgICAgICAgICAgIGNvbnN0IGExMSA9IHRoaXMuZ2V0KDAs
IDApOworICAgICAgICAgICAgICAgIGNvbnN0IGIxMSA9IG90aGVyLmdldCgwLCAwKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBhMTIgPSB0aGlzLmdldCgwLCAxKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBiMTIgPSBvdGhlci5nZXQoMCwgMSk7CisgICAgICAgICAgICAgICAgY29uc3QgYTIxID0g
dGhpcy5nZXQoMSwgMCk7CisgICAgICAgICAgICAgICAgY29uc3QgYjIxID0gb3RoZXIuZ2V0KDEs
IDApOworICAgICAgICAgICAgICAgIGNvbnN0IGEyMiA9IHRoaXMuZ2V0KDEsIDEpOworICAgICAg
ICAgICAgICAgIGNvbnN0IGIyMiA9IG90aGVyLmdldCgxLCAxKTsKKworICAgICAgICAgICAgICAg
IC8vIENvbXB1dGUgaW50ZXJtZWRpYXRlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICBjb25zdCBt
MSA9IChhMTEgKyBhMjIpICogKGIxMSArIGIyMik7CisgICAgICAgICAgICAgICAgY29uc3QgbTIg
PSAoYTIxICsgYTIyKSAqIGIxMTsKKyAgICAgICAgICAgICAgICBjb25zdCBtMyA9IGExMSAqIChi
MTIgLSBiMjIpOworICAgICAgICAgICAgICAgIGNvbnN0IG00ID0gYTIyICogKGIyMSAtIGIxMSk7
CisgICAgICAgICAgICAgICAgY29uc3QgbTUgPSAoYTExICsgYTEyKSAqIGIyMjsKKyAgICAgICAg
ICAgICAgICBjb25zdCBtNiA9IChhMjEgLSBhMTEpICogKGIxMSArIGIxMik7CisgICAgICAgICAg
ICAgICAgY29uc3QgbTcgPSAoYTEyIC0gYTIyKSAqIChiMjEgKyBiMjIpOworCisgICAgICAgICAg
ICAgICAgLy8gQ29tYmluZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGludG8gdGhlIG91dHB1dC4KKyAg
ICAgICAgICAgICAgICBjb25zdCBjMDAgPSBtMSArIG00IC0gbTUgKyBtNzsKKyAgICAgICAgICAg
ICAgICBjb25zdCBjMDEgPSBtMyArIG01OworICAgICAgICAgICAgICAgIGNvbnN0IGMxMCA9IG0y
ICsgbTQ7CisgICAgICAgICAgICAgICAgY29uc3QgYzExID0gbTEgLSBtMiArIG0zICsgbTY7CisK
KyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KDAsIDAsIGMwMCk7CisgICAgICAgICAgICAgICAg
cmVzdWx0LnNldCgwLCAxLCBjMDEpOworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoMSwgMCwg
YzEwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KDEsIDEsIGMxMSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyYXNz
ZW4zeDMob3RoZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29u
c3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdKDMsIDMpOworCisgICAgICAgICAgICAgICAgY29uc3Qg
YTAwID0gdGhpcy5nZXQoMCwgMCk7CisgICAgICAgICAgICAgICAgY29uc3QgYTAxID0gdGhpcy5n
ZXQoMCwgMSk7CisgICAgICAgICAgICAgICAgY29uc3QgYTAyID0gdGhpcy5nZXQoMCwgMik7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYTEwID0gdGhpcy5nZXQoMSwgMCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgYTExID0gdGhpcy5nZXQoMSwgMSk7CisgICAgICAgICAgICAgICAgY29uc3QgYTEy
ID0gdGhpcy5nZXQoMSwgMik7CisgICAgICAgICAgICAgICAgY29uc3QgYTIwID0gdGhpcy5nZXQo
MiwgMCk7CisgICAgICAgICAgICAgICAgY29uc3QgYTIxID0gdGhpcy5nZXQoMiwgMSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgYTIyID0gdGhpcy5nZXQoMiwgMik7CisKKyAgICAgICAgICAgICAg
ICBjb25zdCBiMDAgPSBvdGhlci5nZXQoMCwgMCk7CisgICAgICAgICAgICAgICAgY29uc3QgYjAx
ID0gb3RoZXIuZ2V0KDAsIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGIwMiA9IG90aGVyLmdl
dCgwLCAyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBiMTAgPSBvdGhlci5nZXQoMSwgMCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYjExID0gb3RoZXIuZ2V0KDEsIDEpOworICAgICAgICAgICAg
ICAgIGNvbnN0IGIxMiA9IG90aGVyLmdldCgxLCAyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBi
MjAgPSBvdGhlci5nZXQoMiwgMCk7CisgICAgICAgICAgICAgICAgY29uc3QgYjIxID0gb3RoZXIu
Z2V0KDIsIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGIyMiA9IG90aGVyLmdldCgyLCAyKTsK
KworICAgICAgICAgICAgICAgIGNvbnN0IG0xID0gKGEwMCArIGEwMSArIGEwMiAtIGExMCAtIGEx
MSAtIGEyMSAtIGEyMikgKiBiMTE7CisgICAgICAgICAgICAgICAgY29uc3QgbTIgPSAoYTAwIC0g
YTEwKSAqICgtYjAxICsgYjExKTsKKyAgICAgICAgICAgICAgICBjb25zdCBtMyA9IGExMSAqICgt
YjAwICsgYjAxICsgYjEwIC0gYjExIC0gYjEyIC0gYjIwICsgYjIyKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBtNCA9ICgtYTAwICsgYTEwICsgYTExKSAqIChiMDAgLSBiMDEgKyBiMTEpOworICAg
ICAgICAgICAgICAgIGNvbnN0IG01ID0gKGExMCArIGExMSkgKiAoLWIwMCArIGIwMSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgbTYgPSBhMDAgKiBiMDA7CisgICAgICAgICAgICAgICAgY29uc3Qg
bTcgPSAoLWEwMCArIGEyMCArIGEyMSkgKiAoYjAwIC0gYjAyICsgYjEyKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBtOCA9ICgtYTAwICsgYTIwKSAqIChiMDIgLSBiMTIpOworICAgICAgICAgICAg
ICAgIGNvbnN0IG05ID0gKGEyMCArIGEyMSkgKiAoLWIwMCArIGIwMik7CisgICAgICAgICAgICAg
ICAgY29uc3QgbTEwID0gKGEwMCArIGEwMSArIGEwMiAtIGExMSAtIGExMiAtIGEyMCAtIGEyMSkg
KiBiMTI7CisgICAgICAgICAgICAgICAgY29uc3QgbTExID0gYTIxICogKC1iMDAgKyBiMDIgKyBi
MTAgLSBiMTEgLSBiMTIgLSBiMjAgKyBiMjEpOworICAgICAgICAgICAgICAgIGNvbnN0IG0xMiA9
ICgtYTAyICsgYTIxICsgYTIyKSAqIChiMTEgKyBiMjAgLSBiMjEpOworICAgICAgICAgICAgICAg
IGNvbnN0IG0xMyA9IChhMDIgLSBhMjIpICogKGIxMSAtIGIyMSk7CisgICAgICAgICAgICAgICAg
Y29uc3QgbTE0ID0gYTAyICogYjIwOworICAgICAgICAgICAgICAgIGNvbnN0IG0xNSA9IChhMjEg
KyBhMjIpICogKC1iMjAgKyBiMjEpOworICAgICAgICAgICAgICAgIGNvbnN0IG0xNiA9ICgtYTAy
ICsgYTExICsgYTEyKSAqIChiMTIgKyBiMjAgLSBiMjIpOworICAgICAgICAgICAgICAgIGNvbnN0
IG0xNyA9IChhMDIgLSBhMTIpICogKGIxMiAtIGIyMik7CisgICAgICAgICAgICAgICAgY29uc3Qg
bTE4ID0gKGExMSArIGExMikgKiAoLWIyMCArIGIyMik7CisgICAgICAgICAgICAgICAgY29uc3Qg
bTE5ID0gYTAxICogYjEwOworICAgICAgICAgICAgICAgIGNvbnN0IG0yMCA9IGExMiAqIGIyMTsK
KyAgICAgICAgICAgICAgICBjb25zdCBtMjEgPSBhMTAgKiBiMDI7CisgICAgICAgICAgICAgICAg
Y29uc3QgbTIyID0gYTIwICogYjAxOworICAgICAgICAgICAgICAgIGNvbnN0IG0yMyA9IGEyMiAq
IGIyMjsKKworICAgICAgICAgICAgICAgIGNvbnN0IGMwMCA9IG02ICsgbTE0ICsgbTE5OworICAg
ICAgICAgICAgICAgIGNvbnN0IGMwMSA9IG0xICsgbTQgKyBtNSArIG02ICsgbTEyICsgbTE0ICsg
bTE1OworICAgICAgICAgICAgICAgIGNvbnN0IGMwMiA9IG02ICsgbTcgKyBtOSArIG0xMCArIG0x
NCArIG0xNiArIG0xODsKKyAgICAgICAgICAgICAgICBjb25zdCBjMTAgPSBtMiArIG0zICsgbTQg
KyBtNiArIG0xNCArIG0xNiArIG0xNzsKKyAgICAgICAgICAgICAgICBjb25zdCBjMTEgPSBtMiAr
IG00ICsgbTUgKyBtNiArIG0yMDsKKyAgICAgICAgICAgICAgICBjb25zdCBjMTIgPSBtMTQgKyBt
MTYgKyBtMTcgKyBtMTggKyBtMjE7CisgICAgICAgICAgICAgICAgY29uc3QgYzIwID0gbTYgKyBt
NyArIG04ICsgbTExICsgbTEyICsgbTEzICsgbTE0OworICAgICAgICAgICAgICAgIGNvbnN0IGMy
MSA9IG0xMiArIG0xMyArIG0xNCArIG0xNSArIG0yMjsKKyAgICAgICAgICAgICAgICBjb25zdCBj
MjIgPSBtNiArIG03ICsgbTggKyBtOSArIG0yMzsKKworICAgICAgICAgICAgICAgIHJlc3VsdC5z
ZXQoMCwgMCwgYzAwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KDAsIDEsIGMwMSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LnNldCgwLCAyLCBjMDIpOworICAgICAgICAgICAgICAgIHJl
c3VsdC5zZXQoMSwgMCwgYzEwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KDEsIDEsIGMx
MSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldCgxLCAyLCBjMTIpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5zZXQoMiwgMCwgYzIwKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KDIs
IDEsIGMyMSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldCgyLCAyLCBjMjIpOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8q
KgorICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbWF0cml4IHByb2R1Y3QgYmV0d2VlbiB4IGFu
ZCB5LiBNb3JlIGVmZmljaWVudCB0aGFuIG1tdWwob3RoZXIpIG9ubHkgd2hlbiB3ZSBtdWx0aXBs
eSBzcXVhcmVkIG1hdHJpeCBhbmQgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4IGlzID4gMTAw
MC4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7TWF0cml4fSB5CisgICAgICAgICAgICAgKiBAcmV0
dXJuIHtNYXRyaXh9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1tdWxTdHJhc3Nlbih5
KSB7CisgICAgICAgICAgICAgICAgdmFyIHggPSB0aGlzLmNsb25lKCk7CisgICAgICAgICAgICAg
ICAgdmFyIHIxID0geC5yb3dzOworICAgICAgICAgICAgICAgIHZhciBjMSA9IHguY29sdW1uczsK
KyAgICAgICAgICAgICAgICB2YXIgcjIgPSB5LnJvd3M7CisgICAgICAgICAgICAgICAgdmFyIGMy
ID0geS5jb2x1bW5zOworICAgICAgICAgICAgICAgIGlmIChjMSAhPT0gcjIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBNdWx0aXBseWluZyAke3IxfSB4ICR7YzF9IGFu
ZCAke3IyfSB4ICR7YzJ9IG1hdHJpeDogZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guYCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUHV0IGEgbWF0cml4IGludG8gdGhl
IHRvcCBsZWZ0IG9mIGEgbWF0cml4IG9mIHplcm9zLgorICAgICAgICAgICAgICAgIC8vIGByb3dz
YCBhbmQgYGNvbHNgIGFyZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgb3V0cHV0IG1hdHJpeC4KKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbiBlbWJlZChtYXQsIHJvd3MsIGNvbHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHIgPSBtYXQucm93czsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGMg
PSBtYXQuY29sdW1uczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyID09PSByb3dzKSAmJiAo
YyA9PT0gY29scykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXQ7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVz
dWx0YXQgPSBNYXRyaXguemVyb3Mocm93cywgY29scyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChtYXQsIDAsIDApOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGF0OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm90aCBt
YXRyaWNlcyBhcmUgdGhlIHNhbWUgc2l6ZS4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGV4
Y2x1c2l2ZWx5IGZvciBzaW1wbGljaXR5OgorICAgICAgICAgICAgICAgIC8vIHRoaXMgYWxnb3Jp
dGhtIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRoIG1hdHJpY2VzIG9mIGRpZmZlcmVudCBzaXplcy4K
KworICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5tYXgocjEsIHIyKTsKKyAgICAgICAgICAg
ICAgICB2YXIgYyA9IE1hdGgubWF4KGMxLCBjMik7CisgICAgICAgICAgICAgICAgeCA9IGVtYmVk
KHgsIHIsIGMpOworICAgICAgICAgICAgICAgIHkgPSBlbWJlZCh5LCByLCBjKTsKKworICAgICAg
ICAgICAgICAgIC8vIE91ciByZWN1cnNpdmUgbXVsdGlwbGljYXRpb24gZnVuY3Rpb24uCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gYmxvY2tNdWx0KGEsIGIsIHJvd3MsIGNvbHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIHNtYWxsIG1hdHJpY2VzLCByZXNvcnQgdG8gbmFpdmUgbXVs
dGlwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzIDw9IDUxMiB8fCBjb2xz
IDw9IDUxMikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubW11bChiKTsgLy8g
YSBpcyBlcXVpdmFsZW50IHRvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIC8vIEFwcGx5IGR5bmFtaWMgcGFkZGluZy4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKChyb3dzICUgMiA9PT0gMSkgJiYgKGNvbHMgJSAyID09PSAxKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzICsgMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiID0gZW1iZWQoYiwgcm93cyArIDEsIGNvbHMgKyAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dzICUgMiA9PT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYSA9IGVtYmVkKGEsIHJvd3MgKyAxLCBjb2xzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGIgPSBlbWJlZChiLCByb3dzICsgMSwgY29scyk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY29scyAlIDIgPT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGEgPSBlbWJlZChhLCByb3dzLCBjb2xzICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
ID0gZW1iZWQoYiwgcm93cywgY29scyArIDEpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGhhbGZSb3dzID0gcGFyc2VJbnQoYS5yb3dzIC8gMik7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBoYWxmQ29scyA9IHBhcnNlSW50KGEuY29sdW1ucyAvIDIp
OworICAgICAgICAgICAgICAgICAgICAvLyBTdWJkaXZpZGUgaW5wdXQgbWF0cmljZXMuCisgICAg
ICAgICAgICAgICAgICAgIHZhciBhMTEgPSBhLnN1Yk1hdHJpeCgwLCBoYWxmUm93cyAtIDEsIDAs
IGhhbGZDb2xzIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBiMTEgPSBiLnN1Yk1hdHJp
eCgwLCBoYWxmUm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGExMiA9IGEuc3ViTWF0cml4KDAsIGhhbGZSb3dzIC0gMSwgaGFsZkNvbHMsIGEuY29s
dW1ucyAtIDEpOworICAgICAgICAgICAgICAgICAgICB2YXIgYjEyID0gYi5zdWJNYXRyaXgoMCwg
aGFsZlJvd3MgLSAxLCBoYWxmQ29scywgYi5jb2x1bW5zIC0gMSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGEyMSA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCAwLCBoYWxm
Q29scyAtIDEpOworICAgICAgICAgICAgICAgICAgICB2YXIgYjIxID0gYi5zdWJNYXRyaXgoaGFs
ZlJvd3MsIGIucm93cyAtIDEsIDAsIGhhbGZDb2xzIC0gMSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGEyMiA9IGEuc3ViTWF0cml4KGhhbGZSb3dzLCBhLnJvd3MgLSAxLCBoYWxmQ29scywg
YS5jb2x1bW5zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBiMjIgPSBiLnN1Yk1hdHJp
eChoYWxmUm93cywgYi5yb3dzIC0gMSwgaGFsZkNvbHMsIGIuY29sdW1ucyAtIDEpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgaW50ZXJtZWRpYXRlIHZhbHVlcy4KKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG0xID0gYmxvY2tNdWx0KE1hdHJpeC5hZGQoYTExLCBhMjIpLCBNYXRy
aXguYWRkKGIxMSwgYjIyKSwgaGFsZlJvd3MsIGhhbGZDb2xzKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG0yID0gYmxvY2tNdWx0KE1hdHJpeC5hZGQoYTIxLCBhMjIpLCBiMTEsIGhhbGZSb3dz
LCBoYWxmQ29scyk7CisgICAgICAgICAgICAgICAgICAgIHZhciBtMyA9IGJsb2NrTXVsdChhMTEs
IE1hdHJpeC5zdWIoYjEyLCBiMjIpLCBoYWxmUm93cywgaGFsZkNvbHMpOworICAgICAgICAgICAg
ICAgICAgICB2YXIgbTQgPSBibG9ja011bHQoYTIyLCBNYXRyaXguc3ViKGIyMSwgYjExKSwgaGFs
ZlJvd3MsIGhhbGZDb2xzKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG01ID0gYmxvY2tNdWx0
KE1hdHJpeC5hZGQoYTExLCBhMTIpLCBiMjIsIGhhbGZSb3dzLCBoYWxmQ29scyk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBtNiA9IGJsb2NrTXVsdChNYXRyaXguc3ViKGEyMSwgYTExKSwgTWF0
cml4LmFkZChiMTEsIGIxMiksIGhhbGZSb3dzLCBoYWxmQ29scyk7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBtNyA9IGJsb2NrTXVsdChNYXRyaXguc3ViKGExMiwgYTIyKSwgTWF0cml4LmFkZChi
MjEsIGIyMiksIGhhbGZSb3dzLCBoYWxmQ29scyk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
Q29tYmluZSBpbnRlcm1lZGlhdGUgdmFsdWVzIGludG8gdGhlIG91dHB1dC4KKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGMxMSA9IE1hdHJpeC5hZGQobTEsIG00KTsKKyAgICAgICAgICAgICAgICAg
ICAgYzExLnN1YihtNSk7CisgICAgICAgICAgICAgICAgICAgIGMxMS5hZGQobTcpOworICAgICAg
ICAgICAgICAgICAgICB2YXIgYzEyID0gTWF0cml4LmFkZChtMywgbTUpOworICAgICAgICAgICAg
ICAgICAgICB2YXIgYzIxID0gTWF0cml4LmFkZChtMiwgbTQpOworICAgICAgICAgICAgICAgICAg
ICB2YXIgYzIyID0gTWF0cml4LnN1YihtMSwgbTIpOworICAgICAgICAgICAgICAgICAgICBjMjIu
YWRkKG0zKTsKKyAgICAgICAgICAgICAgICAgICAgYzIyLmFkZChtNik7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy9Dcm9wIG91dHB1dCB0byB0aGUgZGVzaXJlZCBzaXplICh1bmRvIGR5bmFtaWMg
cGFkZGluZykuCisgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRhdCA9IE1hdHJpeC56ZXJv
cygyICogYzExLnJvd3MsIDIgKiBjMTEuY29sdW1ucyk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMSwgMCwgMCk7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdGF0ID0gcmVzdWx0YXQuc2V0U3ViTWF0cml4KGMxMiwgYzExLnJvd3MsIDAp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHRhdCA9IHJlc3VsdGF0LnNldFN1Yk1hdHJpeChj
MjEsIDAsIGMxMS5jb2x1bW5zKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0YXQgPSByZXN1
bHRhdC5zZXRTdWJNYXRyaXgoYzIyLCBjMTEucm93cywgYzExLmNvbHVtbnMpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0YXQuc3ViTWF0cml4KDAsIHJvd3MgLSAxLCAwLCBjb2xz
IC0gMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBibG9ja011
bHQoeCwgeSwgciwgYyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogUmV0dXJucyBhIHJvdy1ieS1yb3cgc2NhbGVkIG1hdHJpeAorICAgICAgICAgICAg
ICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gLSBNaW5pbXVtIHNjYWxlZCB2YWx1ZQorICAgICAg
ICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFttYXg9MV0gLSBNYXhpbXVtIHNjYWxlZCB2YWx1ZQor
ICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSAtIFRoZSBzY2FsZWQgbWF0cml4CisgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIHNjYWxlUm93cyhtaW4sIG1heCkgeworICAgICAgICAg
ICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkID8gMCA6IG1pbjsKKyAgICAgICAgICAgICAg
ICBtYXggPSBtYXggPT09IHVuZGVmaW5lZCA/IDEgOiBtYXg7CisgICAgICAgICAgICAgICAgaWYg
KG1pbiA+PSBtYXgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3Io
J21pbiBzaG91bGQgYmUgc3RyaWN0bHkgc21hbGxlciB0aGFuIG1heCcpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgbmV3TWF0cml4ID0gdGhpcy5jb25zdHJ1Y3Rvci5l
bXB0eSh0aGlzLnJvd3MsIHRoaXMuY29sdW1ucyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICB2YXIgc2Nh
bGVkID0gYXJyYXlVdGlscy5zY2FsZSh0aGlzLmdldFJvdyhpKSwge21pbiwgbWF4fSk7CisgICAg
ICAgICAgICAgICAgICAgIG5ld01hdHJpeC5zZXRSb3coaSwgc2NhbGVkKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld01hdHJpeDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IGNvbHVtbi1i
eS1jb2x1bW4gc2NhbGVkIG1hdHJpeAorICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtt
aW49MF0gLSBNaW5pbXVtIHNjYWxlZCB2YWx1ZQorICAgICAgICAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IFttYXg9MV0gLSBNYXhpbXVtIHNjYWxlZCB2YWx1ZQorICAgICAgICAgICAgICogQHJldHVy
biB7TWF0cml4fSAtIFRoZSBuZXcgc2NhbGVkIG1hdHJpeAorICAgICAgICAgICAgICogQGV4YW1w
bGUKKyAgICAgICAgICAgICAqIHZhciBtYXRyaXggPSBuZXcgTWF0cml4KFtbMSwyXSxbLTEsMF1d
KTsKKyAgICAgICAgICAgICAqIHZhciBzY2FsZWRNYXRyaXggPSBtYXRyaXguc2NhbGVDb2x1bW5z
KCk7IC8vIFtbMSwxXSxbMCwwXV0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc2NhbGVD
b2x1bW5zKG1pbiwgbWF4KSB7CisgICAgICAgICAgICAgICAgbWluID0gbWluID09PSB1bmRlZmlu
ZWQgPyAwIDogbWluOworICAgICAgICAgICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkID8g
MSA6IG1heDsKKyAgICAgICAgICAgICAgICBpZiAobWluID49IG1heCkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWluIHNob3VsZCBiZSBzdHJpY3RseSBzbWFs
bGVyIHRoYW4gbWF4Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBu
ZXdNYXRyaXggPSB0aGlzLmNvbnN0cnVjdG9yLmVtcHR5KHRoaXMucm93cywgdGhpcy5jb2x1bW5z
KTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1uczsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZWQgPSBhcnJheVV0aWxzLnNjYWxlKHRo
aXMuZ2V0Q29sdW1uKGkpLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW46IG1pbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1heDogbWF4CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICBuZXdNYXRyaXguc2V0Q29sdW1uKGksIHNjYWxlZCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdNYXRyaXg7CisgICAgICAg
ICAgICB9CisKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIHRoZSBL
cm9uZWNrZXIgcHJvZHVjdCAoYWxzbyBrbm93biBhcyB0ZW5zb3IgcHJvZHVjdCkgYmV0d2VlbiB0
aGlzIGFuZCBvdGhlcgorICAgICAgICAgICAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL0tyb25lY2tlcl9wcm9kdWN0CisgICAgICAgICAgICAgKiBAcGFyYW0ge01hdHJpeH0g
b3RoZXIKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0KKyAgICAgICAgICAgICAqLwor
ICAgICAgICAgICAga3JvbmVja2VyUHJvZHVjdChvdGhlcikgeworICAgICAgICAgICAgICAgIG90
aGVyID0gdGhpcy5jb25zdHJ1Y3Rvci5jaGVja01hdHJpeChvdGhlcik7CisKKyAgICAgICAgICAg
ICAgICB2YXIgbSA9IHRoaXMucm93czsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXMuY29s
dW1uczsKKyAgICAgICAgICAgICAgICB2YXIgcCA9IG90aGVyLnJvd3M7CisgICAgICAgICAgICAg
ICAgdmFyIHEgPSBvdGhlci5jb2x1bW5zOworCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IG5ldyB0aGlzLmNvbnN0cnVjdG9yW1N5bWJvbC5zcGVjaWVzXShtICogcCwgbiAqIHEpOworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBrID0gMDsgayA8IHA7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgcTsgbCsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtwICogaSArIGtdW3EgKiBqICsgbF0gPSB0aGlzLmdldChpLCBq
KSAqIG90aGVyLmdldChrLCBsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBUcmFuc3Bvc2VzIHRoZSBtYXRyaXggYW5k
IHJldHVybnMgYSBuZXcgb25lIGNvbnRhaW5pbmcgdGhlIHJlc3VsdAorICAgICAgICAgICAgICog
QHJldHVybiB7TWF0cml4fQorICAgICAgICAgICAgICovCisgICAgICAgICAgICB0cmFuc3Bvc2Uo
KSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yW1N5
bWJvbC5zcGVjaWVzXSh0aGlzLmNvbHVtbnMsIHRoaXMucm93cyk7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuc2V0KGosIGksIHRoaXMuZ2V0KGksIGopKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFNv
cnRzIHRoZSByb3dzIChpbiBwbGFjZSkKKyAgICAgICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259
IGNvbXBhcmVGdW5jdGlvbiAtIHVzdWFsIEFycmF5LnByb3RvdHlwZS5zb3J0IGNvbXBhcmlzb24g
ZnVuY3Rpb24KKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeH0gdGhpcworICAgICAgICAg
ICAgICovCisgICAgICAgICAgICBzb3J0Um93cyhjb21wYXJlRnVuY3Rpb24pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29tcGFyZUZ1bmN0aW9uID09PSB1bmRlZmluZWQpIGNvbXBhcmVGdW5jdGlv
biA9IGNvbXBhcmVOdW1iZXJzOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5yb3dzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSb3coaSwgdGhp
cy5nZXRSb3coaSkuc29ydChjb21wYXJlRnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8qKgorICAgICAgICAgICAgICogU29ydHMgdGhlIGNvbHVtbnMgKGluIHBsYWNlKQorICAgICAg
ICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyZUZ1bmN0aW9uIC0gdXN1YWwgQXJyYXku
cHJvdG90eXBlLnNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbgorICAgICAgICAgICAgICogQHJldHVy
biB7TWF0cml4fSB0aGlzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNvcnRDb2x1bW5z
KGNvbXBhcmVGdW5jdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChjb21wYXJlRnVuY3Rpb24g
PT09IHVuZGVmaW5lZCkgY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZU51bWJlcnM7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnM7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNldENvbHVtbihpLCB0aGlzLmdldENvbHVtbihpKS5zb3J0KGNv
bXBhcmVGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAg
KiBSZXR1cm5zIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgKKyAgICAgICAgICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBzdGFydFJvdyAtIEZpcnN0IHJvdyBpbmRleAorICAgICAgICAgICAgICogQHBhcmFt
IHtudW1iZXJ9IGVuZFJvdyAtIExhc3Qgcm93IGluZGV4CisgICAgICAgICAgICAgKiBAcGFyYW0g
e251bWJlcn0gc3RhcnRDb2x1bW4gLSBGaXJzdCBjb2x1bW4gaW5kZXgKKyAgICAgICAgICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBlbmRDb2x1bW4gLSBMYXN0IGNvbHVtbiBpbmRleAorICAgICAgICAg
ICAgICogQHJldHVybiB7TWF0cml4fQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzdWJN
YXRyaXgoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgeworICAgICAg
ICAgICAgICAgIHV0aWwuY2hlY2tSYW5nZSh0aGlzLCBzdGFydFJvdywgZW5kUm93LCBzdGFydENv
bHVtbiwgZW5kQ29sdW1uKTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3TWF0cml4ID0gbmV3IHRo
aXMuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdKGVuZFJvdyAtIHN0YXJ0Um93ICsgMSwgZW5k
Q29sdW1uIC0gc3RhcnRDb2x1bW4gKyAxKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
c3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaiA9IHN0YXJ0Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdNYXRyaXhbaSAtIHN0YXJ0Um93XVtqIC0gc3RhcnRDb2x1bW5dID0gdGhp
cy5nZXQoaSwgaik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ld01hdHJpeDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgg
YmFzZWQgb24gYW4gYXJyYXkgb2Ygcm93IGluZGljZXMKKyAgICAgICAgICAgICAqIEBwYXJhbSB7
QXJyYXl9IGluZGljZXMgLSBBcnJheSBjb250YWluaW5nIHRoZSByb3cgaW5kaWNlcworICAgICAg
ICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydENvbHVtbiA9IDBdIC0gRmlyc3QgY29sdW1u
IGluZGV4CisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZENvbHVtbiA9IHRoaXMu
Y29sdW1ucy0xXSAtIExhc3QgY29sdW1uIGluZGV4CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtN
YXRyaXh9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN1Yk1hdHJpeFJvdyhpbmRpY2Vz
LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29s
dW1uID09PSB1bmRlZmluZWQpIHN0YXJ0Q29sdW1uID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo
ZW5kQ29sdW1uID09PSB1bmRlZmluZWQpIGVuZENvbHVtbiA9IHRoaXMuY29sdW1ucyAtIDE7Cisg
ICAgICAgICAgICAgICAgaWYgKChzdGFydENvbHVtbiA+IGVuZENvbHVtbikgfHwgKHN0YXJ0Q29s
dW1uIDwgMCkgfHwgKHN0YXJ0Q29sdW1uID49IHRoaXMuY29sdW1ucykgfHwgKGVuZENvbHVtbiA8
IDApIHx8IChlbmRDb2x1bW4gPj0gdGhpcy5jb2x1bW5zKSkgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXJndW1lbnQgb3V0IG9mIHJhbmdlJyk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIG5ld01hdHJpeCA9IG5ldyB0aGlzLmNv
bnN0cnVjdG9yW1N5bWJvbC5zcGVjaWVzXShpbmRpY2VzLmxlbmd0aCwgZW5kQ29sdW1uIC0gc3Rh
cnRDb2x1bW4gKyAxKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGlj
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0
Q29sdW1uOyBqIDw9IGVuZENvbHVtbjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5kaWNlc1tpXSA8IDAgfHwgaW5kaWNlc1tpXSA+PSB0aGlzLnJvd3MpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignUm93IGluZGV4IG91dCBv
ZiByYW5nZTogJyArIGluZGljZXNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3TWF0cml4LnNldChpLCBqIC0gc3RhcnRDb2x1bW4sIHRo
aXMuZ2V0KGluZGljZXNbaV0sIGopKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3TWF0cml4OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgYSBzdWJzZXQgb2Yg
dGhlIG1hdHJpeCBiYXNlZCBvbiBhbiBhcnJheSBvZiBjb2x1bW4gaW5kaWNlcworICAgICAgICAg
ICAgICogQHBhcmFtIHtBcnJheX0gaW5kaWNlcyAtIEFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbHVt
biBpbmRpY2VzCisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0Um93ID0gMF0g
LSBGaXJzdCByb3cgaW5kZXgKKyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kUm93
ID0gdGhpcy5yb3dzLTFdIC0gTGFzdCByb3cgaW5kZXgKKyAgICAgICAgICAgICAqIEByZXR1cm4g
e01hdHJpeH0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3ViTWF0cml4Q29sdW1uKGlu
ZGljZXMsIHN0YXJ0Um93LCBlbmRSb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRSb3cg
PT09IHVuZGVmaW5lZCkgc3RhcnRSb3cgPSAwOworICAgICAgICAgICAgICAgIGlmIChlbmRSb3cg
PT09IHVuZGVmaW5lZCkgZW5kUm93ID0gdGhpcy5yb3dzIC0gMTsKKyAgICAgICAgICAgICAgICBp
ZiAoKHN0YXJ0Um93ID4gZW5kUm93KSB8fCAoc3RhcnRSb3cgPCAwKSB8fCAoc3RhcnRSb3cgPj0g
dGhpcy5yb3dzKSB8fCAoZW5kUm93IDwgMCkgfHwgKGVuZFJvdyA+PSB0aGlzLnJvd3MpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBcmd1bWVudCBvdXQgb2Yg
cmFuZ2UnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgbmV3TWF0
cml4ID0gbmV3IHRoaXMuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdKGVuZFJvdyAtIHN0YXJ0
Um93ICsgMSwgaW5kaWNlcy5sZW5ndGgpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBqID0gc3RhcnRSb3c7IGogPD0gZW5kUm93OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmRpY2VzW2ldIDwgMCB8fCBpbmRpY2VzW2ldID49IHRoaXMuY29sdW1ucykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDb2x1bW4g
aW5kZXggb3V0IG9mIHJhbmdlOiAnICsgaW5kaWNlc1tpXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdNYXRyaXguc2V0KGogLSBzdGFydFJv
dywgaSwgdGhpcy5nZXQoaiwgaW5kaWNlc1tpXSkpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdNYXRyaXg7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogU2V0IGEgcGFydCBv
ZiB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzdWItbWF0cml4CisgICAgICAgICAgICAgKiBAcGFy
YW0ge01hdHJpeHxBcnJheTwgQXJyYXkgPn0gbWF0cml4IC0gVGhlIHNvdXJjZSBtYXRyaXggZnJv
bSB3aGljaCB0byBleHRyYWN0IHZhbHVlcy4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBzdGFydFJvdyAtIFRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgcm93IHRvIHNldAorICAgICAgICAg
ICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0Q29sdW1uIC0gVGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBjb2x1bW4gdG8gc2V0CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9CisgICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIHNldFN1Yk1hdHJpeChtYXRyaXgsIHN0YXJ0Um93LCBzdGFy
dENvbHVtbikgeworICAgICAgICAgICAgICAgIG1hdHJpeCA9IHRoaXMuY29uc3RydWN0b3IuY2hl
Y2tNYXRyaXgobWF0cml4KTsKKyAgICAgICAgICAgICAgICB2YXIgZW5kUm93ID0gc3RhcnRSb3cg
KyBtYXRyaXgucm93cyAtIDE7CisgICAgICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHN0YXJ0
Q29sdW1uICsgbWF0cml4LmNvbHVtbnMgLSAxOworICAgICAgICAgICAgICAgIHV0aWwuY2hlY2tS
YW5nZSh0aGlzLCBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdHJpeC5yb3dzOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgaisr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3N0YXJ0Um93ICsgaV1bc3RhcnRDb2x1
bW4gKyBqXSA9IG1hdHJpeC5nZXQoaSwgaik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJuIGEgbmV3IG1hdHJpeCBi
YXNlZCBvbiBhIHNlbGVjdGlvbiBvZiByb3dzIGFuZCBjb2x1bW5zCisgICAgICAgICAgICAgKiBA
cGFyYW0ge0FycmF5PG51bWJlcj59IHJvd0luZGljZXMgLSBUaGUgcm93IGluZGljZXMgdG8gc2Vs
ZWN0LiBPcmRlciBtYXR0ZXJzIGFuZCBhbiBpbmRleCBjYW4gYmUgbW9yZSB0aGFuIG9uY2UuCisg
ICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvbHVtbkluZGljZXMgLSBUaGUg
Y29sdW1uIGluZGljZXMgdG8gc2VsZWN0LiBPcmRlciBtYXR0ZXJzIGFuZCBhbiBpbmRleCBjYW4g
YmUgdXNlIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICogQHJldHVybiB7TWF0cml4fSBU
aGUgbmV3IG1hdHJpeAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzZWxlY3Rpb24ocm93
SW5kaWNlcywgY29sdW1uSW5kaWNlcykgeworICAgICAgICAgICAgICAgIHZhciBpbmRpY2VzID0g
dXRpbC5jaGVja0luZGljZXModGhpcywgcm93SW5kaWNlcywgY29sdW1uSW5kaWNlcyk7CisgICAg
ICAgICAgICAgICAgdmFyIG5ld01hdHJpeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yW1N5bWJvbC5z
cGVjaWVzXShyb3dJbmRpY2VzLmxlbmd0aCwgY29sdW1uSW5kaWNlcy5sZW5ndGgpOworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5yb3cubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0luZGV4ID0gaW5kaWNlcy5yb3dbaV07CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kaWNlcy5jb2x1bW4ubGVuZ3Ro
OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5JbmRleCA9IGluZGlj
ZXMuY29sdW1uW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWF0cml4W2ldW2pdID0g
dGhpcy5nZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3TWF0cml4OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgdGhl
IHRyYWNlIG9mIHRoZSBtYXRyaXggKHN1bSBvZiB0aGUgZGlhZ29uYWwgZWxlbWVudHMpCisgICAg
ICAgICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IHRyYWNlKCkgeworICAgICAgICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbih0aGlzLnJvd3Ms
IHRoaXMuY29sdW1ucyk7CisgICAgICAgICAgICAgICAgdmFyIHRyYWNlID0gMDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbjsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRyYWNlICs9IHRoaXMuZ2V0KGksIGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJhY2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisg
ICAgICAgICAgICAgTWF0cml4IHZpZXdzCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBSZXR1cm5zIGEgdmlldyBvZiB0aGUgdHJhbnNwb3NpdGlvbiBv
ZiB0aGUgbWF0cml4CisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXhUcmFuc3Bvc2VWaWV3
fQorICAgICAgICAgICAgICovCisgICAgICAgICAgICB0cmFuc3Bvc2VWaWV3KCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgTUxNYXRyaXhUcmFuc3Bvc2VWaWV3KHRoaXMpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgYSB2aWV3
IG9mIHRoZSByb3cgdmVjdG9yIHdpdGggdGhlIGdpdmVuIGluZGV4CisgICAgICAgICAgICAgKiBA
cGFyYW0ge251bWJlcn0gcm93IC0gcm93IGluZGV4IG9mIHRoZSB2ZWN0b3IKKyAgICAgICAgICAg
ICAqIEByZXR1cm4ge01hdHJpeFJvd1ZpZXd9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IHJvd1ZpZXcocm93KSB7CisgICAgICAgICAgICAgICAgdXRpbC5jaGVja1Jvd0luZGV4KHRoaXMs
IHJvdyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNTE1hdHJpeFJvd1ZpZXcodGhpcywg
cm93KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBS
ZXR1cm5zIGEgdmlldyBvZiB0aGUgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBpbmRleAor
ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAtIGNvbHVtbiBpbmRleCBvZiB0
aGUgdmVjdG9yCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXhDb2x1bW5WaWV3fQorICAg
ICAgICAgICAgICovCisgICAgICAgICAgICBjb2x1bW5WaWV3KGNvbHVtbikgeworICAgICAgICAg
ICAgICAgIHV0aWwuY2hlY2tDb2x1bW5JbmRleCh0aGlzLCBjb2x1bW4pOworICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgTUxNYXRyaXhDb2x1bW5WaWV3KHRoaXMsIGNvbHVtbik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogUmV0dXJucyBhIHZpZXcg
b2YgdGhlIG1hdHJpeCBmbGlwcGVkIGluIHRoZSByb3cgYXhpcworICAgICAgICAgICAgICogQHJl
dHVybiB7TWF0cml4RmxpcFJvd1ZpZXd9CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZs
aXBSb3dWaWV3KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTUxNYXRyaXhGbGlwUm93
Vmlldyh0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoqCisgICAgICAgICAg
ICAgKiBSZXR1cm5zIGEgdmlldyBvZiB0aGUgbWF0cml4IGZsaXBwZWQgaW4gdGhlIGNvbHVtbiBh
eGlzCisgICAgICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXhGbGlwQ29sdW1uVmlld30KKyAgICAg
ICAgICAgICAqLworICAgICAgICAgICAgZmxpcENvbHVtblZpZXcoKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBNTE1hdHJpeEZsaXBDb2x1bW5WaWV3KHRoaXMpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgYSB2aWV3IG9mIGEg
c3VibWF0cml4IGdpdmluZyB0aGUgaW5kZXggYm91bmRhcmllcworICAgICAgICAgICAgICogQHBh
cmFtIHtudW1iZXJ9IHN0YXJ0Um93IC0gZmlyc3Qgcm93IGluZGV4IG9mIHRoZSBzdWJtYXRyaXgK
KyAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRSb3cgLSBsYXN0IHJvdyBpbmRleCBv
ZiB0aGUgc3VibWF0cml4CisgICAgICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRDb2x1
bW4gLSBmaXJzdCBjb2x1bW4gaW5kZXggb2YgdGhlIHN1Ym1hdHJpeAorICAgICAgICAgICAgICog
QHBhcmFtIHtudW1iZXJ9IGVuZENvbHVtbiAtIGxhc3QgY29sdW1uIGluZGV4IG9mIHRoZSBzdWJt
YXRyaXgKKyAgICAgICAgICAgICAqIEByZXR1cm4ge01hdHJpeFN1YlZpZXd9CisgICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIHN1Yk1hdHJpeFZpZXcoc3RhcnRSb3csIGVuZFJvdywgc3RhcnRD
b2x1bW4sIGVuZENvbHVtbikgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTUxNYXRyaXhT
dWJWaWV3KHRoaXMsIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMg
YSB2aWV3IG9mIHRoZSBjcm9zcyBvZiB0aGUgcm93IGluZGljZXMgYW5kIHRoZSBjb2x1bW4gaW5k
aWNlcworICAgICAgICAgICAgICogQGV4YW1wbGUKKyAgICAgICAgICAgICAqIC8vIHJlc3VsdGlu
ZyB2ZWN0b3IgaXMgW1syXSwgWzJdXQorICAgICAgICAgICAgICogdmFyIG1hdHJpeCA9IG5ldyBN
YXRyaXgoW1sxLDIsM10sIFs0LDUsNl1dKS5zZWxlY3Rpb25WaWV3KFswLCAwXSwgWzFdKQorICAg
ICAgICAgICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSByb3dJbmRpY2VzCisgICAgICAgICAg
ICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvbHVtbkluZGljZXMKKyAgICAgICAgICAgICAq
IEByZXR1cm4ge01hdHJpeFNlbGVjdGlvblZpZXd9CisgICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIHNlbGVjdGlvblZpZXcocm93SW5kaWNlcywgY29sdW1uSW5kaWNlcykgeworICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgTUxNYXRyaXhTZWxlY3Rpb25WaWV3KHRoaXMsIHJvd0luZGljZXMs
IGNvbHVtbkluZGljZXMpOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIC8qKgorICAg
ICAgICAgICAgKiBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1h
dHJpeCBhcyBhIE51bWJlcgorICAgICAgICAgICAgKiBAZXhhbXBsZQorICAgICAgICAgICAgKiAg
IG5ldyBNYXRyaXgoW1sxLDIsM10sIFs0LDUsNl1dKS5kZXQoKQorICAgICAgICAgICAgKiBAcmV0
dXJuIHtudW1iZXJ9CisgICAgICAgICAgICAqLworICAgICAgICAgICAgZGV0KCkgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmlzU3F1YXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGEsIGIsIGMsIGQ7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnMgPT09IDIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIgeCAyIG1hdHJpeAorICAgICAgICAgICAg
ICAgICAgICAgICAgYSA9IHRoaXMuZ2V0KDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAg
YiA9IHRoaXMuZ2V0KDAsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRoaXMuZ2V0
KDEsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHRoaXMuZ2V0KDEsIDEpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSAqIGQgLSAoYiAqIGMpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1ucyA9PT0gMykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gMyB4IDMgbWF0cml4CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c3ViTWF0cml4MCwgc3ViTWF0cml4MSwgc3ViTWF0cml4MjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Yk1hdHJpeDAgPSB0aGlzLnNlbGVjdGlvblZpZXcoWzEsIDJdLCBbMSwgMl0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3ViTWF0cml4MSA9IHRoaXMuc2VsZWN0aW9uVmlldyhbMSwg
Ml0sIFswLCAyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRyaXgyID0gdGhpcy5z
ZWxlY3Rpb25WaWV3KFsxLCAyXSwgWzAsIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGEg
PSB0aGlzLmdldCgwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLmdldCgw
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB0aGlzLmdldCgwLCAyKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgKiBzdWJNYXRyaXgwLmRldCgpIC0gYiAqIHN1
Yk1hdHJpeDEuZGV0KCkgKyBjICogc3ViTWF0cml4Mi5kZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYWwgcHVycG9zZSBk
ZXRlcm1pbmFudCB1c2luZyB0aGUgTFUgZGVjb21wb3NpdGlvbgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ldyBMdURlY29tcG9zaXRpb24odGhpcykuZGV0ZXJtaW5hbnQ7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93IEVycm9yKCdEZXRlcm1pbmFudCBjYW4gb25seSBiZSBjYWxjdWxhdGVk
IGZvciBhIHNxdWFyZSBtYXRyaXguJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybnMgaW52ZXJzZSBvZiBh
IG1hdHJpeCBpZiBpdCBleGlzdHMgb3IgdGhlIHBzZXVkb2ludmVyc2UKKyAgICAgICAgICAgICAq
IEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgLSB0aHJlc2hvbGQgZm9yIHRha2luZyBpbnZlcnNl
IG9mIHNpbmd1bGFyIHZhbHVlcyAoZGVmYXVsdCA9IDFlLTE1KQorICAgICAgICAgICAgICogQHJl
dHVybiB7TWF0cml4fSB0aGUgKHBzZXVkbylpbnZlcnRlZCBtYXRyaXguCisgICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIHBzZXVkb0ludmVyc2UodGhyZXNob2xkKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkKSB0aHJlc2hvbGQgPSBOdW1iZXIuRVBTSUxP
TjsKKyAgICAgICAgICAgICAgICB2YXIgc3ZkU29sdXRpb24gPSBuZXcgU3ZEZWNvbXBvc2l0aW9u
KHRoaXMsIHthdXRvVHJhbnNwb3NlOiB0cnVlfSk7CisKKyAgICAgICAgICAgICAgICB2YXIgVSA9
IHN2ZFNvbHV0aW9uLmxlZnRTaW5ndWxhclZlY3RvcnM7CisgICAgICAgICAgICAgICAgdmFyIFYg
PSBzdmRTb2x1dGlvbi5yaWdodFNpbmd1bGFyVmVjdG9yczsKKyAgICAgICAgICAgICAgICB2YXIg
cyA9IHN2ZFNvbHV0aW9uLmRpYWdvbmFsOworCisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFi
cyhzW2ldKSA+IHRocmVzaG9sZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc1tpXSA9IDEu
MCAvIHNbaV07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzW2ldID0gMC4wOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gY29udmVydCBsaXN0IHRvIGRpYWdvbmFsCisgICAg
ICAgICAgICAgICAgcyA9IHRoaXMuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdLmRpYWcocyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFYubW11bChzLm1tdWwoVS50cmFuc3Bvc2VWaWV3KCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIE1hdHJpeC5wcm90b3R5cGUu
a2xhc3MgPSAnTWF0cml4JzsKKworICAgICAgICAvKioKKyAgICAgICAgICogQHByaXZhdGUKKyAg
ICAgICAgICogQ2hlY2sgdGhhdCB0d28gbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb25z
CisgICAgICAgICAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXgKKyAgICAgICAgICogQHBhcmFtIHtN
YXRyaXh9IG90aGVyTWF0cml4CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBjaGVja0Rp
bWVuc2lvbnMobWF0cml4LCBvdGhlck1hdHJpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5v
LXVudXNlZC12YXJzCisgICAgICAgICAgICBpZiAobWF0cml4LnJvd3MgIT09IG90aGVyTWF0cml4
LnJvd3MgfHwKKyAgICAgICAgICAgICAgICBtYXRyaXguY29sdW1ucyAhPT0gb3RoZXJNYXRyaXgu
Y29sdW1ucykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaWNl
cyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVOdW1iZXJzKGEsIGIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBhIC0gYjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICBTeW5vbnltcwor
ICAgICAgICAgKi8KKworICAgICAgICBNYXRyaXgucmFuZG9tID0gTWF0cml4LnJhbmQ7CisgICAg
ICAgIE1hdHJpeC5kaWFnb25hbCA9IE1hdHJpeC5kaWFnOworICAgICAgICBNYXRyaXgucHJvdG90
eXBlLmRpYWdvbmFsID0gTWF0cml4LnByb3RvdHlwZS5kaWFnOworICAgICAgICBNYXRyaXguaWRl
bnRpdHkgPSBNYXRyaXguZXllOworICAgICAgICBNYXRyaXgucHJvdG90eXBlLm5lZ2F0ZSA9IE1h
dHJpeC5wcm90b3R5cGUubmVnOworICAgICAgICBNYXRyaXgucHJvdG90eXBlLnRlbnNvclByb2R1
Y3QgPSBNYXRyaXgucHJvdG90eXBlLmtyb25lY2tlclByb2R1Y3Q7CisgICAgICAgIE1hdHJpeC5w
cm90b3R5cGUuZGV0ZXJtaW5hbnQgPSBNYXRyaXgucHJvdG90eXBlLmRldDsKKworICAgICAgICAv
KgorICAgICAgICAgQWRkIGR5bmFtaWNhbGx5IGluc3RhbmNlIGFuZCBzdGF0aWMgbWV0aG9kcyBm
b3IgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMKKyAgICAgICAgICovCisKKyAgICAgICAgdmFyIGlu
cGxhY2VPcGVyYXRvciA9IGAKKyAgICAoZnVuY3Rpb24gJW5hbWUlKHZhbHVlKSB7CisgICAgICAg
IGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy4lbmFtZSVTKHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuJW5hbWUlTSh2YWx1ZSk7CisgICAgfSkKKyAgICBgOwor
CisgICAgICAgIHZhciBpbnBsYWNlT3BlcmF0b3JTY2FsYXIgPSBgCisgICAgKGZ1bmN0aW9uICVu
YW1lJVModmFsdWUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkr
KykgeworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykg
eworICAgICAgICAgICAgICAgIHRoaXMuc2V0KGksIGosIHRoaXMuZ2V0KGksIGopICVvcCUgdmFs
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH0pCisgICAgYDsKKworICAgICAgICB2YXIgaW5wbGFjZU9wZXJhdG9yTWF0cml4ID0gYAorICAg
IChmdW5jdGlvbiAlbmFtZSVNKG1hdHJpeCkgeworICAgICAgICBtYXRyaXggPSB0aGlzLmNvbnN0
cnVjdG9yLmNoZWNrTWF0cml4KG1hdHJpeCk7CisgICAgICAgIGNoZWNrRGltZW5zaW9ucyh0aGlz
LCBtYXRyaXgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zZXQoaSwgaiwgdGhpcy5nZXQoaSwgaikgJW9wJSBtYXRyaXgu
Z2V0KGksIGopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9KQorICAgIGA7CisKKyAgICAgICAgdmFyIHN0YXRpY09wZXJhdG9yID0gYAorICAg
IChmdW5jdGlvbiAlbmFtZSUobWF0cml4LCB2YWx1ZSkgeworICAgICAgICB2YXIgbmV3TWF0cml4
ID0gbmV3IHRoaXNbU3ltYm9sLnNwZWNpZXNdKG1hdHJpeCk7CisgICAgICAgIHJldHVybiBuZXdN
YXRyaXguJW5hbWUlKHZhbHVlKTsKKyAgICB9KQorICAgIGA7CisKKyAgICAgICAgdmFyIGlucGxh
Y2VNZXRob2QgPSBgCisgICAgKGZ1bmN0aW9uICVuYW1lJSgpIHsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCB0aGlzLmNvbHVtbnM7IGorKykgeworICAgICAgICAgICAgICAgIHRoaXMuc2V0KGksIGos
ICVtZXRob2QlKHRoaXMuZ2V0KGksIGopKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSkKKyAgICBgOworCisgICAgICAgIHZhciBzdGF0aWNN
ZXRob2QgPSBgCisgICAgKGZ1bmN0aW9uICVuYW1lJShtYXRyaXgpIHsKKyAgICAgICAgdmFyIG5l
d01hdHJpeCA9IG5ldyB0aGlzW1N5bWJvbC5zcGVjaWVzXShtYXRyaXgpOworICAgICAgICByZXR1
cm4gbmV3TWF0cml4LiVuYW1lJSgpOworICAgIH0pCisgICAgYDsKKworICAgICAgICB2YXIgaW5w
bGFjZU1ldGhvZFdpdGhBcmdzID0gYAorICAgIChmdW5jdGlvbiAlbmFtZSUoJWFyZ3MlKSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzOyBpKyspIHsKKyAgICAgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zOyBqKyspIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLnNldChpLCBqLCAlbWV0aG9kJSh0aGlzLmdldChpLCBqKSwgJWFyZ3MlKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSkKKyAgICBg
OworCisgICAgICAgIHZhciBzdGF0aWNNZXRob2RXaXRoQXJncyA9IGAKKyAgICAoZnVuY3Rpb24g
JW5hbWUlKG1hdHJpeCwgJWFyZ3MlKSB7CisgICAgICAgIHZhciBuZXdNYXRyaXggPSBuZXcgdGhp
c1tTeW1ib2wuc3BlY2llc10obWF0cml4KTsKKyAgICAgICAgcmV0dXJuIG5ld01hdHJpeC4lbmFt
ZSUoJWFyZ3MlKTsKKyAgICB9KQorICAgIGA7CisKKworICAgICAgICB2YXIgaW5wbGFjZU1ldGhv
ZFdpdGhPbmVBcmdTY2FsYXIgPSBgCisgICAgKGZ1bmN0aW9uICVuYW1lJVModmFsdWUpIHsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3M7IGkrKykgeworICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnM7IGorKykgeworICAgICAgICAgICAgICAg
IHRoaXMuc2V0KGksIGosICVtZXRob2QlKHRoaXMuZ2V0KGksIGopLCB2YWx1ZSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0pCisgICAgYDsK
KyAgICAgICAgdmFyIGlucGxhY2VNZXRob2RXaXRoT25lQXJnTWF0cml4ID0gYAorICAgIChmdW5j
dGlvbiAlbmFtZSVNKG1hdHJpeCkgeworICAgICAgICBtYXRyaXggPSB0aGlzLmNvbnN0cnVjdG9y
LmNoZWNrTWF0cml4KG1hdHJpeCk7CisgICAgICAgIGNoZWNrRGltZW5zaW9ucyh0aGlzLCBtYXRy
aXgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93czsgaSsrKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY29sdW1uczsgaisrKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5zZXQoaSwgaiwgJW1ldGhvZCUodGhpcy5nZXQoaSwgaiksIG1hdHJpeC5n
ZXQoaSwgaikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICB9KQorICAgIGA7CisKKyAgICAgICAgdmFyIGlucGxhY2VNZXRob2RXaXRoT25lQXJn
ID0gYAorICAgIChmdW5jdGlvbiAlbmFtZSUodmFsdWUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB2
YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB0aGlzLiVuYW1lJVModmFsdWUpOworICAgICAgICBy
ZXR1cm4gdGhpcy4lbmFtZSVNKHZhbHVlKTsKKyAgICB9KQorICAgIGA7CisKKyAgICAgICAgdmFy
IHN0YXRpY01ldGhvZFdpdGhPbmVBcmcgPSBzdGF0aWNNZXRob2RXaXRoQXJnczsKKworICAgICAg
ICB2YXIgb3BlcmF0b3JzID0gWworICAgICAgICAgICAgLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMK
KyAgICAgICAgICAgIFsnKycsICdhZGQnXSwKKyAgICAgICAgICAgIFsnLScsICdzdWInLCAnc3Vi
dHJhY3QnXSwKKyAgICAgICAgICAgIFsnKicsICdtdWwnLCAnbXVsdGlwbHknXSwKKyAgICAgICAg
ICAgIFsnLycsICdkaXYnLCAnZGl2aWRlJ10sCisgICAgICAgICAgICBbJyUnLCAnbW9kJywgJ21v
ZHVsdXMnXSwKKyAgICAgICAgICAgIC8vIEJpdHdpc2Ugb3BlcmF0b3JzCisgICAgICAgICAgICBb
JyYnLCAnYW5kJ10sCisgICAgICAgICAgICBbJ3wnLCAnb3InXSwKKyAgICAgICAgICAgIFsnXics
ICd4b3InXSwKKyAgICAgICAgICAgIFsnPDwnLCAnbGVmdFNoaWZ0J10sCisgICAgICAgICAgICBb
Jz4+JywgJ3NpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQnXSwKKyAgICAgICAgICAgIFsnPj4+Jywg
J3JpZ2h0U2hpZnQnLCAnemVyb0ZpbGxSaWdodFNoaWZ0J10KKyAgICAgICAgXTsKKworICAgICAg
ICB2YXIgaTsKKworICAgICAgICBmb3IgKHZhciBvcGVyYXRvciBvZiBvcGVyYXRvcnMpIHsKKyAg
ICAgICAgICAgIHZhciBpbnBsYWNlT3AgPSBldmFsKGZpbGxUZW1wbGF0ZUZ1bmN0aW9uKGlucGxh
Y2VPcGVyYXRvciwge25hbWU6IG9wZXJhdG9yWzFdLCBvcDogb3BlcmF0b3JbMF19KSk7CisgICAg
ICAgICAgICB2YXIgaW5wbGFjZU9wUyA9IGV2YWwoZmlsbFRlbXBsYXRlRnVuY3Rpb24oaW5wbGFj
ZU9wZXJhdG9yU2NhbGFyLCB7bmFtZTogb3BlcmF0b3JbMV0gKyAnUycsIG9wOiBvcGVyYXRvclsw
XX0pKTsKKyAgICAgICAgICAgIHZhciBpbnBsYWNlT3BNID0gZXZhbChmaWxsVGVtcGxhdGVGdW5j
dGlvbihpbnBsYWNlT3BlcmF0b3JNYXRyaXgsIHtuYW1lOiBvcGVyYXRvclsxXSArICdNJywgb3A6
IG9wZXJhdG9yWzBdfSkpOworICAgICAgICAgICAgdmFyIHN0YXRpY09wID0gZXZhbChmaWxsVGVt
cGxhdGVGdW5jdGlvbihzdGF0aWNPcGVyYXRvciwge25hbWU6IG9wZXJhdG9yWzFdfSkpOworICAg
ICAgICAgICAgZm9yIChpID0gMTsgaSA8IG9wZXJhdG9yLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgTWF0cml4LnByb3RvdHlwZVtvcGVyYXRvcltpXV0gPSBpbnBsYWNlT3A7CisgICAg
ICAgICAgICAgICAgTWF0cml4LnByb3RvdHlwZVtvcGVyYXRvcltpXSArICdTJ10gPSBpbnBsYWNl
T3BTOworICAgICAgICAgICAgICAgIE1hdHJpeC5wcm90b3R5cGVbb3BlcmF0b3JbaV0gKyAnTSdd
ID0gaW5wbGFjZU9wTTsKKyAgICAgICAgICAgICAgICBNYXRyaXhbb3BlcmF0b3JbaV1dID0gc3Rh
dGljT3A7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgbWV0aG9kcyA9
IFsKKyAgICAgICAgICAgIFsnficsICdub3QnXQorICAgICAgICBdOworCisgICAgICAgIFsKKyAg
ICAgICAgICAgICdhYnMnLCAnYWNvcycsICdhY29zaCcsICdhc2luJywgJ2FzaW5oJywgJ2F0YW4n
LCAnYXRhbmgnLCAnY2JydCcsICdjZWlsJywKKyAgICAgICAgICAgICdjbHozMicsICdjb3MnLCAn
Y29zaCcsICdleHAnLCAnZXhwbTEnLCAnZmxvb3InLCAnZnJvdW5kJywgJ2xvZycsICdsb2cxcCcs
CisgICAgICAgICAgICAnbG9nMTAnLCAnbG9nMicsICdyb3VuZCcsICdzaWduJywgJ3NpbicsICdz
aW5oJywgJ3NxcnQnLCAndGFuJywgJ3RhbmgnLCAndHJ1bmMnCisgICAgICAgIF0uZm9yRWFjaChm
dW5jdGlvbiAobWF0aE1ldGhvZCkgeworICAgICAgICAgICAgbWV0aG9kcy5wdXNoKFsnTWF0aC4n
ICsgbWF0aE1ldGhvZCwgbWF0aE1ldGhvZF0pOworICAgICAgICB9KTsKKworICAgICAgICBmb3Ig
KHZhciBtZXRob2Qgb2YgbWV0aG9kcykgeworICAgICAgICAgICAgdmFyIGlucGxhY2VNZXRoID0g
ZXZhbChmaWxsVGVtcGxhdGVGdW5jdGlvbihpbnBsYWNlTWV0aG9kLCB7bmFtZTogbWV0aG9kWzFd
LCBtZXRob2Q6IG1ldGhvZFswXX0pKTsKKyAgICAgICAgICAgIHZhciBzdGF0aWNNZXRoID0gZXZh
bChmaWxsVGVtcGxhdGVGdW5jdGlvbihzdGF0aWNNZXRob2QsIHtuYW1lOiBtZXRob2RbMV19KSk7
CisgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbWV0aG9kLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgTWF0cml4LnByb3RvdHlwZVttZXRob2RbaV1dID0gaW5wbGFjZU1ldGg7Cisg
ICAgICAgICAgICAgICAgTWF0cml4W21ldGhvZFtpXV0gPSBzdGF0aWNNZXRoOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIG1ldGhvZHNXaXRoQXJncyA9IFsKKyAgICAg
ICAgICAgIFsnTWF0aC5wb3cnLCAxLCAncG93J10KKyAgICAgICAgXTsKKworICAgICAgICBmb3Ig
KHZhciBtZXRob2RXaXRoQXJnIG9mIG1ldGhvZHNXaXRoQXJncykgeworICAgICAgICAgICAgdmFy
IGFyZ3MgPSAnYXJnMCc7CisgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbWV0aG9kV2l0aEFy
Z1sxXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXJncyArPSBgLCBhcmcke2l9YDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZXRob2RXaXRoQXJnWzFdICE9PSAxKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGlucGxhY2VNZXRoV2l0aEFyZ3MgPSBldmFsKGZpbGxUZW1wbGF0ZUZ1
bmN0aW9uKGlucGxhY2VNZXRob2RXaXRoQXJncywgeworICAgICAgICAgICAgICAgICAgICBuYW1l
OiBtZXRob2RXaXRoQXJnWzJdLAorICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZFdp
dGhBcmdbMF0sCisgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MKKyAgICAgICAgICAgICAg
ICB9KSk7CisgICAgICAgICAgICAgICAgdmFyIHN0YXRpY01ldGhXaXRoQXJncyA9IGV2YWwoZmls
bFRlbXBsYXRlRnVuY3Rpb24oc3RhdGljTWV0aG9kV2l0aEFyZ3MsIHtuYW1lOiBtZXRob2RXaXRo
QXJnWzJdLCBhcmdzOiBhcmdzfSkpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBt
ZXRob2RXaXRoQXJnLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIE1hdHJpeC5w
cm90b3R5cGVbbWV0aG9kV2l0aEFyZ1tpXV0gPSBpbnBsYWNlTWV0aFdpdGhBcmdzOworICAgICAg
ICAgICAgICAgICAgICBNYXRyaXhbbWV0aG9kV2l0aEFyZ1tpXV0gPSBzdGF0aWNNZXRoV2l0aEFy
Z3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgdG1wbFZhciA9IHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogbWV0aG9kV2l0
aEFyZ1syXSwKKyAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgbWV0aG9kOiBtZXRob2RXaXRoQXJnWzBdCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB2YXIgaW5wbGFjZU1ldGhvZDIgPSBldmFsKGZpbGxUZW1wbGF0ZUZ1bmN0aW9u
KGlucGxhY2VNZXRob2RXaXRoT25lQXJnLCB0bXBsVmFyKSk7CisgICAgICAgICAgICAgICAgdmFy
IGlucGxhY2VNZXRob2RTID0gZXZhbChmaWxsVGVtcGxhdGVGdW5jdGlvbihpbnBsYWNlTWV0aG9k
V2l0aE9uZUFyZ1NjYWxhciwgdG1wbFZhcikpOworICAgICAgICAgICAgICAgIHZhciBpbnBsYWNl
TWV0aG9kTSA9IGV2YWwoZmlsbFRlbXBsYXRlRnVuY3Rpb24oaW5wbGFjZU1ldGhvZFdpdGhPbmVB
cmdNYXRyaXgsIHRtcGxWYXIpKTsKKyAgICAgICAgICAgICAgICB2YXIgc3RhdGljTWV0aG9kMiA9
IGV2YWwoZmlsbFRlbXBsYXRlRnVuY3Rpb24oc3RhdGljTWV0aG9kV2l0aE9uZUFyZywgdG1wbFZh
cikpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBtZXRob2RXaXRoQXJnLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIE1hdHJpeC5wcm90b3R5cGVbbWV0aG9kV2l0
aEFyZ1tpXV0gPSBpbnBsYWNlTWV0aG9kMjsKKyAgICAgICAgICAgICAgICAgICAgTWF0cml4LnBy
b3RvdHlwZVttZXRob2RXaXRoQXJnW2ldICsgJ00nXSA9IGlucGxhY2VNZXRob2RNOworICAgICAg
ICAgICAgICAgICAgICBNYXRyaXgucHJvdG90eXBlW21ldGhvZFdpdGhBcmdbaV0gKyAnUyddID0g
aW5wbGFjZU1ldGhvZFM7CisgICAgICAgICAgICAgICAgICAgIE1hdHJpeFttZXRob2RXaXRoQXJn
W2ldXSA9IHN0YXRpY01ldGhvZDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZmlsbFRlbXBsYXRlRnVuY3Rpb24odGVtcGxh
dGUsIHZhbHVlcykgeworICAgICAgICAgICAgZm9yICh2YXIgdmFsdWUgaW4gdmFsdWVzKSB7Cisg
ICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKG5ldyBSZWdFeHAoJyUn
ICsgdmFsdWUgKyAnJScsICdnJyksIHZhbHVlc1t2YWx1ZV0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIE1h
dHJpeDsKKyAgICB9Cit9CisKKworLy8gbWwtbWF0cml4IHNyYy92aWV3cy9iYXNlCitsZXQgTUxN
YXRyaXhCYXNlVmlldzsKK3sKKyAgICBsZXQgYWJzdHJhY3RNYXRyaXggPSBNTE1hdHJpeEFic3Ry
YWN0TWF0cml4OworICAgIGxldCBNYXRyaXggPSBNTE1hdHJpeE1hdHJpeDsKKworICAgIGNsYXNz
IEJhc2VWaWV3IGV4dGVuZHMgYWJzdHJhY3RNYXRyaXgoKSB7CisgICAgICAgIGNvbnN0cnVjdG9y
KG1hdHJpeCwgcm93cywgY29sdW1ucykgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAg
ICAgIHRoaXMubWF0cml4ID0gbWF0cml4OworICAgICAgICAgICAgdGhpcy5yb3dzID0gcm93czsK
KyAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0
cml4Lk1hdHJpeDsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1MTWF0cml4QmFzZVZpZXcgPSBC
YXNlVmlldzsKK30KKworCisvLyBtbC1tYXRyaXggc3JjL3ZpZXdzL2NvbHVtbi5qcworbGV0IE1M
TWF0cml4Q29sdW1uVmlldzsKK3sKKyAgICBsZXQgQmFzZVZpZXcgPSBNTE1hdHJpeEJhc2VWaWV3
OworCisgICAgY2xhc3MgTWF0cml4Q29sdW1uVmlldyBleHRlbmRzIEJhc2VWaWV3IHsKKyAgICAg
ICAgY29uc3RydWN0b3IobWF0cml4LCBjb2x1bW4pIHsKKyAgICAgICAgICAgIHN1cGVyKG1hdHJp
eCwgbWF0cml4LnJvd3MsIDEpOworICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47Cisg
ICAgICAgIH0KKworICAgICAgICBzZXQocm93SW5kZXgsIGNvbHVtbkluZGV4LCB2YWx1ZSkgewor
ICAgICAgICAgICAgdGhpcy5tYXRyaXguc2V0KHJvd0luZGV4LCB0aGlzLmNvbHVtbiwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBnZXQocm93
SW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdHJpeC5nZXQocm93SW5kZXgsIHRo
aXMuY29sdW1uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1MTWF0cml4Q29sdW1uVmlldyA9
IE1hdHJpeENvbHVtblZpZXc7Cit9CisKKworLy8gbWwtbWF0cml4IHNyYy92aWV3cy9mbGlwQ29s
dW1uLmpzCitsZXQgTUxNYXRyaXhGbGlwQ29sdW1uVmlldzsKK3sKKyAgICBsZXQgQmFzZVZpZXcg
PSBNTE1hdHJpeEJhc2VWaWV3CisKKyAgICBjbGFzcyBNYXRyaXhGbGlwQ29sdW1uVmlldyBleHRl
bmRzIEJhc2VWaWV3IHsKKyAgICAgICAgY29uc3RydWN0b3IobWF0cml4KSB7CisgICAgICAgICAg
ICBzdXBlcihtYXRyaXgsIG1hdHJpeC5yb3dzLCBtYXRyaXguY29sdW1ucyk7CisgICAgICAgIH0K
KworICAgICAgICBzZXQocm93SW5kZXgsIGNvbHVtbkluZGV4LCB2YWx1ZSkgeworICAgICAgICAg
ICAgdGhpcy5tYXRyaXguc2V0KHJvd0luZGV4LCB0aGlzLmNvbHVtbnMgLSBjb2x1bW5JbmRleCAt
IDEsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgZ2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bWF0cml4LmdldChyb3dJbmRleCwgdGhpcy5jb2x1bW5zIC0gY29sdW1uSW5kZXggLSAxKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIE1MTWF0cml4RmxpcENvbHVtblZpZXcgPSBNYXRyaXhGbGlw
Q29sdW1uVmlldzsKK30KKworCisvLyBtbC1tYXRyaXggc3JjL3ZpZXdzL2ZsaXBSb3cuanMKK2xl
dCBNTE1hdHJpeEZsaXBSb3dWaWV3OworeworICAgIGxldCBCYXNlVmlldyA9IE1MTWF0cml4QmFz
ZVZpZXcKKworICAgIGNsYXNzIE1hdHJpeEZsaXBSb3dWaWV3IGV4dGVuZHMgQmFzZVZpZXcgewor
ICAgICAgICBjb25zdHJ1Y3RvcihtYXRyaXgpIHsKKyAgICAgICAgICAgIHN1cGVyKG1hdHJpeCwg
bWF0cml4LnJvd3MsIG1hdHJpeC5jb2x1bW5zKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldChy
b3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLm1hdHJpeC5z
ZXQodGhpcy5yb3dzIC0gcm93SW5kZXggLSAxLCBjb2x1bW5JbmRleCwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBnZXQocm93SW5kZXgsIGNv
bHVtbkluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXguZ2V0KHRoaXMucm93
cyAtIHJvd0luZGV4IC0gMSwgY29sdW1uSW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAg
TUxNYXRyaXhGbGlwUm93VmlldyA9IE1hdHJpeEZsaXBSb3dWaWV3OworfQorCisvLyBtbC1tYXRy
aXggc3JjL3ZpZXdzL3Jvdy5qcworbGV0IE1MTWF0cml4Um93VmlldzsKK3sKKyAgICBsZXQgQmFz
ZVZpZXcgPSBNTE1hdHJpeEJhc2VWaWV3OworCisgICAgY2xhc3MgTWF0cml4Um93VmlldyBleHRl
bmRzIEJhc2VWaWV3IHsKKyAgICAgICAgY29uc3RydWN0b3IobWF0cml4LCByb3cpIHsKKyAgICAg
ICAgICAgIHN1cGVyKG1hdHJpeCwgMSwgbWF0cml4LmNvbHVtbnMpOworICAgICAgICAgICAgdGhp
cy5yb3cgPSByb3c7CisgICAgICAgIH0KKworICAgICAgICBzZXQocm93SW5kZXgsIGNvbHVtbklu
ZGV4LCB2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5tYXRyaXguc2V0KHRoaXMucm93LCBjb2x1
bW5JbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBnZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5tYXRyaXguZ2V0KHRoaXMucm93LCBjb2x1bW5JbmRleCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBNTE1hdHJpeFJvd1ZpZXcgPSBNYXRyaXhSb3dWaWV3OworfQorCisKKy8vIG1sLW1h
dHJpeCBzcmMvdmlld3Mvc2VsZWN0aW9uLmpzCitsZXQgTUxNYXRyaXhTZWxlY3Rpb25WaWV3Owor
eworICAgIGxldCBCYXNlVmlldyA9IE1MTWF0cml4QmFzZVZpZXc7CisgICAgbGV0IHV0aWwgPSBN
TE1hdHJpeFV0aWw7CisKKyAgICBjbGFzcyBNYXRyaXhTZWxlY3Rpb25WaWV3IGV4dGVuZHMgQmFz
ZVZpZXcgeworICAgICAgICBjb25zdHJ1Y3RvcihtYXRyaXgsIHJvd0luZGljZXMsIGNvbHVtbklu
ZGljZXMpIHsKKyAgICAgICAgICAgIHZhciBpbmRpY2VzID0gdXRpbC5jaGVja0luZGljZXMobWF0
cml4LCByb3dJbmRpY2VzLCBjb2x1bW5JbmRpY2VzKTsKKyAgICAgICAgICAgIHN1cGVyKG1hdHJp
eCwgaW5kaWNlcy5yb3cubGVuZ3RoLCBpbmRpY2VzLmNvbHVtbi5sZW5ndGgpOworICAgICAgICAg
ICAgdGhpcy5yb3dJbmRpY2VzID0gaW5kaWNlcy5yb3c7CisgICAgICAgICAgICB0aGlzLmNvbHVt
bkluZGljZXMgPSBpbmRpY2VzLmNvbHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIHNldChyb3dJ
bmRleCwgY29sdW1uSW5kZXgsIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLm1hdHJpeC5zZXQo
dGhpcy5yb3dJbmRpY2VzW3Jvd0luZGV4XSwgdGhpcy5jb2x1bW5JbmRpY2VzW2NvbHVtbkluZGV4
XSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBnZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5t
YXRyaXguZ2V0KHRoaXMucm93SW5kaWNlc1tyb3dJbmRleF0sIHRoaXMuY29sdW1uSW5kaWNlc1tj
b2x1bW5JbmRleF0pOworICAgICAgICB9CisgICAgfQorCisgICAgTUxNYXRyaXhTZWxlY3Rpb25W
aWV3ID0gTWF0cml4U2VsZWN0aW9uVmlldzsKK30KKworLy8gbWwtbWF0cml4IHNyYy92aWV3cy9z
dWIuanMKK2xldCBNTE1hdHJpeFN1YlZpZXc7Cit7CisgICAgbGV0IEJhc2VWaWV3ID0gTUxNYXRy
aXhCYXNlVmlldzsKKyAgICBsZXQgdXRpbCA9IE1MTWF0cml4VXRpbDsKKworICAgIGNsYXNzIE1h
dHJpeFN1YlZpZXcgZXh0ZW5kcyBCYXNlVmlldyB7CisgICAgICAgIGNvbnN0cnVjdG9yKG1hdHJp
eCwgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgeworICAgICAgICAg
ICAgdXRpbC5jaGVja1JhbmdlKG1hdHJpeCwgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4s
IGVuZENvbHVtbik7CisgICAgICAgICAgICBzdXBlcihtYXRyaXgsIGVuZFJvdyAtIHN0YXJ0Um93
ICsgMSwgZW5kQ29sdW1uIC0gc3RhcnRDb2x1bW4gKyAxKTsKKyAgICAgICAgICAgIHRoaXMuc3Rh
cnRSb3cgPSBzdGFydFJvdzsKKyAgICAgICAgICAgIHRoaXMuc3RhcnRDb2x1bW4gPSBzdGFydENv
bHVtbjsKKyAgICAgICAgfQorCisgICAgICAgIHNldChyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZh
bHVlKSB7CisgICAgICAgICAgICB0aGlzLm1hdHJpeC5zZXQodGhpcy5zdGFydFJvdyArIHJvd0lu
ZGV4LCB0aGlzLnN0YXJ0Q29sdW1uICsgY29sdW1uSW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgZ2V0KHJvd0luZGV4LCBjb2x1bW5J
bmRleCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0cml4LmdldCh0aGlzLnN0YXJ0Um93
ICsgcm93SW5kZXgsIHRoaXMuc3RhcnRDb2x1bW4gKyBjb2x1bW5JbmRleCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBNTE1hdHJpeFN1YlZpZXcgPSBNYXRyaXhTdWJWaWV3OworfQorCisvLyBt
bC1tYXRyaXggc3JjL3ZpZXdzL3RyYW5zcG9zZS5qcworbGV0IE1MTWF0cml4VHJhbnNwb3NlVmll
dzsKK3sKKyAgICBsZXQgQmFzZVZpZXcgPSBNTE1hdHJpeEJhc2VWaWV3OworCisgICAgY2xhc3Mg
TWF0cml4VHJhbnNwb3NlVmlldyBleHRlbmRzIEJhc2VWaWV3IHsKKyAgICAgICAgY29uc3RydWN0
b3IobWF0cml4KSB7CisgICAgICAgICAgICBzdXBlcihtYXRyaXgsIG1hdHJpeC5jb2x1bW5zLCBt
YXRyaXgucm93cyk7CisgICAgICAgIH0KKworICAgICAgICBzZXQocm93SW5kZXgsIGNvbHVtbklu
ZGV4LCB2YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5tYXRyaXguc2V0KGNvbHVtbkluZGV4LCBy
b3dJbmRleCwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBnZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5tYXRyaXguZ2V0KGNvbHVtbkluZGV4LCByb3dJbmRleCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBNTE1hdHJpeFRyYW5zcG9zZVZpZXcgPSBNYXRyaXhUcmFuc3Bvc2VWaWV3OworfQor
CisvLyBtbG1hdHJpeCBzcmMvbWF0cml4LmpzCit7CisgICAgbGV0IGFic3RyYWN0TWF0cml4ID0g
TUxNYXRyaXhBYnN0cmFjdE1hdHJpeDsKKyAgICBsZXQgdXRpbCA9IE1MTWF0cml4VXRpbDsKKwor
ICAgIGNsYXNzIE1hdHJpeCBleHRlbmRzIGFic3RyYWN0TWF0cml4KEFycmF5KSB7CisgICAgICAg
IGNvbnN0cnVjdG9yKG5Sb3dzLCBuQ29sdW1ucykgeworICAgICAgICAgICAgdmFyIGk7CisgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgblJvd3MgPT09ICdu
dW1iZXInKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheShuUm93cyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0cml4LmlzTWF0cml4KG5Sb3dzKSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBuUm93cy5jbG9uZSgpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChOdW1iZXIuaXNJbnRlZ2VyKG5Sb3dzKSAmJiBuUm93cyA+IDApIHsgLy8gQ3JlYXRlIGFuIGVt
cHR5IG1hdHJpeAorICAgICAgICAgICAgICAgIHN1cGVyKG5Sb3dzKTsKKyAgICAgICAgICAgICAg
ICBpZiAoTnVtYmVyLmlzSW50ZWdlcihuQ29sdW1ucykgJiYgbkNvbHVtbnMgPiAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzW2ldID0gbmV3IEFycmF5KG5Db2x1bW5zKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoJ25Db2x1bW5zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2Vy
Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0Fy
cmF5KG5Sb3dzKSkgeyAvLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSB0aGUgMkQgYXJyYXkKKyAgICAg
ICAgICAgICAgICBjb25zdCBtYXRyaXggPSBuUm93czsKKyAgICAgICAgICAgICAgICBuUm93cyA9
IG1hdHJpeC5sZW5ndGg7CisgICAgICAgICAgICAgICAgbkNvbHVtbnMgPSBtYXRyaXhbMF0ubGVu
Z3RoOworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbkNvbHVtbnMgIT09ICdudW1iZXInIHx8
IG5Db2x1bW5zID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoJ0RhdGEgbXVzdCBiZSBhIDJEIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQnKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3VwZXIoblJvd3MpOworICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuUm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRyaXhbaV0ubGVuZ3RoICE9PSBuQ29sdW1ucykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luY29uc2lzdGVudCBhcnJheSBkaW1lbnNp
b25zJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpc1tp
XSA9IFtdLmNvbmNhdChtYXRyaXhbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBhbiBhcnJheScpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5yb3dzID0gblJvd3M7CisgICAgICAgICAgICB0aGlzLmNv
bHVtbnMgPSBuQ29sdW1uczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisK
KyAgICAgICAgc2V0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUpIHsKKyAgICAgICAgICAg
IHRoaXNbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBnZXQocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpc1tyb3dJbmRleF1bY29sdW1uSW5kZXhdOworICAgICAg
ICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYW4gZXhhY3QgYW5kIGluZGVw
ZW5kZW50IGNvcHkgb2YgdGhlIG1hdHJpeAorICAgICAgICAgKiBAcmV0dXJuIHtNYXRyaXh9Cisg
ICAgICAgICAqLworICAgICAgICBjbG9uZSgpIHsKKyAgICAgICAgICAgIHZhciBuZXdNYXRyaXgg
PSBuZXcgdGhpcy5jb25zdHJ1Y3RvcltTeW1ib2wuc3BlY2llc10odGhpcy5yb3dzLCB0aGlzLmNv
bHVtbnMpOworICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyBy
b3crKykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRo
aXMuY29sdW1uczsgY29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3TWF0cml4LnNl
dChyb3csIGNvbHVtbiwgdGhpcy5nZXQocm93LCBjb2x1bW4pKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3TWF0cml4OworICAgICAgICB9
CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlbW92ZXMgYSByb3cgZnJvbSB0aGUgZ2l2ZW4g
aW5kZXgKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gUm93IGluZGV4CisgICAg
ICAgICAqIEByZXR1cm4ge01hdHJpeH0gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcmVtb3Zl
Um93KGluZGV4KSB7CisgICAgICAgICAgICB1dGlsLmNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgp
OworICAgICAgICAgICAgaWYgKHRoaXMucm93cyA9PT0gMSkgeworICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBSYW5nZUVycm9yKCdBIG1hdHJpeCBjYW5ub3QgaGF2ZSBsZXNzIHRoYW4gb25lIHJv
dycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpOwor
ICAgICAgICAgICAgdGhpcy5yb3dzIC09IDE7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGRzIGEgcm93IGF0IHRoZSBnaXZl
biBpbmRleAorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW2luZGV4ID0gdGhpcy5yb3dzXSAt
IFJvdyBpbmRleAorICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE1hdHJpeH0gYXJyYXkgLSBBcnJh
eSBvciB2ZWN0b3IKKyAgICAgICAgICogQHJldHVybiB7TWF0cml4fSB0aGlzCisgICAgICAgICAq
LworICAgICAgICBhZGRSb3coaW5kZXgsIGFycmF5KSB7CisgICAgICAgICAgICBpZiAoYXJyYXkg
PT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIGFycmF5ID0gaW5kZXg7CisgICAgICAg
ICAgICAgICAgaW5kZXggPSB0aGlzLnJvd3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1
dGlsLmNoZWNrUm93SW5kZXgodGhpcywgaW5kZXgsIHRydWUpOworICAgICAgICAgICAgYXJyYXkg
PSB1dGlsLmNoZWNrUm93VmVjdG9yKHRoaXMsIGFycmF5LCB0cnVlKTsKKyAgICAgICAgICAgIHRo
aXMuc3BsaWNlKGluZGV4LCAwLCBhcnJheSk7CisgICAgICAgICAgICB0aGlzLnJvd3MgKz0gMTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFJlbW92ZXMgYSBjb2x1bW4gZnJvbSB0aGUgZ2l2ZW4gaW5kZXgKKyAgICAgICAgICog
QHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gQ29sdW1uIGluZGV4CisgICAgICAgICAqIEByZXR1cm4g
e01hdHJpeH0gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcmVtb3ZlQ29sdW1uKGluZGV4KSB7
CisgICAgICAgICAgICB1dGlsLmNoZWNrQ29sdW1uSW5kZXgodGhpcywgaW5kZXgpOworICAgICAg
ICAgICAgaWYgKHRoaXMuY29sdW1ucyA9PT0gMSkgeworICAgICAgICAgICAgICAgIHRocm93IG5l
dyBSYW5nZUVycm9yKCdBIG1hdHJpeCBjYW5ub3QgaGF2ZSBsZXNzIHRoYW4gb25lIGNvbHVtbicp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJv
d3M7IGkrKykgeworICAgICAgICAgICAgICAgIHRoaXNbaV0uc3BsaWNlKGluZGV4LCAxKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY29sdW1ucyAtPSAxOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkcyBh
IGNvbHVtbiBhdCB0aGUgZ2l2ZW4gaW5kZXgKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtp
bmRleCA9IHRoaXMuY29sdW1uc10gLSBDb2x1bW4gaW5kZXgKKyAgICAgICAgICogQHBhcmFtIHtB
cnJheXxNYXRyaXh9IGFycmF5IC0gQXJyYXkgb3IgdmVjdG9yCisgICAgICAgICAqIEByZXR1cm4g
e01hdHJpeH0gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgYWRkQ29sdW1uKGluZGV4LCBhcnJh
eSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBhcnJheSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgICAgICAgICBhcnJheSA9IGluZGV4OworICAgICAgICAgICAgICAgIGluZGV4ID0gdGhp
cy5jb2x1bW5zOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXRpbC5jaGVja0NvbHVtbklu
ZGV4KHRoaXMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgICAgIGFycmF5ID0gdXRpbC5jaGVja0Nv
bHVtblZlY3Rvcih0aGlzLCBhcnJheSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMucm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpc1tpXS5zcGxpY2UoaW5kZXgs
IDAsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuY29sdW1ucyAr
PSAxOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBN
TE1hdHJpeE1hdHJpeC5NYXRyaXggPSBNYXRyaXg7CisgICAgTWF0cml4LmFic3RyYWN0TWF0cml4
ID0gYWJzdHJhY3RNYXRyaXg7Cit9CisKKworLy8gbWwtbWF0cml4IHNyYy9kYy9jaG9sZXNreS5q
cworbGV0IE1MTWF0cml4RENDaG9sZXNreSA9IHt9OworeworICAgIGxldCBNYXRyaXggPSBNTE1h
dHJpeE1hdHJpeC5NYXRyaXg7CisKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbHV0enJvZWRl
ci9NYXBhY2svYmxvYi9tYXN0ZXIvU291cmNlL0Nob2xlc2t5RGVjb21wb3NpdGlvbi5jcworICAg
IGZ1bmN0aW9uIENob2xlc2t5RGVjb21wb3NpdGlvbih2YWx1ZSkgeworICAgICAgICBpZiAoISh0
aGlzIGluc3RhbmNlb2YgQ2hvbGVza3lEZWNvbXBvc2l0aW9uKSkgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBDaG9sZXNreURlY29tcG9zaXRpb24odmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHZhbHVlID0gTWF0cml4LmNoZWNrTWF0cml4KHZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5p
c1N5bW1ldHJpYygpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeCBpcyBu
b3Qgc3ltbWV0cmljJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYSA9IHZhbHVlLAorICAg
ICAgICAgICAgZGltZW5zaW9uID0gYS5yb3dzLAorICAgICAgICAgICAgbCA9IG5ldyBNYXRyaXgo
ZGltZW5zaW9uLCBkaW1lbnNpb24pLAorICAgICAgICAgICAgcG9zaXRpdmVEZWZpbml0ZSA9IHRy
dWUsCisgICAgICAgICAgICBpLCBqLCBrOworCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBkaW1l
bnNpb247IGorKykgeworICAgICAgICAgICAgdmFyIExyb3dqID0gbFtqXTsKKyAgICAgICAgICAg
IHZhciBkID0gMDsKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgTHJvd2sgPSBsW2tdOworICAgICAgICAgICAgICAgIHZhciBzID0gMDsK
KyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHMgKz0gTHJvd2tbaV0gKiBMcm93altpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgTHJvd2pba10gPSBzID0gKGFbal1ba10gLSBzKSAvIGxba11ba107CisgICAg
ICAgICAgICAgICAgZCA9IGQgKyBzICogczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZCA9IGFbal1bal0gLSBkOworCisgICAgICAgICAgICBwb3NpdGl2ZURlZmluaXRlICY9IChkID4g
MCk7CisgICAgICAgICAgICBsW2pdW2pdID0gTWF0aC5zcXJ0KE1hdGgubWF4KGQsIDApKTsKKyAg
ICAgICAgICAgIGZvciAoayA9IGogKyAxOyBrIDwgZGltZW5zaW9uOyBrKyspIHsKKyAgICAgICAg
ICAgICAgICBsW2pdW2tdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghcG9zaXRpdmVEZWZpbml0ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdN
YXRyaXggaXMgbm90IHBvc2l0aXZlIGRlZmluaXRlJyk7CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLkwgPSBsOworICAgIH0KKworICAgIENob2xlc2t5RGVjb21wb3NpdGlvbi5wcm90b3R5cGUg
PSB7CisgICAgICAgIGdldCBsb3dlclRyaWFuZ3VsYXJNYXRyaXgoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5MOworICAgICAgICB9LAorICAgICAgICBzb2x2ZTogZnVuY3Rpb24gKHZhbHVl
KSB7CisgICAgICAgICAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1ZSk7CisKKyAg
ICAgICAgICAgIHZhciBsID0gdGhpcy5MLAorICAgICAgICAgICAgICAgIGRpbWVuc2lvbiA9IGwu
cm93czsKKworICAgICAgICAgICAgaWYgKHZhbHVlLnJvd3MgIT09IGRpbWVuc2lvbikgeworICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IGRpbWVuc2lvbnMgZG8gbm90IG1h
dGNoJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjb3VudCA9IHZhbHVlLmNv
bHVtbnMsCisgICAgICAgICAgICAgICAgQiA9IHZhbHVlLmNsb25lKCksCisgICAgICAgICAgICAg
ICAgaSwgaiwgazsKKworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGRpbWVuc2lvbjsgaysr
KSB7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGs7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQltrXVtqXSAtPSBCW2ldW2pdICogbFtrXVtpXTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBCW2tdW2pdIC89IGxba11ba107CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGsgPSBkaW1lbnNpb24g
LSAxOyBrID49IDA7IGstLSkgeworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb3Vu
dDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgZGltZW5z
aW9uOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJba11bal0gLT0gQltpXVtqXSAq
IGxbaV1ba107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQltr
XVtqXSAvPSBsW2tdW2tdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIEI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgTUxNYXRyaXhEQ0No
b2xlc2t5ID0gQ2hvbGVza3lEZWNvbXBvc2l0aW9uOworfQorCisKKy8vIG1sLW1hdHJpeCBzcmMv
ZGMvZXZkLmpzCitsZXQgTUxNYXRyaXhEQ0VWRDsKK3sKKyAgICBjb25zdCBNYXRyaXggPSBNTE1h
dHJpeE1hdHJpeC5NYXRyaXg7CisgICAgY29uc3QgdXRpbCA9IE1MTWF0cml4RENVdGlsOworICAg
IGNvbnN0IGh5cG90ZW51c2UgPSB1dGlsLmh5cG90ZW51c2U7CisgICAgY29uc3QgZ2V0RmlsbGVk
MkRBcnJheSA9IHV0aWwuZ2V0RmlsbGVkMkRBcnJheTsKKworICAgIGNvbnN0IGRlZmF1bHRPcHRp
b25zID0geworICAgICAgICBhc3N1bWVTeW1tZXRyaWM6IGZhbHNlCisgICAgfTsKKworICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9sdXR6cm9lZGVyL01hcGFjay9ibG9iL21hc3Rlci9Tb3VyY2Uv
RWlnZW52YWx1ZURlY29tcG9zaXRpb24uY3MKKyAgICBmdW5jdGlvbiBFaWdlbnZhbHVlRGVjb21w
b3NpdGlvbihtYXRyaXgsIG9wdGlvbnMpIHsKKyAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3Np
Z24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0
YW5jZW9mIEVpZ2VudmFsdWVEZWNvbXBvc2l0aW9uKSkgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyBFaWdlbnZhbHVlRGVjb21wb3NpdGlvbihtYXRyaXgsIG9wdGlvbnMpOworICAgICAgICB9Cisg
ICAgICAgIG1hdHJpeCA9IE1hdHJpeC5jaGVja01hdHJpeChtYXRyaXgpOworICAgICAgICBpZiAo
IW1hdHJpeC5pc1NxdWFyZSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJp
eCBpcyBub3QgYSBzcXVhcmUgbWF0cml4Jyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbiA9
IG1hdHJpeC5jb2x1bW5zLAorICAgICAgICAgICAgViA9IGdldEZpbGxlZDJEQXJyYXkobiwgbiwg
MCksCisgICAgICAgICAgICBkID0gbmV3IEFycmF5KG4pLAorICAgICAgICAgICAgZSA9IG5ldyBB
cnJheShuKSwKKyAgICAgICAgICAgIHZhbHVlID0gbWF0cml4LAorICAgICAgICAgICAgaSwgajsK
KworICAgICAgICB2YXIgaXNTeW1tZXRyaWMgPSBmYWxzZTsKKyAgICAgICAgaWYgKG9wdGlvbnMu
YXNzdW1lU3ltbWV0cmljKSB7CisgICAgICAgICAgICBpc1N5bW1ldHJpYyA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc1N5bW1ldHJpYyA9IG1hdHJpeC5pc1N5bW1ldHJp
YygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzU3ltbWV0cmljKSB7CisgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsg
aiA8IG47IGorKykgeworICAgICAgICAgICAgICAgICAgICBWW2ldW2pdID0gdmFsdWUuZ2V0KGks
IGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyZWQy
KG4sIGUsIGQsIFYpOworICAgICAgICAgICAgdHFsMihuLCBlLCBkLCBWKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBIID0gZ2V0RmlsbGVkMkRBcnJheShuLCBuLCAwKSwKKyAg
ICAgICAgICAgICAgICBvcnQgPSBuZXcgQXJyYXkobik7CisgICAgICAgICAgICBmb3IgKGogPSAw
OyBqIDwgbjsgaisrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykg
eworICAgICAgICAgICAgICAgICAgICBIW2ldW2pdID0gdmFsdWUuZ2V0KGksIGopOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9ydGhlcyhuLCBILCBvcnQs
IFYpOworICAgICAgICAgICAgaHFyMihuLCBlLCBkLCBWLCBIKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMubiA9IG47CisgICAgICAgIHRoaXMuZSA9IGU7CisgICAgICAgIHRoaXMuZCA9IGQ7
CisgICAgICAgIHRoaXMuViA9IFY7CisgICAgfQorCisgICAgRWlnZW52YWx1ZURlY29tcG9zaXRp
b24ucHJvdG90eXBlID0geworICAgICAgICBnZXQgcmVhbEVpZ2VudmFsdWVzKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZDsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0IGltYWdpbmFyeUVp
Z2VudmFsdWVzKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZ2V0IGVpZ2VudmVjdG9yTWF0cml4KCkgeworICAgICAgICAgICAgaWYgKCFNYXRyaXgu
aXNNYXRyaXgodGhpcy5WKSkgeworICAgICAgICAgICAgICAgIHRoaXMuViA9IG5ldyBNYXRyaXgo
dGhpcy5WKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLlY7CisgICAg
ICAgIH0sCisgICAgICAgIGdldCBkaWFnb25hbE1hdHJpeCgpIHsKKyAgICAgICAgICAgIHZhciBu
ID0gdGhpcy5uLAorICAgICAgICAgICAgICAgIGUgPSB0aGlzLmUsCisgICAgICAgICAgICAgICAg
ZCA9IHRoaXMuZCwKKyAgICAgICAgICAgICAgICBYID0gbmV3IE1hdHJpeChuLCBuKSwKKyAgICAg
ICAgICAgICAgICBpLCBqOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewor
ICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgWFtpXVtqXSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFhb
aV1baV0gPSBkW2ldOworICAgICAgICAgICAgICAgIGlmIChlW2ldID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICBYW2ldW2kgKyAxXSA9IGVbaV07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChlW2ldIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBYW2ldW2kgLSAxXSA9IGVbaV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFg7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gdHJlZDIobiwgZSwgZCwgVikgeworCisg
ICAgICAgIHZhciBmLCBnLCBoLCBpLCBqLCBrLAorICAgICAgICAgICAgaGgsIHNjYWxlOworCisg
ICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKKyAgICAgICAgICAgIGRbal0gPSBWW24g
LSAxXVtqXTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IG4gLSAxOyBpID4gMDsgaS0t
KSB7CisgICAgICAgICAgICBzY2FsZSA9IDA7CisgICAgICAgICAgICBoID0gMDsKKyAgICAgICAg
ICAgIGZvciAoayA9IDA7IGsgPCBpOyBrKyspIHsKKyAgICAgICAgICAgICAgICBzY2FsZSA9IHNj
YWxlICsgTWF0aC5hYnMoZFtrXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChz
Y2FsZSA9PT0gMCkgeworICAgICAgICAgICAgICAgIGVbaV0gPSBkW2kgLSAxXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGRb
al0gPSBWW2kgLSAxXVtqXTsKKyAgICAgICAgICAgICAgICAgICAgVltpXVtqXSA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIFZbal1baV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGk7IGsrKykgewor
ICAgICAgICAgICAgICAgICAgICBkW2tdIC89IHNjYWxlOworICAgICAgICAgICAgICAgICAgICBo
ICs9IGRba10gKiBkW2tdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGYg
PSBkW2kgLSAxXTsKKyAgICAgICAgICAgICAgICBnID0gTWF0aC5zcXJ0KGgpOworICAgICAgICAg
ICAgICAgIGlmIChmID4gMCkgeworICAgICAgICAgICAgICAgICAgICBnID0gLWc7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZVtpXSA9IHNjYWxlICogZzsKKyAgICAgICAg
ICAgICAgICBoID0gaCAtIGYgKiBnOworICAgICAgICAgICAgICAgIGRbaSAtIDFdID0gZiAtIGc7
CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAg
ICAgICAgICBlW2pdID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBm
b3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGYgPSBkW2pdOwor
ICAgICAgICAgICAgICAgICAgICBWW2pdW2ldID0gZjsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IGVbal0gKyBWW2pdW2pdICogZjsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gaiArIDE7
IGsgPD0gaSAtIDE7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZyArPSBWW2tdW2pd
ICogZFtrXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVba10gKz0gVltrXVtqXSAqIGY7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZVtqXSA9IGc7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZiA9IDA7CisgICAgICAgICAgICAgICAg
Zm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBlW2pdIC89IGg7
CisgICAgICAgICAgICAgICAgICAgIGYgKz0gZVtqXSAqIGRbal07CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaGggPSBmIC8gKGggKyBoKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGVbal0gLT0gaGgg
KiBkW2pdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7
IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZiA9IGRbal07CisgICAgICAgICAg
ICAgICAgICAgIGcgPSBlW2pdOworICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSBqOyBrIDw9
IGkgLSAxOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZba11bal0gLT0gKGYgKiBl
W2tdICsgZyAqIGRba10pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGRbal0gPSBWW2kgLSAxXVtqXTsKKyAgICAgICAgICAgICAgICAgICAgVltpXVtqXSA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZFtpXSA9IGg7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgeworICAg
ICAgICAgICAgVltuIC0gMV1baV0gPSBWW2ldW2ldOworICAgICAgICAgICAgVltpXVtpXSA9IDE7
CisgICAgICAgICAgICBoID0gZFtpICsgMV07CisgICAgICAgICAgICBpZiAoaCAhPT0gMCkgewor
ICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPD0gaTsgaysrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRba10gPSBWW2tdW2kgKyAxXSAvIGg7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8PSBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPD0gaTsgaysrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnICs9IFZba11baSArIDFdICogVltrXVtqXTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDw9
IGk7IGsrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgVltrXVtqXSAtPSBnICogZFtrXTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8PSBpOyBrKyspIHsKKyAgICAgICAgICAgICAg
ICBWW2tdW2kgKyAxXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKGogPSAwOyBqIDwgbjsgaisrKSB7CisgICAgICAgICAgICBkW2pdID0gVltuIC0gMV1bal07
CisgICAgICAgICAgICBWW24gLSAxXVtqXSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBWW24g
LSAxXVtuIC0gMV0gPSAxOworICAgICAgICBlWzBdID0gMDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0cWwyKG4sIGUsIGQsIFYpIHsKKworICAgICAgICB2YXIgZywgaCwgaSwgaiwgaywgbCwgbSwg
cCwgciwKKyAgICAgICAgICAgIGRsMSwgYywgYzIsIGMzLCBlbDEsIHMsIHMyLAorICAgICAgICAg
ICAgaXRlcjsKKworICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAg
ICBlW2kgLSAxXSA9IGVbaV07CisgICAgICAgIH0KKworICAgICAgICBlW24gLSAxXSA9IDA7CisK
KyAgICAgICAgdmFyIGYgPSAwLAorICAgICAgICAgICAgdHN0MSA9IDAsCisgICAgICAgICAgICBl
cHMgPSBNYXRoLnBvdygyLCAtNTIpOworCisgICAgICAgIGZvciAobCA9IDA7IGwgPCBuOyBsKysp
IHsKKyAgICAgICAgICAgIHRzdDEgPSBNYXRoLm1heCh0c3QxLCBNYXRoLmFicyhkW2xdKSArIE1h
dGguYWJzKGVbbF0pKTsKKyAgICAgICAgICAgIG0gPSBsOworICAgICAgICAgICAgd2hpbGUgKG0g
PCBuKSB7CisgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGVbbV0pIDw9IGVwcyAqIHRzdDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG0rKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG0gPiBsKSB7
CisgICAgICAgICAgICAgICAgaXRlciA9IDA7CisgICAgICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgICAgICBpdGVyID0gaXRlciArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgZyA9
IGRbbF07CisgICAgICAgICAgICAgICAgICAgIHAgPSAoZFtsICsgMV0gLSBnKSAvICgyICogZVts
XSk7CisgICAgICAgICAgICAgICAgICAgIHIgPSBoeXBvdGVudXNlKHAsIDEpOworICAgICAgICAg
ICAgICAgICAgICBpZiAocCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAtcjsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRbbF0gPSBlW2xd
IC8gKHAgKyByKTsKKyAgICAgICAgICAgICAgICAgICAgZFtsICsgMV0gPSBlW2xdICogKHAgKyBy
KTsKKyAgICAgICAgICAgICAgICAgICAgZGwxID0gZFtsICsgMV07CisgICAgICAgICAgICAgICAg
ICAgIGggPSBnIC0gZFtsXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gbCArIDI7IGkg
PCBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRbaV0gLT0gaDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGYgPSBmICsgaDsKKworICAgICAg
ICAgICAgICAgICAgICBwID0gZFttXTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IDE7CisgICAg
ICAgICAgICAgICAgICAgIGMyID0gYzsKKyAgICAgICAgICAgICAgICAgICAgYzMgPSBjOworICAg
ICAgICAgICAgICAgICAgICBlbDEgPSBlW2wgKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgcyA9
IDA7CisgICAgICAgICAgICAgICAgICAgIHMyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpID0gbSAtIDE7IGkgPj0gbDsgaS0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjMyA9
IGMyOworICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSBjOworICAgICAgICAgICAgICAgICAg
ICAgICAgczIgPSBzOworICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGMgKiBlW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgaCA9IGMgKiBwOworICAgICAgICAgICAgICAgICAgICAgICAg
ciA9IGh5cG90ZW51c2UocCwgZVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlW2kgKyAx
XSA9IHMgKiByOworICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGVbaV0gLyByOworICAgICAg
ICAgICAgICAgICAgICAgICAgYyA9IHAgLyByOworICAgICAgICAgICAgICAgICAgICAgICAgcCA9
IGMgKiBkW2ldIC0gcyAqIGc7CisgICAgICAgICAgICAgICAgICAgICAgICBkW2kgKyAxXSA9IGgg
KyBzICogKGMgKiBnICsgcyAqIGRbaV0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGsgPSAwOyBrIDwgbjsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IFZb
a11baSArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZba11baSArIDFdID0gcyAq
IFZba11baV0gKyBjICogaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWW2tdW2ldID0g
YyAqIFZba11baV0gLSBzICogaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHAgPSAtcyAqIHMyICogYzMgKiBl
bDEgKiBlW2xdIC8gZGwxOworICAgICAgICAgICAgICAgICAgICBlW2xdID0gcyAqIHA7CisgICAg
ICAgICAgICAgICAgICAgIGRbbF0gPSBjICogcDsKKworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB3aGlsZSAoTWF0aC5hYnMoZVtsXSkgPiBlcHMgKiB0c3QxKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRbbF0gPSBkW2xdICsgZjsKKyAgICAgICAgICAgIGVbbF0gPSAw
OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKKyAg
ICAgICAgICAgIGsgPSBpOworICAgICAgICAgICAgcCA9IGRbaV07CisgICAgICAgICAgICBmb3Ig
KGogPSBpICsgMTsgaiA8IG47IGorKykgeworICAgICAgICAgICAgICAgIGlmIChkW2pdIDwgcCkg
eworICAgICAgICAgICAgICAgICAgICBrID0gajsKKyAgICAgICAgICAgICAgICAgICAgcCA9IGRb
al07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
ayAhPT0gaSkgeworICAgICAgICAgICAgICAgIGRba10gPSBkW2ldOworICAgICAgICAgICAgICAg
IGRbaV0gPSBwOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgcCA9IFZbal1baV07CisgICAgICAgICAgICAgICAgICAgIFZbal1b
aV0gPSBWW2pdW2tdOworICAgICAgICAgICAgICAgICAgICBWW2pdW2tdID0gcDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBvcnRoZXMobiwgSCwgb3J0LCBWKSB7CisKKyAgICAgICAgdmFyIGxvdyA9IDAsCisgICAgICAg
ICAgICBoaWdoID0gbiAtIDEsCisgICAgICAgICAgICBmLCBnLCBoLCBpLCBqLCBtLAorICAgICAg
ICAgICAgc2NhbGU7CisKKyAgICAgICAgZm9yIChtID0gbG93ICsgMTsgbSA8PSBoaWdoIC0gMTsg
bSsrKSB7CisgICAgICAgICAgICBzY2FsZSA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSBtOyBp
IDw9IGhpZ2g7IGkrKykgeworICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgKyBNYXRoLmFi
cyhIW2ldW20gLSAxXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzY2FsZSAh
PT0gMCkgeworICAgICAgICAgICAgICAgIGggPSAwOworICAgICAgICAgICAgICAgIGZvciAoaSA9
IGhpZ2g7IGkgPj0gbTsgaS0tKSB7CisgICAgICAgICAgICAgICAgICAgIG9ydFtpXSA9IEhbaV1b
bSAtIDFdIC8gc2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGggKz0gb3J0W2ldICogb3J0W2ld
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGcgPSBNYXRoLnNxcnQoaCk7
CisgICAgICAgICAgICAgICAgaWYgKG9ydFttXSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
ZyA9IC1nOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGggPSBoIC0gb3J0
W21dICogZzsKKyAgICAgICAgICAgICAgICBvcnRbbV0gPSBvcnRbbV0gLSBnOworCisgICAgICAg
ICAgICAgICAgZm9yIChqID0gbTsgaiA8IG47IGorKykgeworICAgICAgICAgICAgICAgICAgICBm
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gaGlnaDsgaSA+PSBtOyBpLS0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGYgKz0gb3J0W2ldICogSFtpXVtqXTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGYgPSBmIC8gaDsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpID0gbTsgaSA8PSBoaWdoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEhbaV1bal0gLT0gZiAqIG9ydFtpXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gaGln
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGYgPSAwOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGogPSBoaWdoOyBqID49IG07IGotLSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZiArPSBvcnRbal0gKiBIW2ldW2pdOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgZiA9IGYgLyBoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBtOyBq
IDw9IGhpZ2g7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgSFtpXVtqXSAtPSBmICog
b3J0W2pdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgb3J0W21dID0gc2NhbGUgKiBvcnRbbV07CisgICAgICAgICAgICAgICAgSFtt
XVttIC0gMV0gPSBzY2FsZSAqIGc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg
bjsgaisrKSB7CisgICAgICAgICAgICAgICAgVltpXVtqXSA9IChpID09PSBqID8gMSA6IDApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChtID0gaGlnaCAtIDE7IG0g
Pj0gbG93ICsgMTsgbS0tKSB7CisgICAgICAgICAgICBpZiAoSFttXVttIC0gMV0gIT09IDApIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGkgPSBtICsgMTsgaSA8PSBoaWdoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgb3J0W2ldID0gSFtpXVttIC0gMV07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZm9yIChqID0gbTsgaiA8PSBoaWdoOyBqKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG07IGkgPD0g
aGlnaDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnICs9IG9ydFtpXSAqIFZbaV1b
al07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBnID0gKGcg
LyBvcnRbbV0pIC8gSFttXVttIC0gMV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG07
IGkgPD0gaGlnaDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWW2ldW2pdICs9IGcg
KiBvcnRbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBocXIyKG5uLCBlLCBk
LCBWLCBIKSB7CisgICAgICAgIHZhciBuID0gbm4gLSAxLAorICAgICAgICAgICAgbG93ID0gMCwK
KyAgICAgICAgICAgIGhpZ2ggPSBubiAtIDEsCisgICAgICAgICAgICBlcHMgPSBNYXRoLnBvdygy
LCAtNTIpLAorICAgICAgICAgICAgZXhzaGlmdCA9IDAsCisgICAgICAgICAgICBub3JtID0gMCwK
KyAgICAgICAgICAgIHAgPSAwLAorICAgICAgICAgICAgcSA9IDAsCisgICAgICAgICAgICByID0g
MCwKKyAgICAgICAgICAgIHMgPSAwLAorICAgICAgICAgICAgeiA9IDAsCisgICAgICAgICAgICBp
dGVyID0gMCwKKyAgICAgICAgICAgIGksIGosIGssIGwsIG0sIHQsIHcsIHgsIHksCisgICAgICAg
ICAgICByYSwgc2EsIHZyLCB2aSwKKyAgICAgICAgICAgIG5vdGxhc3QsIGNkaXZyZXM7CisKKyAg
ICAgICAgZm9yIChpID0gMDsgaSA8IG5uOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIDwgbG93
IHx8IGkgPiBoaWdoKSB7CisgICAgICAgICAgICAgICAgZFtpXSA9IEhbaV1baV07CisgICAgICAg
ICAgICAgICAgZVtpXSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaiA9
IE1hdGgubWF4KGkgLSAxLCAwKTsgaiA8IG5uOyBqKyspIHsKKyAgICAgICAgICAgICAgICBub3Jt
ID0gbm9ybSArIE1hdGguYWJzKEhbaV1bal0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgd2hpbGUgKG4gPj0gbG93KSB7CisgICAgICAgICAgICBsID0gbjsKKyAgICAgICAg
ICAgIHdoaWxlIChsID4gbG93KSB7CisgICAgICAgICAgICAgICAgcyA9IE1hdGguYWJzKEhbbCAt
IDFdW2wgLSAxXSkgKyBNYXRoLmFicyhIW2xdW2xdKTsKKyAgICAgICAgICAgICAgICBpZiAocyA9
PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBzID0gbm9ybTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKEhbbF1bbCAtIDFdKSA8IGVwcyAqIHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGwtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGwgPT09IG4pIHsK
KyAgICAgICAgICAgICAgICBIW25dW25dID0gSFtuXVtuXSArIGV4c2hpZnQ7CisgICAgICAgICAg
ICAgICAgZFtuXSA9IEhbbl1bbl07CisgICAgICAgICAgICAgICAgZVtuXSA9IDA7CisgICAgICAg
ICAgICAgICAgbi0tOworICAgICAgICAgICAgICAgIGl0ZXIgPSAwOworICAgICAgICAgICAgfSBl
bHNlIGlmIChsID09PSBuIC0gMSkgeworICAgICAgICAgICAgICAgIHcgPSBIW25dW24gLSAxXSAq
IEhbbiAtIDFdW25dOworICAgICAgICAgICAgICAgIHAgPSAoSFtuIC0gMV1bbiAtIDFdIC0gSFtu
XVtuXSkgLyAyOworICAgICAgICAgICAgICAgIHEgPSBwICogcCArIHc7CisgICAgICAgICAgICAg
ICAgeiA9IE1hdGguc3FydChNYXRoLmFicyhxKSk7CisgICAgICAgICAgICAgICAgSFtuXVtuXSA9
IEhbbl1bbl0gKyBleHNoaWZ0OworICAgICAgICAgICAgICAgIEhbbiAtIDFdW24gLSAxXSA9IEhb
biAtIDFdW24gLSAxXSArIGV4c2hpZnQ7CisgICAgICAgICAgICAgICAgeCA9IEhbbl1bbl07CisK
KyAgICAgICAgICAgICAgICBpZiAocSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHogPSAo
cCA+PSAwKSA/IChwICsgeikgOiAocCAtIHopOworICAgICAgICAgICAgICAgICAgICBkW24gLSAx
XSA9IHggKyB6OworICAgICAgICAgICAgICAgICAgICBkW25dID0gZFtuIC0gMV07CisgICAgICAg
ICAgICAgICAgICAgIGlmICh6ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkW25d
ID0geCAtIHcgLyB6OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVbbiAtIDFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZVtuXSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIHggPSBIW25dW24gLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IE1hdGgu
YWJzKHgpICsgTWF0aC5hYnMoeik7CisgICAgICAgICAgICAgICAgICAgIHAgPSB4IC8gczsKKyAg
ICAgICAgICAgICAgICAgICAgcSA9IHogLyBzOworICAgICAgICAgICAgICAgICAgICByID0gTWF0
aC5zcXJ0KHAgKiBwICsgcSAqIHEpOworICAgICAgICAgICAgICAgICAgICBwID0gcCAvIHI7Cisg
ICAgICAgICAgICAgICAgICAgIHEgPSBxIC8gcjsKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KGogPSBuIC0gMTsgaiA8IG5uOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHogPSBI
W24gLSAxXVtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhbbiAtIDFdW2pdID0gcSAqIHog
KyBwICogSFtuXVtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhbbl1bal0gPSBxICogSFtu
XVtqXSAtIHAgKiB6OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHog
PSBIW2ldW24gLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhbaV1bbiAtIDFdID0gcSAq
IHogKyBwICogSFtpXVtuXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhbaV1bbl0gPSBxICog
SFtpXVtuXSAtIHAgKiB6OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gbG93OyBpIDw9IGhpZ2g7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgeiA9IFZbaV1bbiAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgVltpXVtuIC0g
MV0gPSBxICogeiArIHAgKiBWW2ldW25dOworICAgICAgICAgICAgICAgICAgICAgICAgVltpXVtu
XSA9IHEgKiBWW2ldW25dIC0gcCAqIHo7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkW24gLSAxXSA9IHggKyBwOwor
ICAgICAgICAgICAgICAgICAgICBkW25dID0geCArIHA7CisgICAgICAgICAgICAgICAgICAgIGVb
biAtIDFdID0gejsKKyAgICAgICAgICAgICAgICAgICAgZVtuXSA9IC16OworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIG4gPSBuIC0gMjsKKyAgICAgICAgICAgICAgICBpdGVy
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeCA9IEhbbl1bbl07
CisgICAgICAgICAgICAgICAgeSA9IDA7CisgICAgICAgICAgICAgICAgdyA9IDA7CisgICAgICAg
ICAgICAgICAgaWYgKGwgPCBuKSB7CisgICAgICAgICAgICAgICAgICAgIHkgPSBIW24gLSAxXVtu
IC0gMV07CisgICAgICAgICAgICAgICAgICAgIHcgPSBIW25dW24gLSAxXSAqIEhbbiAtIDFdW25d
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpdGVyID09PSAxMCkg
eworICAgICAgICAgICAgICAgICAgICBleHNoaWZ0ICs9IHg7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoaSA9IGxvdzsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhb
aV1baV0gLT0geDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBz
ID0gTWF0aC5hYnMoSFtuXVtuIC0gMV0pICsgTWF0aC5hYnMoSFtuIC0gMV1bbiAtIDJdKTsKKyAg
ICAgICAgICAgICAgICAgICAgeCA9IHkgPSAwLjc1ICogczsKKyAgICAgICAgICAgICAgICAgICAg
dyA9IC0wLjQzNzUgKiBzICogczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoaXRlciA9PT0gMzApIHsKKyAgICAgICAgICAgICAgICAgICAgcyA9ICh5IC0geCkgLyAy
OworICAgICAgICAgICAgICAgICAgICBzID0gcyAqIHMgKyB3OworICAgICAgICAgICAgICAgICAg
ICBpZiAocyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBNYXRoLnNxcnQocyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzID0gLXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBzID0geCAtIHcgLyAoKHkgLSB4KSAvIDIgKyBzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaSA9IGxvdzsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBIW2ldW2ldIC09IHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBleHNoaWZ0ICs9IHM7CisgICAgICAgICAgICAgICAgICAg
ICAgICB4ID0geSA9IHcgPSAwLjk2NDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGl0ZXIgPSBpdGVyICsgMTsKKworICAgICAgICAg
ICAgICAgIG0gPSBuIC0gMjsKKyAgICAgICAgICAgICAgICB3aGlsZSAobSA+PSBsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHogPSBIW21dW21dOworICAgICAgICAgICAgICAgICAgICByID0geCAt
IHo7CisgICAgICAgICAgICAgICAgICAgIHMgPSB5IC0gejsKKyAgICAgICAgICAgICAgICAgICAg
cCA9IChyICogcyAtIHcpIC8gSFttICsgMV1bbV0gKyBIW21dW20gKyAxXTsKKyAgICAgICAgICAg
ICAgICAgICAgcSA9IEhbbSArIDFdW20gKyAxXSAtIHogLSByIC0gczsKKyAgICAgICAgICAgICAg
ICAgICAgciA9IEhbbSArIDJdW20gKyAxXTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IE1hdGgu
YWJzKHApICsgTWF0aC5hYnMocSkgKyBNYXRoLmFicyhyKTsKKyAgICAgICAgICAgICAgICAgICAg
cCA9IHAgLyBzOworICAgICAgICAgICAgICAgICAgICBxID0gcSAvIHM7CisgICAgICAgICAgICAg
ICAgICAgIHIgPSByIC8gczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG0gPT09IGwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhIW21dW20gLSAxXSkgKiAoTWF0aC5hYnMocSkg
KyBNYXRoLmFicyhyKSkgPCBlcHMgKiAoTWF0aC5hYnMocCkgKiAoTWF0aC5hYnMoSFttIC0gMV1b
bSAtIDFdKSArIE1hdGguYWJzKHopICsgTWF0aC5hYnMoSFttICsgMV1bbSArIDFdKSkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBtLS07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgZm9yIChpID0gbSArIDI7IGkgPD0gbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEhb
aV1baSAtIDJdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiBtICsgMikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgSFtpXVtpIC0gM10gPSAwOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChrID0gbTsgayA8
PSBuIC0gMTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIG5vdGxhc3QgPSAoayAhPT0gbiAt
IDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoayAhPT0gbSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcCA9IEhba11bayAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgcSA9IEhb
ayArIDFdW2sgLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAobm90bGFzdCA/IEhb
ayArIDJdW2sgLSAxXSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IE1hdGguYWJz
KHApICsgTWF0aC5hYnMocSkgKyBNYXRoLmFicyhyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh4ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAgLyB4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBxIC8geDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByID0gciAvIHg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBzID0gTWF0aC5zcXJ0KHAgKiBwICsgcSAqIHEgKyByICogcik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cyA9IC1zOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHMgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrICE9PSBtKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSFtrXVtrIC0gMV0gPSAtcyAqIHg7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGwgIT09IG0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBIW2tdW2sgLSAxXSA9IC1IW2tdW2sgLSAxXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAgKyBzOworICAgICAgICAgICAg
ICAgICAgICAgICAgeCA9IHAgLyBzOworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHEgLyBz
OworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IHIgLyBzOworICAgICAgICAgICAgICAgICAg
ICAgICAgcSA9IHEgLyBwOworICAgICAgICAgICAgICAgICAgICAgICAgciA9IHIgLyBwOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgbm47IGorKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHAgPSBIW2tdW2pdICsgcSAqIEhbayArIDFdW2pdOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3RsYXN0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHAgPSBwICsgciAqIEhbayArIDJdW2pdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBIW2sgKyAyXVtqXSA9IEhbayArIDJdW2pdIC0gcCAqIHo7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SFtrXVtqXSA9IEhba11bal0gLSBwICogeDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBI
W2sgKyAxXVtqXSA9IEhbayArIDFdW2pdIC0gcCAqIHk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gTWF0aC5taW4o
biwgayArIDMpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0geCAqIEhb
aV1ba10gKyB5ICogSFtpXVtrICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vdGxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAgKyB6ICog
SFtpXVtrICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhbaV1bayArIDJd
ID0gSFtpXVtrICsgMl0gLSBwICogcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIW2ldW2tdID0gSFtpXVtrXSAtIHA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSFtpXVtrICsgMV0gPSBIW2ldW2sgKyAxXSAtIHAgKiBx
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGkgPSBsb3c7IGkgPD0gaGlnaDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcCA9IHggKiBWW2ldW2tdICsgeSAqIFZbaV1bayArIDFdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub3RsYXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHAgPSBwICsgeiAqIFZbaV1bayArIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWW2ldW2sgKyAyXSA9IFZbaV1bayArIDJdIC0gcCAqIHI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVltpXVtrXSA9IFZbaV1b
a10gLSBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZbaV1bayArIDFdID0gVltpXVtr
ICsgMV0gLSBwICogcTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChub3JtID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKG4gPSBubiAtIDE7IG4gPj0gMDsgbi0tKSB7CisgICAgICAgICAgICBw
ID0gZFtuXTsKKyAgICAgICAgICAgIHEgPSBlW25dOworCisgICAgICAgICAgICBpZiAocSA9PT0g
MCkgeworICAgICAgICAgICAgICAgIGwgPSBuOworICAgICAgICAgICAgICAgIEhbbl1bbl0gPSAx
OworICAgICAgICAgICAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IGktLSkgeworICAgICAg
ICAgICAgICAgICAgICB3ID0gSFtpXVtpXSAtIHA7CisgICAgICAgICAgICAgICAgICAgIHIgPSAw
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBsOyBqIDw9IG47IGorKykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgciA9IHIgKyBIW2ldW2pdICogSFtqXVtuXTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChlW2ldIDwgMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgeiA9IHc7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gcjsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGwg
PSBpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVbaV0gPT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIW2ldW25dID0gKHcgIT09IDApID8gKC1yIC8gdykgOiAoLXIg
LyAoZXBzICogbm9ybSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4ID0gSFtpXVtpICsgMV07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeSA9IEhbaSArIDFdW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHEgPSAoZFtpXSAtIHApICogKGRbaV0gLSBwKSArIGVbaV0gKiBlW2ldOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHQgPSAoeCAqIHMgLSB6ICogcikgLyBxOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEhbaV1bbl0gPSB0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhb
aSArIDFdW25dID0gKE1hdGguYWJzKHgpID4gTWF0aC5hYnMoeikpID8gKCgtciAtIHcgKiB0KSAv
IHgpIDogKCgtcyAtIHkgKiB0KSAvIHopOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ID0gTWF0aC5hYnMoSFtpXVtuXSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKGVwcyAqIHQpICogdCA+IDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGogPSBpOyBqIDw9IG47IGorKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBIW2pdW25dID0gSFtqXVtuXSAvIHQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChxIDwgMCkgewor
ICAgICAgICAgICAgICAgIGwgPSBuIC0gMTsKKworICAgICAgICAgICAgICAgIGlmIChNYXRoLmFi
cyhIW25dW24gLSAxXSkgPiBNYXRoLmFicyhIW24gLSAxXVtuXSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgSFtuIC0gMV1bbiAtIDFdID0gcSAvIEhbbl1bbiAtIDFdOworICAgICAgICAgICAgICAg
ICAgICBIW24gLSAxXVtuXSA9IC0oSFtuXVtuXSAtIHApIC8gSFtuXVtuIC0gMV07CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2RpdnJlcyA9IGNkaXYoMCwg
LUhbbiAtIDFdW25dLCBIW24gLSAxXVtuIC0gMV0gLSBwLCBxKTsKKyAgICAgICAgICAgICAgICAg
ICAgSFtuIC0gMV1bbiAtIDFdID0gY2RpdnJlc1swXTsKKyAgICAgICAgICAgICAgICAgICAgSFtu
IC0gMV1bbl0gPSBjZGl2cmVzWzFdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIEhbbl1bbiAtIDFdID0gMDsKKyAgICAgICAgICAgICAgICBIW25dW25dID0gMTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGkgPSBuIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmEgPSAwOworICAgICAgICAgICAgICAgICAgICBzYSA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaiA9IGw7IGogPD0gbjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByYSA9IHJhICsgSFtpXVtqXSAqIEhbal1bbiAtIDFdOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2EgPSBzYSArIEhbaV1bal0gKiBIW2pdW25dOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgdyA9IEhbaV1baV0gLSBwOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChlW2ldIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IHc7CisgICAg
ICAgICAgICAgICAgICAgICAgICByID0gcmE7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0g
c2E7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlW2ldID09PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2RpdnJlcyA9IGNkaXYoLXJhLCAtc2EsIHcsIHEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhbaV1bbiAtIDFdID0gY2RpdnJlc1swXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBIW2ldW25dID0gY2RpdnJlc1sxXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9
IEhbaV1baSArIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBIW2kgKyAxXVtp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ciA9IChkW2ldIC0gcCkgKiAoZFtpXSAt
IHApICsgZVtpXSAqIGVbaV0gLSBxICogcTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
aSA9IChkW2ldIC0gcCkgKiAyICogcTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dnIgPT09IDAgJiYgdmkgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dnIgPSBlcHMgKiBub3JtICogKE1hdGguYWJzKHcpICsgTWF0aC5hYnMocSkgKyBNYXRoLmFicyh4
KSArIE1hdGguYWJzKHkpICsgTWF0aC5hYnMoeikpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGl2cmVzID0gY2Rpdih4ICogciAt
IHogKiByYSArIHEgKiBzYSwgeCAqIHMgLSB6ICogc2EgLSBxICogcmEsIHZyLCB2aSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSFtpXVtuIC0gMV0gPSBjZGl2cmVzWzBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEhbaV1bbl0gPSBjZGl2cmVzWzFdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4KSA+IChNYXRoLmFicyh6KSArIE1hdGguYWJz
KHEpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIW2kgKyAxXVtuIC0gMV0g
PSAoLXJhIC0gdyAqIEhbaV1bbiAtIDFdICsgcSAqIEhbaV1bbl0pIC8geDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSFtpICsgMV1bbl0gPSAoLXNhIC0gdyAqIEhbaV1bbl0gLSBx
ICogSFtpXVtuIC0gMV0pIC8geDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGl2cmVzID0gY2RpdigtciAtIHkg
KiBIW2ldW24gLSAxXSwgLXMgLSB5ICogSFtpXVtuXSwgeiwgcSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEhbaSArIDFdW24gLSAxXSA9IGNkaXZyZXNbMF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEhbaSArIDFdW25dID0gY2RpdnJlc1sxXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHQgPSBNYXRoLm1heChNYXRoLmFicyhIW2ldW24gLSAxXSksIE1h
dGguYWJzKEhbaV1bbl0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZXBzICogdCkg
KiB0ID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGk7IGogPD0g
bjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhbal1bbiAtIDFdID0g
SFtqXVtuIC0gMV0gLyB0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIW2pdW25d
ID0gSFtqXVtuXSAvIHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5u
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIDwgbG93IHx8IGkgPiBoaWdoKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChqID0gaTsgaiA8IG5uOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
VltpXVtqXSA9IEhbaV1bal07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZm9yIChqID0gbm4gLSAxOyBqID49IGxvdzsgai0tKSB7CisgICAg
ICAgICAgICBmb3IgKGkgPSBsb3c7IGkgPD0gaGlnaDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
eiA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChrID0gbG93OyBrIDw9IE1hdGgubWluKGosIGhp
Z2gpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgeiA9IHogKyBWW2ldW2tdICogSFtrXVtq
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVltpXVtqXSA9IHo7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjZGl2KHhyLCB4aSwg
eXIsIHlpKSB7CisgICAgICAgIHZhciByLCBkOworICAgICAgICBpZiAoTWF0aC5hYnMoeXIpID4g
TWF0aC5hYnMoeWkpKSB7CisgICAgICAgICAgICByID0geWkgLyB5cjsKKyAgICAgICAgICAgIGQg
PSB5ciArIHIgKiB5aTsKKyAgICAgICAgICAgIHJldHVybiBbKHhyICsgciAqIHhpKSAvIGQsICh4
aSAtIHIgKiB4cikgLyBkXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHIgPSB5ciAv
IHlpOworICAgICAgICAgICAgZCA9IHlpICsgciAqIHlyOworICAgICAgICAgICAgcmV0dXJuIFso
ciAqIHhyICsgeGkpIC8gZCwgKHIgKiB4aSAtIHhyKSAvIGRdOworICAgICAgICB9CisgICAgfQor
CisgICAgTUxNYXRyaXhEQ0VWRCA9IEVpZ2VudmFsdWVEZWNvbXBvc2l0aW9uOworfQorCisKKy8v
IG1sLW1hdHJpeCBzcmMvZGMvcXIuanMKK2xldCBNTE1hdHJpeERDUVI7Cit7CisgICAgbGV0IE1h
dHJpeCA9IE1MTWF0cml4TWF0cml4Lk1hdHJpeDsKKyAgICBsZXQgaHlwb3RlbnVzZSA9IE1MTWF0
cml4RENVdGlsLmh5cG90ZW51c2U7CisKKyAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9sdXR6cm9l
ZGVyL01hcGFjay9ibG9iL21hc3Rlci9Tb3VyY2UvUXJEZWNvbXBvc2l0aW9uLmNzCisgICAgZnVu
Y3Rpb24gUXJEZWNvbXBvc2l0aW9uKHZhbHVlKSB7CisgICAgICAgIGlmICghKHRoaXMgaW5zdGFu
Y2VvZiBRckRlY29tcG9zaXRpb24pKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFFyRGVjb21w
b3NpdGlvbih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBNYXRyaXguY2hlY2tN
YXRyaXgodmFsdWUpOworCisgICAgICAgIHZhciBxciA9IHZhbHVlLmNsb25lKCksCisgICAgICAg
ICAgICBtID0gdmFsdWUucm93cywKKyAgICAgICAgICAgIG4gPSB2YWx1ZS5jb2x1bW5zLAorICAg
ICAgICAgICAgcmRpYWcgPSBuZXcgQXJyYXkobiksCisgICAgICAgICAgICBpLCBqLCBrLCBzOwor
CisgICAgICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHsKKyAgICAgICAgICAgIHZhciBucm0g
PSAwOworICAgICAgICAgICAgZm9yIChpID0gazsgaSA8IG07IGkrKykgeworICAgICAgICAgICAg
ICAgIG5ybSA9IGh5cG90ZW51c2UobnJtLCBxcltpXVtrXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobnJtICE9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHFyW2tdW2tdIDwg
MCkgeworICAgICAgICAgICAgICAgICAgICBucm0gPSAtbnJtOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIHFyW2ldW2tdIC89IG5ybTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcXJba11ba10gKz0gMTsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSBrICsgMTsgaiA8IG47
IGorKykgeworICAgICAgICAgICAgICAgICAgICBzID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpID0gazsgaSA8IG07IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBx
cltpXVtrXSAqIHFyW2ldW2pdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHMgPSAtcyAvIHFyW2tdW2tdOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBr
OyBpIDwgbTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxcltpXVtqXSArPSBzICog
cXJbaV1ba107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZGlhZ1trXSA9IC1ucm07CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLlFSID0gcXI7CisgICAgICAgIHRoaXMuUmRpYWcgPSByZGlhZzsKKyAgICB9CisK
KyAgICBRckRlY29tcG9zaXRpb24ucHJvdG90eXBlID0geworICAgICAgICBzb2x2ZTogZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICB2YWx1ZSA9IE1hdHJpeC5jaGVja01hdHJpeCh2YWx1
ZSk7CisKKyAgICAgICAgICAgIHZhciBxciA9IHRoaXMuUVIsCisgICAgICAgICAgICAgICAgbSA9
IHFyLnJvd3M7CisKKyAgICAgICAgICAgIGlmICh2YWx1ZS5yb3dzICE9PSBtKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXggcm93IGRpbWVuc2lvbnMgbXVzdCBhZ3Jl
ZScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0aGlzLmlzRnVsbFJhbmsoKSkg
eworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4IGlzIHJhbmsgZGVmaWNp
ZW50Jyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjb3VudCA9IHZhbHVlLmNv
bHVtbnM7CisgICAgICAgICAgICB2YXIgWCA9IHZhbHVlLmNsb25lKCk7CisgICAgICAgICAgICB2
YXIgbiA9IHFyLmNvbHVtbnM7CisgICAgICAgICAgICB2YXIgaSwgaiwgaywgczsKKworICAgICAg
ICAgICAgZm9yIChrID0gMDsgayA8IG47IGsrKykgeworICAgICAgICAgICAgICAgIGZvciAoaiA9
IDA7IGogPCBjb3VudDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHMgPSAwOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbTsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzICs9IHFyW2ldW2tdICogWFtpXVtqXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBzID0gLXMgLyBxcltrXVtrXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpID0gazsgaSA8IG07IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgWFtp
XVtqXSArPSBzICogcXJbaV1ba107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGsgPSBuIC0gMTsgayA+PSAw
OyBrLS0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgewor
ICAgICAgICAgICAgICAgICAgICBYW2tdW2pdIC89IHRoaXMuUmRpYWdba107CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFhbaV1bal0gLT0gWFtrXVtqXSAqIHFyW2ldW2tdOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gWC5zdWJNYXRyaXgoMCwgbiAtIDEsIDAsIGNvdW50IC0gMSk7CisgICAgICAgIH0s
CisgICAgICAgIGlzRnVsbFJhbms6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjb2x1
bW5zID0gdGhpcy5RUi5jb2x1bW5zOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
b2x1bW5zOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5SZGlhZ1tpXSA9PT0gMCkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAg
ICAgIGdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKSB7CisgICAgICAgICAgICB2YXIgcXIgPSB0
aGlzLlFSLAorICAgICAgICAgICAgICAgIG4gPSBxci5jb2x1bW5zLAorICAgICAgICAgICAgICAg
IFggPSBuZXcgTWF0cml4KG4sIG4pLAorICAgICAgICAgICAgICAgIGksIGo7CisgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsg
aiA8IG47IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGopIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFhbaV1bal0gPSBxcltpXVtqXTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChpID09PSBqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBYW2ldW2pdID0g
dGhpcy5SZGlhZ1tpXTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFhbaV1bal0gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFg7CisgICAgICAg
IH0sCisgICAgICAgIGdldCBvcnRob2dvbmFsTWF0cml4KCkgeworICAgICAgICAgICAgdmFyIHFy
ID0gdGhpcy5RUiwKKyAgICAgICAgICAgICAgICByb3dzID0gcXIucm93cywKKyAgICAgICAgICAg
ICAgICBjb2x1bW5zID0gcXIuY29sdW1ucywKKyAgICAgICAgICAgICAgICBYID0gbmV3IE1hdHJp
eChyb3dzLCBjb2x1bW5zKSwKKyAgICAgICAgICAgICAgICBpLCBqLCBrLCBzOworCisgICAgICAg
ICAgICBmb3IgKGsgPSBjb2x1bW5zIC0gMTsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFhbaV1b
a10gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBYW2tdW2tdID0gMTsK
KyAgICAgICAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgY29sdW1uczsgaisrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChxcltrXVtrXSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBxcltpXVtrXSAqIFhbaV1b
al07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHMgPSAtcyAvIHFyW2tdW2tdOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBr
OyBpIDwgcm93czsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFtpXVtqXSAr
PSBzICogcXJbaV1ba107CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gWDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBNTE1hdHJpeERDUVIgPSBRckRlY29t
cG9zaXRpb247Cit9CisKKy8vIG1sLW1hdHJpYyBzcmMvZGVjb21wb3NpdGlvbnMuanMKK2xldCBN
TE1hdHJpeERlY29tcG9zaXRpb25zID0ge307Cit7CisgICAgbGV0IE1hdHJpeCA9IE1MTWF0cml4
TWF0cml4Lk1hdHJpeDsKKworICAgIGxldCBTaW5ndWxhclZhbHVlRGVjb21wb3NpdGlvbiA9IE1M
TWF0cml4RENTVkQ7CisgICAgbGV0IEVpZ2VudmFsdWVEZWNvbXBvc2l0aW9uID0gTUxNYXRyaXhE
Q0VWRDsKKyAgICBsZXQgTHVEZWNvbXBvc2l0aW9uID0gTUxNYXRyaXhEQ0xVOworICAgIGxldCBR
ckRlY29tcG9zaXRpb24gPSBNTE1hdHJpeERDUVIKKyAgICBsZXQgQ2hvbGVza3lEZWNvbXBvc2l0
aW9uID0gTUxNYXRyaXhEQ0Nob2xlc2t5OworCisgICAgZnVuY3Rpb24gaW52ZXJzZShtYXRyaXgp
IHsKKyAgICAgICAgbWF0cml4ID0gTWF0cml4LmNoZWNrTWF0cml4KG1hdHJpeCk7CisgICAgICAg
IHJldHVybiBzb2x2ZShtYXRyaXgsIE1hdHJpeC5leWUobWF0cml4LnJvd3MpKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBpbnZlcnNlCisgICAgICogQG1lbWJlck9mIE1h
dHJpeAorICAgICAqIEBzdGF0aWMKKyAgICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4CisgICAg
ICogQHJldHVybiB7TWF0cml4fSBtYXRyaXgKKyAgICAgKiBAYWxpYXMgaW52CisgICAgICovCisg
ICAgTWF0cml4LmludmVyc2UgPSBNYXRyaXguaW52ID0gaW52ZXJzZTsKKworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIGludmVyc2UKKyAgICAgKiBAbWVtYmVyT2YgTWF0cml4CisgICAgICog
QHN0YXRpYworICAgICAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXgKKyAgICAgKiBAcmV0dXJuIHtN
YXRyaXh9IG1hdHJpeAorICAgICAqIEBhbGlhcyBpbnYKKyAgICAgKi8KKyAgICBNYXRyaXgucHJv
dG90eXBlLmludmVyc2UgPSBNYXRyaXgucHJvdG90eXBlLmludiA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHNvbHZl
KGxlZnRIYW5kU2lkZSwgcmlnaHRIYW5kU2lkZSkgeworICAgICAgICBsZWZ0SGFuZFNpZGUgPSBN
YXRyaXguY2hlY2tNYXRyaXgobGVmdEhhbmRTaWRlKTsKKyAgICAgICAgcmlnaHRIYW5kU2lkZSA9
IE1hdHJpeC5jaGVja01hdHJpeChyaWdodEhhbmRTaWRlKTsKKyAgICAgICAgcmV0dXJuIGxlZnRI
YW5kU2lkZS5pc1NxdWFyZSgpID8gbmV3IEx1RGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNv
bHZlKHJpZ2h0SGFuZFNpZGUpIDogbmV3IFFyRGVjb21wb3NpdGlvbihsZWZ0SGFuZFNpZGUpLnNv
bHZlKHJpZ2h0SGFuZFNpZGUpOworICAgIH0KKworICAgIE1hdHJpeC5zb2x2ZSA9IHNvbHZlOwor
ICAgIE1hdHJpeC5wcm90b3R5cGUuc29sdmUgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAg
cmV0dXJuIHNvbHZlKHRoaXMsIG90aGVyKTsKKyAgICB9OworCisgICAgTUxNYXRyaXhEZWNvbXBv
c2l0aW9ucyA9IHsKKyAgICAgICAgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb246IFNpbmd1bGFy
VmFsdWVEZWNvbXBvc2l0aW9uLAorICAgICAgICBTVkQ6IFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0
aW9uLAorICAgICAgICBFaWdlbnZhbHVlRGVjb21wb3NpdGlvbjogRWlnZW52YWx1ZURlY29tcG9z
aXRpb24sCisgICAgICAgIEVWRDogRWlnZW52YWx1ZURlY29tcG9zaXRpb24sCisgICAgICAgIEx1
RGVjb21wb3NpdGlvbjogTHVEZWNvbXBvc2l0aW9uLAorICAgICAgICBMVTogTHVEZWNvbXBvc2l0
aW9uLAorICAgICAgICBRckRlY29tcG9zaXRpb246IFFyRGVjb21wb3NpdGlvbiwKKyAgICAgICAg
UVI6IFFyRGVjb21wb3NpdGlvbiwKKyAgICAgICAgQ2hvbGVza3lEZWNvbXBvc2l0aW9uOiBDaG9s
ZXNreURlY29tcG9zaXRpb24sCisgICAgICAgIENITzogQ2hvbGVza3lEZWNvbXBvc2l0aW9uLAor
ICAgICAgICBpbnZlcnNlOiBpbnZlcnNlLAorICAgICAgICBzb2x2ZTogc29sdmUKKyAgICB9Owor
fQorCisvLyBtbC1tYXRyaXggc3JjL2luZGV4LmpzCitsZXQgTUxNYXRyaXggPSB7fTsKK3sKKyAg
ICBNTE1hdHJpeCA9IE1MTWF0cml4TWF0cml4Lk1hdHJpeDsKKyAgICBNTE1hdHJpeC5EZWNvbXBv
c2l0aW9ucyA9IE1MTWF0cml4LkRDID0gTUxNYXRyaXhEZWNvbXBvc2l0aW9uczsKK30KKworLy8g
ZmVlZGZvcndhcmQtbmV1cmFsLW5ldHdvcmtzIHV0aWxzLmpzCitsZXQgRmVlZGZvcndhcmROZXVy
YWxOZXR3b3Jrc1V0aWxzOworeworICAgIGxldCBNYXRyaXggPSBNTE1hdHJpeDsKKworICAgIC8q
KgorICAgICAqIEBwcml2YXRlCisgICAgICogUmV0cmlldmVzIHRoZSBzdW0gYXQgZWFjaCByb3cg
b2YgdGhlIGdpdmVuIG1hdHJpeC4KKyAgICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4CisgICAg
ICogQHJldHVybiB7TWF0cml4fQorICAgICAqLworICAgIGZ1bmN0aW9uIHN1bVJvdyhtYXRyaXgp
IHsKKyAgICAgICAgdmFyIHN1bSA9IE1hdHJpeC56ZXJvcyhtYXRyaXgucm93cywgMSk7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkgeworICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7CisgICAgICAgICAgICAg
ICAgc3VtW2ldWzBdICs9IG1hdHJpeFtpXVtqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc3VtOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwcml2YXRlCisg
ICAgICogUmV0cmlldmVzIHRoZSBzdW0gYXQgZWFjaCBjb2x1bW4gb2YgdGhlIGdpdmVuIG1hdHJp
eC4KKyAgICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4CisgICAgICogQHJldHVybiB7TWF0cml4
fQorICAgICAqLworICAgIGZ1bmN0aW9uIHN1bUNvbChtYXRyaXgpIHsKKyAgICAgICAgdmFyIHN1
bSA9IE1hdHJpeC56ZXJvcygxLCBtYXRyaXguY29sdW1ucyk7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbWF0cml4LnJvd3M7ICsraSkgeworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBtYXRyaXguY29sdW1uczsgKytqKSB7CisgICAgICAgICAgICAgICAgc3VtWzBdW2pdICs9
IG1hdHJpeFtpXVtqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
c3VtOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwcml2YXRlCisgICAgICogTWV0aG9kIHRo
YXQgZ2l2ZW4gYW4gYXJyYXkgb2YgbGFiZWxzKHByZWRpY3Rpb25zKSwgcmV0dXJucyB0d28gZGlj
dGlvbmFyaWVzLCBvbmUgdG8gdHJhbnNmb3JtIGZyb20gbGFiZWxzIHRvCisgICAgICogbnVtYmVy
cyBhbmQgb3RoZXIgaW4gdGhlIHJldmVyc2Ugd2F5CisgICAgICogQHBhcmFtIHtBcnJheX0gYXJy
YXkKKyAgICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAgICovCisgICAgZnVuY3Rpb24gZGljdE91
dHB1dHMoYXJyYXkpIHsKKyAgICAgICAgdmFyIGlucHV0cyA9IHt9LCBvdXRwdXRzID0ge30sIGwg
PSBhcnJheS5sZW5ndGgsIGluZGV4ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
OyBpICs9IDEpIHsKKyAgICAgICAgICAgIGlmIChpbnB1dHNbYXJyYXlbaV1dID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICAgICBpbnB1dHNbYXJyYXlbaV1dID0gaW5kZXg7CisgICAgICAg
ICAgICAgICAgb3V0cHV0c1tpbmRleF0gPSBhcnJheVtpXTsKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIGlucHV0czogaW5wdXRzLAorICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0cworICAg
ICAgICB9OworICAgIH0KKworICAgIEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NVdGlscyA9IHsK
KyAgICAgICAgZGljdE91dHB1dHM6IGRpY3RPdXRwdXRzLAorICAgICAgICBzdW1Db2w6IHN1bUNv
bCwKKyAgICAgICAgc3VtUm93OiBzdW1Sb3cKKyAgICB9OworfQorCisvLyBmZWVkZm9yd2FyZC1u
ZXVyYWwtbmV0d29ya3MgYWN0aXZhdGlvbkZ1bmN0aW9ucy5qcworbGV0IEZlZWRmb3J3YXJkTmV1
cmFsTmV0d29ya3NBY3RpdmF0aW9uRnVuY3Rpb25zOworeworICAgIGZ1bmN0aW9uIGxvZ2lzdGlj
KHZhbCkgeworICAgICAgICByZXR1cm4gMSAvICgxICsgTWF0aC5leHAoLXZhbCkpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGV4cEVMVSh2YWwsIHBhcmFtKSB7CisgICAgICAgIHJldHVybiB2YWwg
PCAwID8gcGFyYW0gKiAoTWF0aC5leHAodmFsKSAtIDEpIDogdmFsOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHNvZnRFeHBvbmVudGlhbCh2YWwsIHBhcmFtKSB7CisgICAgICAgIGlmIChwYXJhbSA8
IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtTWF0aC5sb2coMSAtIHBhcmFtICogKHZhbCArIHBh
cmFtKSkgLyBwYXJhbTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyYW0gPiAwKSB7CisgICAg
ICAgICAgICByZXR1cm4gKChNYXRoLmV4cChwYXJhbSAqIHZhbCkgLSAxKSAvIHBhcmFtKSArIHBh
cmFtOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQorCisgICAgZnVuY3Rp
b24gc29mdEV4cG9uZW50aWFsUHJpbWUodmFsLCBwYXJhbSkgeworICAgICAgICBpZiAocGFyYW0g
PCAwKSB7CisgICAgICAgICAgICByZXR1cm4gMSAvICgxIC0gcGFyYW0gKiAocGFyYW0gKyB2YWwp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmV4cChwYXJhbSAq
IHZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBBQ1RJVkFUSU9OX0ZVTkNUSU9O
UyA9IHsKKyAgICAgICAgJ3RhbmgnOiB7CisgICAgICAgICAgICBhY3RpdmF0aW9uOiBNYXRoLnRh
bmgsCisgICAgICAgICAgICBkZXJpdmF0ZTogdmFsID0+IDEgLSAodmFsICogdmFsKQorICAgICAg
ICB9LAorICAgICAgICAnaWRlbnRpdHknOiB7CisgICAgICAgICAgICBhY3RpdmF0aW9uOiB2YWwg
PT4gdmFsLAorICAgICAgICAgICAgZGVyaXZhdGU6ICgpID0+IDEKKyAgICAgICAgfSwKKyAgICAg
ICAgJ2xvZ2lzdGljJzogeworICAgICAgICAgICAgYWN0aXZhdGlvbjogbG9naXN0aWMsCisgICAg
ICAgICAgICBkZXJpdmF0ZTogdmFsID0+IGxvZ2lzdGljKHZhbCkgKiAoMSAtIGxvZ2lzdGljKHZh
bCkpCisgICAgICAgIH0sCisgICAgICAgICdhcmN0YW4nOiB7CisgICAgICAgICAgICBhY3RpdmF0
aW9uOiBNYXRoLmF0YW4sCisgICAgICAgICAgICBkZXJpdmF0ZTogdmFsID0+IDEgLyAodmFsICog
dmFsICsgMSkKKyAgICAgICAgfSwKKyAgICAgICAgJ3NvZnRzaWduJzogeworICAgICAgICAgICAg
YWN0aXZhdGlvbjogdmFsID0+IHZhbCAvICgxICsgTWF0aC5hYnModmFsKSksCisgICAgICAgICAg
ICBkZXJpdmF0ZTogdmFsID0+IDEgLyAoKDEgKyBNYXRoLmFicyh2YWwpKSAqICgxICsgTWF0aC5h
YnModmFsKSkpCisgICAgICAgIH0sCisgICAgICAgICdyZWx1JzogeworICAgICAgICAgICAgYWN0
aXZhdGlvbjogdmFsID0+IHZhbCA8IDAgPyAwIDogdmFsLAorICAgICAgICAgICAgZGVyaXZhdGU6
IHZhbCA9PiB2YWwgPCAwID8gMCA6IDEKKyAgICAgICAgfSwKKyAgICAgICAgJ3NvZnRwbHVzJzog
eworICAgICAgICAgICAgYWN0aXZhdGlvbjogdmFsID0+IE1hdGgubG9nKDEgKyBNYXRoLmV4cCh2
YWwpKSwKKyAgICAgICAgICAgIGRlcml2YXRlOiB2YWwgPT4gMSAvICgxICsgTWF0aC5leHAoLXZh
bCkpCisgICAgICAgIH0sCisgICAgICAgICdiZW50JzogeworICAgICAgICAgICAgYWN0aXZhdGlv
bjogdmFsID0+ICgoTWF0aC5zcXJ0KHZhbCAqIHZhbCArIDEpIC0gMSkgLyAyKSArIHZhbCwKKyAg
ICAgICAgICAgIGRlcml2YXRlOiB2YWwgPT4gKHZhbCAvICgyICogTWF0aC5zcXJ0KHZhbCAqIHZh
bCArIDEpKSkgKyAxCisgICAgICAgIH0sCisgICAgICAgICdzaW51c29pZCc6IHsKKyAgICAgICAg
ICAgIGFjdGl2YXRpb246IE1hdGguc2luLAorICAgICAgICAgICAgZGVyaXZhdGU6IE1hdGguY29z
CisgICAgICAgIH0sCisgICAgICAgICdzaW5jJzogeworICAgICAgICAgICAgYWN0aXZhdGlvbjog
dmFsID0+IHZhbCA9PT0gMCA/IDEgOiBNYXRoLnNpbih2YWwpIC8gdmFsLAorICAgICAgICAgICAg
ZGVyaXZhdGU6IHZhbCA9PiB2YWwgPT09IDAgPyAwIDogKE1hdGguY29zKHZhbCkgLyB2YWwpIC0g
KE1hdGguc2luKHZhbCkgLyAodmFsICogdmFsKSkKKyAgICAgICAgfSwKKyAgICAgICAgJ2dhdXNz
aWFuJzogeworICAgICAgICAgICAgYWN0aXZhdGlvbjogdmFsID0+IE1hdGguZXhwKC0odmFsICog
dmFsKSksCisgICAgICAgICAgICBkZXJpdmF0ZTogdmFsID0+IC0yICogdmFsICogTWF0aC5leHAo
LSh2YWwgKiB2YWwpKQorICAgICAgICB9LAorICAgICAgICAncGFyYW1ldHJpYy1yZWx1Jzogewor
ICAgICAgICAgICAgYWN0aXZhdGlvbjogKHZhbCwgcGFyYW0pID0+IHZhbCA8IDAgPyBwYXJhbSAq
IHZhbCA6IHZhbCwKKyAgICAgICAgICAgIGRlcml2YXRlOiAodmFsLCBwYXJhbSkgPT4gdmFsIDwg
MCA/IHBhcmFtIDogMQorICAgICAgICB9LAorICAgICAgICAnZXhwb25lbnRpYWwtZWx1Jzogewor
ICAgICAgICAgICAgYWN0aXZhdGlvbjogZXhwRUxVLAorICAgICAgICAgICAgZGVyaXZhdGU6ICh2
YWwsIHBhcmFtKSA9PiB2YWwgPCAwID8gZXhwRUxVKHZhbCwgcGFyYW0pICsgcGFyYW0gOiAxCisg
ICAgICAgIH0sCisgICAgICAgICdzb2Z0LWV4cG9uZW50aWFsJzogeworICAgICAgICAgICAgYWN0
aXZhdGlvbjogc29mdEV4cG9uZW50aWFsLAorICAgICAgICAgICAgZGVyaXZhdGU6IHNvZnRFeHBv
bmVudGlhbFByaW1lCisgICAgICAgIH0KKyAgICB9OworCisgICAgRmVlZGZvcndhcmROZXVyYWxO
ZXR3b3Jrc0FjdGl2YXRpb25GdW5jdGlvbnMgPSBBQ1RJVkFUSU9OX0ZVTkNUSU9OUzsKK30KKwor
Ly8gZmVlZGZvcndhcmQtbmV1cmFsLW5ldHdvcmtzIExheWVyLmpzCitsZXQgRmVlZGZvcndhcmRO
ZXVyYWxOZXR3b3Jrc0xheWVyOworeworICAgIGxldCBNYXRyaXggPSBNTE1hdHJpeDsKKworICAg
IGxldCBVdGlscyA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NVdGlsczsKKyAgICBjb25zdCBB
Q1RJVkFUSU9OX0ZVTkNUSU9OUyA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NBY3RpdmF0aW9u
RnVuY3Rpb25zOworCisgICAgY2xhc3MgTGF5ZXIgeworICAgICAgICAvKioKKyAgICAgICAgICog
QHByaXZhdGUKKyAgICAgICAgICogQ3JlYXRlIGEgbmV3IGxheWVyIHdpdGggdGhlIGdpdmVuIG9w
dGlvbnMKKyAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMKKyAgICAgICAgICogQHBh
cmFtIHtudW1iZXJ9IFtvcHRpb25zLmlucHV0U2l6ZV0gLSBOdW1iZXIgb2YgY29uZWN0aW9ucyB0
aGF0IGVudGVyIHRoZSBuZXVyb25zLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlv
bnMub3V0cHV0U2l6ZV0gLSBOdW1iZXIgb2YgY29uZWN0aW9ucyB0aGF0IGxlYXZlIHRoZSBuZXVy
b25zLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucmVndWxhcml6YXRpb25d
IC0gUmVndWxhcml6YXRpb24gcGFyYW1ldGVyLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0g
W29wdGlvbnMuZXBzaWxvbl0gLSBMZWFybmluZyByYXRlIHBhcmFtZXRlci4KKyAgICAgICAgICog
QHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFjdGl2YXRpb25dIC0gQWN0aXZhdGlvbiBmdW5jdGlv
biBwYXJhbWV0ZXIgZnJvbSB0aGUgRmVlZEZvcndhcmROZXVyYWxOZXR3b3JrIGNsYXNzLgorICAg
ICAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYWN0aXZhdGlvblBhcmFtXSAtIEFjdGl2
YXRpb24gcGFyYW1ldGVyIGlmIG5lZWRlZC4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0cnVj
dG9yKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMuaW5wdXRTaXplID0gb3B0aW9ucy5pbnB1
dFNpemU7CisgICAgICAgICAgICB0aGlzLm91dHB1dFNpemUgPSBvcHRpb25zLm91dHB1dFNpemU7
CisgICAgICAgICAgICB0aGlzLnJlZ3VsYXJpemF0aW9uID0gb3B0aW9ucy5yZWd1bGFyaXphdGlv
bjsKKyAgICAgICAgICAgIHRoaXMuZXBzaWxvbiA9IG9wdGlvbnMuZXBzaWxvbjsKKyAgICAgICAg
ICAgIHRoaXMuYWN0aXZhdGlvbiA9IG9wdGlvbnMuYWN0aXZhdGlvbjsKKyAgICAgICAgICAgIHRo
aXMuYWN0aXZhdGlvblBhcmFtID0gb3B0aW9ucy5hY3RpdmF0aW9uUGFyYW07CisKKyAgICAgICAg
ICAgIHZhciBzZWxlY3RlZEZ1bmN0aW9uID0gQUNUSVZBVElPTl9GVU5DVElPTlNbb3B0aW9ucy5h
Y3RpdmF0aW9uXTsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBzZWxlY3RlZEZ1bmN0aW9uLmFj
dGl2YXRpb24ubGVuZ3RoOworCisgICAgICAgICAgICB2YXIgYWN0RnVuY3Rpb24gPSBwYXJhbXMg
PiAxID8gdmFsID0+IHNlbGVjdGVkRnVuY3Rpb24uYWN0aXZhdGlvbih2YWwsIG9wdGlvbnMuYWN0
aXZhdGlvblBhcmFtKSA6IHNlbGVjdGVkRnVuY3Rpb24uYWN0aXZhdGlvbjsKKyAgICAgICAgICAg
IHZhciBkZXJGdW5jdGlvbiA9IHBhcmFtcyA+IDEgPyB2YWwgPT4gc2VsZWN0ZWRGdW5jdGlvbi5k
ZXJpdmF0ZSh2YWwsIG9wdGlvbnMuYWN0aXZhdGlvblBhcmFtKSA6IHNlbGVjdGVkRnVuY3Rpb24u
ZGVyaXZhdGU7CisKKyAgICAgICAgICAgIHRoaXMuYWN0aXZhdGlvbkZ1bmN0aW9uID0gZnVuY3Rp
b24gKGksIGopIHsKKyAgICAgICAgICAgICAgICB0aGlzW2ldW2pdID0gYWN0RnVuY3Rpb24odGhp
c1tpXVtqXSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdGhpcy5kZXJpdmF0ZSA9IGZ1
bmN0aW9uIChpLCBqKSB7CisgICAgICAgICAgICAgICAgdGhpc1tpXVtqXSA9IGRlckZ1bmN0aW9u
KHRoaXNbaV1bal0pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKG9wdGlvbnMu
bW9kZWwpIHsKKyAgICAgICAgICAgICAgICAvLyBsb2FkIG1vZGVsCisgICAgICAgICAgICAgICAg
dGhpcy5XID0gTWF0cml4LmNoZWNrTWF0cml4KG9wdGlvbnMuVyk7CisgICAgICAgICAgICAgICAg
dGhpcy5iID0gTWF0cml4LmNoZWNrTWF0cml4KG9wdGlvbnMuYik7CisKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgorCisgICAgICAg
ICAgICAgICAgdGhpcy5XID0gTWF0cml4LnJhbmQodGhpcy5pbnB1dFNpemUsIHRoaXMub3V0cHV0
U2l6ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5iID0gTWF0cml4Lnplcm9zKDEsIHRoaXMub3V0
cHV0U2l6ZSk7CisKKyAgICAgICAgICAgICAgICB0aGlzLlcuYXBwbHkoZnVuY3Rpb24gKGksIGop
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpc1tpXVtqXSAvPSBNYXRoLnNxcnQob3B0aW9ucy5p
bnB1dFNpemUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwcml2YXRlCisgICAgICAgICAqIHByb3BhZ2F0
ZSB0aGUgZ2l2ZW4gaW5wdXQgdGhyb3VnaCB0aGUgY3VycmVudCBsYXllci4KKyAgICAgICAgICog
QHBhcmFtIHtNYXRyaXh9IFggLSBpbnB1dC4KKyAgICAgICAgICogQHJldHVybiB7TWF0cml4fSBv
dXRwdXQgYXQgdGhlIGN1cnJlbnQgbGF5ZXIuCisgICAgICAgICAqLworICAgICAgICBmb3J3YXJk
KFgpIHsKKyAgICAgICAgICAgIHZhciB6ID0gWC5tbXVsKHRoaXMuVykuYWRkUm93VmVjdG9yKHRo
aXMuYik7CisgICAgICAgICAgICB6LmFwcGx5KHRoaXMuYWN0aXZhdGlvbkZ1bmN0aW9uKTsKKyAg
ICAgICAgICAgIHRoaXMuYSA9IHouY2xvbmUoKTsKKyAgICAgICAgICAgIHJldHVybiB6OworICAg
ICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwcml2YXRlCisgICAgICAgICAqIGFw
cGx5IGJhY2twcm9wYWdhdGlvbiBhbGdvcml0aG0gYXQgdGhlIGN1cnJlbnQgbGF5ZXIKKyAgICAg
ICAgICogQHBhcmFtIHtNYXRyaXh9IGRlbHRhIC0gZGVsdGEgdmFsdWVzIGVzdGltYXRlZCBhdCB0
aGUgZm9sbG93aW5nIGxheWVyLgorICAgICAgICAgKiBAcGFyYW0ge01hdHJpeH0gYSAtICdhJyB2
YWx1ZXMgZnJvbSB0aGUgZm9sbG93aW5nIGxheWVyLgorICAgICAgICAgKiBAcmV0dXJuIHtNYXRy
aXh9IHRoZSBuZXcgZGVsdGEgdmFsdWVzIGZvciB0aGUgbmV4dCBsYXllci4KKyAgICAgICAgICov
CisgICAgICAgIGJhY2twcm9wYWdhdGlvbihkZWx0YSwgYSkgeworICAgICAgICAgICAgdGhpcy5k
VyA9IGEudHJhbnNwb3NlVmlldygpLm1tdWwoZGVsdGEpOworICAgICAgICAgICAgdGhpcy5kYiA9
IFV0aWxzLnN1bUNvbChkZWx0YSk7CisKKyAgICAgICAgICAgIHZhciBhQ29weSA9IGEuY2xvbmUo
KTsKKyAgICAgICAgICAgIHJldHVybiBkZWx0YS5tbXVsKHRoaXMuVy50cmFuc3Bvc2VWaWV3KCkp
Lm11bChhQ29weS5hcHBseSh0aGlzLmRlcml2YXRlKSk7CisgICAgICAgIH0KKworICAgICAgICAv
KioKKyAgICAgICAgICogQHByaXZhdGUKKyAgICAgICAgICogRnVuY3Rpb24gdGhhdCB1cGRhdGVz
IHRoZSB3ZWlnaHRzIGF0IHRoZSBjdXJyZW50IGxheWVyIHdpdGggdGhlIGRlcml2YXRpdmVzLgor
ICAgICAgICAgKi8KKyAgICAgICAgdXBkYXRlKCkgeworICAgICAgICAgICAgdGhpcy5kVy5hZGQo
dGhpcy5XLmNsb25lKCkubXVsKHRoaXMucmVndWxhcml6YXRpb24pKTsKKyAgICAgICAgICAgIHRo
aXMuVy5hZGQodGhpcy5kVy5tdWwoLXRoaXMuZXBzaWxvbikpOworICAgICAgICAgICAgdGhpcy5i
LmFkZCh0aGlzLmRiLm11bCgtdGhpcy5lcHNpbG9uKSk7CisgICAgICAgIH0KKworICAgICAgICAv
KioKKyAgICAgICAgICogQHByaXZhdGUKKyAgICAgICAgICogRXhwb3J0IHRoZSBjdXJyZW50IGxh
eWVyIHRvIEpTT04uCisgICAgICAgICAqIEByZXR1cm4ge29iamVjdH0gbW9kZWwKKyAgICAgICAg
ICovCisgICAgICAgIHRvSlNPTigpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgbW9kZWw6ICdMYXllcicsCisgICAgICAgICAgICAgICAgaW5wdXRTaXplOiB0aGlzLmlu
cHV0U2l6ZSwKKyAgICAgICAgICAgICAgICBvdXRwdXRTaXplOiB0aGlzLm91dHB1dFNpemUsCisg
ICAgICAgICAgICAgICAgcmVndWxhcml6YXRpb246IHRoaXMucmVndWxhcml6YXRpb24sCisgICAg
ICAgICAgICAgICAgZXBzaWxvbjogdGhpcy5lcHNpbG9uLAorICAgICAgICAgICAgICAgIGFjdGl2
YXRpb246IHRoaXMuYWN0aXZhdGlvbiwKKyAgICAgICAgICAgICAgICBXOiB0aGlzLlcsCisgICAg
ICAgICAgICAgICAgYjogdGhpcy5iCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEBwcml2YXRlCisgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgTGF5
ZXIgd2l0aCB0aGUgZ2l2ZW4gbW9kZWwuCisgICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtb2Rl
bAorICAgICAgICAgKiBAcmV0dXJuIHtMYXllcn0KKyAgICAgICAgICovCisgICAgICAgIHN0YXRp
YyBsb2FkKG1vZGVsKSB7CisgICAgICAgICAgICBpZiAobW9kZWwubW9kZWwgIT09ICdMYXllcicp
IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGhlIGN1cnJlbnQgbW9k
ZWwgaXMgbm90IGEgTGF5ZXIgbW9kZWwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBuZXcgTGF5ZXIobW9kZWwpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBGZWVkZm9y
d2FyZE5ldXJhbE5ldHdvcmtzTGF5ZXIgPSBMYXllcjsKK30KKworLy8gZmVlZGZvcndhcmQtbmV1
cmFsLW5ldHdvcmtzIE91dHB1dExheWVyLmpzCitsZXQgRmVlZGZvcndhcmROZXVyYWxOZXR3b3Jr
c091dHB1dExheWVyOworeworICAgIGxldCBMYXllciA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29y
a3NMYXllcjsKKworICAgIGNsYXNzIE91dHB1dExheWVyIGV4dGVuZHMgTGF5ZXIgeworICAgICAg
ICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7CisgICAgICAgICAgICBzdXBlcihvcHRpb25zKTsKKwor
ICAgICAgICAgICAgdGhpcy5hY3RpdmF0aW9uRnVuY3Rpb24gPSBmdW5jdGlvbiAoaSwgaikgewor
ICAgICAgICAgICAgICAgIHRoaXNbaV1bal0gPSBNYXRoLmV4cCh0aGlzW2ldW2pdKTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgbG9hZChtb2RlbCkgeworICAg
ICAgICAgICAgaWYgKG1vZGVsLm1vZGVsICE9PSAnTGF5ZXInKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RoZSBjdXJyZW50IG1vZGVsIGlzIG5vdCBhIExheWVyIG1v
ZGVsJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgT3V0cHV0TGF5
ZXIobW9kZWwpOworICAgICAgICB9CisgICAgfQorCisgICAgRmVlZGZvcndhcmROZXVyYWxOZXR3
b3Jrc091dHB1dExheWVyID0gT3V0cHV0TGF5ZXI7Cit9CisKKy8vIGZlZWRmb3J3YXJkLW5ldXJh
bC1uZXR3b3JrcyBGZWVkRm9yd2FyZE5ldXJhbE5ldHdvcmsuanMKK2xldCBGZWVkZm9yd2FyZE5l
dXJhbE5ldHdvcms7Cit7CisgICAgY29uc3QgTWF0cml4ID0gTUxNYXRyaXg7CisKKyAgICBjb25z
dCBMYXllciA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NMYXllcjsKKyAgICBjb25zdCBPdXRw
dXRMYXllciA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NPdXRwdXRMYXllcjsKKyAgICBjb25z
dCBVdGlscyA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NVdGlsczsKKyAgICBjb25zdCBBQ1RJ
VkFUSU9OX0ZVTkNUSU9OUyA9IEZlZWRmb3J3YXJkTmV1cmFsTmV0d29ya3NBY3RpdmF0aW9uRnVu
Y3Rpb25zOworCisgICAgY2xhc3MgRmVlZEZvcndhcmROZXVyYWxOZXR3b3JrcyB7CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIG5ldyBGZWVkZm9yd29yZCBuZXVyYWwgbmV0d29y
ayBtb2RlbC4KKyAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMKKyAgICAgICAgICog
QHBhcmFtIHtBcnJheX0gW29wdGlvbnMuaGlkZGVuTGF5ZXJzPVsxMF1dIC0gQXJyYXkgdGhhdCBj
b250YWlucyB0aGUgc2l6ZXMgb2YgdGhlIGhpZGRlbiBsYXllcnMuCisgICAgICAgICAqIEBvYXJh
bSB7bnVtYmVyfSBbb3B0aW9ucy5pdGVyYXRpb25zPTUwXSAtIE51bWJlciBvZiBpdGVyYXRpb25z
IGF0IHRoZSB0cmFpbmluZyBzdGVwLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlv
bnMubGVhcm5pbmdSYXRlPTAuMDFdIC0gTGVhcm5pbmcgcmF0ZSBvZiB0aGUgbmV1cmFsIG5ldCAo
YWxzbyBrbm93biBhcyBlcHNpbG9uKS4KKyAgICAgICAgICogQHBvcmFtIHtudW1iZXJ9IFtvcHRp
b25zLnJlZ3VsYXJpemF0aW9uPTAuMDFdIC0gUmVndWxhcml6YXRpb24gcGFyYW1ldGVyIGFmIHRo
ZSBuZXVyYWwgbmV0LgorICAgICAgICAgKiBAcG9yYW0ge3N0cmluZ30gW29wdGlvbnMuYWN0aXZh
dGlvbj0ndGFuaCddIC0gYWN0aXZhdGlvbiBmdW5jdGlvbiB0byBiZSB1c2VkLiAob3B0aW9uczog
J3RhbmgnKGRlZmF1bHQpLAorICAgICAgICAgKiAnaWRlbnRpdHknLCAnbG9naXN0aWMnLCAnYXJj
dGFuJywgJ3NvZnRzaWduJywgJ3JlbHUnLCAnc29mdHBsdXMnLCAnYmVudCcsICdzaW51c29pZCcs
ICdzaW5jJywgJ2dhdXNzaWFuJykuCisgICAgICAgICAqIChzaW5nbGUtcGFyYW1ldHJpYyBvcHRp
b25zOiAncGFyYW1ldHJpYy1yZWx1JywgJ2V4cG9uZW50aWFsLXJlbHUnLCAnc29mdC1leHBvbmVu
dGlhbCcpLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYWN0aXZhdGlvblBh
cmFtPTFdIC0gaWYgdGhlIHNlbGVjdGVkIGFjdGl2YXRpb24gZnVuY3Rpb24gbmVlZHMgYSBwYXJh
bWV0ZXIuCisgICAgICAgICAqLworICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7CisgICAg
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgICAgICAgIGlmIChvcHRpb25z
Lm1vZGVsKSB7CisgICAgICAgICAgICAgICAgLy8gbG9hZCBuZXR3b3JrCisgICAgICAgICAgICAg
ICAgdGhpcy5oaWRkZW5MYXllcnMgPSBvcHRpb25zLmhpZGRlbkxheWVyczsKKyAgICAgICAgICAg
ICAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zLml0ZXJhdGlvbnM7CisgICAgICAgICAgICAg
ICAgdGhpcy5sZWFybmluZ1JhdGUgPSBvcHRpb25zLmxlYXJuaW5nUmF0ZTsKKyAgICAgICAgICAg
ICAgICB0aGlzLnJlZ3VsYXJpemF0aW9uID0gb3B0aW9ucy5yZWd1bGFyaXphdGlvbjsKKyAgICAg
ICAgICAgICAgICB0aGlzLmRpY3RzID0gb3B0aW9ucy5kaWN0czsKKyAgICAgICAgICAgICAgICB0
aGlzLmFjdGl2YXRpb24gPSBvcHRpb25zLmFjdGl2YXRpb247CisgICAgICAgICAgICAgICAgdGhp
cy5hY3RpdmF0aW9uUGFyYW0gPSBvcHRpb25zLmFjdGl2YXRpb25QYXJhbTsKKyAgICAgICAgICAg
ICAgICB0aGlzLm1vZGVsID0gbmV3IEFycmF5KG9wdGlvbnMubGF5ZXJzLmxlbmd0aCk7CisKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubW9kZWwubGVuZ3RoIC0gMTsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxbaV0gPSBMYXllci5sb2FkKG9w
dGlvbnMubGF5ZXJzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhp
cy5tb2RlbFt0aGlzLm1vZGVsLmxlbmd0aCAtIDFdID0gT3V0cHV0TGF5ZXIubG9hZChvcHRpb25z
LmxheWVyc1t0aGlzLm1vZGVsLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgIHRo
aXMuaGlkZGVuTGF5ZXJzID0gb3B0aW9ucy5oaWRkZW5MYXllcnMgPT09IHVuZGVmaW5lZCA/IFsx
MF0gOiBvcHRpb25zLmhpZGRlbkxheWVyczsKKyAgICAgICAgICAgICAgICB0aGlzLml0ZXJhdGlv
bnMgPSBvcHRpb25zLml0ZXJhdGlvbnMgPT09IHVuZGVmaW5lZCA/IDUwIDogb3B0aW9ucy5pdGVy
YXRpb25zOworCisgICAgICAgICAgICAgICAgdGhpcy5sZWFybmluZ1JhdGUgPSBvcHRpb25zLmxl
YXJuaW5nUmF0ZSA9PT0gdW5kZWZpbmVkID8gMC4wMSA6IG9wdGlvbnMubGVhcm5pbmdSYXRlOwor
ICAgICAgICAgICAgICAgIC8vdGhpcy5tb21lbnR1bSA9IG9wdGlvbnMubW9tZW50dW0gPT09IHVu
ZGVmaW5lZCA/IDAuMSA6IG9wdGlvbnMubW9tZW50dW07CisgICAgICAgICAgICAgICAgdGhpcy5y
ZWd1bGFyaXphdGlvbiA9IG9wdGlvbnMucmVndWxhcml6YXRpb24gPT09IHVuZGVmaW5lZCA/IDAu
MDEgOiBvcHRpb25zLnJlZ3VsYXJpemF0aW9uOworCisgICAgICAgICAgICAgICAgdGhpcy5hY3Rp
dmF0aW9uID0gb3B0aW9ucy5hY3RpdmF0aW9uID09PSB1bmRlZmluZWQgPyAndGFuaCcgOiBvcHRp
b25zLmFjdGl2YXRpb247CisgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0aW9uUGFyYW0gPSBv
cHRpb25zLmFjdGl2YXRpb25QYXJhbSA9PT0gdW5kZWZpbmVkID8gMSA6IG9wdGlvbnMuYWN0aXZh
dGlvblBhcmFtOworICAgICAgICAgICAgICAgIGlmICghKHRoaXMuYWN0aXZhdGlvbiBpbiBPYmpl
Y3Qua2V5cyhBQ1RJVkFUSU9OX0ZVTkNUSU9OUykpKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuYWN0aXZhdGlvbiA9ICd0YW5oJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHByaXZhdGUKKyAgICAgICAg
ICogRnVuY3Rpb24gdGhhdCBidWlsZCBhbmQgaW5pdGlhbGl6ZSB0aGUgbmV1cmFsIG5ldC4KKyAg
ICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlucHV0U2l6ZSAtIHRvdGFsIG9mIGZlYXR1cmVzIHRv
IGZpdC4KKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG91dHB1dFNpemUgLSB0b3RhbCBvZiBs
YWJlbHMgb2YgdGhlIHByZWRpY3Rpb24gc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgYnVpbGRO
ZXR3b3JrKGlucHV0U2l6ZSwgb3V0cHV0U2l6ZSkgeworICAgICAgICAgICAgdmFyIHNpemUgPSAy
ICsgKHRoaXMuaGlkZGVuTGF5ZXJzLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgdGhpcy5tb2Rl
bCA9IG5ldyBBcnJheShzaXplKTsKKworICAgICAgICAgICAgLy8gaW5wdXQgbGF5ZXIKKyAgICAg
ICAgICAgIHRoaXMubW9kZWxbMF0gPSBuZXcgTGF5ZXIoeworICAgICAgICAgICAgICAgIGlucHV0
U2l6ZTogaW5wdXRTaXplLAorICAgICAgICAgICAgICAgIG91dHB1dFNpemU6IHRoaXMuaGlkZGVu
TGF5ZXJzWzBdLAorICAgICAgICAgICAgICAgIGFjdGl2YXRpb246IHRoaXMuYWN0aXZhdGlvbiwK
KyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uUGFyYW06IHRoaXMuYWN0aXZhdGlvblBhcmFtLAor
ICAgICAgICAgICAgICAgIHJlZ3VsYXJpemF0aW9uOiB0aGlzLnJlZ3VsYXJpemF0aW9uLAorICAg
ICAgICAgICAgICAgIGVwc2lsb246IHRoaXMubGVhcm5pbmdSYXRlCisgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgLy8gaGlkZGVuIGxheWVycworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDE7IGkgPCB0aGlzLmhpZGRlbkxheWVycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
IHRoaXMubW9kZWxbaV0gPSBuZXcgTGF5ZXIoeworICAgICAgICAgICAgICAgICAgICBpbnB1dFNp
emU6IHRoaXMuaGlkZGVuTGF5ZXJzW2kgLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0
U2l6ZTogdGhpcy5oaWRkZW5MYXllcnNbaV0sCisgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRp
b246IHRoaXMuYWN0aXZhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvblBhcmFt
OiB0aGlzLmFjdGl2YXRpb25QYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgcmVndWxhcml6YXRp
b246IHRoaXMucmVndWxhcml6YXRpb24sCisgICAgICAgICAgICAgICAgICAgIGVwc2lsb246IHRo
aXMubGVhcm5pbmdSYXRlCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIG91dHB1dCBsYXllcgorICAgICAgICAgICAgdGhpcy5tb2RlbFtzaXplIC0g
MV0gPSBuZXcgT3V0cHV0TGF5ZXIoeworICAgICAgICAgICAgICAgIGlucHV0U2l6ZTogdGhpcy5o
aWRkZW5MYXllcnNbdGhpcy5oaWRkZW5MYXllcnMubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICAg
ICAgb3V0cHV0U2l6ZTogb3V0cHV0U2l6ZSwKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uOiB0
aGlzLmFjdGl2YXRpb24sCisgICAgICAgICAgICAgICAgYWN0aXZhdGlvblBhcmFtOiB0aGlzLmFj
dGl2YXRpb25QYXJhbSwKKyAgICAgICAgICAgICAgICByZWd1bGFyaXphdGlvbjogdGhpcy5yZWd1
bGFyaXphdGlvbiwKKyAgICAgICAgICAgICAgICBlcHNpbG9uOiB0aGlzLmxlYXJuaW5nUmF0ZQor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVHJh
aW4gdGhlIG5ldXJhbCBuZXQgd2l0aCB0aGUgZ2l2ZW4gZmVhdHVyZXMgYW5kIGxhYmVscy4KKyAg
ICAgICAgICogQHBhcmFtIHtNYXRyaXh8QXJyYXl9IGZlYXR1cmVzCisgICAgICAgICAqIEBwYXJh
bSB7TWF0cml4fEFycmF5fSBsYWJlbHMKKyAgICAgICAgICovCisgICAgICAgIHRyYWluKGZlYXR1
cmVzLCBsYWJlbHMpIHsKKyAgICAgICAgICAgIGZlYXR1cmVzID0gTWF0cml4LmNoZWNrTWF0cml4
KGZlYXR1cmVzKTsKKyAgICAgICAgICAgIHRoaXMuZGljdHMgPSBVdGlscy5kaWN0T3V0cHV0cyhs
YWJlbHMpOworCisgICAgICAgICAgICB2YXIgaW5wdXRTaXplID0gZmVhdHVyZXMuY29sdW1uczsK
KyAgICAgICAgICAgIHZhciBvdXRwdXRTaXplID0gT2JqZWN0LmtleXModGhpcy5kaWN0cy5pbnB1
dHMpLmxlbmd0aDsKKworICAgICAgICAgICAgdGhpcy5idWlsZE5ldHdvcmsoaW5wdXRTaXplLCBv
dXRwdXRTaXplKTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZXJh
dGlvbnM7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBwcm9iYWJpbGl0aWVzID0gdGhpcy5w
cm9wYWdhdGUoZmVhdHVyZXMpOworICAgICAgICAgICAgICAgIHRoaXMuYmFja3Byb3BhZ2F0aW9u
KGZlYXR1cmVzLCBsYWJlbHMsIHByb2JhYmlsaXRpZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwcml2YXRlCisgICAgICAgICAqIFByb3Bh
Z2F0ZSB0aGUgaW5wdXQodHJhaW5pbmcgc2V0KSBhbmQgcmV0cml2ZXMgdGhlIHByb2JhYmlsaXRp
ZXMgb2YgZWFjaCBjbGFzcy4KKyAgICAgICAgICogQHBhcmFtIHtNYXRyaXh9IFgKKyAgICAgICAg
ICogQHJldHVybiB7TWF0cml4fSBwcm9iYWJpbGl0aWVzIG9mIGVhY2ggY2xhc3MuCisgICAgICAg
ICAqLworICAgICAgICBwcm9wYWdhdGUoWCkgeworICAgICAgICAgICAgdmFyIGlucHV0ID0gWDsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb2RlbC5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coaSk7CisgICAgICAgICAgICAgICAgaW5w
dXQgPSB0aGlzLm1vZGVsW2ldLmZvcndhcmQoaW5wdXQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBnZXQgcHJvYmFiaWxpdGllcworICAgICAgICAgICAgcmV0dXJuIGlucHV0LmRp
dkNvbHVtblZlY3RvcihVdGlscy5zdW1Sb3coaW5wdXQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8qKgorICAgICAgICAgKiBAcHJpdmF0ZQorICAgICAgICAgKiBGdW5jdGlvbiB0aGF0IGFwcGxp
ZXMgdGhlIGJhY2twcm9wYWdhdGlvbiBhbGdvcml0aG0gb24gZWFjaCBsYXllciBvZiB0aGUgbmV0
d29yaworICAgICAgICAgKiBpbiBvcmRlciB0byBmaXQgdGhlIGZlYXR1cmVzIGFuZCBsYWJlbHMu
CisgICAgICAgICAqIEBwYXJhbSB7TWF0cml4fSBmZWF0dXJlcworICAgICAgICAgKiBAcGFyYW0g
e0FycmF5fSBsYWJlbHMKKyAgICAgICAgICogQHBhcmFtIHtNYXRyaXh9IHByb2JhYmlsaXRpZXMg
LSBwcm9iYWJpbGl0aWVzIG9mIGVhY2ggY2xhc3Mgb2YgdGhlIGZlYXR1cmUgc2V0LgorICAgICAg
ICAgKi8KKyAgICAgICAgYmFja3Byb3BhZ2F0aW9uKGZlYXR1cmVzLCBsYWJlbHMsIHByb2JhYmls
aXRpZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvYmFiaWxpdGllcy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHByb2JhYmlsaXRpZXNbaV1bdGhpcy5kaWN0
cy5pbnB1dHNbbGFiZWxzW2ldXV0gLT0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gcmVtZW1iZXIsIHRoZSBsYXN0IGRlbHRhIGRvZXNuJ3QgbWF0dGVyCisgICAgICAgICAgICB2
YXIgZGVsdGEgPSBwcm9iYWJpbGl0aWVzOworICAgICAgICAgICAgZm9yIChpID0gdGhpcy5tb2Rl
bC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAgIHZhciBhID0gaSA+
IDAgPyB0aGlzLm1vZGVsW2kgLSAxXS5hIDogZmVhdHVyZXM7CisgICAgICAgICAgICAgICAgZGVs
dGEgPSB0aGlzLm1vZGVsW2ldLmJhY2twcm9wYWdhdGlvbihkZWx0YSwgYSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLm1vZGVsLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5tb2RlbFtpXS51cGRhdGUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQcmVkaWN0IHRoZSBvdXRw
dXQgZ2l2ZW4gdGhlIGZlYXR1cmUgc2V0LgorICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE1hdHJp
eH0gZmVhdHVyZXMKKyAgICAgICAgICogQHJldHVybiB7QXJyYXl9CisgICAgICAgICAqLworICAg
ICAgICBwcmVkaWN0KGZlYXR1cmVzKSB7CisgICAgICAgICAgICBmZWF0dXJlcyA9IE1hdHJpeC5j
aGVja01hdHJpeChmZWF0dXJlcyk7CisgICAgICAgICAgICB2YXIgb3V0cHV0cyA9IG5ldyBBcnJh
eShmZWF0dXJlcy5yb3dzKTsKKyAgICAgICAgICAgIHZhciBwcm9iYWJpbGl0aWVzID0gdGhpcy5w
cm9wYWdhdGUoZmVhdHVyZXMpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0
dXJlcy5yb3dzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRzW2ldID0gdGhpcy5kaWN0
cy5vdXRwdXRzW3Byb2JhYmlsaXRpZXMubWF4Um93SW5kZXgoaSlbMV1dOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0czsKKyAgICAgICAgfQorCisgICAgICAgIC8q
KgorICAgICAgICAgKiBFeHBvcnQgdGhlIGN1cnJlbnQgbW9kZWwgdG8gSlNPTS4KKyAgICAgICAg
ICogQHJldHVybiB7b2JqZWN0fSBtb2RlbAorICAgICAgICAgKi8KKyAgICAgICAgdG9KU09OKCkg
eworICAgICAgICAgICAgdmFyIG1vZGVsID0geworICAgICAgICAgICAgICAgIG1vZGVsOiAnRk5O
JywKKyAgICAgICAgICAgICAgICBoaWRkZW5MYXllcnM6IHRoaXMuaGlkZGVuTGF5ZXJzLAorICAg
ICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IHRoaXMuaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAg
ICBsZWFybmluZ1JhdGU6IHRoaXMubGVhcm5pbmdSYXRlLAorICAgICAgICAgICAgICAgIHJlZ3Vs
YXJpemF0aW9uOiB0aGlzLnJlZ3VsYXJpemF0aW9uLAorICAgICAgICAgICAgICAgIGFjdGl2YXRp
b246IHRoaXMuYWN0aXZhdGlvbiwKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uUGFyYW06IHRo
aXMuYWN0aXZhdGlvblBhcmFtLAorICAgICAgICAgICAgICAgIGRpY3RzOiB0aGlzLmRpY3RzLAor
ICAgICAgICAgICAgICAgIGxheWVyczogbmV3IEFycmF5KHRoaXMubW9kZWwubGVuZ3RoKQorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1vZGVs
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbW9kZWwubGF5ZXJzW2ldID0gdGhpcy5t
b2RlbFtpXS50b0pTT04oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1v
ZGVsOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIExvYWQgYSBGZWVkZm9y
d2FyZCBOZXVyYWwgTmV0d29yayB3aXRoIHRoZSBjdXJyZW50IG1vZGVsLgorICAgICAgICAgKiBA
cGFyYW0ge29iamVjdH0gbW9kZWwKKyAgICAgICAgICogQHJldHVybiB7RmVlZEZvcndhcmROZXVy
YWxOZXR3b3Jrc30KKyAgICAgICAgICovCisgICAgICAgIHN0YXRpYyBsb2FkKG1vZGVsKSB7Cisg
ICAgICAgICAgICBpZiAobW9kZWwubW9kZWwgIT09ICdGTk4nKSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RoZSBjdXJyZW50IG1vZGVsIGlzIG5vdCBhIGZlZWQgZm9y
d2FyZCBuZXR3b3JrJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcg
RmVlZEZvcndhcmROZXVyYWxOZXR3b3Jrcyhtb2RlbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBGZWVkZm9yd2FyZE5ldXJhbE5ldHdvcmsgPSBGZWVkRm9yd2FyZE5ldXJhbE5ldHdvcmtzOwor
fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>