<?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>127245</bug_id>
          
          <creation_ts>2014-01-18 20:17:58 -0800</creation_ts>
          <short_desc>Enable LLVM TailDup</short_desc>
          <delta_ts>2016-02-15 16:27:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>150279</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>132356</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>969569</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-18 20:17:58 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969570</commentid>
    <comment_count>1</comment_count>
      <attachid>221578</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-18 20:20:08 -0800</bug_when>
    <thetext>Created attachment 221578
jsc patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969571</commentid>
    <comment_count>2</comment_count>
      <attachid>221579</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-18 20:21:15 -0800</bug_when>
    <thetext>Created attachment 221579
llvm patch

This just reverts LLVM r138841, and then updates the code a bit to various internal API changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969576</commentid>
    <comment_count>3</comment_count>
      <attachid>221578</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-18 22:33:14 -0800</bug_when>
    <thetext>Comment on attachment 221578
jsc patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969577</commentid>
    <comment_count>4</comment_count>
      <attachid>221579</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-18 22:35:07 -0800</bug_when>
    <thetext>Comment on attachment 221579
llvm patch

Seems like it would be best to get this into LLVM trunk first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969579</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-18 22:39:16 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221579 [details])
&gt; Seems like it would be best to get this into LLVM trunk first.

Yeah - that&apos;s definitely a blocker.

At the time that they removed TailDup there seemed to be multiple good justifications for doing so:

- It de-SSAifies the IR in a weird non-canonical way.
- It has demonstrably bad heuristics for important things like switch.
- It was unused in LLVM.

So it may be a challenge to get it pushed back in.  I suspect that this optimization is only good for JS because JS is so weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164955</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-15 16:27:41 -0800</bug_when>
    <thetext>We wrote our own compiler, and it has taildup.

*** This bug has been marked as a duplicate of bug 150279 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221578</attachid>
            <date>2014-01-18 20:20:08 -0800</date>
            <delta_ts>2014-01-18 22:33:14 -0800</delta_ts>
            <desc>jsc patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>2217</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDE0LTAxLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RW5hYmxlIExMVk0gVGFpbER1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3MjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gY2F1c2Ugc3BlZWQtdXBzIG9uIFY4
L2VuY3J5cHQgYW5kIFY4L3JheXRyYWNlLiBJdCBhcHBlYXJzIHRvIGJlIGEKKyAgICAgICAgZGVm
aW5pdGUgVjh2NyBhbmQgT2N0YW5lIHNwZWVkLXVwIG92ZXJhbGwuCisKKyAgICAgICAgKiBmdGwv
RlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICog
bGx2bS9MTFZNQVBJRnVuY3Rpb25zLmg6CisKIDIwMTQtMDEtMTYgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCAzMi1iaXQgQyBsb29wIExMSU5ULgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNjIyODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTMsNiArNDUzLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICBp
ZiAoT3B0aW9uczo6bGx2bVNpbXBsZU9wdCgpKSB7CiAgICAgICAgIG1vZHVsZVBhc3NlcyA9IGxs
dm0tPkNyZWF0ZVBhc3NNYW5hZ2VyKCk7CiAgICAgICAgIGxsdm0tPkFkZFRhcmdldERhdGEobGx2
bS0+R2V0RXhlY3V0aW9uRW5naW5lVGFyZ2V0RGF0YShlbmdpbmUpLCBtb2R1bGVQYXNzZXMpOwor
ICAgICAgICBsbHZtLT5BZGRUYWlsRHVwbGljYXRpb25QYXNzKG1vZHVsZVBhc3Nlcyk7CiAgICAg
ICAgIGxsdm0tPkFkZFByb21vdGVNZW1vcnlUb1JlZ2lzdGVyUGFzcyhtb2R1bGVQYXNzZXMpOwog
ICAgICAgICBsbHZtLT5BZGRDb25zdGFudFByb3BhZ2F0aW9uUGFzcyhtb2R1bGVQYXNzZXMpOwog
ICAgICAgICBsbHZtLT5BZGRJbnN0cnVjdGlvbkNvbWJpbmluZ1Bhc3MobW9kdWxlUGFzc2VzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElG
dW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjI0LDYgKzYyNCw3IEBACiAgICAgbWFjcm8o
dm9pZCwgQWRkU2NhbGFyUmVwbEFnZ3JlZ2F0ZXNQYXNzV2l0aFRocmVzaG9sZCwgKExMVk1QYXNz
TWFuYWdlclJlZiBQTSwgaW50IFRocmVzaG9sZCkpIFwKICAgICBtYWNybyh2b2lkLCBBZGRTaW1w
bGlmeUxpYkNhbGxzUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKICAgICBtYWNybyh2
b2lkLCBBZGRUYWlsQ2FsbEVsaW1pbmF0aW9uUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkp
IFwKKyAgICBtYWNybyh2b2lkLCBBZGRUYWlsRHVwbGljYXRpb25QYXNzLCAoTExWTVBhc3NNYW5h
Z2VyUmVmIFBNKSkgXAogICAgIG1hY3JvKHZvaWQsIEFkZENvbnN0YW50UHJvcGFnYXRpb25QYXNz
LCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAogICAgIG1hY3JvKHZvaWQsIEFkZERlbW90ZU1l
bW9yeVRvUmVnaXN0ZXJQYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAogICAgIG1hY3Jv
KHZvaWQsIEFkZFZlcmlmaWVyUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwK
</data>
<flag name="review"
          id="245527"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221579</attachid>
            <date>2014-01-18 20:21:15 -0800</date>
            <delta_ts>2014-01-18 22:35:07 -0800</delta_ts>
            <desc>llvm patch</desc>
            <filename>revive-llvm-tail-dup.patch</filename>
            <type>text/plain</type>
            <size>32816</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9Jbml0aWFsaXplUGFzc2VzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5j
bHVkZS9sbHZtL0luaXRpYWxpemVQYXNzZXMuaAkocmV2aXNpb24gMTk5NTcwKQorKysgaW5jbHVk
ZS9sbHZtL0luaXRpYWxpemVQYXNzZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw3
IEBACiB2b2lkIGluaXRpYWxpemVTdHJpcE5vbkRlYnVnU3ltYm9sc1Bhc3MoUGFzc1JlZ2lzdHJ5
Jik7CiB2b2lkIGluaXRpYWxpemVTdHJpcFN5bWJvbHNQYXNzKFBhc3NSZWdpc3RyeSYpOwogdm9p
ZCBpbml0aWFsaXplVGFpbENhbGxFbGltUGFzcyhQYXNzUmVnaXN0cnkmKTsKK3ZvaWQgaW5pdGlh
bGl6ZVRhaWxEdXBQYXNzKFBhc3NSZWdpc3RyeSYpOwogdm9pZCBpbml0aWFsaXplVGFpbER1cGxp
Y2F0ZVBhc3NQYXNzKFBhc3NSZWdpc3RyeSYpOwogdm9pZCBpbml0aWFsaXplVGFyZ2V0UGFzc0Nv
bmZpZ1Bhc3MoUGFzc1JlZ2lzdHJ5Jik7CiB2b2lkIGluaXRpYWxpemVEYXRhTGF5b3V0UGFzcyhQ
YXNzUmVnaXN0cnkmKTsKSW5kZXg6IGluY2x1ZGUvbGx2bS9MaW5rQWxsUGFzc2VzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaW5jbHVkZS9sbHZtL0xpbmtBbGxQYXNzZXMuaAkocmV2aXNpb24gMTk5NTcwKQor
KysgaW5jbHVkZS9sbHZtL0xpbmtBbGxQYXNzZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYg
KzEyNiw3IEBACiAgICAgICAodm9pZCkgbGx2bTo6Y3JlYXRlU3RyaXBEZWFkRGVidWdJbmZvUGFz
cygpOwogICAgICAgKHZvaWQpIGxsdm06OmNyZWF0ZVN0cmlwRGVhZFByb3RvdHlwZXNQYXNzKCk7
CiAgICAgICAodm9pZCkgbGx2bTo6Y3JlYXRlVGFpbENhbGxFbGltaW5hdGlvblBhc3MoKTsKKyAg
ICAgICh2b2lkKSBsbHZtOjpjcmVhdGVUYWlsRHVwbGljYXRpb25QYXNzKCk7CiAgICAgICAodm9p
ZCkgbGx2bTo6Y3JlYXRlSnVtcFRocmVhZGluZ1Bhc3MoKTsKICAgICAgICh2b2lkKSBsbHZtOjpj
cmVhdGVVbmlmeUZ1bmN0aW9uRXhpdE5vZGVzUGFzcygpOwogICAgICAgKHZvaWQpIGxsdm06OmNy
ZWF0ZUluc3RDb3VudFBhc3MoKTsKSW5kZXg6IGluY2x1ZGUvbGx2bS9UcmFuc2Zvcm1zL1NjYWxh
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9UcmFuc2Zvcm1zL1NjYWxhci5oCShyZXZp
c2lvbiAxOTk1NzApCisrKyBpbmNsdWRlL2xsdm0vVHJhbnNmb3Jtcy9TY2FsYXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSwxMyBAQAogCiAvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwog
Ly8KKy8vIFRhaWxEdXBsaWNhdGlvbiAtIEVsaW1pbmF0ZSB1bmNvbmRpdGlvbmFsIGJyYW5jaGVz
IHRocm91Z2ggY29udHJvbGxlZCBjb2RlCisvLyBkdXBsaWNhdGlvbiwgY3JlYXRpbmcgc2ltcGxl
ciBDRkcgc3RydWN0dXJlcy4KKy8vCitGdW5jdGlvblBhc3MgKmNyZWF0ZVRhaWxEdXBsaWNhdGlv
blBhc3MoKTsKKworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCiAvLyBKdW1wVGhyZWFkaW5n
IC0gVGhyZWFkIGNvbnRyb2wgdGhyb3VnaCBtdWx0LXByZWQvbXVsdGktc3VjYyBibG9ja3Mgd2hl
cmUgc29tZQogLy8gcHJlZHMgYWx3YXlzIGdvIHRvIHNvbWUgc3VjYy4KIC8vCkluZGV4OiBpbmNs
dWRlL2xsdm0tYy9UcmFuc2Zvcm1zL1NjYWxhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2
bS1jL1RyYW5zZm9ybXMvU2NhbGFyLmgJKHJldmlzaW9uIDE5OTU3MCkKKysrIGluY2x1ZGUvbGx2
bS1jL1RyYW5zZm9ybXMvU2NhbGFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOSBA
QAogLyoqIFNlZSBsbHZtOjpjcmVhdGVUYWlsQ2FsbEVsaW1pbmF0aW9uUGFzcyBmdW5jdGlvbi4g
Ki8KIHZvaWQgTExWTUFkZFRhaWxDYWxsRWxpbWluYXRpb25QYXNzKExMVk1QYXNzTWFuYWdlclJl
ZiBQTSk7CiAKKy8qKiBTZWUgbGx2bTo6Y3JlYXRlVGFpbER1cGxpY2F0aW9uUGFzcyBmdW5jdGlv
bi4gKi8KK3ZvaWQgTExWTUFkZFRhaWxEdXBsaWNhdGlvblBhc3MoTExWTVBhc3NNYW5hZ2VyUmVm
IFBNKTsKKwogLyoqIFNlZSBsbHZtOjpjcmVhdGVDb25zdGFudFByb3BhZ2F0aW9uUGFzcyBmdW5j
dGlvbi4gKi8KIHZvaWQgTExWTUFkZENvbnN0YW50UHJvcGFnYXRpb25QYXNzKExMVk1QYXNzTWFu
YWdlclJlZiBQTSk7CiAKSW5kZXg6IGxpYi9UcmFuc2Zvcm1zL1NjYWxhci9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBsaWIvVHJhbnNmb3Jtcy9TY2FsYXIvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE5OTU3MCkKKysrIGxpYi9UcmFuc2Zvcm1zL1NjYWxhci9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogICBGbGF0dGVuQ0ZHUGFzcy5jcHAKICAg
U2luay5jcHAKICAgU3RydWN0dXJpemVDRkcuY3BwCisgIFRhaWxEdXBsaWNhdGlvbi5jcHAKICAg
VGFpbFJlY3Vyc2lvbkVsaW1pbmF0aW9uLmNwcAogICApCiAKSW5kZXg6IGxpYi9UcmFuc2Zvcm1z
L1NjYWxhci9TY2FsYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9UcmFuc2Zvcm1zL1NjYWxhci9T
Y2FsYXIuY3BwCShyZXZpc2lvbiAxOTk1NzApCisrKyBsaWIvVHJhbnNmb3Jtcy9TY2FsYXIvU2Nh
bGFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogICBpbml0aWFsaXplQ0ZH
U2ltcGxpZnlQYXNzUGFzcyhSZWdpc3RyeSk7CiAgIGluaXRpYWxpemVTdHJ1Y3R1cml6ZUNGR1Bh
c3MoUmVnaXN0cnkpOwogICBpbml0aWFsaXplU2lua2luZ1Bhc3MoUmVnaXN0cnkpOworICBpbml0
aWFsaXplVGFpbER1cFBhc3MoUmVnaXN0cnkpOwogICBpbml0aWFsaXplVGFpbENhbGxFbGltUGFz
cyhSZWdpc3RyeSk7CiB9CiAKQEAgLTE3MSw2ICsxNzIsMTAgQEAKICAgdW53cmFwKFBNKS0+YWRk
KGNyZWF0ZVRhaWxDYWxsRWxpbWluYXRpb25QYXNzKCkpOwogfQogCit2b2lkIExMVk1BZGRUYWls
RHVwbGljYXRpb25QYXNzKExMVk1QYXNzTWFuYWdlclJlZiBQTSkgeworICB1bndyYXAoUE0pLT5h
ZGQoY3JlYXRlVGFpbER1cGxpY2F0aW9uUGFzcygpKTsKK30KKwogdm9pZCBMTFZNQWRkQ29uc3Rh
bnRQcm9wYWdhdGlvblBhc3MoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSB7CiAgIHVud3JhcChQTSkt
PmFkZChjcmVhdGVDb25zdGFudFByb3BhZ2F0aW9uUGFzcygpKTsKIH0KSW5kZXg6IGxpYi9UcmFu
c2Zvcm1zL1NjYWxhci9UYWlsRHVwbGljYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9UcmFu
c2Zvcm1zL1NjYWxhci9UYWlsRHVwbGljYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgbGliL1Ry
YW5zZm9ybXMvU2NhbGFyL1RhaWxEdXBsaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNzggQEAKKy8vPT09LSBUYWlsRHVwbGljYXRpb24uY3BwIC0gU2ltcGxpZnkgQ0ZHIHRo
cm91Z2ggdGFpbCBkdXBsaWNhdGlvbiAtLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAg
ICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmls
ZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNv
dXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBwYXNzIHBlcmZvcm1zIGEgbGltaXRlZCBm
b3JtIG9mIHRhaWwgZHVwbGljYXRpb24sIGludGVuZGVkIHRvIHNpbXBsaWZ5CisvLyBDRkdzIGJ5
IHJlbW92aW5nIHNvbWUgdW5jb25kaXRpb25hbCBicmFuY2hlcy4gIFRoaXMgcGFzcyBpcyBuZWNl
c3NhcnkgdG8KKy8vIHN0cmFpZ2h0ZW4gb3V0IGxvb3BzIGNyZWF0ZWQgYnkgdGhlIEMgZnJvbnQt
ZW5kLCBidXQgYWxzbyBpcyBjYXBhYmxlIG9mCisvLyBtYWtpbmcgb3RoZXIgY29kZSBuaWNlci4g
IEFmdGVyIHRoaXMgcGFzcyBpcyBydW4sIHRoZSBDRkcgc2ltcGxpZnkgcGFzcworLy8gc2hvdWxk
IGJlIHJ1biB0byBjbGVhbiB1cCB0aGUgbWVzcy4KKy8vCisvLyBUaGlzIHBhc3MgY291bGQgYmUg
ZW5oYW5jZWQgaW4gdGhlIGZ1dHVyZSB0byB1c2UgcHJvZmlsZSBpbmZvcm1hdGlvbiB0byBiZQor
Ly8gbW9yZSBhZ2dyZXNzaXZlLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNkZWZp
bmUgREVCVUdfVFlQRSAidGFpbGR1cGxpY2F0ZSIKKyNpbmNsdWRlICJsbHZtL1RyYW5zZm9ybXMv
U2NhbGFyLmgiCisjaW5jbHVkZSAibGx2bS9JUi9Db25zdGFudC5oIgorI2luY2x1ZGUgImxsdm0v
SVIvRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJsbHZtL0lSL0luc3RydWN0aW9ucy5oIgorI2luY2x1
ZGUgImxsdm0vSVIvSW50cmluc2ljSW5zdC5oIgorI2luY2x1ZGUgImxsdm0vSVIvVHlwZS5oIgor
I2luY2x1ZGUgImxsdm0vUGFzcy5oIgorI2luY2x1ZGUgImxsdm0vQURUL1N0YXRpc3RpYy5oIgor
I2luY2x1ZGUgImxsdm0vQURUL1NtYWxsUHRyU2V0LmgiCisjaW5jbHVkZSAibGx2bS9BbmFseXNp
cy9WYWx1ZVRyYWNraW5nLmgiCisjaW5jbHVkZSAibGx2bS9BbmFseXNpcy9JbnN0cnVjdGlvblNp
bXBsaWZ5LmgiCisjaW5jbHVkZSAibGx2bS9TdXBwb3J0L0NGRy5oIgorI2luY2x1ZGUgImxsdm0v
U3VwcG9ydC9Db21tYW5kTGluZS5oIgorI2luY2x1ZGUgImxsdm0vU3VwcG9ydC9EZWJ1Zy5oIgor
I2luY2x1ZGUgImxsdm0vU3VwcG9ydC9yYXdfb3N0cmVhbS5oIgorI2luY2x1ZGUgImxsdm0vVHJh
bnNmb3Jtcy9VdGlscy9Mb2NhbC5oIgorI2luY2x1ZGUgPG1hcD4KK3VzaW5nIG5hbWVzcGFjZSBs
bHZtOworCitTVEFUSVNUSUMoTnVtRWxpbWluYXRlZCwgIk51bWJlciBvZiB1bmNvbmRpdGlvbmFs
IGJyYW5jaGVzIGVsaW1pbmF0ZWQiKTsKKworc3RhdGljIGNsOjpvcHQ8dW5zaWduZWQ+CitUYWls
RHVwVGhyZXNob2xkKCJ0YWlsZHVwLXRocmVzaG9sZCIsCisgICAgICAgICAgICAgICAgIGNsOjpk
ZXNjKCJNYXggYmxvY2sgc2l6ZSB0byB0YWlsIGR1cGxpY2F0ZSIpLAorICAgICAgICAgICAgICAg
ICBjbDo6aW5pdCg1KSwgY2w6OkhpZGRlbik7CisKK25hbWVzcGFjZSB7CisgIGNsYXNzIFRhaWxE
dXAgOiBwdWJsaWMgRnVuY3Rpb25QYXNzIHsKKyAgICBib29sIHJ1bk9uRnVuY3Rpb24oRnVuY3Rp
b24gJkYpOworICBwdWJsaWM6CisgICAgc3RhdGljIGNoYXIgSUQ7IC8vIFBhc3MgaWRlbnRpZmlj
YXRpb24sIHJlcGxhY2VtZW50IGZvciB0eXBlaWQKKyAgICBUYWlsRHVwKCkgOiBGdW5jdGlvblBh
c3MoSUQpIHsKKyAgICAgIGluaXRpYWxpemVUYWlsRHVwUGFzcygqUGFzc1JlZ2lzdHJ5OjpnZXRQ
YXNzUmVnaXN0cnkoKSk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgaW5saW5lIGJvb2wgc2hv
dWxkRWxpbWluYXRlVW5jb25kaXRpb25hbEJyYW5jaChUZXJtaW5hdG9ySW5zdCAqLCB1bnNpZ25l
ZCk7CisgICAgaW5saW5lIHZvaWQgZWxpbWluYXRlVW5jb25kaXRpb25hbEJyYW5jaChCcmFuY2hJ
bnN0ICpCSSk7CisgICAgU21hbGxQdHJTZXQ8QmFzaWNCbG9jayosIDQ+IEN5Y2xlRGV0ZWN0b3I7
CisgIH07Cit9CisKK2NoYXIgVGFpbER1cDo6SUQgPSAwOworSU5JVElBTElaRV9QQVNTKFRhaWxE
dXAsICJ0YWlsZHVwbGljYXRlIiwgIlRhaWwgRHVwbGljYXRpb24iLCBmYWxzZSwgZmFsc2UpCisK
Ky8vIFB1YmxpYyBpbnRlcmZhY2UgdG8gdGhlIFRhaWwgRHVwbGljYXRpb24gcGFzcworRnVuY3Rp
b25QYXNzICpsbHZtOjpjcmVhdGVUYWlsRHVwbGljYXRpb25QYXNzKCkgeyByZXR1cm4gbmV3IFRh
aWxEdXAoKTsgfQorCisvLy8gcnVuT25GdW5jdGlvbiAtIFRvcCBsZXZlbCBhbGdvcml0aG0gLSBM
b29wIG92ZXIgZWFjaCB1bmNvbmRpdGlvbmFsIGJyYW5jaCBpbgorLy8vIHRoZSBmdW5jdGlvbiwg
ZWxpbWluYXRpbmcgaXQgaWYgaXQgbG9va3MgYXR0cmFjdGl2ZSBlbm91Z2guICBDeWNsZURldGVj
dG9yCisvLy8gcHJldmVudHMgaW5maW5pdGUgbG9vcHMgYnkgY2hlY2tpbmcgdGhhdCB3ZSBhcmVu
J3QgcmVkaXJlY3RpbmcgYSBicmFuY2ggdG8KKy8vLyBhIHBsYWNlIGl0IGFscmVhZHkgcG9pbnRl
ZCB0byBlYXJsaWVyOyBzZWUgUFIgMjMyMy4KK2Jvb2wgVGFpbER1cDo6cnVuT25GdW5jdGlvbihG
dW5jdGlvbiAmRikgeworICBib29sIENoYW5nZWQgPSBmYWxzZTsKKyAgQ3ljbGVEZXRlY3Rvci5j
bGVhcigpOworICBmb3IgKEZ1bmN0aW9uOjppdGVyYXRvciBJID0gRi5iZWdpbigpLCBFID0gRi5l
bmQoKTsgSSAhPSBFOyApIHsKKyAgICBpZiAoc2hvdWxkRWxpbWluYXRlVW5jb25kaXRpb25hbEJy
YW5jaChJLT5nZXRUZXJtaW5hdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGFpbER1cFRocmVzaG9sZCkpIHsKKyAgICAgIGVsaW1pbmF0ZVVuY29uZGl0
aW9uYWxCcmFuY2goY2FzdDxCcmFuY2hJbnN0PihJLT5nZXRUZXJtaW5hdG9yKCkpKTsKKyAgICAg
IENoYW5nZWQgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICArK0k7CisgICAgICBDeWNsZURl
dGVjdG9yLmNsZWFyKCk7CisgICAgfQorICB9CisgIHJldHVybiBDaGFuZ2VkOworfQorCisvLy8g
c2hvdWxkRWxpbWluYXRlVW5jb25kaXRpb25hbEJyYW5jaCAtIFJldHVybiB0cnVlIGlmIHRoaXMg
YnJhbmNoIGxvb2tzCisvLy8gYXR0cmFjdGl2ZSB0byBlbGltaW5hdGUuICBXZSBlbGltaW5hdGUg
dGhlIGJyYW5jaCBpZiB0aGUgZGVzdGluYXRpb24gYmFzaWMKKy8vLyBibG9jayBoYXMgPD0gNSBp
bnN0cnVjdGlvbnMgaW4gaXQsIG5vdCBjb3VudGluZyBQSEkgbm9kZXMuICBJbiBwcmFjdGljZSwK
Ky8vLyBzaW5jZSBvbmUgb2YgdGhlc2UgaXMgYSB0ZXJtaW5hdG9yIGluc3RydWN0aW9uLCB0aGlz
IG1lYW5zIHRoYXQgd2Ugd2lsbCBhZGQKKy8vLyB1cCB0byA0IGluc3RydWN0aW9ucyB0byB0aGUg
bmV3IGJsb2NrLgorLy8vCisvLy8gV2UgZG9uJ3QgY291bnQgUEhJIG5vZGVzIGluIHRoZSBjb3Vu
dCBzaW5jZSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHRoZQorLy8vIGNvbnRlbnRzIG9mIHRo
ZSBibG9jayBhcmUgY29waWVkIG92ZXIuCisvLy8KK2Jvb2wgVGFpbER1cDo6c2hvdWxkRWxpbWlu
YXRlVW5jb25kaXRpb25hbEJyYW5jaChUZXJtaW5hdG9ySW5zdCAqVEksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgVGhyZXNob2xkKSB7
CisgIEJyYW5jaEluc3QgKkJJID0gZHluX2Nhc3Q8QnJhbmNoSW5zdD4oVEkpOworICBpZiAoIUJJ
IHx8ICFCSS0+aXNVbmNvbmRpdGlvbmFsKCkpIHJldHVybiBmYWxzZTsgIC8vIE5vdCBhbiB1bmNv
bmQgYnJhbmNoIQorCisgIEJhc2ljQmxvY2sgKkRlc3QgPSBCSS0+Z2V0U3VjY2Vzc29yKDApOwor
ICBpZiAoRGVzdCA9PSBCSS0+Z2V0UGFyZW50KCkpIHJldHVybiBmYWxzZTsgICAgICAgIC8vIERv
IG5vdCBsb29wIGluZmluaXRlbHkhCisKKyAgLy8gRG8gbm90IGlubGluZSBhIGJsb2NrIGlmIHdl
IHdpbGwganVzdCBnZXQgYW5vdGhlciBicmFuY2ggdG8gdGhlIHNhbWUgYmxvY2shCisgIFRlcm1p
bmF0b3JJbnN0ICpEVEkgPSBEZXN0LT5nZXRUZXJtaW5hdG9yKCk7CisgIGlmIChCcmFuY2hJbnN0
ICpEQkkgPSBkeW5fY2FzdDxCcmFuY2hJbnN0PihEVEkpKQorICAgIGlmIChEQkktPmlzVW5jb25k
aXRpb25hbCgpICYmIERCSS0+Z2V0U3VjY2Vzc29yKDApID09IERlc3QpCisgICAgICByZXR1cm4g
ZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGxvb3AgaW5m
aW5pdGVseSEKKworICAvLyBGSVhNRTogRGVtb3RlUmVnVG9TdGFjayBjYW5ub3QgeWV0IGRlbW90
ZSBpbnZva2UgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBzdGFjaywKKyAgLy8gYmVjYXVzZSBkb2luZyBz
byB3b3VsZCByZXF1aXJlIGJyZWFraW5nIGNyaXRpY2FsIGVkZ2VzLiAgVGhpcyBzaG91bGQgYmUK
KyAgLy8gZml4ZWQgZXZlbnR1YWxseS4KKyAgaWYgKCFEVEktPnVzZV9lbXB0eSgpKQorICAgIHJl
dHVybiBmYWxzZTsKKworICAvLyBEbyBub3QgYm90aGVyIHdpdGggYmxvY2tzIHdpdGggb25seSBh
IHNpbmdsZSBwcmVkZWNlc3Nvcjogc2ltcGxpZnkKKyAgLy8gQ0ZHIHdpbGwgZm9sZCB0aGVzZSB0
d28gYmxvY2tzIHRvZ2V0aGVyIQorICBwcmVkX2l0ZXJhdG9yIFBJID0gcHJlZF9iZWdpbihEZXN0
KSwgUEUgPSBwcmVkX2VuZChEZXN0KTsKKyAgKytQSTsKKyAgaWYgKFBJID09IFBFKSByZXR1cm4g
ZmFsc2U7ICAvLyBFeGFjdGx5IG9uZSBwcmVkZWNlc3NvciEKKworICBCYXNpY0Jsb2NrOjppdGVy
YXRvciBJID0gRGVzdC0+Z2V0Rmlyc3ROb25QSEkoKTsKKworICBmb3IgKHVuc2lnbmVkIFNpemUg
PSAwOyBJICE9IERlc3QtPmVuZCgpOyArK0kpIHsKKyAgICBpZiAoU2l6ZSA9PSBUaHJlc2hvbGQp
CisgICAgICByZXR1cm4gZmFsc2U7ICAvLyBUaGUgYmxvY2sgaXMgdG9vIGxhcmdlLgorICAgIAor
ICAgIC8vIERvbid0IHRhaWwgZHVwbGljYXRlIGNhbGwgaW5zdHJ1Y3Rpb25zLiAgVGhleSBhcmUg
dmVyeSBsYXJnZSBjb21wYXJlZCB0bworICAgIC8vIG90aGVyIGluc3RydWN0aW9ucy4KKyAgICBp
ZiAoaXNhPENhbGxJbnN0PihJKSB8fCBpc2E8SW52b2tlSW5zdD4oSSkpCisgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBBbHNvIGFsbG9jYSBhbmQgbWFsbG9jLgorICAgIGlmIChpc2E8QWxs
b2NhSW5zdD4oSSkpCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTb21lIHZlY3RvciBp
bnN0cnVjdGlvbnMgY2FuIGV4cGFuZCBpbnRvIGEgbnVtYmVyIG9mIGluc3RydWN0aW9ucy4KKyAg
ICBpZiAoaXNhPFNodWZmbGVWZWN0b3JJbnN0PihJKSB8fCBpc2E8RXh0cmFjdEVsZW1lbnRJbnN0
PihJKSB8fAorICAgICAgICBpc2E8SW5zZXJ0RWxlbWVudEluc3Q+KEkpKQorICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIC8vIE9ubHkgY291bnQgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIG5v
dCBkZWJ1Z2dlciBpbnRyaW5zaWNzLgorICAgIGlmICghaXNhPERiZ0luZm9JbnRyaW5zaWM+KEkp
KSArK1NpemU7CisgIH0KKyAgCisgIC8vIERvIG5vdCB0YWlsIGR1cGxpY2F0ZSBhIGJsb2NrIHRo
YXQgaGFzIHRob3VzYW5kcyBvZiBzdWNjZXNzb3JzIGludG8gYSBibG9jaworICAvLyB3aXRoIGEg
c2luZ2xlIHN1Y2Nlc3NvciBpZiB0aGUgYmxvY2sgaGFzIG1hbnkgb3RoZXIgcHJlZGVjZXNzb3Jz
LiAgVGhpcyBjYW4KKyAgLy8gY2F1c2UgYW4gTl4yIGV4cGxvc2lvbiBpbiBDRkcgZWRnZXMgKGFu
ZCBQSEkgbm9kZSBlbnRyaWVzKSwgYXMgc2VlbiBpbgorICAvLyBjYXNlcyB0aGF0IGhhdmUgYSBs
YXJnZSBudW1iZXIgb2YgaW5kaXJlY3QgZ290b3MuCisgIHVuc2lnbmVkIE51bVN1Y2NzID0gRFRJ
LT5nZXROdW1TdWNjZXNzb3JzKCk7CisgIGlmIChOdW1TdWNjcyA+IDgpIHsKKyAgICB1bnNpZ25l
ZCBUb29NYW55ID0gMTI4OworICAgIGlmIChOdW1TdWNjcyA+PSBUb29NYW55KSByZXR1cm4gZmFs
c2U7CisgICAgVG9vTWFueSA9IFRvb01hbnkvTnVtU3VjY3M7CisgICAgZm9yICg7IFBJICE9IFBF
OyArK1BJKQorICAgICAgaWYgKFRvb01hbnktLSA9PSAwKSByZXR1cm4gZmFsc2U7CisgIH0KKyAg
CisgIC8vIElmIHRoaXMgdW5jb25kaXRpb25hbCBicmFuY2ggaXMgYSBmYWxsLXRocm91Z2gsIGJl
IGNhcmVmdWwgYWJvdXQKKyAgLy8gdGFpbCBkdXBsaWNhdGluZyBpdC4gIEluIHBhcnRpY3VsYXIs
IHdlIGRvbid0IHdhbnQgdG8gdGFpbGR1cCBpdCBpZiB0aGUKKyAgLy8gb3JpZ2luYWwgYmxvY2sg
d2lsbCBzdGlsbCBiZSB0aGVyZSBhZnRlciB0YWlsZHVwIGlzIGNvbXBsZXRlZDogZG9pbmcgc28K
KyAgLy8gd291bGQgZWxpbWluYXRlIHRoZSBmYWxsLXRocm91Z2gsIHJlcXVpcmluZyB1bmNvbmRp
dGlvbmFsIGJyYW5jaGVzLgorICBGdW5jdGlvbjo6aXRlcmF0b3IgRGVzdEkgPSBEZXN0OworICBp
ZiAoJiotLURlc3RJID09IEJJLT5nZXRQYXJlbnQoKSkgeworICAgIC8vIFRoZSB1bmNvbmQgYnJh
bmNoIGlzIGEgZmFsbC10aHJvdWdoLiAgVGFpbCBkdXBsaWNhdGlvbiBvZiB0aGUgYmxvY2sgaXMK
KyAgICAvLyB3aWxsIGVsaW1pbmF0ZSB0aGUgZmFsbC10aHJvdWdoLW5lc3MgYW5kIGVuZCB1cCBj
bG9uaW5nIHRoZSB0ZXJtaW5hdG9yCisgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgRGVzdCBibG9j
ay4gIFNpbmNlIHRoZSBvcmlnaW5hbCBEZXN0IGJsb2NrIHdpbGwKKyAgICAvLyBjb250aW51ZSB0
byBleGlzdCwgdGhpcyBtZWFucyB0aGF0IG9uZSBvciB0aGUgb3RoZXIgd2lsbCBub3QgYmUgYWJs
ZSB0bworICAgIC8vIGZhbGwgdGhyb3VnaC4gIE9uZSB0eXBpY2FsIGV4YW1wbGUgdGhhdCB0aGlz
IGhlbHBzIHdpdGggaXMgY29kZSBsaWtlOgorICAgIC8vIGlmIChhKQorICAgIC8vICAgZm9vKCk7
CisgICAgLy8gaWYgKGIpCisgICAgLy8gICBmb28oKTsKKyAgICAvLyBDbG9uaW5nIHRoZSAnaWYg
YicgYmxvY2sgaW50byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBmb28gYmxvY2sgaXMgbWVzc3kuCisg
ICAgCisgICAgLy8gVGhlIG1lc3N5IGNhc2UgaXMgd2hlbiB0aGUgZmFsbC10aHJvdWdoIGJsb2Nr
IGZhbGxzIHRocm91Z2ggdG8gb3RoZXIKKyAgICAvLyBibG9ja3MuICBUaGlzIGlzIHdoYXQgd2Ug
d291bGQgYmUgcHJldmVudGluZyBpZiB3ZSBjbG9uZWQgdGhlIGJsb2NrLgorICAgIERlc3RJID0g
RGVzdDsKKyAgICBpZiAoKytEZXN0SSAhPSBEZXN0LT5nZXRQYXJlbnQoKS0+ZW5kKCkpIHsKKyAg
ICAgIEJhc2ljQmxvY2sgKkRlc3RTdWNjID0gRGVzdEk7CisgICAgICAvLyBJZiBhbnkgb2YgRGVz
dCdzIHN1Y2Nlc3NvcnMgYXJlIGZhbGwtdGhyb3VnaHMsIGRvbid0IGRvIHRoaXMgeGZvcm0uCisg
ICAgICBmb3IgKHN1Y2NfaXRlcmF0b3IgU0kgPSBzdWNjX2JlZ2luKERlc3QpLCBTRSA9IHN1Y2Nf
ZW5kKERlc3QpOworICAgICAgICAgICBTSSAhPSBTRTsgKytTSSkKKyAgICAgICAgaWYgKCpTSSA9
PSBEZXN0U3VjYykKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgLy8g
RmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlbid0IHJlZGlyZWN0ZWQgdG8gdGhpcyB0YXJnZXQg
YmxvY2sgZWFybGllcjsKKyAgLy8gdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIGxvb3AgZm9yZXZl
ciBpZiB3ZSBkb24ndCBjaGVjayB0aGlzIChQUiAyMzIzKS4KKyAgaWYgKCFDeWNsZURldGVjdG9y
Lmluc2VydChEZXN0KSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vLyBGaW5kT2J2aW91c1NoYXJlZERvbU9mIC0gV2Uga25vdyB0aGVyZSBpcyBhIGJyYW5jaCBm
cm9tIFNyY0Jsb2NrIHRvCisvLy8gRGVzdEJsb2NrLCBhbmQgdGhhdCBTcmNCbG9jayBpcyBub3Qg
dGhlIG9ubHkgcHJlZGVjZXNzb3Igb2YgRHN0QmxvY2suICBJZiB3ZQorLy8vIGNhbiBmaW5kIGEg
cHJlZGVjZXNzb3Igb2YgU3JjQmxvY2sgdGhhdCBpcyBhIGRvbWluYXRvciBvZiBib3RoIFNyY0Js
b2NrIGFuZAorLy8vIERzdEJsb2NrLCByZXR1cm4gaXQuCitzdGF0aWMgQmFzaWNCbG9jayAqRmlu
ZE9idmlvdXNTaGFyZWREb21PZihCYXNpY0Jsb2NrICpTcmNCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sgKkRzdEJsb2NrKSB7CisgIC8v
IFNyY0Jsb2NrIG11c3QgaGF2ZSBhIHNpbmdsZSBwcmVkZWNlc3Nvci4KKyAgcHJlZF9pdGVyYXRv
ciBQSSA9IHByZWRfYmVnaW4oU3JjQmxvY2spLCBQRSA9IHByZWRfZW5kKFNyY0Jsb2NrKTsKKyAg
aWYgKFBJID09IFBFIHx8ICsrUEkgIT0gUEUpIHJldHVybiAwOworCisgIEJhc2ljQmxvY2sgKlNy
Y1ByZWQgPSAqcHJlZF9iZWdpbihTcmNCbG9jayk7CisKKyAgLy8gTG9vayBhdCB0aGUgcHJlZGVj
ZXNzb3JzIG9mIERzdEJsb2NrLiAgT25lIG9mIHRoZW0gd2lsbCBiZSBTcmNCbG9jay4gIElmCisg
IC8vIHRoZXJlIGlzIG9ubHkgb25lIG90aGVyIHByZWQsIGdldCBpdCwgb3RoZXJ3aXNlIHdlIGNh
bid0IGhhbmRsZSBpdC4KKyAgUEkgPSBwcmVkX2JlZ2luKERzdEJsb2NrKTsgUEUgPSBwcmVkX2Vu
ZChEc3RCbG9jayk7CisgIEJhc2ljQmxvY2sgKkRzdE90aGVyUHJlZCA9IDA7CisgIEJhc2ljQmxv
Y2sgKlAgPSAqUEk7CisgIGlmIChQID09IFNyY0Jsb2NrKSB7CisgICAgaWYgKCsrUEkgPT0gUEUp
IHJldHVybiAwOworICAgIERzdE90aGVyUHJlZCA9ICpQSTsKKyAgICBpZiAoKytQSSAhPSBQRSkg
cmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgRHN0T3RoZXJQcmVkID0gUDsKKyAgICBpZiAoKytQ
SSA9PSBQRSB8fCAqUEkgIT0gU3JjQmxvY2sgfHwgKytQSSAhPSBQRSkgcmV0dXJuIDA7CisgIH0K
KworICAvLyBXZSBjYW4gaGFuZGxlIHR3byBzaXR1YXRpb25zIGhlcmU6ICJpZiB0aGVuIiBhbmQg
ImlmIHRoZW4gZWxzZSIgYmxvY2tzLiAgQW4KKyAgLy8gJ2lmIHRoZW4nIHNpdHVhdGlvbiBpcyBq
dXN0IHdoZXJlIERzdE90aGVyUHJlZCA9PSBTcmNQcmVkLgorICBpZiAoRHN0T3RoZXJQcmVkID09
IFNyY1ByZWQpCisgICAgcmV0dXJuIFNyY1ByZWQ7CisKKyAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdl
IGhhdmUgYW4gImlmIHRoZW4gZWxzZSIgc2l0dWF0aW9uLCB3aGljaCBtZWFucyB0aGF0CisgIC8v
IERzdE90aGVyUHJlZCB3aWxsIGhhdmUgYSBzaW5nbGUgcHJlZGVjZXNzb3IgYW5kIGl0IHdpbGwg
YmUgU3JjUHJlZC4KKyAgUEkgPSBwcmVkX2JlZ2luKERzdE90aGVyUHJlZCk7IFBFID0gcHJlZF9l
bmQoRHN0T3RoZXJQcmVkKTsKKyAgaWYgKFBJICE9IFBFICYmICpQSSA9PSBTcmNQcmVkKSB7Cisg
ICAgaWYgKCsrUEkgIT0gUEUpIHJldHVybiAwOyAgLy8gTm90IGEgc2luZ2xlIHByZWQuCisgICAg
cmV0dXJuIFNyY1ByZWQ7ICAvLyBPdGhlcndpc2UsIGl0J3MgYW4gImlmIHRoZW4iIHNpdHVhdGlv
bi4gIFJldHVybiB0aGUgaWYuCisgIH0KKworICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgc29tZXRo
aW5nIHdlIGNhbid0IGhhbmRsZS4KKyAgcmV0dXJuIDA7Cit9CisKKworLy8vIGVsaW1pbmF0ZVVu
Y29uZGl0aW9uYWxCcmFuY2ggLSBDbG9uZSB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGRlc3Rp
bmF0aW9uCisvLy8gYmxvY2sgaW50byB0aGUgc291cmNlIGJsb2NrLCBlbGltaW5hdGluZyB0aGUg
c3BlY2lmaWVkIHVuY29uZGl0aW9uYWwgYnJhbmNoLgorLy8vIElmIHRoZSBkZXN0aW5hdGlvbiBi
bG9jayBkZWZpbmVzIHZhbHVlcyB1c2VkIGJ5IHN1Y2Nlc3NvcnMgb2YgdGhlIGRlc3QKKy8vLyBi
bG9jaywgd2UgbWF5IG5lZWQgdG8gaW5zZXJ0IFBISSBub2Rlcy4KKy8vLwordm9pZCBUYWlsRHVw
OjplbGltaW5hdGVVbmNvbmRpdGlvbmFsQnJhbmNoKEJyYW5jaEluc3QgKkJyYW5jaCkgeworICBC
YXNpY0Jsb2NrICpTb3VyY2VCbG9jayA9IEJyYW5jaC0+Z2V0UGFyZW50KCk7CisgIEJhc2ljQmxv
Y2sgKkRlc3RCbG9jayA9IEJyYW5jaC0+Z2V0U3VjY2Vzc29yKDApOworICBhc3NlcnQoU291cmNl
QmxvY2sgIT0gRGVzdEJsb2NrICYmICJPdXIgcHJlZGljYXRlIGlzIGJyb2tlbiEiKTsKKworICBE
RUJVRyhkYmdzKCkgPDwgIlRhaWxEdXBsaWNhdGlvblsiIDw8IFNvdXJjZUJsb2NrLT5nZXRQYXJl
bnQoKS0+Z2V0TmFtZSgpCisgICAgICAgIDw8ICJdOiBFbGltaW5hdGluZyBicmFuY2g6ICIgPDwg
KkJyYW5jaCk7CisKKyAgLy8gU2VlIGlmIHdlIGNhbiBhdm9pZCBkdXBsaWNhdGluZyBjb2RlIGJ5
IG1vdmluZyBpdCB1cCB0byBhIGRvbWluYXRvciBvZiBib3RoCisgIC8vIGJsb2Nrcy4KKyAgaWYg
KEJhc2ljQmxvY2sgKkRvbUJsb2NrID0gRmluZE9idmlvdXNTaGFyZWREb21PZihTb3VyY2VCbG9j
aywgRGVzdEJsb2NrKSkgeworICAgIERFQlVHKGRiZ3MoKSA8PCAiRm91bmQgc2hhcmVkIGRvbWlu
YXRvcjogIiA8PCBEb21CbG9jay0+Z2V0TmFtZSgpIDw8ICJcbiIpOworCisgICAgLy8gSWYgdGhl
cmUgYXJlIG5vbi1waGkgaW5zdHJ1Y3Rpb25zIGluIERlc3RCbG9jayB0aGF0IGhhdmUgbm8gb3Bl
cmFuZHMKKyAgICAvLyBkZWZpbmVkIGluIERlc3RCbG9jaywgYW5kIGlmIHRoZSBpbnN0cnVjdGlv
biBoYXMgbm8gc2lkZSBlZmZlY3RzLCB3ZSBjYW4KKyAgICAvLyBtb3ZlIHRoZSBpbnN0cnVjdGlv
biB0byBEb21CbG9jayBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LgorICAgIEJhc2ljQmxvY2s6
Oml0ZXJhdG9yIEJCSSA9IERlc3RCbG9jay0+Z2V0Rmlyc3ROb25QSEkoKTsKKyAgICB3aGlsZSAo
IWlzYTxUZXJtaW5hdG9ySW5zdD4oQkJJKSkgeworICAgICAgSW5zdHJ1Y3Rpb24gKkkgPSBCQkkr
KzsKKworICAgICAgYm9vbCBDYW5Ib2lzdCA9IGlzU2FmZVRvU3BlY3VsYXRpdmVseUV4ZWN1dGUo
SSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAhSS0+bWF5UmVhZEZyb21NZW1vcnkoKTsKKyAg
ICAgIGlmIChDYW5Ib2lzdCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIG9wID0gMCwgZSA9IEkt
PmdldE51bU9wZXJhbmRzKCk7IG9wICE9IGU7ICsrb3ApCisgICAgICAgICAgaWYgKEluc3RydWN0
aW9uICpPcEkgPSBkeW5fY2FzdDxJbnN0cnVjdGlvbj4oSS0+Z2V0T3BlcmFuZChvcCkpKQorICAg
ICAgICAgICAgaWYgKE9wSS0+Z2V0UGFyZW50KCkgPT0gRGVzdEJsb2NrIHx8CisgICAgICAgICAg
ICAgICAgKGlzYTxJbnZva2VJbnN0PihPcEkpICYmIE9wSS0+Z2V0UGFyZW50KCkgPT0gRG9tQmxv
Y2spKSB7CisgICAgICAgICAgICAgIENhbkhvaXN0ID0gZmFsc2U7CisgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICBpZiAoQ2FuSG9pc3QpIHsKKyAgICAgICAgICAv
LyBSZW1vdmUgZnJvbSBEZXN0QmxvY2ssIG1vdmUgcmlnaHQgYmVmb3JlIHRoZSB0ZXJtIGluIERv
bUJsb2NrLgorICAgICAgICAgIERlc3RCbG9jay0+Z2V0SW5zdExpc3QoKS5yZW1vdmUoSSk7Cisg
ICAgICAgICAgRG9tQmxvY2stPmdldEluc3RMaXN0KCkuaW5zZXJ0KERvbUJsb2NrLT5nZXRUZXJt
aW5hdG9yKCksIEkpOworICAgICAgICAgIERFQlVHKGRiZ3MoKSA8PCAiSG9pc3RlZDogIiA8PCAq
SSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBUYWlsIGR1cGxpY2F0
aW9uIGNhbiBub3QgdXBkYXRlIFNTQSBwcm9wZXJ0aWVzIGNvcnJlY3RseSBpZiB0aGUgdmFsdWVz
CisgIC8vIGRlZmluZWQgaW4gdGhlIGR1cGxpY2F0ZWQgdGFpbCBhcmUgdXNlZCBvdXRzaWRlIG9m
IHRoZSB0YWlsIGl0c2VsZi4gIEZvcgorICAvLyB0aGlzIHJlYXNvbiwgd2Ugc3BpbGwgYWxsIHZh
bHVlcyB0aGF0IGFyZSB1c2VkIG91dHNpZGUgb2YgdGhlIHRhaWwgdG8gdGhlCisgIC8vIHN0YWNr
LgorICBmb3IgKEJhc2ljQmxvY2s6Oml0ZXJhdG9yIEkgPSBEZXN0QmxvY2stPmJlZ2luKCk7IEkg
IT0gRGVzdEJsb2NrLT5lbmQoKTsgKytJKQorICAgIGlmIChJLT5pc1VzZWRPdXRzaWRlT2ZCbG9j
ayhEZXN0QmxvY2spKSB7CisgICAgICAvLyBXZSBmb3VuZCBhIHVzZSBvdXRzaWRlIG9mIHRoZSB0
YWlsLiAgQ3JlYXRlIGEgbmV3IHN0YWNrIHNsb3QgdG8KKyAgICAgIC8vIGJyZWFrIHRoaXMgaW50
ZXItYmxvY2sgdXNhZ2UgcGF0dGVybi4KKyAgICAgIERlbW90ZVJlZ1RvU3RhY2soKkkpOworICAg
IH0KKworICAvLyBXZSBhcmUgZ29pbmcgdG8gaGF2ZSB0byBtYXAgb3BlcmFuZHMgZnJvbSB0aGUg
b3JpZ2luYWwgYmxvY2sgQiB0byB0aGUgbmV3CisgIC8vIGNvcHkgb2YgdGhlIGJsb2NrIEInLiAg
SWYgdGhlcmUgYXJlIFBISSBub2RlcyBpbiB0aGUgRGVzdEJsb2NrLCB0aGVzZSBQSEkKKyAgLy8g
bm9kZXMgYWxzbyBkZWZpbmUgcGFydCBvZiB0aGlzIG1hcHBpbmcuICBMb29wIG92ZXIgdGhlc2Ug
UEhJIG5vZGVzLCBhZGRpbmcKKyAgLy8gdGhlbSB0byBvdXIgbWFwcGluZy4KKyAgLy8KKyAgc3Rk
OjptYXA8VmFsdWUqLCBWYWx1ZSo+IFZhbHVlTWFwcGluZzsKKworICBCYXNpY0Jsb2NrOjppdGVy
YXRvciBCSSA9IERlc3RCbG9jay0+YmVnaW4oKTsKKyAgYm9vbCBIYWRQSElOb2RlcyA9IGlzYTxQ
SElOb2RlPihCSSk7CisgIGZvciAoOyBQSElOb2RlICpQTiA9IGR5bl9jYXN0PFBISU5vZGU+KEJJ
KTsgKytCSSkKKyAgICBWYWx1ZU1hcHBpbmdbUE5dID0gUE4tPmdldEluY29taW5nVmFsdWVGb3JC
bG9jayhTb3VyY2VCbG9jayk7CisKKyAgLy8gQ2xvbmUgdGhlIG5vbi1waGkgaW5zdHJ1Y3Rpb25z
IG9mIHRoZSBkZXN0IGJsb2NrIGludG8gdGhlIHNvdXJjZSBibG9jaywKKyAgLy8ga2VlcGluZyB0
cmFjayBvZiB0aGUgbWFwcGluZy4uLgorICAvLworICBmb3IgKDsgQkkgIT0gRGVzdEJsb2NrLT5l
bmQoKTsgKytCSSkgeworICAgIEluc3RydWN0aW9uICpOZXcgPSBCSS0+Y2xvbmUoKTsKKyAgICBO
ZXctPnNldE5hbWUoQkktPmdldE5hbWUoKSk7CisgICAgU291cmNlQmxvY2stPmdldEluc3RMaXN0
KCkucHVzaF9iYWNrKE5ldyk7CisgICAgVmFsdWVNYXBwaW5nW0JJXSA9IE5ldzsKKyAgfQorCisg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYnVpbHQgdGhlIG1hcHBpbmcgaW5mb3JtYXRpb24gYW5kIGNs
b25lZCBhbGwgb2YgdGhlCisgIC8vIGluc3RydWN0aW9ucyAoZ2l2aW5nIHVzIGEgbmV3IHRlcm1p
bmF0b3IsIGFtb25nIG90aGVyIHRoaW5ncyksIHdhbGsgdGhlIG5ldworICAvLyBpbnN0cnVjdGlv
bnMsIHJld3JpdGluZyByZWZlcmVuY2VzIG9mIG9sZCBpbnN0cnVjdGlvbnMgdG8gdXNlIG5ldwor
ICAvLyBpbnN0cnVjdGlvbnMuCisgIC8vCisgIEJJID0gQnJhbmNoOyArK0JJOyAgLy8gR2V0IGFu
IGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBuZXcgaW5zdHJ1Y3Rpb24KKyAgZm9yICg7IEJJICE9IFNv
dXJjZUJsb2NrLT5lbmQoKTsgKytCSSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBlID0gQkkt
PmdldE51bU9wZXJhbmRzKCk7IGkgIT0gZTsgKytpKSB7CisgICAgICBzdGQ6Om1hcDxWYWx1ZSos
IFZhbHVlKj46OmNvbnN0X2l0ZXJhdG9yIEkgPQorICAgICAgICBWYWx1ZU1hcHBpbmcuZmluZChC
SS0+Z2V0T3BlcmFuZChpKSk7CisgICAgICBpZiAoSSAhPSBWYWx1ZU1hcHBpbmcuZW5kKCkpCisg
ICAgICAgIEJJLT5zZXRPcGVyYW5kKGksIEktPnNlY29uZCk7CisgICAgfQorCisgIC8vIE5leHQg
d2UgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycyBvZiBEZXN0QmxvY2sgaGFk
IFBISSBub2Rlcy4KKyAgLy8gSWYgc28sIHdlIG5lZWQgdG8gYWRkIGVudHJpZXMgdG8gdGhlIFBI
SSBub2RlcyBmb3IgU291cmNlQmxvY2sgbm93LgorICBmb3IgKHN1Y2NfaXRlcmF0b3IgU0kgPSBz
dWNjX2JlZ2luKERlc3RCbG9jayksIFNFID0gc3VjY19lbmQoRGVzdEJsb2NrKTsKKyAgICAgICBT
SSAhPSBTRTsgKytTSSkgeworICAgIEJhc2ljQmxvY2sgKlN1Y2MgPSAqU0k7CisgICAgZm9yIChC
YXNpY0Jsb2NrOjppdGVyYXRvciBQTkkgPSBTdWNjLT5iZWdpbigpOyBpc2E8UEhJTm9kZT4oUE5J
KTsgKytQTkkpIHsKKyAgICAgIFBISU5vZGUgKlBOID0gY2FzdDxQSElOb2RlPihQTkkpOworICAg
ICAgLy8gT2ssIHdlIGhhdmUgYSBQSEkgbm9kZS4gIEZpZ3VyZSBvdXQgd2hhdCB0aGUgaW5jb21p
bmcgdmFsdWUgd2FzIGZvciB0aGUKKyAgICAgIC8vIERlc3RCbG9jay4KKyAgICAgIFZhbHVlICpJ
ViA9IFBOLT5nZXRJbmNvbWluZ1ZhbHVlRm9yQmxvY2soRGVzdEJsb2NrKTsKKworICAgICAgLy8g
UmVtYXAgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS4uLgorICAgICAgc3RkOjptYXA8VmFsdWUqLCBW
YWx1ZSo+Ojpjb25zdF9pdGVyYXRvciBJID0gVmFsdWVNYXBwaW5nLmZpbmQoSVYpOworICAgICAg
aWYgKEkgIT0gVmFsdWVNYXBwaW5nLmVuZCgpKQorICAgICAgICBJViA9IEktPnNlY29uZDsKKyAg
ICAgIFBOLT5hZGRJbmNvbWluZyhJViwgU291cmNlQmxvY2spOworICAgIH0KKyAgfQorCisgIC8v
IE5leHQsIHJlbW92ZSB0aGUgb2xkIGJyYW5jaCBpbnN0cnVjdGlvbiwgYW5kIGFueSBQSEkgbm9k
ZSBlbnRyaWVzIHRoYXQgd2UKKyAgLy8gaGFkLgorICBCSSA9IEJyYW5jaDsgKytCSTsgIC8vIEdl
dCBhbiBpdGVyYXRvciB0byB0aGUgZmlyc3QgbmV3IGluc3RydWN0aW9uCisgIERlc3RCbG9jay0+
cmVtb3ZlUHJlZGVjZXNzb3IoU291cmNlQmxvY2spOyAvLyBSZW1vdmUgZW50cmllcyBpbiBQSEkg
bm9kZXMuLi4KKyAgU291cmNlQmxvY2stPmdldEluc3RMaXN0KCkuZXJhc2UoQnJhbmNoKTsgIC8v
IERlc3Ryb3kgdGhlIHVuY29uZCBicmFuY2guLi4KKworICAvLyBGaW5hbCBzdGVwOiBub3cgdGhh
dCB3ZSBoYXZlIGZpbmlzaGVkIGV2ZXJ5dGhpbmcgdXAsIHdhbGsgdGhlIGNsb25lZAorICAvLyBp
bnN0cnVjdGlvbnMgb25lIGxhc3QgdGltZSwgY29uc3RhbnQgcHJvcGFnYXRpbmcgYW5kIERDRSdp
bmcgdGhlbSwgYmVjYXVzZQorICAvLyB0aGV5IG1heSBub3QgYmUgbmVlZGVkIGFueW1vcmUuCisg
IC8vCisgIGlmIChIYWRQSElOb2RlcykgeworICAgIHdoaWxlIChCSSAhPSBTb3VyY2VCbG9jay0+
ZW5kKCkpIHsKKyAgICAgIEluc3RydWN0aW9uICpJbnN0ID0gQkkrKzsKKyAgICAgIGlmIChpc0lu
c3RydWN0aW9uVHJpdmlhbGx5RGVhZChJbnN0KSkKKyAgICAgICAgSW5zdC0+ZXJhc2VGcm9tUGFy
ZW50KCk7CisgICAgICBlbHNlIGlmIChWYWx1ZSAqViA9IFNpbXBsaWZ5SW5zdHJ1Y3Rpb24oSW5z
dCkpIHsKKyAgICAgICAgSW5zdC0+cmVwbGFjZUFsbFVzZXNXaXRoKFYpOworICAgICAgICBJbnN0
LT5lcmFzZUZyb21QYXJlbnQoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICArK051bUVsaW1p
bmF0ZWQ7ICAvLyBXZSBqdXN0IGtpbGxlZCBhIGJyYW5jaCEKK30KSW5kZXg6IHRlc3QvVHJhbnNm
b3Jtcy9Mb29wRGVsZXRpb24vMjAwOC0wNS0wNi1QaGkubGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdC9U
cmFuc2Zvcm1zL0xvb3BEZWxldGlvbi8yMDA4LTA1LTA2LVBoaS5sbAkocmV2aXNpb24gMTk5NTcw
KQorKysgdGVzdC9UcmFuc2Zvcm1zL0xvb3BEZWxldGlvbi8yMDA4LTA1LTA2LVBoaS5sbAkod29y
a2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLTsgUlVOOiBvcHQgPCAlcyAtaW5saW5lIC1pbnN0
Y29tYmluZSAtanVtcC10aHJlYWRpbmcgLWxpY20gLWxvb3AtdW5zd2l0Y2ggLWluc3Rjb21iaW5l
IC1pbmR2YXJzIC1sb29wLWRlbGV0aW9uIC1ndm4gLXNpbXBsaWZ5Y2ZnIC12ZXJpZnkgLWRpc2Fi
bGUtb3V0cHV0Cis7IFJVTjogb3B0IDwgJXMgLWlubGluZSAtdGFpbGR1cGxpY2F0ZSAtaW5zdGNv
bWJpbmUgLWp1bXAtdGhyZWFkaW5nIC1saWNtIC1sb29wLXVuc3dpdGNoIC1pbnN0Y29tYmluZSAt
aW5kdmFycyAtbG9vcC1kZWxldGlvbiAtZ3ZuIC1zaW1wbGlmeWNmZyAtdmVyaWZ5IC1kaXNhYmxl
LW91dHB1dAogCiB0YXJnZXQgZGF0YWxheW91dCA9ICJlLXA6MzI6MzI6MzItaTE6ODo4LWk4Ojg6
OC1pMTY6MTY6MTYtaTMyOjMyOjMyLWk2NDozMjo2NC1mMzI6MzI6MzItZjY0OjMyOjY0LXY2NDo2
NDo2NC12MTI4OjEyODoxMjgtYTA6MDo2NC1mODA6MTI4OjEyOCIKIHRhcmdldCB0cmlwbGUgPSAi
aTM4Ni1hcHBsZS1kYXJ3aW45IgpJbmRleDogdGVzdC9UcmFuc2Zvcm1zL0xvb3BTaW1wbGlmeS8y
MDAzLTA4LTE1LVByZWhlYWRlcnNGYWlsLmxsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QvVHJhbnNmb3Jt
cy9Mb29wU2ltcGxpZnkvMjAwMy0wOC0xNS1QcmVoZWFkZXJzRmFpbC5sbAkocmV2aXNpb24gMTk5
NTcwKQorKysgdGVzdC9UcmFuc2Zvcm1zL0xvb3BTaW1wbGlmeS8yMDAzLTA4LTE1LVByZWhlYWRl
cnNGYWlsLmxsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotOyBSVU46IG9wdCA8ICVz
IC1pbnN0Y29tYmluZSAtc2ltcGxpZnljZmcgLWxpY20gLWRpc2FibGUtb3V0cHV0Cis7IFJVTjog
b3B0IDwgJXMgLXRhaWxkdXBsaWNhdGUgLWluc3Rjb21iaW5lIC1zaW1wbGlmeWNmZyAtbGljbSAt
ZGlzYWJsZS1vdXRwdXQKIHRhcmdldCBkYXRhbGF5b3V0ID0gImUtcDozMjozMiIKIEB5eV9iYXNl
ID0gZXh0ZXJuYWwgZ2xvYmFsIFs3ODcgeCBpMTZdCQk7IDxbNzg3IHggaTE2XSo+IFsjdXNlcz0x
XQogQHl5X3N0YXRlX3B0ciA9IGV4dGVybmFsIGdsb2JhbCBpMzIqCQk7IDxpMzIqKj4gWyN1c2Vz
PTNdCkluZGV4OiB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC8yMDAzLTA2LTI0LVNpbXBsZWxvb3Au
bGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvMjAwMy0wNi0yNC1TaW1w
bGVsb29wLmxsCShyZXZpc2lvbiAwKQorKysgdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvMjAwMy0w
Ni0yNC1TaW1wbGVsb29wLmxsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKKzsgUlVO
OiBvcHQgPCAlcyAtdGFpbGR1cGxpY2F0ZSAtZGlzYWJsZS1vdXRwdXQKKworZGVmaW5lIHZvaWQg
QG1vdGlvbl9yZXN1bHQ3KCkgeworZW50cnk6CisgICAgICAgYnIgbGFiZWwgJWVuZGlmCitlbmRp
ZjogICAgICAgICA7IHByZWRzID0gJW5vX2V4aXQsICVlbnRyeQorICAgICAgICVpLjEgPSBwaGkg
aTMyIFsgJWluYywgJW5vX2V4aXQgXSwgWyAwLCAlZW50cnkgXSAgICAgICAgICAgICAgICA7IDxp
MzI+IFsjdXNlcz0xXQorICAgICAgICVpbmMgPSBhZGQgaTMyICVpLjEsIDEgICAgICAgICAgOyA8
aTMyPiBbI3VzZXM9MV0KKyAgICAgICBiciBpMSBmYWxzZSwgbGFiZWwgJW5vX2V4aXQsIGxhYmVs
ICVVbmlmaWVkRXhpdE5vZGUKK25vX2V4aXQ6ICAgICAgICAgICAgICAgOyBwcmVkcyA9ICVlbmRp
ZgorICAgICAgIGJyIGkxIGZhbHNlLCBsYWJlbCAlVW5pZmllZEV4aXROb2RlLCBsYWJlbCAlZW5k
aWYKK1VuaWZpZWRFeGl0Tm9kZTogICAgICAgICAgICAgICA7IHByZWRzID0gJW5vX2V4aXQsICVl
bmRpZgorICAgICAgIHJldCB2b2lkCit9CisKSW5kZXg6IHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVw
LzIwMDMtMDctMjItSW5maW5pdGVMb29wLmxsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QvVHJhbnNmb3Jt
cy9UYWlsRHVwLzIwMDMtMDctMjItSW5maW5pdGVMb29wLmxsCShyZXZpc2lvbiAwKQorKysgdGVz
dC9UcmFuc2Zvcm1zL1RhaWxEdXAvMjAwMy0wNy0yMi1JbmZpbml0ZUxvb3AubGwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMSBAQAorOyBSVU46IG9wdCA8ICVzIC10YWlsZHVwbGljYXRlIC1k
aXNhYmxlLW91dHB1dAorCitkZWZpbmUgaTMyIEBzdW0oKSB7CitlbnRyeToKKyAgICAgICBiciBs
YWJlbCAlbG9vcGVudHJ5Citsb29wZW50cnk6ICAgICAgICAgICAgIDsgcHJlZHMgPSAlbG9vcGVu
dHJ5LCAlZW50cnkKKyAgICAgICAlaS4wID0gcGhpIGkzMiBbIDEsICVlbnRyeSBdLCBbICV0bXAu
MywgJWxvb3BlbnRyeSBdICAgICAgICAgICAgOyA8aTMyPiBbI3VzZXM9MV0KKyAgICAgICAldG1w
LjMgPSBhZGQgaTMyICVpLjAsIDEgICAgICAgICAgICAgICAgOyA8aTMyPiBbI3VzZXM9MV0KKyAg
ICAgICBiciBsYWJlbCAlbG9vcGVudHJ5Cit9CisKSW5kZXg6IHRlc3QvVHJhbnNmb3Jtcy9UYWls
RHVwLzIwMDMtMDgtMjMtSW52YWxpZGF0ZWRQb2ludGVycy5sbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0
L1RyYW5zZm9ybXMvVGFpbER1cC8yMDAzLTA4LTIzLUludmFsaWRhdGVkUG9pbnRlcnMubGwJKHJl
dmlzaW9uIDApCisrKyB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC8yMDAzLTA4LTIzLUludmFsaWRh
dGVkUG9pbnRlcnMubGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorOyBSVU46IG9w
dCA8ICVzIC10YWlsZHVwbGljYXRlIC1kaXNhYmxlLW91dHB1dAorCitkZWZpbmUgaTMyIEBzZWxs
X2hhZ2dsZSgpIHsKK2VudHJ5OgorICAgICAgIGJyIGkxIGZhbHNlLCBsYWJlbCAldGhlbi41LCBs
YWJlbCAlVW5pZmllZEV4aXROb2RlCit0aGVuLjU6ICAgICAgICAgICAgICAgIDsgcHJlZHMgPSAl
ZW50cnkKKyAgICAgICBiciBpMSBmYWxzZSwgbGFiZWwgJWxvb3BlbnRyeS4xLnByZWhlYWRlciwg
bGFiZWwgJWVsc2UuMQorZWxzZS4xOiAgICAgICAgICAgICAgICA7IHByZWRzID0gJXRoZW4uNQor
ICAgICAgIGJyIGxhYmVsICVsb29wZW50cnkuMS5wcmVoZWFkZXIKK2xvb3BlbnRyeS4xLnByZWhl
YWRlcjogICAgICAgICA7IHByZWRzID0gJWVsc2UuMSwgJXRoZW4uNQorICAgICAgICVmaW5hbF9h
c2suMCA9IHBoaSBpMzIgWyAwLCAlZWxzZS4xIF0sIFsgMCwgJXRoZW4uNSBdICAgICAgICAgICA7
IDxpMzI+IFsjdXNlcz0yXQorICAgICAgIGJyIGxhYmVsICVsb29wZW50cnkuMQorbG9vcGVudHJ5
LjE6ICAgICAgICAgICA7IHByZWRzID0gJWVuZGlmLjE3LCAlbG9vcGVudHJ5LjEucHJlaGVhZGVy
CisgICAgICAgc3dpdGNoIGkzMiAwLCBsYWJlbCAlVW5pZmllZEV4aXROb2RlIFsKKyAgICAgICAg
ICAgICAgICBpMzIgMiwgbGFiZWwgJVVuaWZpZWRFeGl0Tm9kZQorICAgICAgICAgICAgICAgIGkz
MiAxLCBsYWJlbCAlZW5kaWYuMTYKKyAgICAgICBdCitlbmRpZi4xNjogICAgICAgICAgICAgIDsg
cHJlZHMgPSAlbG9vcGVudHJ5LjEKKyAgICAgICBiciBpMSBmYWxzZSwgbGFiZWwgJXRoZW4uMTcs
IGxhYmVsICVVbmlmaWVkRXhpdE5vZGUKK3RoZW4uMTc6ICAgICAgICAgICAgICAgOyBwcmVkcyA9
ICVlbmRpZi4xNgorICAgICAgIGJyIGkxIGZhbHNlLCBsYWJlbCAldGhlbi4xOCwgbGFiZWwgJWVu
ZGlmLjE3Cit0aGVuLjE4OiAgICAgICAgICAgICAgIDsgcHJlZHMgPSAldGhlbi4xNworICAgICAg
IGJyIGkxIGZhbHNlLCBsYWJlbCAlZW5kaWYuMTcsIGxhYmVsICVVbmlmaWVkRXhpdE5vZGUKK2Vu
ZGlmLjE3OiAgICAgICAgICAgICAgOyBwcmVkcyA9ICV0aGVuLjE4LCAldGhlbi4xNworICAgICAg
ICVjdXJfYXNrLjMgPSBwaGkgaTMyIFsgJWZpbmFsX2Fzay4wLCAldGhlbi4xNyBdLCBbICVmaW5h
bF9hc2suMCwgJXRoZW4uMTggXSAgICAgICAgICAgICA7IDxpMzI+IFsjdXNlcz0wXQorICAgICAg
IGJyIGkxIGZhbHNlLCBsYWJlbCAlbG9vcGVudHJ5LjEsIGxhYmVsICVVbmlmaWVkRXhpdE5vZGUK
K1VuaWZpZWRFeGl0Tm9kZTogICAgICAgICAgICAgICA7IHByZWRzID0gJWVuZGlmLjE3LCAldGhl
bi4xOCwgJWVuZGlmLjE2LCAlbG9vcGVudHJ5LjEsICVsb29wZW50cnkuMSwgJWVudHJ5CisgICAg
ICAgcmV0IGkzMiAwCit9CkluZGV4OiB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC8yMDAzLTA4LTMx
LVVucmVhY2hhYmxlQmxvY2tzLmxsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QvVHJhbnNmb3Jtcy9UYWls
RHVwLzIwMDMtMDgtMzEtVW5yZWFjaGFibGVCbG9ja3MubGwJKHJldmlzaW9uIDApCisrKyB0ZXN0
L1RyYW5zZm9ybXMvVGFpbER1cC8yMDAzLTA4LTMxLVVucmVhY2hhYmxlQmxvY2tzLmxsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKzsgUlVOOiBvcHQgPCAlcyAtdGFpbGR1cGxpY2F0
ZSAtZGlzYWJsZS1vdXRwdXQKKworZGVmaW5lIGkzMiBAZm9vKCkgeworZW50cnk6CisgICAgICAg
YnIgbGFiZWwgJXJldHVybi5pCithZnRlcl9yZXQuaTogICAgICAgICAgIDsgTm8gcHJlZGVjZXNz
b3JzIQorICAgICAgIGJyIGxhYmVsICVyZXR1cm4uaQorcmV0dXJuLmk6ICAgICAgICAgICAgICA7
IHByZWRzID0gJWFmdGVyX3JldC5pLCAlZW50cnkKKyAgICAgICAldG1wLjMgPSBwdHJ0b2ludCBp
MzIqIG51bGwgdG8gaTMyICAgICAgICAgICAgICA7IDxpMzI+IFsjdXNlcz0xXQorICAgICAgIGJy
IGxhYmVsICVyZXR1cm4uaTEKK2FmdGVyX3JldC5pMTogICAgICAgICAgOyBObyBwcmVkZWNlc3Nv
cnMhCisgICAgICAgYnIgbGFiZWwgJXJldHVybi5pMQorcmV0dXJuLmkxOiAgICAgICAgICAgICA7
IHByZWRzID0gJWFmdGVyX3JldC5pMSwgJXJldHVybi5pCisgICAgICAgJXRtcC44ID0gc3ViIGkz
MiAldG1wLjMsIDAgICAgICAgICAgICAgIDsgPGkzMj4gWyN1c2VzPTBdCisgICAgICAgcmV0IGkz
MiAwCit9CisKSW5kZXg6IHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVwLzIwMDQtMDQtMDEtRGVtb3Rl
UmVnVG9TdGFjay5sbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC8yMDA0
LTA0LTAxLURlbW90ZVJlZ1RvU3RhY2subGwJKHJldmlzaW9uIDApCisrKyB0ZXN0L1RyYW5zZm9y
bXMvVGFpbER1cC8yMDA0LTA0LTAxLURlbW90ZVJlZ1RvU3RhY2subGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMCBAQAorOyBSVU46IG9wdCA8ICVzIC10YWlsZHVwbGljYXRlIC1kaXNhYmxl
LW91dHB1dAorCitkZWZpbmUgdm9pZCBAaW50ZXJwcmV0KCkgeworZW50cnk6CisgICAgICAgYnIg
bGFiZWwgJXJldHJ5CityZXRyeTogICAgICAgICA7IHByZWRzID0gJWVuZGlmLjQsICVlbnRyeQor
ICAgICAgICV0bXAuOCA9IGNhbGwgaTMyIEBpbnRlcnAoICkgICAgICAgICAgICA7IDxpMzI+IFsj
dXNlcz0zXQorICAgICAgIHN3aXRjaCBpMzIgMCwgbGFiZWwgJWVuZGlmLjQgWworICAgICAgICAg
ICAgICAgIGkzMiAtMjUsIGxhYmVsICVyZXR1cm4KKyAgICAgICAgICAgICAgICBpMzIgLTE2LCBs
YWJlbCAlcmV0dXJuCisgICAgICAgXQorZW5kaWYuNDogICAgICAgICAgICAgICA7IHByZWRzID0g
JXJldHJ5CisgICAgICAgYnIgaTEgZmFsc2UsIGxhYmVsICVyZXR1cm4sIGxhYmVsICVyZXRyeQor
cmV0dXJuOiAgICAgICAgICAgICAgICA7IHByZWRzID0gJWVuZGlmLjQsICVyZXRyeSwgJXJldHJ5
CisgICAgICAgJXJlc3VsdC4wID0gcGhpIGkzMiBbICV0bXAuOCwgJXJldHJ5IF0sIFsgJXRtcC44
LCAlcmV0cnkgXSwgWyAldG1wLjgsICVlbmRpZi40IF0gICAgICAgICAgICAgICAgOyA8aTMyPiBb
I3VzZXM9MF0KKyAgICAgICByZXQgdm9pZAorfQorCitkZWNsYXJlIGkzMiBAaW50ZXJwKCkKKwpJ
bmRleDogdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvMjAwOC0wNS0xMy1JbmZpbml0ZUxvb3AubGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvMjAwOC0wNS0xMy1JbmZpbml0
ZUxvb3AubGwJKHJldmlzaW9uIDApCisrKyB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC8yMDA4LTA1
LTEzLUluZmluaXRlTG9vcC5sbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACis7IFJV
Tjogb3B0IDwgJXMgLXRhaWxkdXBsaWNhdGUgfCBsbGMKKzsgUFIyMzIzCisKK2RlZmluZSBpMzIg
QGZ1bmNfMjcoaTMyICVwXzI4KSBub3Vud2luZCAgeworZW50cnk6CisgICV0bXAxMjUgPSB0cnVu
YyBpMzIgJXBfMjggdG8gaTggICA7IDxpOD4gWyN1c2VzPTFdCisgICV0bXA1LmkgPSBpY21wIGVx
IGk4ICV0bXAxMjUsIDAgICA7IDxpMT4gWyN1c2VzPTFdCisgIGJyIGkxICV0bXA1LmksIGxhYmVs
ICViYjguaSwgbGFiZWwgJWJiLmkKKworYmIuaTogICA7IHByZWRzID0gJWVudHJ5CisgIGJyIGxh
YmVsICViYjM5LmkKKworYmI4Lmk6ICAgIDsgcHJlZHMgPSAlZW50cnkKKyAgYnIgbGFiZWwgJWJi
MTEuaQorCitiYjExLmk6ICAgOyBwcmVkcyA9ICViYjM5LmksICViYjguaQorICAldG1wMTI2ID0g
dHJ1bmMgaTMyICVwXzI4IHRvIGk4ICAgOyA8aTg+IFsjdXNlcz0xXQorICBiciBsYWJlbCAlYmIz
OS5pCisKK2JiMzkuaTogICA7IHByZWRzID0gJWJiMTEuaSwgJWJiLmkKKyAgJXRtcDEyNyA9IHRy
dW5jIGkzMiAlcF8yOCB0byBpOCAgIDsgPGk4PiBbI3VzZXM9MV0KKyAgYnIgbGFiZWwgJWJiMTEu
aQorCitmdW5jXzI5LmV4aXQ6ICAgOyBObyBwcmVkZWNlc3NvcnMhCisgIHJldCBpMzIgdW5kZWYK
K30KSW5kZXg6IHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVwLzIwMDktMDctMzEtcGhpY3Jhc2gubGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvMjAwOS0wNy0zMS1waGljcmFz
aC5sbAkocmV2aXNpb24gMCkKKysrIHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVwLzIwMDktMDctMzEt
cGhpY3Jhc2gubGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorOyBSVU46IG9wdCA8
ICVzIC10YWlsZHVwbGljYXRlIC1kaXNhYmxlLW91dHB1dAorOyBQUjQ2NjIKKworZGVmaW5lIHZv
aWQgQGEoKSB7CitCQjoKKyAgICAgICBiciBsYWJlbCAlQkI2CisKK0JCNjoKKyAgICAgICAldG1w
OSA9IHBoaSBpNjQgWyAwLCAlQkIgXSwgWyA1LCAlQkIzNCBdCisgICAgICAgYnIgbGFiZWwgJUJC
MzQKKworQkIzNDoKKyAgICAgICBiciBsYWJlbCAlQkI2Cit9CkluZGV4OiB0ZXN0L1RyYW5zZm9y
bXMvVGFpbER1cC9NZXJnZVRlc3QubGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdC9UcmFuc2Zvcm1zL1Rh
aWxEdXAvTWVyZ2VUZXN0LmxsCShyZXZpc2lvbiAwKQorKysgdGVzdC9UcmFuc2Zvcm1zL1RhaWxE
dXAvTWVyZ2VUZXN0LmxsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKKzsgUlVOOiBv
cHQgPCAlcyAtdGFpbGR1cGxpY2F0ZSAtdGFpbGR1cC10aHJlc2hvbGQ9MiAtUyB8IGdyZXAgYWRk
IHwgbm90IGdyZXAgdXNlcz0xCisKK2RlZmluZSBpMzIgQHRlc3QxKGkxICVDLCBpMzIgJUEsIGkz
MiogJVApIHsKK2VudHJ5OgorICAgICAgIGJyIGkxICVDLCBsYWJlbCAlTDEsIGxhYmVsICVMMgor
TDE6ICAgICAgICAgICAgOyBwcmVkcyA9ICVlbnRyeQorICAgICAgIHN0b3JlIGkzMiAxLCBpMzIq
ICVQCisgICAgICAgYnIgbGFiZWwgJUwyCitMMjogICAgICAgICAgICA7IHByZWRzID0gJUwxLCAl
ZW50cnkKKyAgICAgICAlWCA9IGFkZCBpMzIgJUEsIDE3ICAgICAgICAgICAgIDsgPGkzMj4gWyN1
c2VzPTFdCisgICAgICAgcmV0IGkzMiAlWAorfQorCitkZWZpbmUgaTMyIEB0ZXN0MihpMSAlQywg
aTMyICVBLCBpMzIqICVQKSB7CitlbnRyeToKKyAgICAgICBiciBpMSAlQywgbGFiZWwgJUwxLCBs
YWJlbCAlTDIKK0wxOiAgICAgICAgICAgIDsgcHJlZHMgPSAlZW50cnkKKyAgICAgICBzdG9yZSBp
MzIgMSwgaTMyKiAlUAorICAgICAgIGJyIGxhYmVsICVMMworTDI6ICAgICAgICAgICAgOyBwcmVk
cyA9ICVlbnRyeQorICAgICAgIHN0b3JlIGkzMiA3LCBpMzIqICVQCisgICAgICAgYnIgbGFiZWwg
JUwzCitMMzogICAgICAgICAgICA7IHByZWRzID0gJUwyLCAlTDEKKyAgICAgICAlWCA9IGFkZCBp
MzIgJUEsIDE3ICAgICAgICAgICAgIDsgPGkzMj4gWyN1c2VzPTFdCisgICAgICAgcmV0IGkzMiAl
WAorfQorCkluZGV4OiB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC9QSElVcGRhdGVUZXN0LmxsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVwL1BISVVwZGF0ZVRlc3QubGwJKHJl
dmlzaW9uIDApCisrKyB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC9QSElVcGRhdGVUZXN0LmxsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKKzsgVGhpcyB0ZXN0IGNoZWNrcyB0byBtYWtl
IHN1cmUgcGhpIG5vZGVzIGFyZSB1cGRhdGVkIHByb3Blcmx5Cis7Cis7IFJVTjogb3B0IDwgJXMg
LXRhaWxkdXBsaWNhdGUgLWRpc2FibGUtb3V0cHV0CisKK2RlZmluZSBpMzIgQHRlc3QoaTEgJWMs
IGkzMiAlWCwgaTMyICVZKSB7CisgICAgICAgYnIgbGFiZWwgJUwKK0w6ICAgICAgICAgICAgIDsg
cHJlZHMgPSAlRiwgJTAKKyAgICAgICAlQSA9IGFkZCBpMzIgJVgsICVZICAgICAgICAgICAgIDsg
PGkzMj4gWyN1c2VzPTFdCisgICAgICAgYnIgaTEgJWMsIGxhYmVsICVULCBsYWJlbCAlRgorRjog
ICAgICAgICAgICAgOyBwcmVkcyA9ICVMCisgICAgICAgYnIgaTEgJWMsIGxhYmVsICVMLCBsYWJl
bCAlVAorVDogICAgICAgICAgICAgOyBwcmVkcyA9ICVGLCAlTAorICAgICAgICVWID0gcGhpIGkz
MiBbICVBLCAlTCBdLCBbIDAsICVGIF0gICAgICAgICAgICAgIDsgPGkzMj4gWyN1c2VzPTFdCisg
ICAgICAgcmV0IGkzMiAlVgorfQorCkluZGV4OiB0ZXN0L1RyYW5zZm9ybXMvVGFpbER1cC9YODYv
aWYtdGFpbC1kdXAubGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvWDg2
L2lmLXRhaWwtZHVwLmxsCShyZXZpc2lvbiAwKQorKysgdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAv
WDg2L2lmLXRhaWwtZHVwLmxsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKzsgUlVO
OiBvcHQgPCAlcyAtdGFpbGR1cGxpY2F0ZSB8IFwKKzsgUlVOOiAgIGxsYyAtbWFyY2g9eDg2IC1v
ICV0Cis7IFJVTjogZ3JlcCBqZSAldCB8IGNvdW50IDQKKzsgUlVOOiBub3QgZ3JlcCBqbXAgJXQK
KzsgRU5ELgorOyBUaGlzIHNob3VsZCBoYXZlIG5vIHVuY29uZGl0aW9uYWwganVtcHMgaW4gaXQu
ICBUaGUgQyBzb3VyY2UgaXM6CisKKzt2b2lkIGZvbyhpbnQgYywgaW50KiBQKSB7Cis7ICBpZiAo
YyAmIDEpICBQWzBdID0gMTsKKzsgIGlmIChjICYgMikgIFBbMV0gPSAxOworOyAgaWYgKGMgJiA0
KSAgUFsyXSA9IDE7Cis7ICBpZiAoYyAmIDgpICBQWzNdID0gMTsKKzt9CisKK2RlZmluZSB2b2lk
IEBmb28oaTMyICVjLCBpMzIqICVQKSB7CitlbnRyeToKKyAgICAgICAldG1wMSA9IGFuZCBpMzIg
JWMsIDEgICAgICAgICAgIDsgPGkzMj4gWyN1c2VzPTFdCisgICAgICAgJXRtcDEudXBncmQuMSA9
IGljbXAgZXEgaTMyICV0bXAxLCAwICAgICAgICAgICAgOyA8aTE+IFsjdXNlcz0xXQorICAgICAg
IGJyIGkxICV0bXAxLnVwZ3JkLjEsIGxhYmVsICVjb25kX25leHQsIGxhYmVsICVjb25kX3RydWUK
K2NvbmRfdHJ1ZTogICAgICAgICAgICAgOyBwcmVkcyA9ICVlbnRyeQorICAgICAgIHN0b3JlIGkz
MiAxLCBpMzIqICVQCisgICAgICAgYnIgbGFiZWwgJWNvbmRfbmV4dAorY29uZF9uZXh0OiAgICAg
ICAgICAgICA7IHByZWRzID0gJWNvbmRfdHJ1ZSwgJWVudHJ5CisgICAgICAgJXRtcDUgPSBhbmQg
aTMyICVjLCAyICAgICAgICAgICA7IDxpMzI+IFsjdXNlcz0xXQorICAgICAgICV0bXA1LnVwZ3Jk
LjIgPSBpY21wIGVxIGkzMiAldG1wNSwgMCAgICAgICAgICAgIDsgPGkxPiBbI3VzZXM9MV0KKyAg
ICAgICBiciBpMSAldG1wNS51cGdyZC4yLCBsYWJlbCAlY29uZF9uZXh0MTAsIGxhYmVsICVjb25k
X3RydWU2Citjb25kX3RydWU2OiAgICAgICAgICAgIDsgcHJlZHMgPSAlY29uZF9uZXh0CisgICAg
ICAgJXRtcDggPSBnZXRlbGVtZW50cHRyIGkzMiogJVAsIGkzMiAxICAgICAgICAgICAgOyA8aTMy
Kj4gWyN1c2VzPTFdCisgICAgICAgc3RvcmUgaTMyIDEsIGkzMiogJXRtcDgKKyAgICAgICBiciBs
YWJlbCAlY29uZF9uZXh0MTAKK2NvbmRfbmV4dDEwOiAgICAgICAgICAgOyBwcmVkcyA9ICVjb25k
X3RydWU2LCAlY29uZF9uZXh0CisgICAgICAgJXRtcDEzID0gYW5kIGkzMiAlYywgNCAgICAgICAg
ICA7IDxpMzI+IFsjdXNlcz0xXQorICAgICAgICV0bXAxMy51cGdyZC4zID0gaWNtcCBlcSBpMzIg
JXRtcDEzLCAwICAgICAgICAgIDsgPGkxPiBbI3VzZXM9MV0KKyAgICAgICBiciBpMSAldG1wMTMu
dXBncmQuMywgbGFiZWwgJWNvbmRfbmV4dDE4LCBsYWJlbCAlY29uZF90cnVlMTQKK2NvbmRfdHJ1
ZTE0OiAgICAgICAgICAgOyBwcmVkcyA9ICVjb25kX25leHQxMAorICAgICAgICV0bXAxNiA9IGdl
dGVsZW1lbnRwdHIgaTMyKiAlUCwgaTMyIDIgICAgICAgICAgIDsgPGkzMio+IFsjdXNlcz0xXQor
ICAgICAgIHN0b3JlIGkzMiAxLCBpMzIqICV0bXAxNgorICAgICAgIGJyIGxhYmVsICVjb25kX25l
eHQxOAorY29uZF9uZXh0MTg6ICAgICAgICAgICA7IHByZWRzID0gJWNvbmRfdHJ1ZTE0LCAlY29u
ZF9uZXh0MTAKKyAgICAgICAldG1wMjEgPSBhbmQgaTMyICVjLCA4ICAgICAgICAgIDsgPGkzMj4g
WyN1c2VzPTFdCisgICAgICAgJXRtcDIxLnVwZ3JkLjQgPSBpY21wIGVxIGkzMiAldG1wMjEsIDAg
ICAgICAgICAgOyA8aTE+IFsjdXNlcz0xXQorICAgICAgIGJyIGkxICV0bXAyMS51cGdyZC40LCBs
YWJlbCAlcmV0dXJuLCBsYWJlbCAlY29uZF90cnVlMjIKK2NvbmRfdHJ1ZTIyOiAgICAgICAgICAg
OyBwcmVkcyA9ICVjb25kX25leHQxOAorICAgICAgICV0bXAyNCA9IGdldGVsZW1lbnRwdHIgaTMy
KiAlUCwgaTMyIDMgICAgICAgICAgIDsgPGkzMio+IFsjdXNlcz0xXQorICAgICAgIHN0b3JlIGkz
MiAxLCBpMzIqICV0bXAyNAorICAgICAgIHJldCB2b2lkCityZXR1cm46ICAgICAgICAgICAgICAg
IDsgcHJlZHMgPSAlY29uZF9uZXh0MTgKKyAgICAgICByZXQgdm9pZAorfQpJbmRleDogdGVzdC9U
cmFuc2Zvcm1zL1RhaWxEdXAvYmFzaWN0ZXN0LmxsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QvVHJhbnNm
b3Jtcy9UYWlsRHVwL2Jhc2ljdGVzdC5sbAkocmV2aXNpb24gMCkKKysrIHRlc3QvVHJhbnNmb3Jt
cy9UYWlsRHVwL2Jhc2ljdGVzdC5sbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACis7
IFJVTjogb3B0IDwgJXMgLXRhaWxkdXBsaWNhdGUgLWRpc2FibGUtb3V0cHV0CisKK2RlY2xhcmUg
dm9pZCBAX19tYWluKCkKKworZGVmaW5lIGkzMiBAbWFpbigpIHsKK2VudHJ5OgorICAgICAgIGNh
bGwgdm9pZCBAX19tYWluKCApCisgICAgICAgYnIgbGFiZWwgJWxvb3BlbnRyeQorbG9vcGVudHJ5
OiAgICAgICAgICAgICA7IHByZWRzID0gJW5vX2V4aXQsICVlbnRyeQorICAgICAgICVpLjAgPSBw
aGkgaTMyIFsgJWluYywgJW5vX2V4aXQgXSwgWyAwLCAlZW50cnkgXSAgICAgICAgICAgICAgICA7
IDxpMzI+IFsjdXNlcz0zXQorICAgICAgICV0bXAuMSA9IGljbXAgc2xlIGkzMiAlaS4wLCA5OSAg
ICAgICAgICA7IDxpMT4gWyN1c2VzPTFdCisgICAgICAgYnIgaTEgJXRtcC4xLCBsYWJlbCAlbm9f
ZXhpdCwgbGFiZWwgJXJldHVybgorbm9fZXhpdDogICAgICAgICAgICAgICA7IHByZWRzID0gJWxv
b3BlbnRyeQorICAgICAgICV0bXAuNTEgPSBjYWxsIGkzMiBAbWFpbiggKSAgICAgICAgICAgICA7
IDxpMzI+IFsjdXNlcz0wXQorICAgICAgICVpbmMgPSBhZGQgaTMyICVpLjAsIDEgICAgICAgICAg
OyA8aTMyPiBbI3VzZXM9MV0KKyAgICAgICBiciBsYWJlbCAlbG9vcGVudHJ5CityZXR1cm46ICAg
ICAgICAgICAgICAgIDsgcHJlZHMgPSAlbG9vcGVudHJ5CisgICAgICAgcmV0IGkzMiAlaS4wCit9
CisKSW5kZXg6IHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVwL2Jhc2ljdGVzdDIubGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gdGVzdC9UcmFuc2Zvcm1zL1RhaWxEdXAvYmFzaWN0ZXN0Mi5sbAkocmV2aXNpb24gMCkK
KysrIHRlc3QvVHJhbnNmb3Jtcy9UYWlsRHVwL2Jhc2ljdGVzdDIubGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNSBAQAorOyBSVU46IG9wdCA8ICVzIC10YWlsZHVwbGljYXRlIC1kaXNhYmxl
LW91dHB1dAorCitkZWZpbmUgdm9pZCBAYWIoKSB7CitlbnRyeToKKyAgICAgICBiciBsYWJlbCAl
bG9vcGVudHJ5LjUKK2xvb3BlbnRyeS41OiAgICAgICAgICAgOyBwcmVkcyA9ICVub19leGl0LjUs
ICVlbnRyeQorICAgICAgICVwb3NjbnQuMSA9IHBoaSBpNjQgWyAwLCAlZW50cnkgXSwgWyAldG1w
LjI4OSwgJW5vX2V4aXQuNSBdICAgICAgICAgICAgIDsgPGk2ND4gWyN1c2VzPTFdCisgICAgICAg
JXRtcC4yODkgPSBhc2hyIGk2NCAlcG9zY250LjEsIDEgICAgICAgICAgICAgICAgOyA8aTY0PiBb
I3VzZXM9MV0KKyAgICAgICBiciBpMSBmYWxzZSwgbGFiZWwgJW5vX2V4aXQuNSwgbGFiZWwgJWxv
b3BleGl0LjUKK25vX2V4aXQuNTogICAgICAgICAgICAgOyBwcmVkcyA9ICVsb29wZW50cnkuNQor
ICAgICAgIGJyIGxhYmVsICVsb29wZW50cnkuNQorbG9vcGV4aXQuNTogICAgICAgICAgICA7IHBy
ZWRzID0gJWxvb3BlbnRyeS41CisgICAgICAgcmV0IHZvaWQKK30KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>