#!/bin/bash
MBS_ORIGIN=$(pwd)
MBS_DIR=
PATH=/bin:/usr/bin:/sbin:/usr/sbin
if [ ! $(whoami) = 'root' ]; then
	echo "You must be 'root' to run this command"
	exit 1
fi
cd "$(dirname "$0")"
MBS_DIR=$(pwd)
echo -e "Starting 'install_ac_integrity_1.0.3' installation at $(date '+%Y-%m-%d %T')"
n=0
declare -a UNDO
function log_undo {
	UNDO[n]="$@"
	((n++))
}
function rollback {
	echo 'Undoing installation.' >&2
	for x in "${UNDO[@]}"; do
		$x
	done
	echo 'Installation terminated.' >&2
	exit 1
}

if ! mkdir -p "/etc/ac_integrity"; then
rollback
fi
log_undo 'rm -rf "/etc/ac_integrity"'
chown root:root "/etc/ac_integrity"
chmod 0700 "/etc/ac_integrity"
echo "Created directory '/etc/ac_integrity'"
if ! echo "W1VuaXRdCkRlc2NyaXB0aW9uPUFDIEludGVncml0eQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApS
ZW1haW5BZnRlckV4aXQ9dHJ1ZQpFeGVjU3RhcnQ9L3Zhci9hY2ludGVncml0eS9hY2lzdGFydApF
eGVjU3RvcD0vdmFyL2FjaW50ZWdyaXR5L2FjaXN0b3AKCltJbnN0YWxsXQpSZXF1aXJlZEJ5PW11
bHRpLXVzZXIudGFyZ2V0Cg==" | base64 -di - > "/etc/systemd/system/ac_integrity.service"; then
	rollback
fi
log_undo 'rm -f "/etc/systemd/system/ac_integrity.service"'
chown root:root "/etc/systemd/system/ac_integrity.service"
chmod 0700 "/etc/systemd/system/ac_integrity.service"
echo -e "Created file '/etc/systemd/system/ac_integrity.service'"
if ! echo "IyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIEFDLUludGVncml0eQoKIyBGSUxFL0RJUkVDVE9SWQkJ
CQkJQ0xBU1MKL2V0Yy9zeXNjb25maWcJCQkJCQljcml0aWNhbAovZXRjL3N5c3RlbWQJCQkJCQlj
cml0aWNhbAovcm9vdC8uYmFzaF9wcm9maWxlCQkJCQljcml0aWNhbAovYm9vdAkJCQkJCQljcml0
aWNhbAovZXRjL3NzaAkJCQkJCXNldmVyZQovc2JpbgkJCQkJCQlzZXZlcmUKL3Vzci9zYmluCQkJ
CQkJc2V2ZXJlCi9iaW4JCQkJCQkJc2V2ZXJlCi91c3IvYmluCQkJCQkJc2V2ZXJlCg==" | base64 -di - > "/etc/ac_integrity/lists.conf"; then
	rollback
fi
log_undo 'rm -f "/etc/ac_integrity/lists.conf"'
chown root:root "/etc/ac_integrity/lists.conf"
chmod 0600 "/etc/ac_integrity/lists.conf"
echo -e "Created file '/etc/ac_integrity/lists.conf'"
if ! mkdir -p "/etc/ac_integrity/classes"; then
rollback
fi
log_undo 'rm -rf "/etc/ac_integrity/classes"'
chown root:root "/etc/ac_integrity/classes"
chmod 0700 "/etc/ac_integrity/classes"
echo "Created directory '/etc/ac_integrity/classes'"
if ! mkdir -p "/var/acintegrity"; then
rollback
fi
log_undo 'rm -rf "/var/acintegrity"'
chown root:root "/var/acintegrity"
chmod 0700 "/var/acintegrity"
echo "Created directory '/var/acintegrity'"
if ! mkdir -p "/var/tmp/acintegrity"; then
rollback
fi
log_undo 'rm -rf "/var/tmp/acintegrity"'
chown root:root "/var/tmp/acintegrity"
chmod 0700 "/var/tmp/acintegrity"
echo "Created directory '/var/tmp/acintegrity'"
if ! echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQUMtSW50ZWdyaXR5IGV2ZW50IGNsYXNzIGRlZmluaXRp
b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKCkNMQVNTPWNyaXRpY2FsCkxPRz1UUlVFCkVNQUlMPVZBTDEKTUFJTFRPPVZBTDIK
RVhFQ1VURT0KSEFMVD1GQUxTRQojIENhbiBiZSBNRDUsIFNIQTEsIFNIQTIyNCwgU0hBMjU2LCBT
SEEzODQgb3IgU0hBNTEyCkFMR09SSFlUSE09U0hBMQpPTl9CT09UPVRSVUUKIyBDYW4gYmUgJzMw
TUlOJywgJ0hPVVInLCAnREFJTFknIG9yICdORVZFUicKRlJFUVVFTkNZPURBSUxZCg==" | base64 -di - > "/var/tmp/acintegrity/crit_temp"; then
	rollback
fi
log_undo 'rm -f "/var/tmp/acintegrity/crit_temp"'
chown root:root "/var/tmp/acintegrity/crit_temp"
chmod 0700 "/var/tmp/acintegrity/crit_temp"
echo -e "Created file '/var/tmp/acintegrity/crit_temp'"
if ! echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQUMtSW50ZWdyaXR5IGV2ZW50IGNsYXNzIGRlZmluaXRp
b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKCkNMQVNTPXNldmVyZQpMT0c9VFJVRQpFTUFJTD1WQUwxCk1BSUxUTz1WQUwyCkVY
RUNVVEU9CkhBTFQ9RkFMU0UKIyBDYW4gYmUgTUQ1LCBTSEExLCBTSEEyMjQsIFNIQTI1NiwgU0hB
Mzg0IG9yIFNIQTUxMgpBTEdPUkhZVEhNPVNIQTEKT05fQk9PVD1UUlVFCiMgQ2FuIGJlICczME1J
TicsICdIT1VSJywgJ0RBSUxZJyBvciAnTkVWRVInCkZSRVFVRU5DWT1ORVZFUgo=" | base64 -di - > "/var/tmp/acintegrity/sevr_temp"; then
	rollback
fi
log_undo 'rm -f "/var/tmp/acintegrity/sevr_temp"'
chown root:root "/var/tmp/acintegrity/sevr_temp"
chmod 0700 "/var/tmp/acintegrity/sevr_temp"
echo -e "Created file '/var/tmp/acintegrity/sevr_temp'"
if ! echo "IyEvYmluL2Jhc2gKIwojICAgICAgTkFNRTogQUMgSW50ZWdyaXR5IHVzZXIgaW50ZXJmYWNlCiMg
Q09QWVJJR0hUOiBDb3B5cmlnaHQgKEMpMjAwOC0yMDIxIEpvZXkgRG9iaWFzCiMgICBWRVJTSU9O
OiAxLjAuMwojICAgIEFVVEhPUjogSm9leSBEb2JpYXMKIyAgICAgIERBVEU6IDIwMTYtMDYtMDQK
IyAgTU9ESUZJRUQ6IDIwMTgtMDEtMjMKIyAgICAgTk9URVM6IEFsbG93cyB1c2VyIHRvIHVwZGF0
ZSBhbmQgY29uZmlndXJlIEFDIEludGVncml0eS4gSXQgYWxzbyBwcm92aWRlcwojICAgICAgICAg
ICAgYW4gaW50ZXJmYWNlIGZvciBjaGVja2luZyB0aGUgZGF0YWJhc2VzIGluIHRoZSBzYW1lIHdh
eSB0aGUKIyAgICAgICAgICAgIGF1dG9tYXRlZCBjcm9uIGpvYnMgZG8uIEhvd2V2ZXIsIHRoZXJl
IGlzIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlCiMgICAgICAgICAgICBkZWNyZWFzZSB3aGVuIHJ1
bm5pbmcgdGhpcyBzY3JpcHQgZHVlIHRvIHRoZSBleHRyYSBjb2RlIHJlcXVpcmVkCiMgICAgICAg
ICAgICBmb3IgaHVtYW4gcmVhZGFibGUgb3V0cHV0IGFuZCBjaGVja2luZy4KIwoKIyBERUNMQVJF
IENPTlNUQU5UUwoKTkFNRT0nQUMgSW50ZWdyaXR5JwpNT0Q9JChob3N0bmFtZSkKVkVSPTEuMC4z
CkVNQUlMPWpvZXktZG9iaWFzQGFzaWFjb210ZWsuY29tClRISVM9JDAKQ09ORj0vZXRjL2FjX2lu
dGVncml0eQpDTEFTU19ESVI9JENPTkYvY2xhc3NlcwpURU1QX0RJUj0vdmFyL3RtcC9hY2ludGVn
cml0eQpFUlI9JFRFTVBfRElSL2Vycm9yLnR4dApEQVRBQkFTRT0vdmFyL2FjaW50ZWdyaXR5ClBB
VEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KVklPTEFUSU9OPScnClZFUkJPU0U9MAoK
IyBERUNMQVJFIFBST0NFU1NJTkcgRlVOQ1RJT05TCgojIFNlbmRzIGFuIGVycm9yIGxvZyB0byB0
aGUgYXBwcm9wcmlhdGUgcGxhY2UKZnVuY3Rpb24gc2VuZF9sb2cgewoJaWYgWyAtcyAkRVJSIF07
IHRoZW4KCQlsb2dnZXIgLXAgYXV0aC5lcnIgLWYgJEVSUgoJCXJldHVybiAwCgllbHNlCgkJcmV0
dXJuIDEKCWZpCn0KCiMgbWFuYWdlIG1lc3NhZ2VzIGFzIHNjcmVlbiBvdXRwdXQgb3Igc2Vydmlj
ZSBzdGF0dXMKZnVuY3Rpb24gbWVzc2FnZSB7CQoJY2FzZSAkMSBpbgoJCXdhcm4gKQoJCQllY2hv
IC1lICIkMiIgPj4gJEVSUgoJCQllY2hvIC1lICIkMiIgPiYyCgkJCTs7CgkJZmFpbCApCgkJCWVj
aG8gLWUgIiQyIiA+PiAkRVJSCgkJCWVjaG8gLWUgIiQyIiA+JjIKCQkJc2VuZF9sb2cKCQkJc3Rh
cnRfY2hlY2tpbmcgdW5wYXVzZQoJCQlybSAtcmYgJFRFTVBfRElSCgkJCXJtIC1mICREQVRBQkFT
RS8ucnVuCgkJCWV4aXQgNQoJCQk7OwoJCWluZm8gKQoJCQllY2hvIC1lICIkMiIKCQkJOzsKCQlm
aW5pc2ggKQoJCQlpZiBzZW5kX2xvZzsgdGhlbgoJCQkJZWNobyAtZSAiVGhlcmUgd2VyZSBlcnJv
cnMuXG4kKGNhdCAkRVJSKSIKCQkJZmkKCQkJZWNobyAtZSAiJDIiCgkJCTs7CgkJYWJvcnQgKQoJ
CQllY2hvIC1lICIkMiIKCQkJcm0gLXJmICRURU1QX0RJUgoJCQlleGl0IDEKCQkJOzsKCQl2ZXJi
b3NlICkKCQkJaWYgKChWRVJCT1NFPT0xKSk7IHRoZW4KCQkJCWVjaG8gLWUgIiQyIgoJCQlmaQoJ
CQk7OwoJZXNhYwp9CgojIFJldHVybnMgVFJVRSBpZiBzdXBwbGllZCBsaW5lIGluIG5vdCBhIGNv
bW1lbnQKZnVuY3Rpb24gdmFsaWRhdGVfbGluZSB7CglMTj0kQAoJWyAhICIkKGVjaG8gJExOIHwg
Z3JlcCAtRSAnXiMnKSIgPSAiJExOIiBdCn0KCiMgUmV0dXJucyBUUlVFIGlmIHN1cHBsaWVkIGVt
YWlsIGlzIHZhaWQgZm9ybWF0CmZ1bmN0aW9uIHZhbGlkYXRlX2VtYWlsIHsKCWVjaG8gIiQxIiB8
IGdyZXAgLXFpRSAnXltbOmFsbnVtOl1fXC1cLl0rQChbWzphbG51bTpdX1wtXStcLikrW1s6YWxw
aGE6XV17MiwzfShcLltbOmFscGhhOl1dezJ9KT8kJwp9CgojIExvYWQgY2xhc3MgZmlsZXMKZnVu
Y3Rpb24gbG9hZF9jb25maWcgewoJbG9jYWwgbj0kMgoJbG9jYWwgVkFSCglsb2NhbCBWQUwKCWxv
Y2FsIFJFUVVJUkVEPTgKCWxvY2FsIFJFUVVJUkVfTUFJTFRPPTAKCWxvY2FsIFJFUVVJUkVfQ0xB
U1M9MQoJbG9jYWwgUkVRVUlSRV9MT0c9MQoJbG9jYWwgUkVRVUlSRV9FTUFJTD0xCglsb2NhbCBT
RVRfRU1BSUw9MAoJbG9jYWwgUkVRVUlSRV9FWEVDVVRFPTEKCWxvY2FsIFJFUVVJUkVfSEFMVD0x
Cglsb2NhbCBSRVFVSVJFX09OX0JPT1Q9MQoJbG9jYWwgUkVRVUlSRV9BTEdPUkhZVEhNPTEKCWxv
Y2FsIFJFUVVJUkVfRlJFUVVFTkNZPTEKCXsKCW1lc3NhZ2UgdmVyYm9zZSAiTG9hZGluZyBjbGFz
cyBjb25maWd1cmF0aW9uIGZyb20gJDEiCgl3aGlsZSByZWFkOyBkbwoJCWlmIHZhbGlkYXRlX2xp
bmUgJFJFUExZOyB0aGVuCgkJCVZBUj0kKGVjaG8gJFJFUExZIHwgY3V0IC1kPSAtZjEpCgkJCVZB
TD0kKGVjaG8gJFJFUExZIHwgY3V0IC1kPSAtZjIpCgkJCWNhc2UgJFZBUiBpbgoJCQkJQ0xBU1Mg
KQoJCQkJCWlmIFsgISAiJChiYXNlbmFtZSAkVkFMKSIgPSAiJChiYXNlbmFtZSAkMSkiIF07IHRo
ZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgSW5jb3JyZWN0IGNsYXNzIGRlY2xhcmF0aW9u
IGluICR7MX0uIgoJCQkJCWVsaWYgKChSRVFVSVJFX0NMQVNTPT0wKSk7IHRoZW4KCQkJCQkJbWVz
c2FnZSBmYWlsICJFUlJPUiEgRHVwbGljYXRlIGNsYXNzIGRlY2xhcmF0aW9uIGluICR7MX0uIgoJ
CQkJCWZpCgkJCQkJQ0xBU1NfREVGX0NMQVNTWyRuXT0kVkFMCgkJCQkJKChSRVFVSVJFRC0tKSkK
CQkJCQlSRVFVSVJFX0NMQVNTPTAKCQkJCQk7OwoJCQkJTE9HICkKCQkJCQlpZiAoKFJFUVVJUkVf
TE9HPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRHVwbGljYXRlIExPRyBk
aXJlY3RpdmUgaW4gJHsxfS4iCgkJCQkJZWxpZiBbICQoZWNobyAkVkFMIHwgZ3JlcCAtRWMgJyhU
UlVFKXwoRkFMU0UpJykgPSAwIF07IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgTE9H
IGRpcmVjdGl2ZSBjYW4gb25seSBiZSAnVFJVRScgb3IgJ0ZBTFNFJy4iCgkJCQkJZmkKCQkJCQlD
TEFTU19ERUZfTE9HWyRuXT0kVkFMCgkJCQkJKChSRVFVSVJFRC0tKSkKCQkJCQlSRVFVSVJFX0xP
Rz0wCgkJCQkJOzsKCQkJCUVNQUlMICkKCQkJCQlpZiAoKFJFUVVJUkVfRU1BSUw9PTApKTsgdGhl
bgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsaWNhdGUgRU1BSUwgZGlyZWN0aXZlIGlu
ICR7MX0uIgoJCQkJCWVsaWYgISBlY2hvICRWQUwgfCBncmVwIC1xRSAnKFRSVUUpfChGQUxTRSkn
OyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIEVNQUlMIGRpcmVjdGl2ZSBjYW4gb25s
eSBiZSAnVFJVRScgb3IgJ0ZBTFNFJy4iCgkJCQkJZmkKCQkJCQlpZiBbICIkVkFMIiA9ICdUUlVF
JyBdICYmICgoU0VUX0VNQUlMPT0wKSk7IHRoZW4KCQkJCQkJUkVRVUlSRV9NQUlMVE89MQoJCQkJ
CQkoKFJFUVVJUkVEKyspKQoJCQkJCWZpIAoJCQkJCUNMQVNTX0RFRl9FTUFJTFskbl09JFZBTAoJ
CQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9FTUFJTD0wCgkJCQkJOzsKCQkJCU1BSUxU
TyApCgkJCQkJaWYgKChTRVRfRU1BSUw9PTEpKTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVS
Uk9SISBEdXBsaWNhdGUgTUFJTFRPIGRpcmVjdGl2ZSBpbiAkezF9LiIKCQkJCQlmaQoJCQkJCWlm
ICgoUkVRVUlSRV9NQUlMVE89PTEpKSAmJiBbICIkVkFMIiA9ICcnIF07IHRoZW4KCQkJCQkJbWVz
c2FnZSBmYWlsICJFUlJPUiEgTWlzc2luZyBlbWFpbCBhZGRyZXNzIGluICR7MX0uIgoJCQkJCWZp
CgkJCQkJaWYgWyAhICIkVkFMIiA9ICcnIF07IHRoZW4KCQkJCQkJaWYgdmFsaWRhdGVfZW1haWwg
JFZBTDsgdGhlbgoJCQkJCQkJQ0xBU1NfREVGX01BSUxUT1skbl09JFZBTAoJCQkJCQllbHNlCgkJ
CQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBFbWFpbCBhZGRyZXNzIGZvcm1hdCBpcyBub3QgdmFs
aWQgaW4gJHsxfS4iCgkJCQkJCWZpCgkJCQkJZmkKCQkJCQlpZiAoKFJFUVVJUkVfTUFJTFRPPT0x
KSk7IHRoZW4KCQkJCQkJKChSRVFVSVJFRC0tKSkKCQkJCQkJUkVRVUlSRV9NQUlMVE89MAoJCQkJ
CWZpCgkJCQkJOzsKCQkJCUVYRUNVVEUgKQoJCQkJCWlmICgoUkVRVUlSRV9FWEVDVVRFPT0wKSk7
IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRHVwbGNhdGUgRVhFQ1VURSBkaXJlY3Rp
dmUgaW4gJHsxfS4iCgkJCQkJZmkKCQkJCQlWQUxGSUxFPSQoZWNobyAkVkFMIHwgY3V0IC1kJyAn
IC1mMSkKCQkJCQlpZiBbIC1mICRWQUxGSUxFIF0gJiYgWyAhIC14ICRWQUxGSUxFIF07IHRoZW4K
CQkJCQkJbWVzc2FnZSB3YXJuICJXQVJOSU5HISAnJHtWQUxGSUxFfScgY2Fubm90IGJlIGZvdW5k
IGluICR7MX0uIgoJCQkJCWZpCgkJCQkJQ0xBU1NfREVGX0VYRUNVVEVbJG5dPSRWQUwKCQkJCQko
KFJFUVVJUkVELS0pKQoJCQkJCVJFUVVJUkVfRVhFQ1VURT0wCgkJCQkJOzsKCQkJCUhBTFQgKQoJ
CQkJCWlmICgoUkVRVUlSRV9IQUxUPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJP
UiEgRHVwbGljYXRlIEhBTFQgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVsaWYgISBlY2hvICRW
QUwgfCBncmVwIC1xRSAnKFRSVUUpfChGQUxTRSknOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAi
RVJST1IhIEhBTFQgZGlyZWN0aXZlIGNhbiBvbmx5IGJlICdUUlVFJyBvciAnRkFMU0UnLiIKCQkJ
CQlmaQoJCQkJCUNMQVNTX0RFRl9IQUxUWyRuXT0kVkFMCgkJCQkJKChSRVFVSVJFRC0tKSkKCQkJ
CQlSRVFVSVJFX0hBTFQ9MAoJCQkJCTs7CgkJCQlBTEdPUkhZVEhNICkKCQkJCQlpZiAoKFJFUVVJ
UkVfQUxHT1JIWVRITT09MCkpOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIER1cGxp
Y2F0ZSBBTEdPUkhZVEhNIGRpcmVjdGl2ZSBpbiAkezF9LiIKCQkJCQlmaQoJCQkJCWNhc2UgJFZB
TCBpbgoJCQkJCQlNRDUgKQoJCQkJCQkJVkFMPW1kNXN1bQoJCQkJCQkJQllURVM9MzIKCQkJCQkJ
CTs7CgkJCQkJCVNIQTEgKQoJCQkJCQkJVkFMPXNoYTFzdW0KCQkJCQkJCUJZVEVTPTQwCgkJCQkJ
CQk7OwoJCQkJCQlTSEEyMjQgKQoJCQkJCQkJVkFMPXNoYTIyNHN1bQoJCQkJCQkJQllURVM9NTYK
CQkJCQkJCTs7CgkJCQkJCVNIQTI1NiApCgkJCQkJCQlWQUw9c2hhMjU2c3VtCgkJCQkJCQlCWVRF
Uz02NAoJCQkJCQkJOzsKCQkJCQkJU0hBMzg0ICkKCQkJCQkJCVZBTD1zaGEzODRzdW0KCQkJCQkJ
CUJZVEVTPTk2CgkJCQkJCQk7OwoJCQkJCQlTSEE1MTIgKQoJCQkJCQkJVkFMPXNoYTUxMnN1bQoJ
CQkJCQkJQllURVM9MTI4CgkJCQkJCQk7OwoJCQkJCQkqICkKCQkJCQkJCW1lc3NhZ2UgZmFpbCAi
RVJST1IhIEludmFsaWQgY2hlY2tzdW0gdHlwZSBmb3IgQUxHT1JIWVRITSBkaXJlY3RpdmUgaW4g
JHsxfS4KTXVzdCBiZSAnTUQ1JywgJ1NIQTEnLCAnU0hBMjI0JywgJ1NIQTI1NicsICdTSEEzODQn
IG9yICdTSEE1MTInLiIKCQkJCQkJCTs7CgkJCQkJZXNhYwoJCQkJCUNMQVNTX0RFRl9BTEdPUkhZ
VEhNWyRuXT0kVkFMCgkJCQkJQ0xBU1NfREVGX0JZVEVTWyRuXT0kQllURVMKCQkJCQkoKFJFUVVJ
UkVELS0pKQoJCQkJCVJFUVVJUkVfQUxHT1JIWVRITT0wCgkJCQkJOzsKCQkJCUZSRVFVRU5DWSAp
CgkJCQkJaWYgKChSRVFVSVJFX0ZSRVFVRU5DWT09MCkpOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFp
bCAiRVJST1IhIER1cGxpY2F0ZSBGUkVRVUVOQ1kgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVs
aWYgWyAhICIkVkFMIiA9ICczME1JTicgXSAmJiBbICEgIiRWQUwiID0gJ0hPVVInIF0gJiYgWyAh
ICIkVkFMIiA9ICdEQUlMWScgXSAmJiBbICEgIiRWQUwiID0gJ05FVkVSJyBdOyB0aGVuCgkJCQkJ
CW1lc3NhZ2UgZmFpbCAiRVJST1IhIEludmFsaWQgRlJFUVVFTkNZIGRpcmVjdGl2ZSBpbiAkezF9
LgpNdXN0IGJlICczME1JTicsICdIT1VSJywgJ0RBSUxZJyBvciAnTkVWRVInLiIKCQkJCQlmaQoJ
CQkJCUNMQVNTX0RFRl9GUkVRVUVOQ1lbJG5dPSRWQUwKCQkJCQkoKFJFUVVJUkVELS0pKQoJCQkJ
CVJFUVVJUkVfRlJFUVVFTkNZPTAKCQkJCQk7OwoJCQkJT05fQk9PVCApCgkJCQkJaWYgKChSRVFV
SVJFX09OX0JPT1Q9PTApKTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsaWNh
dGUgT05fQk9PVCBkaXJlY3RpdmUgaW4gJHsxfS4iCgkJCQkJZWxpZiAhIGVjaG8gJFZBTCB8IGdy
ZXAgLXFFICcoVFJVRSl8KEZBTFNFKSc7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEg
T05fQk9PVCBkaXJlY3RpdmUgY2FuIG9ubHkgYmUgJ1RSVUUnIG9yICdGQUxTRScuIgoJCQkJCWZp
CgkJCQkJQ0xBU1NfREVGX09OX0JPT1RbJG5dPSRWQUwKCQkJCQkoKFJFUVVJUkVELS0pKQoJCQkJ
CVJFUVVJUkVfT05fQk9PVD0wCgkJCQkJOzsKCQkJCSogKQoJCQkJCW1lc3NhZ2UgZmFpbCAiRVJS
T1IhIFVua25vd24gZGlyZWN0aXZlICcke1ZBUn0nIGluICR7MX0uIgoJCQkJCTs7CgkJCWVzYWMK
CQlmaQoJZG9uZQoJfSA8ICQxCglpZiAoKFJFUVVJUkVEIT0wKSk7IHRoZW4KCQltZXNzYWdlIGZh
aWwgIkVSUk9SISBJbmNvbXBsZXRlIGNsYXNzIGRlZmluaXRpb24gaW4gJyR7MX0nLiIKCWZpCglt
ZXNzYWdlIHZlcmJvc2UgIkxvYWRlZCBjb25maWd1cmF0aW9uIGNsYXNzICcke0NMQVNTX0RFRl9D
TEFTU1tuXX0nCglMT0dHSU5HPSR7Q0xBU1NfREVGX0xPR1tuXX0KCU1BSUwgVE89JHtDTEFTU19E
RUZfTUFJTFRPW25dfQoJRVhFQ1VURSBPTiBWSU9MQVRJT049JHtDTEFTU19ERUZfRVhFQ1VURVtu
XX0KCVNZU1RFTSBIQUxUIE9OIFZJT0xBVElPTj0ke0NMQVNTX0RFRl9IQUxUW25dfQoJQ0hFQ0tT
VU0gQUxHT1JIWVRITT0ke0NMQVNTX0RFRl9BTEdPUkhZVEhNW25dfQoJQ0hFQ0sgQVQgQk9PVD0k
e0NMQVNTX0RFRl9PTl9CT09UW25dfQoJQVVUTyBDSEVDSyBGUkVRVUVOQ1k9JHtDTEFTU19ERUZf
RlJFUVVFTkNZW25dfSIKfQoKIyBQcm9jZXNzIGNsYXNzIGZpbGVzCmZ1bmN0aW9uIHByb2Nlc3Nf
Y2xhc3NlcyB7Cglsb2NhbCBDTEFTU0VTCglsb2NhbCB4Cglsb2NhbCBuCglpZiBbICEgLWQgJENM
QVNTX0RJUiBdOyB0aGVuCgkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRGlyZWN0b3J5ICcke0NMQVNT
X0RJUn0nIG5vdCBhY2Nlc3NpYmxlLiIKCWZpCglDTEFTU0VTPSQobHMgJENMQVNTX0RJUiB8IGdy
ZXAgLXZFICdbWzpwdW5jdDpdXScpCglpZiAoKCR7I0NMQVNTRVNbQF19PT0wKSk7IHRoZW4KCQlt
ZXNzYWdlIGZhaWwgIkVSUk9SISBObyBjbGFzc2VzIGRlZmluZWQgaW4gJyR7Q0xBU1NfRElSfScu
IgoJZmkKCW49MAoJZm9yIHggaW4gJHtDTEFTU0VTW0BdfTsgZG8KCQlsb2FkX2NvbmZpZyAkQ0xB
U1NfRElSLyR4ICRuCgkJKChuKyspKQoJZG9uZQp9CgojIExvYWQgdGhlIGZpbGUgbGlzdApmdW5j
dGlvbiBsb2FkX2ZpbGVfbGlzdCB7Cglsb2NhbCBGSUxFPSRURU1QX0RJUi9saXN0Cglsb2NhbCBu
PTAKCWxvY2FsIEZOCgl1bnNldCBDTEFTU19MSVNUCgltZXNzYWdlIHZlcmJvc2UgIkxvYWRpbmcg
Y29uZmlndXJhdGlvbiBsaXN0cyBmcm9tICR7Q09ORn0vbGlzdHMuY29uZi4iCglpZiBbICEgLWYg
JENPTkYvbGlzdHMuY29uZiBdOyB0aGVuCgkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRmlsZSAke0NP
TkZ9L2xpc3RzLmNvbmYgY291bGQgbm90IGJlIGZvdW5kLiIKCWZpCglpZiBbICEgLWYgJENMQVNT
X0RJUi8kMSBdOyB0aGVuCgkJbWVzc2FnZSBmYWlsICJFUlJPUiEgVW5rbm93biBjbGFzcyAnJHsx
fScuIgoJZmkKCWdyZXAgLUUgIl5bXiNdW1s6cHJpbnQ6XV0rW1s6c3BhY2U6XV0rJHsxfVtbOnNw
YWNlOl1dKiQiICRDT05GL2xpc3RzLmNvbmYgfCBjdXQgLWYxID4gJEZJTEUKCXsKCXdoaWxlIHJl
YWQ7IGRvCgkJdGVzdCAtYSAkUkVQTFkKCQlSQz0kPwoJCWlmICgoUkMhPTApKTsgdGhlbgoJCQlt
ZXNzYWdlIGZhaWwgIkVSUk9SISBOb24gZXhpc3RlbnQgZmlsZSBvciBkaXJlY3RvcnkgYXQgJyR7
UkVQTFl9JyBpbiAke0NPTkZ9L2xpc3RzLmNvbmYuIgoJCWZpCgkJQ0xBU1NfTElTVFskbl09JFJF
UExZCgkJKChuKyspKQoJZG9uZQoJfSA8ICRGSUxFCn0KCiMgT3V0cHV0IGhvdyBtYW55IGZpbGVz
IHJlcHJlc2VudCAxJSBvZiB3b3JrbG9hZApmdW5jdGlvbiBpbml0X3Byb2dyZXNzIHsKCWxvY2Fs
IHgKCWxvY2FsIHkKCWxvY2FsIHRvdGFsPTAKIwl0aGlzIGZvciBsb29wIGlzIHNjcmlwdCBzcGVj
aWZpYwoJZm9yIHggaW4gJHtDTEFTU19ERUZfQ0xBU1NbQF19OyBkbwoJCWxvYWRfZmlsZV9saXN0
ICR4CgkJZm9yIHkgaW4gJHtDTEFTU19MSVNUW0BdfTsgZG8KCQkJaWYgWyAtZCAkeSBdOyB0aGVu
CgkJCQl0b3RhbD0kKCh0b3RhbCskKGxzIC1SQSAkeSB8IGdyZXAgLUVjICdeW14vXVtbOnByaW50
Ol1dJykpKQkJCQoJCQllbHNlCgkJCQkoKHRvdGFsKyspKQoJCQlmaQoJCWRvbmUKCWRvbmUKCVBS
T0dSRVNTPSgiJDEiIDAgLTEgMCAwIDApCglpZiAoKHRvdGFsPjEwMCkpOyB0aGVuCgkJUFJPR1JF
U1NbMV09JCgodG90YWwvMTAwKSkKCWVsc2UKCQlQUk9HUkVTU1sxXT0kKCgxMDAvdG90YWwpKQoJ
CVBST0dSRVNTWzRdPTEKCWZpCn0KCiMgVXBkYXRlcyB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yCiMJ
Zm9sbG93aW5nIHZhcmlhYmxlIG11c3QgYmUgc2V0IGJlZm9yZSB1c2luZyBwcm9ncmVzcyBjb3Vu
dGVyCiMJMCB0ZXh0ID0gVGhlIGxpbmUgb2YgdGV4dCB0byBkaXNwbGF5IGF0IGJlZ2luaW5nIG9m
IGVhY2ggdXBkYXRlCiMJMSAxX3BlcmNlbnQgPSBob3cgbWFueSB1bml0cyBlcXVhbCAxIHBlcmNl
bnQgb2YgcHJvZ3Jlc3MKIwkyIGZyYWN0aW9uID0gY3VycmVudCBmcmFjdGlvbiBvZiAxIHBlcmNl
bnQuIElmID0gMV9wZXJjZW50IHByb2dyZXNzIGlzIHVwZGF0ZWQKIwkzIHRvdGFsID0gdG90YWwg
cGVyY2VudGFnZSBjb21wbGV0ZSBzbyBmYXIKIwk0IGJsb2NrID0gZmxhZ3Mgd2hldGhlciBwZXJj
ZW50YWdlIGJsb2NrcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIGZyYWN0aW9ucwojCTUgY29tcGxldGUg
PSB0ZWxscyBmdW5jdGlvbiBub3QgdG8gZG8gYW55dGhpbmcgaWYgY2FsbGVkCiMJUFJPR1JFU1M9
KHN0cjp0ZXh0LCBpbnQ6MV9wZXJjZW50LCBpbnQ6ZnJhY3Rpb24sIGludDp0b3RhbCwgYm9vbDpi
bG9jaywgYm9vbDpjb21wbGV0ZSkKIwkkMSBbcGF1c2UsIHVucGF1c2VdIGNhdXNlcyBpbmRpY2F0
b3IgdG8gaW5zZXJ0IG5ldyBsaW5lIGlmIG5vbiB2ZXJib3NlIGFuZCBzdGFydCBhZ2FpbiAKZnVu
Y3Rpb24gdXBkYXRlX3Byb2dyZXNzIHsKCWxvY2FsIE9VVD0wCglpZiAoKFBST0dSRVNTWzVdPT0x
KSk7IHRoZW4KCQlyZXR1cm4KCWZpCglpZiBbICIkMSIgPSAncGF1c2UnIF07IHRoZW4KCQllY2hv
IC1lICJcciIKCQlyZXR1cm4KCWZpCglpZiBbICIkMSIgPSAndW5wYXVzZScgXTsgdGhlbgoJCWVj
aG8gLW4gIiR7UFJPR1JFU1NbMF19JHtURVhUfSUgY29tcGxldGUuIgoJCXJldHVybgoJZmkKCWlm
IFsgIiQxIiA9ICdjb21wbGV0ZScgXTsgdGhlbgoJCVBST0dSRVNTWzVdPTEKCQlpZiAoKFZFUkJP
U0U9PTApKTsgdGhlbgoJCQllY2hvIC1lbiAiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYjEw
MCUgY29tcGxldGUuXGFcbiIJCgkJZWxzZQoJCQltZXNzYWdlIHZlcmJvc2UgIiR7UFJPR1JFU1Nb
MF19JDEwMCUgY29tcGxldGUuIgoJCWZpCgkJcmV0dXJuCglmaQoJaWYgKChQUk9HUkVTU1syXT09
LTEpKTsgdGhlbgoJCWlmICgoVkVSQk9TRT09MCkpOyB0aGVuCgkJCWVjaG8gLW4gIiR7UFJPR1JF
U1NbMF19ICAwJSBjb21wbGV0ZS4iCgkJZWxzZQoJCQltZXNzYWdlIHZlcmJvc2UgIiR7UFJPR1JF
U1NbMF19ICAwJSBjb21wbGV0ZS4iCgkJZmkKCQlQUk9HUkVTU1syXT0wCgkJcmV0dXJuCglmaQoJ
aWYgKChQUk9HUkVTU1s0XT09MSkpOyB0aGVuCgkJUFJPR1JFU1NbM109JCgoUFJPR1JFU1NbM10r
UFJPR1JFU1NbMV0pKQoJCU9VVD0xCgllbHNlCgkJKChQUk9HUkVTU1syXSsrKSkKCQlpZiAoKFBS
T0dSRVNTWzJdPT1QUk9HUkVTU1sxXSkpOyB0aGVuCgkJCSgoUFJPR1JFU1NbM10rKykpCgkJCU9V
VD0xCgkJZmkKCWZpCglpZiAoKE9VVD09MSkpOyB0aGVuCgkJaWYgKChQUk9HUkVTU1szXT49MTAw
KSk7IHRoZW4KCQkJdXBkYXRlX3Byb2dyZXNzIGNvbXBsZXRlCgkJCXJldHVybgoJCWZpCgkJaWYg
KCgkeyNQUk9HUkVTU1szXX09PTEpKTsgdGhlbgoJCQlURVhUPSIgICR7UFJPR1JFU1NbM119IgoJ
CWVsaWYgKCgkeyNQUk9HUkVTU1szXX09PTIpKTsgdGhlbgoJCQlURVhUPSIgJHtQUk9HUkVTU1sz
XX0iCgkJZWxzZQoJCQlURVhUPSR7UFJPR1JFU1NbM119CgkJZmkKCQlpZiAoKFZFUkJPU0U9PTAp
KTsgdGhlbgoJCQllY2hvIC1lbiAiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYiR7VEVYVH0l
IGNvbXBsZXRlLiIJCgkJZWxzZQoJCQltZXNzYWdlIHZlcmJvc2UgIiR7UFJPR1JFU1NbMF19JHtU
RVhUfSUgY29tcGxldGUuIgoJCWZpCgkJUFJPR1JFU1NbMl09MAoJZmkKfQoKCiMgVXBkYXRlIHRo
ZSBjaGVja3N1bSBkYXRhYmFzZQpmdW5jdGlvbiB1cGRhdGVfZGF0YWJhc2UgewoJbG9jYWwgbj0w
Cglsb2NhbCB4Cglsb2NhbCB5Cglsb2NhbCB6Cglsb2NhbCBhCglybSAtZiAkREFUQUJBU0Uvdmlv
bGF0aW9ucy5jYWNoZSAyPj4gJEVSUgoJbWVzc2FnZSB2ZXJib3NlICJVcGRhdGluZyBjaGVja3N1
bSBkYXRhYmFzZS4iCglpZiBbIC1uICIkMSIgXTsgdGhlbgoJCWlmIFsgLWYgJENMQVNTX0RJUi8k
MSBdOyB0aGVuCgkJCWxvYWRfY29uZmlnICRDTEFTU19ESVIvJDEgMAoJCWVsc2UKCQkJbWVzc2Fn
ZSBmYWlsICJFUlJPUiEgVW5rbm93biBjbGFzcyAnJHsxfScuIgoJCWZpCgllbHNlCgkJcHJvY2Vz
c19jbGFzc2VzCglmaQoJaWYgWyAhIC1kICREQVRBQkFTRSBdOyB0aGVuCgkJbWtkaXIgLVIgJERB
VEFCQVNFIDI+PiAkRVJSCglmaQoJaW5pdF9wcm9ncmVzcyAnR2VuZXJhdGluZyBjaGVja3N1bXMu
Li4uJwoJdXBkYXRlX3Byb2dyZXNzCglmb3IgeCBpbiAke0NMQVNTX0RFRl9DTEFTU1tAXX07IGRv
CgkJbWVzc2FnZSB2ZXJib3NlICJTdGFydGluZyBvcGVyYXRpb25zIGZvciBjbGFzcyAnJHgnLiIK
CQlsb2FkX2ZpbGVfbGlzdCAkeAoJCWZvciB5IGluICR7Q0xBU1NfTElTVFtAXX07IGRvCgkJCWlm
IFsgLWQgJHkgXTsgdGhlbgoJCQkJcm0gLWYgJFRFTVBfRElSL2RpcmNvbnQKCQkJCXRvdWNoICRU
RU1QX0RJUi9kaXJjb250CgkJCQlmb3IgeiBpbiAkKGxzIC1SICR5IHwgZ3JlcCAtRSAnXi9bWzpw
cmludDpdXSs6JCcpOyBkbwoJCQkJCUxFTkdUSD0kKCgkeyN6fS0xKSkKCQkJCQl6PSR7ejowOiRM
RU5HVEh9CgkJCQkJbWVzc2FnZSB2ZXJib3NlICJPcGVuaW5nIGRpcmVjdG9yeSAnJHonLiIKCQkJ
CQlmb3IgYSBpbiAkKGxzIC1BICR6KTsgZG8KCQkJCQkJaWYgWyAtZiAkei8kYSBdOyB0aGVuCgkJ
CQkJCQlDSEtTVU09JCgke0NMQVNTX0RFRl9BTEdPUkhZVEhNW25dfSAtYiAkei8kYSkKCQkJCQkJ
CW1lc3NhZ2UgdmVyYm9zZSAiQ2hlY2tzdW06ICRDSEtTVU0iCgkJCQkJCQllY2hvICIkQ0hLU1VN
IiA+PiAkVEVNUF9ESVIvZGlyY29udAoJCQkJCQkJZWNobyAiJENIS1NVTSIgPj4gJFRFTVBfRElS
LyR4fgoJCQkJCQkJdXBkYXRlX3Byb2dyZXNzCgkJCQkJCWZpCgkJCQkJZG9uZQoJCQkJZG9uZQoJ
CQkJQ0hLU1VNPSQoJHtDTEFTU19ERUZfQUxHT1JIWVRITVtuXX0gLWIgJHtURU1QX0RJUn0vZGly
Y29udCB8IGN1dCAtZCcgJyAtZjEpCgkJCQltZXNzYWdlIHZlcmJvc2UgIkNoZWNrc3VtOiAkQ0hL
U1VNIgoJCQkJZWNobyAiJHtDSEtTVU19ICAke3l9IiA+PiAkVEVNUF9ESVIvJHh+CgkJCQl1cGRh
dGVfcHJvZ3Jlc3MKCQkJZWxzZQoJCQkJQ0hLU1VNPSQoJHtDTEFTU19ERUZfQUxHT1JIWVRITVtu
XX0gLWIgJHkpCgkJCQltZXNzYWdlIHZlcmJvc2UgIkNoZWNrc3VtOiAkQ0hLU1VNIgoJCQkJZWNo
byAiJENIS1NVTSIgPj4gJFRFTVBfRElSLyR4fgoJCQkJdXBkYXRlX3Byb2dyZXNzCgkJCWZpCgkJ
ZG9uZQoJCSNzZWQgJ3MvKi8gL2cnICRURU1QX0RJUi8keH4gfCBiYXNlNjQgPiAkREFUQUJBU0Uv
JHguaWRiCgkJc2VkICdzLyovIC9nJyAkVEVNUF9ESVIvJHh+ID4gJERBVEFCQVNFLyR4LmlkYgoJ
CSgobisrKSkKCWRvbmUKCXVwZGF0ZV9wcm9ncmVzcyBjb21wbGV0ZQp9CgojIExvYWRzIHRoZSBm
aWxlcyBhbmQgY2hlY2tzdW1zIGZyb20gdGhlIGRhdGFiYXNlCmZ1bmN0aW9uIGxvYWRfZGF0YWJh
c2UgewoJbG9jYWwgbj0wCglsb2NhbCB4Cgl1bnNldCBGSUxFX0xJU1QKCXVuc2V0IENIS1NVTV9M
SVNUCgltZXNzYWdlIHZlcmJvc2UgIkxvYWRpbmcgY2hlY2tzdW0gZGF0YWJhc2UgZnJvbSAnJHtE
QVRBQkFTRX0vJDEnLiIKCWlmIFsgISAtZiAkQ0xBU1NfRElSLyQxIF07IHRoZW4KCQltZXNzYWdl
IGZhaWwgIkVSUk9SISBVbmtub3duIGNsYXNzICckezF9Jy4iCglmaQoJI2Jhc2U2NCAtZGkgJERB
VEFCQVNFLyQxLmlkYiA+ICRURU1QX0RJUi8kMX4KCSNmb3IgeCBpbiAkKGN1dCAtZCAnICcgLWYz
ICRURU1QX0RJUi8kMX4pOyBkbwoJZm9yIHggaW4gJChjdXQgLWQgJyAnIC1mMyAkREFUQUJBU0Uv
JDEuaWRiKTsgZG8KCQlGSUxFX0xJU1RbJG5dPSR4CgkJKChuKyspKQoJZG9uZQoJbj0wCgkjZm9y
IHggaW4gJChjdXQgLWQnICcgLWYxICRURU1QX0RJUi8kMX4pOyBkbwoJZm9yIHggaW4gJChjdXQg
LWQnICcgLWYxICREQVRBQkFTRS8kMS5pZGIpOyBkbwoJCUNIS1NVTV9MSVNUWyRuXT0keAoJCSgo
bisrKSkKCWRvbmUKfQoKIyBSZXR1cm5zIHRoZSBrZXkgYmFzZWQgb24gdmFsdWUgb2YgYXJyYXkg
KG5vbiBnZW5lcmljIHZlcnNpb24pCmZ1bmN0aW9uIGFycmF5X3NlYXJjaCB7Cglsb2NhbCBuPTAK
CWxvY2FsIHgKCWxvY2FsIEZPVU5EPTAKCWZvciB4IGluICR7RklMRV9MSVNUW0BdfTsgZG8KCQlp
ZiBbICIkeCIgPSAiJDEiIF07IHRoZW4KCQkJRk9VTkQ9MQoJCQlicmVhawoJCWVsc2UKCQkJKChu
KyspKQoJCWZpCglkb25lCglpZiAoKEZPVU5EPT0xKSk7IHRoZW4KCQllY2hvICRuCglmaQp9Cgoj
IFNlbmQgdmlvbGF0aW9uIGVtYWlsCmZ1bmN0aW9uIHNlbmRfdmlvbGF0aW9uX25vdGljZSB7Cgls
b2NhbCBuPSQxCglpZiBbIC1uICIkVklPTEFUSU9OIiBdOyB0aGVuCgkJbWVzc2FnZSB2ZXJib3Nl
ICJTZW5kaW5nIGZpbGUgc2VjdXJpdHkgdmlvbGF0aW9uIG5vdGljZSBmb3IgJHtDTEFTU19ERUZf
Q0xBU1Nbbl19LiIKCQllY2hvIC1lICJEZWFyICQoaG9zdG5hbWUpIEFkbWluaXN0cmF0b3IsCgpB
QyBJbnRlZ3JpdHkgaGFzIGRldGVjdGVkIGEgZmlsZSBzZWN1cml0eSB2aW9sYXRpb24uIFRvIHBy
ZXZlbnQgdGhpcyBtZXNzYWdlIGJlaW5nIHNlbnQgcmVwZWF0ZWRseSwgeW91IGFyZSByZXF1aXJl
ZCB0byB0YWtlIGFjdGlvbi4gSWYgdGhpcyBtZXNzYWdlIGlzIGEgZmFsc2UgcG9zaXRpdmUsIHlv
dSBtYXkgd2lzaCB0byByZW1vdmUgdGhlIGZpbGUvcyBmcm9tIHRoZSBtb25pdG9yaW5nIGxpc3Qg
aW4gL2V0Yy9BQy1JbnRlZ3JpdHkvbGlzdHMuY29uZi4gT3IgeW91IGNhbiB1cGRhdGUgdGhlIEFD
IEludGVncml0eSBkYXRhYmFzZSBieSBydW5uaW5nICdBQy1JbnRlZ3JpdHkgdXBkYXRlLWRiJy4g
T3RoZXJ3aXNlIHRoaXMgdmlvbGF0aW9uIG1heSBtZWFuIHRoYXQgJChob3N0bmFtZSkgaGFzIGhh
ZCBhIHJlYWwgc2VjdXJpdHkgYnJlYWNoLgoKSE9TVE5BTUU6ICQoaG9zdG5hbWUpCkNMQVNTOiAk
e0NMQVNTX0RFRl9DTEFTU1tuXX0KClRoZSBmb2xsb3dpbmcgZmlsZXMgZmFpbGVkIHZhbGlkYXRp
b246CiRWSU9MQVRJT04KCi4KCiIgPiAkVEVNUF9ESVIvbWFpbAoJCW1haWwgLXMgIkFDIEludGVn
cml0eSB0YW1wZXIgbm90aWZpY2F0aW9uIGZvciAnJChob3N0bmFtZSknIiAke0NMQVNTX0RFRl9N
QUlMVE9bbl19IDwgJFRFTVBfRElSL21haWwKCWZpCn0KCiMgSGFuZGxlIGEgc2VjdXJpdHkgdmlv
bGF0aW9uIGFjY29yZGluZyB0byBjbGFzcyBzcGVjaWZpY2F0aW9uCmZ1bmN0aW9uIGhhbmRsZV92
aW9sYXRpb24gewoJbG9jYWwgbj0kMQoJbG9jYWwgRk49JDIKCWxvY2FsIENMQVNTPSQzCgl1cGRh
dGVfcHJvZ3Jlc3MgcGF1c2UKCW1lc3NhZ2UgaW5mbyAiSU5GTyEgRmlsZSAkRk4gaGFzIGJlZW4g
dGFtcGVyZWQgd2l0aC4iCgllY2hvICIkKGRhdGUgJyslRiAlVCcpICRGTiBpbiBjbGFzcyAnJENM
QVNTJyIgPj4gJERBVEFCQVNFL3Zpb2xhdGlvbnMuY2FjaGUKCWlmIFsgIiR7Q0xBU1NfREVGX0xP
R1tuXX0iID0gIlRSVUUiIF07IHRoZW4KCQlsb2dnZXIgLXAgYXV0aC5jcml0ICJBQyBJbnRlZ3Jp
dHkgcmVwb3J0cyBmaWxlIHNlY3VyaXR5IHZpb2xhdGlvbiBpbiAkRk4uIEZpbGUgbW9uaXRvcmVk
IGluIGNsYXNzICcke0NMQVNTfScuIgoJZmkKCWlmIFsgIiR7Q0xBU1NfREVGX0VNQUlMW25dfSIg
PSAiVFJVRSIgXTsgdGhlbgoJCVZJT0xBVElPTj0iJFZJT0xBVElPTlxuJEZOIgoJZmkKCWlmIFsg
LW4gIiR7Q0xBU1NfREVGX0VYRUNVVEVbbl19IiBdOyB0aGVuCgkJbWVzc2FnZSB2ZXJib3NlICJF
eGVjdXRpbmcgJyR7Q0xBU1NfREVGX0VYRUNVVEVbbl19Jy4iCgkJJHtDTEFTU19ERUZfRVhFQ1VU
RVtuXX0gMj4gJEVSUgoJZmkKCWlmIFsgIiR7Q0xBU1NfREVGX0hBTFRbbl19IiA9ICdUUlVFJyBd
OyB0aGVuCgkJbG9nZ2VyICouZW1lcmcgIkEgc2VjdXJpdHkgdmlvbGF0aW9uIGhhcyBiZWVuIGRl
dGVjdGVkIGFuZCBzeXN0ZW0gaXMgc2h1dHRpbmcgZG93biBub3cuIgoJCVZJT0xBVElPTj0iJFZJ
T0xBVElPTlxuXG5PdGhlciBmaWxlcyBtYXkgYWxzbyBoYXZlIGZhaWxlZCB2YWxpZGF0aW9uLiBI
b3dldmVyLCBjbGFzcyAnJHtDTEFTU30nIGlzIGNvbmZpZ3VyZWQgdG8gc2h1dGRvd24gdGhlIHN5
c3RlbSBhcyBzb29uIGFzIGEgdmlvbGF0aW9uIGhhcyBiZWVuIGRldGVjdGVkLiAkKGhvc3RuYW1l
KSBpcyBzaHV0dGluZyBkb3duIG5vdy4iCgkJc2VuZF92aW9sYXRpb25fbm90aWNlICRuCgkJcm0g
LXJmICR7VEVNUF9ESVJ9CgkJcm0gLWYgJERBVEFCQVNFLy5ydW4KCQlzeW5jCgkJc2xlZXAgNQoJ
CXNodXRkb3duIC1oIG5vdwoJZmkKCXVwZGF0ZV9wcm9ncmVzcyB1bnBhdXNlCn0KCiMgUGVyZm9y
bSBhbiBvbi1kZW1hbmQgY2hlY2sKZnVuY3Rpb24gY2hlY2tfaW50ZWdyaXR5IHsKCWxvY2FsIG49
MAoJbG9jYWwgaQoJbG9jYWwgeAoJbG9jYWwgeQoJbG9jYWwgegoJbG9jYWwgYQoJbWVzc2FnZSB2
ZXJib3NlICJTdGFydGluZyBmaWxlIGludGVncml0eSBjaGVjay4iCglpZiBbIC1uICIkMSIgXTsg
dGhlbgoJCWlmIFsgLWYgJENMQVNTX0RJUi8kMSBdOyB0aGVuCgkJCWxvYWRfY29uZmlnICRDTEFT
U19ESVIvJDEgMAoJCWVsc2UKCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgVW5rbm93biBjbGFzcyAn
JHsxfScuIgoJCWZpCgllbHNlCgkJcHJvY2Vzc19jbGFzc2VzCglmaQoJaWYgWyAhIC1kICREQVRB
QkFTRSBdOyB0aGVuCgkJbWVzc2FnZSBmYWlsICJFUlJPUiEgTm8gZGF0YWJhc2UgZm91bmQgYXQg
JERBVEFCQVNFLiIKCWZpCglybSAtZiAke0RBVEFCQVNFfS8udmlvbGF0aW9ucy5jYWNoZSAyPj4g
JEVSUgoJaW5pdF9wcm9ncmVzcyAnQ29tcGFyaW5nIGNoZWNrc3Vtcy4uLi4nCgl1cGRhdGVfcHJv
Z3Jlc3MKCWZvciB4IGluICR7Q0xBU1NfREVGX0NMQVNTW0BdfTsgZG8KCQltZXNzYWdlIHZlcmJv
c2UgIlN0YXJ0aW5nIG9wZXJhdGlvbnMgZm9yIGNsYXNzICckeCcuIgoJCXVuc2V0IFZJT0xBVElP
TgoJCWxvYWRfZmlsZV9saXN0ICR4CgkJbG9hZF9kYXRhYmFzZSAkeAoJCW1lc3NhZ2UgdmVyYm9z
ZSAiVG90YWwgZmlsZXMgaW4gY2xhc3M6ICR7I0ZJTEVfTElTVFtAXX0uIgoJCWZvciB5IGluICR7
Q0xBU1NfTElTVFtAXX07IGRvCgkJCWlmIFsgLWQgJHkgXTsgdGhlbgoJCQkJcm0gLWYgJFRFTVBf
RElSL2RpcmNvbnQKCQkJCXRvdWNoICRURU1QX0RJUi9kaXJjb250CgkJCQlmb3IgeiBpbiAkKGxz
IC1SICR5IHwgZ3JlcCAtRSAnXi9bWzpwcmludDpdXSs6JCcpOyBkbwoJCQkJCUxFTkdUSD0kKCgk
eyN6fS0xKSkKCQkJCQl6PSR7ejowOiRMRU5HVEh9CgkJCQkJbWVzc2FnZSB2ZXJib3NlICJPcGVu
aW5nIGRpcmVjdG9yeSAnJHonLiIKCQkJCQlmb3IgYSBpbiAkKGxzIC1BICR6KTsgZG8KCQkJCQkJ
aWYgWyAtZiAkei8kYSBdOyB0aGVuCgkJCQkJCQlORVdfQ0hLU1VNPSQoJHtDTEFTU19ERUZfQUxH
T1JIWVRITVtuXX0gLWIgJHovJGEpCgkJCQkJCQllY2hvICIke05FV19DSEtTVU19IiA+PiAkVEVN
UF9ESVIvZGlyY29udAoJCQkJCQkJaT0kKGFycmF5X3NlYXJjaCAkei8kYSkKCQkJCQkJCWlmIFsg
LXogIiRpIiBdOyB0aGVuCgkJCQkJCQkJbWVzc2FnZSB3YXJuaW5nICJXQVJOSU5HISBTcGVjaWZp
ZWQgZmlsZSAke3p9LyR7YX0gbm90IGZvdW5kIGluIGRhdGFiYXNlLiIKCQkJCQkJCWZpCgkJCQkJ
CQltZXNzYWdlIHZlcmJvc2UgIkNoZWNrc3VtOiAke0NIS1NVTV9MSVNUW2ldfSA9ICR7TkVXX0NI
S1NVTX0iCgkJCQkJCQlORVdfQ0hLU1VNPSR7TkVXX0NIS1NVTTowOiR7Q0xBU1NfREVGX0JZVEVT
W25dfX0KCQkJCQkJCWlmIFsgISAiJHtORVdfQ0hLU1VNfSIgPSAiJHtDSEtTVU1fTElTVFtpXX0i
IF07IHRoZW4KCQkJCQkJCQloYW5kbGVfdmlvbGF0aW9uICRuICR6LyRhICR4CgkJCQkJCQlmaQoJ
CQkJCQkJdXBkYXRlX3Byb2dyZXNzCgkJCQkJCWZpCgkJCQkJZG9uZQoJCQkJZG9uZQoJCQkJTkVX
X0NIS1NVTT0kKCR7Q0xBU1NfREVGX0FMR09SSFlUSE1bbl19IC1iICR7VEVNUF9ESVJ9L2RpcmNv
bnQgfCBjdXQgLWQnICcgLWYxKQoJCQkJaT0kKGFycmF5X3NlYXJjaCAkeSkKCQkJCWlmIFsgLXog
IiRpIiBdOyB0aGVuCgkJCQkJbWVzc2FnZSB3YXJuaW5nICJXQVJOSU5HISBTcGVjaWZpZWQgZGly
ZWN0b3J5ICR7eX0gbm90IGZvdW5kIGluIGRhdGFiYXNlLiIKCQkJCWZpCgkJCQltZXNzYWdlIHZl
cmJvc2UgIkNoZWNrc3VtOiAke0NIS1NVTV9MSVNUW2ldfSA9ICR7TkVXX0NIS1NVTX0iCgkJCQlO
RVdfQ0hLU1VNPSR7TkVXX0NIS1NVTTowOiR7Q0xBU1NfREVGX0JZVEVTW25dfX0KCQkJCWlmIFsg
ISAiJHtORVdfQ0hLU1VNfSIgPSAiJHtDSEtTVU1fTElTVFtpXX0iIF07IHRoZW4KCQkJCQloYW5k
bGVfdmlvbGF0aW9uICRuICR5ICR4CgkJCQlmaQoJCQkJdXBkYXRlX3Byb2dyZXNzCgkJCWVsc2UK
CQkJCU5FV19DSEtTVU09JCgke0NMQVNTX0RFRl9BTEdPUkhZVEhNW25dfSAtYiAkeSB8IGN1dCAt
ZCcgJyAtZjEpCgkJCQlpPSQoYXJyYXlfc2VhcmNoICR5KQoJCQkJaWYgWyAteiAiJGkiIF07IHRo
ZW4KCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBTcGVjaWZpZWQgZmlsZSAke3l9IG5vdCBmb3Vu
ZCBpbiBkYXRhYmFzZS4iCgkJCQlmaQoJCQkJbWVzc2FnZSB2ZXJib3NlICJDaGVja3N1bTogJHtD
SEtTVU1fTElTVFtpXX0gPSAke05FV19DSEtTVU19IgoJCQkJTkVXX0NIS1NVTT0ke05FV19DSEtT
VU06MDoke0NMQVNTX0RFRl9CWVRFU1tuXX19CgkJCQlpZiBbICEgIiR7TkVXX0NIS1NVTX0iID0g
IiR7Q0hLU1VNX0xJU1RbaV19IiBdOyB0aGVuCgkJCQkJaGFuZGxlX3Zpb2xhdGlvbiAkbiAkeSAk
eAoJCQkJZmkKCQkJCXVwZGF0ZV9wcm9ncmVzcyAKCQkJZmkKCQlkb25lCgkJc2VuZF92aW9sYXRp
b25fbm90aWNlICRuCgkJKChuKyspKQoJZG9uZQoJdXBkYXRlX3Byb2dyZXNzIGNvbXBsZXRlCn0K
CiMgVHVybiBvbiBjaGVja2luZwpmdW5jdGlvbiBzdGFydF9jaGVja2luZyB7Cglsb2NhbCBURVhU
CglpZiBbIC1uICIkMSIgXTsgdGhlbgoJCWNhc2UgJDEgaW4KCQkJdW5wYXVzZSApCgkJCQlpZiBb
IC1mICRURU1QX0RJUi91bnBhdXNlIF07IHRoZW4KCQkJCQlURVhUPSdJbnRlZ3JpdHkgY2hlY2tp
bmcgdW5wYXVzZWQuJwoJCQkJZmkKCQkJCTs7CgkJCWJvb3QgKQoJCQkJdG91Y2ggJENPTkYvLmJv
b3QgMj4+ICRFUlIKCQkJCVRFWFQ9IkludGVncml0eSBjaGVja2luZyBzdGFydGVkLlxuSW5lZ3Jp
dHkgY2hlY2sgb24gYm9vdCBlbmFibGVkLiIKCQkJCTs7CgkJCSogKQoJCQkJbWVzc2FnZSBhYm9y
dCAiSW52YWxpZCBvcHRpb24gc3VwcGxpZWQuIE9ubHkgJ2Jvb3QnIGNhbiBiZSB1c2VkIHdpdGgg
J3N0YXJ0Jy4iCgkJCQk7OwoJCWVzYWMKCWVsc2UKCQlURVhUPSdJbnRlZ3JpdHkgY2hlY2tpbmcg
c3RhcnRlZC4nCglmaQoJY3JvbnRhYiAtbCAyPiYtIHwgZ3JlcCAtdiBhY2ljaGVjayA+ICRURU1Q
X0RJUi9yb290LmNyb250YWIKCWVjaG8gLWUgIjAxICogKiAqICogL3NiaW4vYWNpY2hlY2tfaG91
cmx5XG4zMSAqICogKiAqIC9zYmluL2FjaWNoZWNrX2JpaG91cmx5IiA+PiAkVEVNUF9ESVIvcm9v
dC5jcm9udGFiCgljcm9udGFiICRURU1QX0RJUi9yb290LmNyb250YWIgMT4mLSAyPj4gJEVSUgoJ
bWVzc2FnZSBpbmZvICIkVEVYVCIKfQoKIyBUdXJuIG9mZiBjaGVja2luZwpmdW5jdGlvbiBzdG9w
X2NoZWNraW5nIHsKCWxvY2FsIFNUT1A9MQoJbG9jYWwgVEVYVAoJaWYgWyAtbiAiJDEiIF07IHRo
ZW4KCQljYXNlICQxIGluCgkJCXBhdXNlICkKCQkJCWlmICEgY3JvbnRhYiAtbCAyPiYtIHwgZ3Jl
cCAtcSBhY2ljaGVjazsgdGhlbgoJCQkJCXRvdWNoICRURU1QX0RJUi91bnBhdXNlCgkJCQkJVEVY
VD0nSW50ZWdyaXR5IGNoZWNraW5nIHBhdXNlZC4nCgkJCQllbHNlCgkJCQkJU1RPUD0wCgkJCQlm
aQoJCQkJOzsKCQkJYm9vdCApCgkJCQlybSAtZiAkQ09ORi8uYm9vdCAyPj4gJEVSUgoJCQkJVEVY
VD0iSW50ZWdyaXR5IGNoZWNraW5nIHN0b3BwZWQuXG5JbnRlZ3JpdHkgY2hlY2sgb24gYm9vdCBk
aXNhYmxlZC4iCgkJCQk7OwoJCQkqICkKCQkJCW1lc3NhZ2UgYWJvcnQgIkludmFsaWQgb3B0aW9u
IHN1cHBsaWVkLiBPbmx5ICdib290JyBjYW4gYmUgdXNlZCB3aXRoICdzdG9wJy4iCgkJCQk7OwoJ
CWVzYWMKCWVsc2UKCQlURVhUPSdJbnRlZ3JpdHkgY2hlY2tpbmcgc3RvcHBlZC4nCglmaQoJaWYg
KChTVE9QPT0xKSk7IHRoZW4KCQljcm9udGFiIC1sIDI+Ji0gfCBncmVwIC12IGFjaWNoZWNrID4g
JFRFTVBfRElSL3Jvb3QuY3JvbnRhYgoJCWNyb250YWIgJFRFTVBfRElSL3Jvb3QuY3JvbnRhYiAx
PiYtIDI+PiAkRVJSCglmaQoJbWVzc2FnZSBpbmZvICIkVEVYVCIKfQoKIyBPdXRwdXQgY3VycmVu
dCBzdGF0dXMKZnVuY3Rpb24gc2hvd19zdGF0dXMgewoJbG9jYWwgeAoJbG9jYWwgeQoJaWYgISBz
eXN0ZW1jdGwgbGlzdC11bml0LWZpbGVzIC10IHNlcnZpY2UgfCBncmVwIC1xRSAnYWNfaW50ZWdy
aXR5LipbWzpzcGFjZTpdXS4qZW5hYmxlZCc7IHRoZW4KCQl4PTEKCQlURVhUPSdTZXJ2aWNlIHN0
YXR1cyBpbiBzeXN0ZW1kOiBlbmFibGVkJwoJZWxzZQoJCXg9MAoJCVRFWFQ9J1NlcnZpY2Ugc3Rh
dHVzIGluIHN5c3RlbWQ6IGRpc2FibGVkJwoJZmkKCWlmICEgY3JvbnRhYiAtbCAyPiYtIHwgZ3Jl
cCAtcSBhY2ljaGVjazsgdGhlbgoJCXk9MQoJCVRFWFQ9IiRURVhUXG5DdXJyZW50IHN0YXR1czog
c3RhcnRlZCIKCWVsc2UKCQl5PTAKCQlURVhUPSIkVEVYVFxuQ3VycmVudCBzdGF0dXM6IHN0b3Bw
ZWQiCglmaQoJaWYgKCh4IT15KSk7IHRoZW4KCQltZXNzYWdlIHdhcm4gIldBUk5JTkc6IEN1cnJl
bnQgc3RhdHVzIGRvZXMgbm90IG1hdGNoIHNlcnZpY2Ugc3RhdHVzLiIKCWZpCglpZiBbIC1mICRD
T05GLy5ib290IF07IHRoZW4KCQlURVhUPSIkVEVYVFxuQWN0aXZlIG9uIGJvb3Q6IHllcyIKCWVs
c2UKCQlURVhUPSIkVEVYVFxuQWN0aXZlIG9uIGJvb3Q6IG5vIgoJZmkKCWlmIFsgLWYgJERBVEFC
QVNFL3Zpb2xhdGlvbnMuY2FjaGUgXTsgdGhlbgoJCW1lc3NhZ2UgaW5mbyAiLS0tIEFDIEludGVn
cml0eSBzdGF0dXMgLS0tXG5cbiRURVhUXG5cblZpb2xhdGlvbnM6XG4kKGNhdCAkREFUQUJBU0Uv
dmlvbGF0aW9ucy5jYWNoZSlcbiIKCWVsc2UKCQltZXNzYWdlIGluZm8gIi0tLSBBQyBJbnRlZ3Jp
dHkgc3RhdHVzIC0tLVxuXG4kVEVYVFxuXG5WaW9sYXRpb25zOlxubm8gdmlvbGF0aW9uc1xuIgoJ
ZmkKfQoKIyBleGl0IGNsZWFubHkgb24gQ1RSTC1DCmZ1bmN0aW9uIHRyYXBfYWJvcnQgewoJcm0g
LWYgJERBVEFCQVNFLy5ydW4KCW1lc3NhZ2UgYWJvcnQgIkFib3J0ZWQgYnkgdXNlciBvciBhbm90
aGVyIHByb2Nlc3MuIgp9CgojIFBBUlNFIFVTRVIgT1BUSU9OUwppZiBbICEgIiQod2hvYW1pKSIg
PSAncm9vdCcgXTsgdGhlbgoJbWVzc2FnZSBhYm9ydCAnWW91IG11c3QgYmUgcm9vdCB0byBydW4g
dGhpcyBjb21tYW5kLicKZmkKaWYgWyAhIC1mICREQVRBQkFTRS8uc2Vzc2lvbiBdIHx8IFsgISAi
JChjYXQgJERBVEFCQVNFLy5zZXNzaW9uKSIgPSAiJCh1cHRpbWUgLXMpIiBdOyB0aGVuCgl1cHRp
bWUgLXMgPiAkREFUQUJBU0UvLnNlc3Npb24KCXJtIC1mICREQVRBQkFTRS8ucnVuIDI+Ji0KZmkK
aWYgWyAtZiAkREFUQUJBU0UvLnJ1biBdOyB0aGVuCgltZXNzYWdlIGFib3J0ICJcbkFDIEludGVn
cml0eSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyAkKGNhdCAke0RBVEFCQVNFfS8ucnVuKSBvcGVy
YXRpb25zLiAKUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iCmZpCnRyYXAgdHJhcF9hYm9ydCBLSUxM
IElOVCBBQlJUIFRFUk0KY2QgLwppZiBbICEgLWQgJFRFTVBfRElSIF07IHRoZW4KCW1rZGlyIC1w
ICRURU1QX0RJUgoJY2htb2QgMDcwMCAkVEVNUF9ESVIgMj4+ICRFUlIKZmkKT1BUMj0kMgpjYXNl
ICQjIGluCgkyICkKCQlpZiBbICIkMiIgPSAiLS12ZXJib3NlIiBdOyB0aGVuCgkJCVZFUkJPU0U9
MQoJCQl1bnNldCBPUFQyCgkJZmkKCQk7OwoJMyApCgkJaWYgWyAiJDMiID0gIi0tdmVyYm9zZSIg
XTsgdGhlbgoJCQlWRVJCT1NFPTEKCQlmaQoJCTs7CmVzYWMKY2FzZSAkMSBpbgoJdXBkYXRlLWRi
ICkKCQllY2hvICd1cGRhdGUnID4gJERBVEFCQVNFLy5ydW4KCQlzdG9wX2NoZWNraW5nIHBhdXNl
CgkJdXBkYXRlX2RhdGFiYXNlICRPUFQyCgkJc3RhcnRfY2hlY2tpbmcgdW5wYXVzZQoJCW1lc3Nh
Z2UgZmluaXNoICJEYXRhYmFzZSB1cGRhdGUgb3BlcmF0aW9ucyBjb21wbGV0ZS4iCgkJOzsKCXN0
YXJ0ICkKCQlzdGFydF9jaGVja2luZyAkT1BUMgoJCW1lc3NhZ2UgZmluaXNoICJPcGVyYXRpb24g
Y29tcGxldGUuIgoJCTs7CglzdG9wICkKCQlzdG9wX2NoZWNraW5nICRPUFQyCgkJbWVzc2FnZSBm
aW5pc2ggIk9wZXJhdGlvbiBjb21wbGV0ZS4iCgkJOzsKCWNoZWNrICkKCQllY2hvICd2ZXJpZmlj
YXRpb24nID4gJERBVEFCQVNFLy5ydW4KCQlzdG9wX2NoZWNraW5nIHBhdXNlCgkJY2hlY2tfaW50
ZWdyaXR5ICRPUFQyCgkJc3RhcnRfY2hlY2tpbmcgdW5wYXVzZQoJCW1lc3NhZ2UgZmluaXNoICJG
aWxlIHNlY3VyaXR5IHZlcmlmaWNhdGlvbiBvcGVyYXRpb25zIGNvbXBsZXRlLiIKCQk7OwoJc3Rh
dHVzICkKCQlzaG93X3N0YXR1cwoJCTs7Cgl2ZXJzaW9uICkKCQltZXNzYWdlIGluZm8gIiROQU1F
IHZlci4gJFZFUiBcbkNvbnRhY3QgSm9leSBEb2JpYXMgKCRFTUFJTCkiCgkJOzsKCSogKQoJCW1l
c3NhZ2UgYWJvcnQgIgpVU0FHRTogJChiYXNlbmFtZSAkVEhJUykgPE9wdGlvbj4gWzxvcHRpb25h
bD5dIFstLXZlcmJvc2VdCgo8T3B0aW9ucz4KdXBkYXRlLWRiIDogVXBkYXRlcyB0aGUgQUMtSW50
ZWdyaXR5IGNoZWNrc3VtIGRhdGFiYXNlLiBJZiBhbiBvcHRpb25hbCBjbGFzcwogICAgICAgICAg
ICBpcyBzdXBwbGllZCwgb25seSB0aGF0IGNsYXNzIHdpbGwgYmUgdXBkYXRlZC4KICAgIHN0YXJ0
IDogVHVybnMgb24gYXV0b21hdGljIGZpbGUgY2hlY2tzdW0gbW9uaXRvcmluZy4gSWYgb3B0aW9u
YWwgJ2Jvb3QnCiAgICAgICAgICAgIGZsYWcgaXMgc3VwcGxpZWQsIGNoZWNrc3VtcyB3aWxsIGJl
IGNoZWNrZWQgYXQgYm9vdCB0aW1lIHRvby4KICAgICBzdG9wIDogVHVybnMgb2ZmIEFDLUludGVn
cml0eS4gSWYgb3B0aW9uYWwgJ2Jvb3QnIGZsYWcgaXMgc3VwcGxpZWQsIHRoZQogICAgICAgICAg
ICBjaGVja3N1bXMgd2lsbCBub3QgYmUgY2hlY2tlZCBvbiBib290IHRpbWUgZWl0aGVyLgogICAg
Y2hlY2sgOiBQZXJmb3JtcyBhbiBvbi1kZW1hbmQgZmlsZSBjaGVja3N1bSBjaGVjay4gSWYgYW4g
b3B0aW9uYWwgY2xhc3MgaXMKICAgICAgICAgICAgc3VwcGxpZWQsIG9ubHkgdGhhdCBjbGFzcyB3
aWxsIGJlIGNoZWNrZWQuCiAgIHN0YXR1cyA6IFJlcG9ydHMgd2hldGhlciBBQy1JbnRlZ3JpdHkg
aXMgYWN0aXZlIGFuZCBvdXRwdXRzIGFsbCB2aW9sYXRpb24KICAgICAgICAgICAgZXZlbnRzIHNp
bmNlIHRoZSBsYXN0ICd1cGRhdGUtZGInLgogIHZlcnNpb24gOiBPdXRwdXRzIHZlcnNpb24gaW5m
by4KClstLXZlcmJvc2VdIFZlcmJvc2Ugb3V0cHV0IGNhdXNlcyBhbGwgY2hlY2tzdW1zIGFuZCBm
aWxlIGNoZWNrIG9wZXJhdGlvbnMgdG8KICAgICAgICAgICAgYmUgb3V0cHV0IHRvIHRoZSBzaGVs
bC4gVGhpcyBpcyBtYWlubHkgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZwogICAgICAgICAgICBv
ciBoZWxwaW5nIEFDIEludGVncml0eSBpbnRlcmFjdCB3aXRoIGFub3RoZXIgcHJvZ3JhbS4KIgoJ
CTs7CmVzYWMKcm0gLXJmICR7VEVNUF9ESVJ9CnJtIC1mICREQVRBQkFTRS8ucnVuCmV4aXQgMAo=" | base64 -di - > "/sbin/ac_integrity"; then
	rollback
fi
log_undo 'rm -f "/sbin/ac_integrity"'
chown root:root "/sbin/ac_integrity"
chmod 0500 "/sbin/ac_integrity"
echo -e "Created file '/sbin/ac_integrity'"
if ! echo "IyEvYmluL2Jhc2gKIwojICAgIE5BTUU6IEFDIEludGVncml0eSBzeXN0ZW1kIHN0YXJ0IHNjcmlw
dAojIFZFUlNJT046IDEuMAojICBBVVRIT1I6IEpvZXkgRG9iaWFzCiMgICAgREFURTogMjAxNi0w
NC0wNAojICAgTk9URVM6IERlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIHN5c3RlbWQuIFRoaXMg
c2NyaXB0IHNpbXBseQojICAgICAgICAgIHNldHMgdGhlIGNyb24gZW50cmllcyBhbmQgdGhlbiwg
aWYgcmVxdWlyZWQsIGNhbGxzIHRoZQojICAgICAgICAgICcvc2Jpbi9hY19pbnRlZ3JpdHkgY2hl
Y2snIGNvbW1hbmQKIwoKIyBERUNMQVJFIENPTlNUQU5UUwpDT05GPS9ldGMvYWNfaW50ZWdyaXR5
ClRFTVBfRElSPS92YXIvdG1wL2FjaW50ZWdyaXR5CkVSUj0kVEVNUF9ESVIvZXJyb3IudHh0ClBB
VEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KCiMgREVDTEFSRSBQUk9DRVNTSU5HIEZV
TkNUSU9OUwoKIyBTZW5kcyBhbiBlcnJvciBsb2cgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlCmZ1
bmN0aW9uIHNlbmRfbG9nIHsKICAgICAgICBpZiBbIC1zICRFUlIgXTsgdGhlbgogICAgICAgICAg
ICAgICAgbG9nZ2VyIC1wIGF1dGguZXJyIC1mICRFUlIKICAgICAgICAgICAgICAgIHJldHVybiAw
CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICBmaQp9CgojIG1h
bmFnZSBtZXNzYWdlcyBhcyBzY3JlZW4gb3V0cHV0IG9yIHNlcnZpY2Ugc3RhdHVzCmZ1bmN0aW9u
IG1lc3NhZ2UgewogICAgICAgIGNhc2UgJDEgaW4KICAgICAgICAgICAgICAgIHdhcm4gKQogICAg
ICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIkMiIgPj4gJEVSUgogICAgICAgICAgICAgICAg
ICAgICAgICBlY2hvIC1lICIkMiIgPiYyCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAg
ICAgICAgICAgICBmYWlsICkKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJDIiID4+
ICRFUlIKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJDIiID4mMgogICAgICAgICAg
ICAgICAgICAgICAgICBzZW5kX2xvZwogICAgICAgICAgICAgICAgICAgICAgICBybSAtcmYgJFRF
TVBfRElSCiAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICREQVRBQkFTRS8ucnVuCiAgICAg
ICAgICAgICAgICAgICAgICAgIGV4aXQgNQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAg
ICAgICAgICAgICAgaW5mbyApCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLWUgIiQyIgog
ICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZmluaXNoICkKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgc2VuZF9sb2c7IHRoZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlY2hvIC1lICJUaGVyZSB3ZXJlIGVycm9ycy5cbiQoY2F0ICRFUlIpIgogICAg
ICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIk
MiIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGFib3J0ICkKICAg
ICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJDIiCiAgICAgICAgICAgICAgICAgICAgICAg
IHJtIC1yZiAkVEVNUF9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAg
ICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwp9CgojIE1BSU4gU0VRVUVOQ0UKCmNyb250
YWIgLWwgMj4mLSB8IGdyZXAgLXYgYWNpY2hlY2sgPiAkVEVNUF9ESVIvcm9vdC5jcm9udGFiCmVj
aG8gLWUgIjAxICogKiAqICogL3NiaW4vYWNpY2hlY2tfaG91cmx5XG4zMSAqICogKiAqIC9zYmlu
L2FjaWNoZWNrX2JpaG91cmx5IiA+PiAkVEVNUF9ESVIvcm9vdC5jcm9udGFiCmNyb250YWIgJFRF
TVBfRElSL3Jvb3QuY3JvbnRhYiAxPiYtIDI+PiAkRVJSCmlmIFsgLWYgJENPTkYvLmJvb3QgXTsg
dGhlbgoJbWVzc2FnZSBpbmZvICJJbnRlZ3JpdHkgY2hlY2tpbmcgc3RhcnRlZC5cbkluZWdyaXR5
IGNoZWNrIG9uIGJvb3QgZW5hYmxlZC4iCmVsc2UKCW1lc3NhZ2UgaW5mbyAiSW50ZWdyaXR5IGNo
ZWNraW5nIHN0YXJ0ZWQuIgpmaQojIHJ1biAvc2Jpbi9hY2ljaGVja19ib290IElGIHRoZSBzeXN0
ZW0gaXMgYWN0dWFsbHkgYm9vdGluZyBub3cKaWYgKCgkKHN5c3RlbWN0bCBzdGF0dXMgZGVmYXVs
dC50YXJnZXQgfCBncmVwIC1jRSAnYWN0aXZlLiogc2luY2UnKT09MCkpOyB0aGVuCglhY19pbnRl
Z3JpdHkgY2hlY2sKZmkKZXhpdCAwCg==" | base64 -di - > "/var/acintegrity/acistart"; then
	rollback
fi
log_undo 'rm -f "/var/acintegrity/acistart"'
chown root:root "/var/acintegrity/acistart"
chmod 0500 "/var/acintegrity/acistart"
echo -e "Created file '/var/acintegrity/acistart'"
if ! echo "IyEvYmluL2Jhc2gKIwojICAgIE5BTUU6IEFDIEludGVncml0eSBzeXN0ZW1kIHN0b3AKIyBWRVJT
SU9OOiAxLjAKIyAgQVVUSE9SOiBKb2V5IERvYmlhcwojICAgIERBVEU6IDIwMTYtMDQtMDQKIyAg
IE5PVEVTOiBEZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBzeXN0ZW1kIHRvIHJlbW92ZSB0aGUK
IyAgICAgICAgICBjcm9uIGVudHJpZXMKIwoKIyBERUNMQVJFIENPTlNUQU5UUwpDT05GPS9ldGMv
YWNfaW50ZWdyaXR5ClRFTVBfRElSPS92YXIvdG1wL2FjaW50ZWdyaXR5CkVSUj0kVEVNUF9ESVIv
ZXJyb3IudHh0ClBBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4KCiMgREVDTEFSRSBQ
Uk9DRVNTSU5HIEZVTkNUSU9OUwoKIyBTZW5kcyBhbiBlcnJvciBsb2cgdG8gdGhlIGFwcHJvcHJp
YXRlIHBsYWNlCmZ1bmN0aW9uIHNlbmRfbG9nIHsKICAgICAgICBpZiBbIC1zICRFUlIgXTsgdGhl
bgogICAgICAgICAgICAgICAgbG9nZ2VyIC1wIGF1dGguZXJyIC1mICRFUlIKICAgICAgICAgICAg
ICAgIHJldHVybiAwCiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAg
ICBmaQp9CgojIG1hbmFnZSBtZXNzYWdlcyBhcyBzY3JlZW4gb3V0cHV0IG9yIHNlcnZpY2Ugc3Rh
dHVzCmZ1bmN0aW9uIG1lc3NhZ2UgewogICAgICAgIGNhc2UgJDEgaW4KICAgICAgICAgICAgICAg
IHdhcm4gKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIkMiIgPj4gJEVSUgogICAg
ICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIkMiIgPiYyCiAgICAgICAgICAgICAgICAgICAg
ICAgIDs7CiAgICAgICAgICAgICAgICBmYWlsICkKICAgICAgICAgICAgICAgICAgICAgICAgZWNo
byAtZSAiJDIiID4+ICRFUlIKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJDIiID4m
MgogICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2xvZwogICAgICAgICAgICAgICAgICAgICAg
ICBybSAtcmYgJFRFTVBfRElSCiAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICREQVRBQkFT
RS8ucnVuCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgNQogICAgICAgICAgICAgICAgICAg
ICAgICA7OwogICAgICAgICAgICAgICAgaW5mbyApCiAgICAgICAgICAgICAgICAgICAgICAgIGVj
aG8gLWUgIiQyIgogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZmlu
aXNoICkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VuZF9sb2c7IHRoZW4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICJUaGVyZSB3ZXJlIGVycm9ycy5cbiQoY2F0
ICRFUlIpIgogICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAg
ICBlY2hvIC1lICIkMiIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAg
IGFib3J0ICkKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAtZSAiJDIiCiAgICAgICAgICAg
ICAgICAgICAgICAgIHJtIC1yZiAkVEVNUF9ESVIKICAgICAgICAgICAgICAgICAgICAgICAgZXhp
dCAxCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwp9CgojIE1BSU4gU0VR
VUVOQ0UKCmNyb250YWIgLWwgMj4mLSB8IGdyZXAgLXYgYWNpY2hlY2sgPiAkVEVNUF9ESVIvcm9v
dC5jcm9udGFiCmNyb250YWIgJFRFTVBfRElSL3Jvb3QuY3JvbnRhYiAxPiYtIDI+PiAkRVJSCm1l
c3NhZ2UgaW5mbyAiSW50ZWdyaXR5IGNoZWNraW5nIHN0b3BwZWQuIgpleGl0IDAK" | base64 -di - > "/var/acintegrity/acstop"; then
	rollback
fi
log_undo 'rm -f "/var/acintegrity/acstop"'
chown root:root "/var/acintegrity/acstop"
chmod 0500 "/var/acintegrity/acstop"
echo -e "Created file '/var/acintegrity/acstop'"
if ! echo "IyEvYmluL2Jhc2gKIwojICAgIE5BTUU6IEFDIEludGVncml0eSBiaS1ob3VybHkgY3JvbgojIFZF
UlNJT046IDEuMC4zCiMgIEFVVEhPUjogSm9leSBEb2JpYXMKIyAgICBEQVRFOiAyMDE2LTA2LTA0
CiNNT0RJRklFRDogMjAyMS0wNS0wNwojICAgTk9URVM6IFdha2VzIHVwIGF0IDMwIG1pbnV0ZXMg
cGFzdCBlYWNoIGhvdXIgYW5kIGNoZWNrcyBhbGwgY2xhc3NlcyB0aGF0CiMgICAgICAgICAgYXJl
IG1hcmtlZCBmb3IgMzBNSU4gaW4gdGhlaXIgRlJFUVVFTkNZIGRpcmVjdGl2ZS4gQ29kZSBpcyBh
bHdheXMKIyAgICAgICAgICBib3Jyb3dlZCBmcm9tIC9zYmluL0FDLUludGVncml0eSBidXQgd2l0
aCBwcm9ncmVzcyBtb25pdG9yaW5nIGFuZAojICAgICAgICAgIHZlcmJvc2Ugb3V0cHV0IHJlbW92
ZWQuCiMKCi9iaW4vYmFzaAouIC9yb290Ly5iYXNoX3Byb2ZpbGUgPiAvZGV2L251bGwKCiMgREVD
TEFSRSBDT05TVEFOVFMKQ09ORj0vZXRjL2FjX2ludGVncml0eQpDTEFTU19ESVI9JENPTkYvY2xh
c3NlcwpURU1QX0RJUj0vdmFyL3RtcC9hY2ludGVncml0eQpFUlI9JFRFTVBfRElSL2Vycm9yLnR4
dApEQVRBQkFTRT0vdmFyL2FjaW50ZWdyaXR5ClBBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNy
L3NiaW4KVklPTEFUSU9OPScnCgojIERFQ0xBUkUgUFJPQ0VTU0lORyBGVU5DVElPTlMKCiMgU2Vu
ZHMgYW4gZXJyb3IgbG9nIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZQpmdW5jdGlvbiBzZW5kX2xv
ZyB7CglpZiBbIC1zICRFUlIgXTsgdGhlbgoJCWxvZ2dlciAtcCBhdXRoLmVyciAtZiAkRVJSCgkJ
cmV0dXJuIDAKCWVsc2UKCQlyZXR1cm4gMQoJZmkKfQoKIyBtYW5hZ2UgbWVzc2FnZXMgYXMgc2Ny
ZWVuIG91dHB1dCBvciBzZXJ2aWNlIHN0YXR1cwpmdW5jdGlvbiBtZXNzYWdlIHsJCgljYXNlICQx
IGluCgkJd2FybiApCgkJCWVjaG8gLWUgIiQyIiA+PiAkRVJSCgkJCWVjaG8gLWUgIiQyIiA+JjIK
CQkJOzsKCQlmYWlsICkKCQkJZWNobyAtZSAiJDIiID4+ICRFUlIKCQkJZWNobyAtZSAiJDIiID4m
MgoJCQlzZW5kX2xvZwoJCQlybSAtcmYgJFRFTVBfRElSCgkJCXJtIC1mICREQVRBQkFTRS8ucnVu
CgkJCWV4aXQgNQoJCQk7OwoJCWluZm8gKQoJCQllY2hvIC1lICIkMiIKCQkJOzsKCQlmaW5pc2gg
KQoJCQlpZiBzZW5kX2xvZzsgdGhlbgoJCQkJZWNobyAtZSAiVGhlcmUgd2VyZSBlcnJvcnMuXG4k
KGNhdCAkRVJSKSIKCQkJZmkKCQkJZWNobyAtZSAiJDIiCgkJCTs7CgkJYWJvcnQgKQoJCQllY2hv
IC1lICIkMiIKCQkJcm0gLXJmICRURU1QX0RJUgoJCQlleGl0IDEKCQkJOzsKCWVzYWMKfQoKIyBS
ZXR1cm5zIFRSVUUgaWYgc3VwcGxpZWQgbGluZSBpbiBub3QgYSBjb21tZW50CmZ1bmN0aW9uIHZh
bGlkYXRlX2xpbmUgewoJTE49JEAKCVsgISAiJChlY2hvICRMTiB8IGdyZXAgLUUgJ14jJykiID0g
IiRMTiIgXQp9CgojIFJldHVybnMgVFJVRSBpZiBzdXBwbGllZCBlbWFpbCBpcyB2YWlkIGZvcm1h
dApmdW5jdGlvbiB2YWxpZGF0ZV9lbWFpbCB7CgllY2hvICIkMSIgfCBncmVwIC1xRSAnXltbOmFs
bnVtOl1fLVwuXStAKFtbOmFsbnVtOl1fLV0rXC4pK1tbOmFscGhhOl1dezIsM30oXC5bWzphbHBo
YTpdXXsyLDN9KT8kJwp9CgojIExvYWQgY2xhc3MgZmlsZXMKZnVuY3Rpb24gbG9hZF9jb25maWcg
ewoJbG9jYWwgVkFSCglsb2NhbCBWQUwKCWxvY2FsIFJFUVVJUkVEPTgKCWxvY2FsIFJFUVVJUkVf
TUFJTFRPPTAKCWxvY2FsIFJFUVVJUkVfQ0xBU1M9MQoJbG9jYWwgUkVRVUlSRV9MT0c9MQoJbG9j
YWwgUkVRVUlSRV9FTUFJTD0xCglsb2NhbCBTRVRfRU1BSUw9MAoJbG9jYWwgUkVRVUlSRV9FWEVD
VVRFPTEKCWxvY2FsIFJFUVVJUkVfSEFMVD0xCglsb2NhbCBSRVFVSVJFX09OX0JPT1Q9MQoJbG9j
YWwgUkVRVUlSRV9BTEdPUkhZVEhNPTEKCWxvY2FsIFJFUVVJUkVfRlJFUVVFTkNZPTEKCWxvY2Fs
IGRhdGFzZXQKCWxvY2FsIG4KCXsKCXdoaWxlIHJlYWQ7IGRvCgkJaWYgdmFsaWRhdGVfbGluZSAk
UkVQTFk7IHRoZW4KCQkJVkFSPSQoZWNobyAkUkVQTFkgfCBjdXQgLWQ9IC1mMSkKCQkJVkFMPSQo
ZWNobyAkUkVQTFkgfCBjdXQgLWQ9IC1mMikKCQkJY2FzZSAkVkFSIGluCgkJCQlDTEFTUyApCgkJ
CQkJaWYgWyAhICIkKGJhc2VuYW1lICRWQUwpIiA9ICIkKGJhc2VuYW1lICQxKSIgXTsgdGhlbgoJ
CQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBJbmNvcnJlY3QgY2xhc3MgZGVjbGFyYXRpb24gaW4g
JHsxfS4iCgkJCQkJZWxpZiAoKFJFUVVJUkVfQ0xBU1M9PTApKTsgdGhlbgoJCQkJCQltZXNzYWdl
IGZhaWwgIkVSUk9SISBEdXBsaWNhdGUgY2xhc3MgZGVjbGFyYXRpb24gaW4gJHsxfS4iCgkJCQkJ
ZmkKCQkJCQlkYXRhc2V0WzBdPSRWQUwKCQkJCQkoKFJFUVVJUkVELS0pKQoJCQkJCVJFUVVJUkVf
Q0xBU1M9MAoJCQkJCTs7CgkJCQlMT0cgKQoJCQkJCWlmICgoUkVRVUlSRV9MT0c9PTApKTsgdGhl
bgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsaWNhdGUgTE9HIGRpcmVjdGl2ZSBpbiAk
ezF9LiIKCQkJCQllbGlmIFsgJChlY2hvICRWQUwgfCBncmVwIC1FYyAnKFRSVUUpfChGQUxTRSkn
KSA9IDAgXTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBMT0cgZGlyZWN0aXZlIGNh
biBvbmx5IGJlICdUUlVFJyBvciAnRkFMU0UnLiIKCQkJCQlmaQoJCQkJCWRhdGFzZXRbMV09JFZB
TAoJCQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9MT0c9MAoJCQkJCTs7CgkJCQlFTUFJ
TCApCgkJCQkJaWYgKChSRVFVSVJFX0VNQUlMPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWls
ICJFUlJPUiEgRHVwbGljYXRlIEVNQUlMIGRpcmVjdGl2ZSBpbiAkezF9LiIKCQkJCQllbGlmIFsg
JChlY2hvICRWQUwgfCBncmVwIC1FYyAnKFRSVUUpfChGQUxTRSknKSA9IDAgXTsgdGhlbgoJCQkJ
CQltZXNzYWdlIGZhaWwgIkVSUk9SISBFTUFJTCBkaXJlY3RpdmUgY2FuIG9ubHkgYmUgJ1RSVUUn
IG9yICdGQUxTRScuIgoJCQkJCWZpCgkJCQkJaWYgWyAiJFZBTCIgPSAnVFJVRScgXSAmJiAoKFNF
VF9FTUFJTD09MCkpOyB0aGVuCgkJCQkJCVJFUVVJUkVfTUFJTFRPPTEKCQkJCQkJKChSRVFVSVJF
RCsrKSkKCQkJCQlmaSAKCQkJCQlkYXRhc2V0WzNdPSRWQUwKCQkJCQkoKFJFUVVJUkVELS0pKQoJ
CQkJCVJFUVVJUkVfRU1BSUw9MAoJCQkJCTs7CgkJCQlNQUlMVE8gKQoJCQkJCWlmICgoU0VUX0VN
QUlMPT0xKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRHVwbGljYXRlIE1BSUxU
TyBkaXJlY3RpdmUgaW4gJHsxfS4iCgkJCQkJZmkKCQkJCQlpZiAoKFJFUVVJUkVfTUFJTFRPPT0x
KSkgJiYgWyAiJFZBTCIgPSAnJyBdOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIE1p
c3NpbmcgZW1haWwgYWRkcmVzcyBpbiAkezF9LiIKCQkJCQlmaQoJCQkJCWlmIFsgISAiJFZBTCIg
PSAnJyBdOyB0aGVuCgkJCQkJCWlmIHZhbGlkYXRlX2VtYWlsICRWQUw7IHRoZW4KCQkJCQkJCWRh
dGFzZXRbM109JFZBTAoJCQkJCQllbHNlCgkJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBFbWFp
bCBhZGRyZXNzIGZvcm1hdCBpcyBub3QgdmFsaWQgaW4gJHsxfS4iCgkJCQkJCWZpCgkJCQkJZmkK
CQkJCQlpZiAoKFJFUVVJUkVfTUFJTFRPPT0xKSk7IHRoZW4KCQkJCQkJKChSRVFVSVJFRC0tKSkK
CQkJCQkJUkVRVUlSRV9NQUlMVE89MAoJCQkJCWZpCgkJCQkJOzsKCQkJCUVYRUNVVEUgKQoJCQkJ
CWlmICgoUkVRVUlSRV9FWEVDVVRFPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJP
UiEgRHVwbGNhdGUgRVhFQ1VURSBkaXJlY3RpdmUgaW4gJHsxfS4iCgkJCQkJZmkKCQkJCQlWQUxG
SUxFPSQoZWNobyAkVkFMIHwgY3V0IC1kJyAnIC1mMSkKCQkJCQlpZiBbIC1mICRWQUxGSUxFIF0g
JiYgWyAhIC14ICRWQUxGSUxFIF07IHRoZW4KCQkJCQkJbWVzc2FnZSB3YXJuICJXQVJOSU5HISAn
JHtWQUxGSUxFfScgY2Fubm90IGJlIGZvdW5kIGluICR7MX0uIgoJCQkJCWZpCgkJCQkJZGF0YXNl
dFs0XT0kVkFMCgkJCQkJKChSRVFVSVJFRC0tKSkKCQkJCQlSRVFVSVJFX0VYRUNVVEU9MAoJCQkJ
CTs7CgkJCQlIQUxUICkKCQkJCQlpZiAoKFJFUVVJUkVfSEFMVD09MCkpOyB0aGVuCgkJCQkJCW1l
c3NhZ2UgZmFpbCAiRVJST1IhIER1cGxpY2F0ZSBIQUxUIGRpcmVjdGl2ZSBpbiAkezF9LiIKCQkJ
CQllbGlmIFsgJChlY2hvICRWQUwgfCBncmVwIC1FYyAnKFRSVUUpfChGQUxTRSknKSA9IDAgXTsg
dGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBIQUxUIGRpcmVjdGl2ZSBjYW4gb25seSBi
ZSAnVFJVRScgb3IgJ0ZBTFNFJy4iCgkJCQkJZmkKCQkJCQlkYXRhc2V0WzVdPSRWQUwKCQkJCQko
KFJFUVVJUkVELS0pKQoJCQkJCVJFUVVJUkVfSEFMVD0wCgkJCQkJOzsKCQkJCUFMR09SSFlUSE0g
KQoJCQkJCWlmICgoUkVRVUlSRV9BTEdPUkhZVEhNPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBm
YWlsICJFUlJPUiEgRHVwbGljYXRlIEFMR09SSFlUSE0gZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJ
CWZpCgkJCQkJY2FzZSAkVkFMIGluCgkJCQkJCU1ENSApCgkJCQkJCQlWQUw9bWQ1c3VtCgkJCQkJ
CQlCWVRFUz0zMgoJCQkJCQkJOzsKCQkJCQkJU0hBMSApCgkJCQkJCQlWQUw9c2hhMXN1bQoJCQkJ
CQkJQllURVM9NDAKCQkJCQkJCTs7CgkJCQkJCVNIQTIyNCApCgkJCQkJCQlWQUw9c2hhMjI0c3Vt
CgkJCQkJCQlCWVRFUz01NgoJCQkJCQkJOzsKCQkJCQkJU0hBMjU2ICkKCQkJCQkJCVZBTD1zaGEy
NTZzdW0KCQkJCQkJCUJZVEVTPTY0CgkJCQkJCQk7OwoJCQkJCQlTSEEzODQgKQoJCQkJCQkJVkFM
PXNoYTM4NHN1bQoJCQkJCQkJQllURVM9OTYKCQkJCQkJCTs7CgkJCQkJCVNIQTUxMiApCgkJCQkJ
CQlWQUw9c2hhNTEyc3VtCgkJCQkJCQlCWVRFUz0xMjgKCQkJCQkJCTs7CgkJCQkJCSogKQoJCQkJ
CQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgSW52YWxpZCBjaGVja3N1bSB0eXBlIGZvciBBTEdPUkhZ
VEhNIGRpcmVjdGl2ZSBpbiAkezF9LgpNdXN0IGJlICdNRDUnLCAnU0hBMScsICdTSEEyMjQnLCAn
U0hBMjU2JywgJ1NIQTM4NCcgb3IgJ1NIQTUxMicuIgoJCQkJCQkJOzsKCQkJCQllc2FjCgkJCQkJ
ZGF0YXNldFs2XT0kVkFMCgkJCQkJZGF0YXNldFs3XT0kQllURVMKCQkJCQkoKFJFUVVJUkVELS0p
KQoJCQkJCVJFUVVJUkVfQUxHT1JIWVRITT0wCgkJCQkJOzsKCQkJCUZSRVFVRU5DWSApCgkJCQkJ
aWYgKChSRVFVSVJFX0ZSRVFVRU5DWT09MCkpOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJS
T1IhIER1cGxpY2F0ZSBGUkVRVUVOQ1kgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVsaWYgWyAh
ICIkVkFMIiA9ICczME1JTicgXSAmJiBbICEgIiRWQUwiID0gJ0hPVVInIF0gJiYgWyAhICIkVkFM
IiA9ICdEQUlMWScgXSAmJiBbICEgIiRWQUwiID0gJ05FVkVSJyBdOyB0aGVuCgkJCQkJCW1lc3Nh
Z2UgZmFpbCAiRVJST1IhIEludmFsaWQgRlJFUVVFTkNZIGRpcmVjdGl2ZSBpbiAkezF9LgpNdXN0
IGJlICczME1JTicsICdIT1VSJywgJ0RBSUxZJyBvciAnTkVWRVInLiIKCQkJCQlmaQoJCQkJCWRh
dGFzZXRbOF09JFZBTAoJCQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9GUkVRVUVOQ1k9
MAoJCQkJCTs7CgkJCQlPTl9CT09UICkKCQkJCQlpZiAoKFJFUVVJUkVfT05fQk9PVD09MCkpOyB0
aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIER1cGxpY2F0ZSBPTl9CT09UIGRpcmVjdGl2
ZSBpbiAkezF9LiIKCQkJCQllbGlmIFsgJChlY2hvICRWQUwgfCBncmVwIC1FYyAnKFRSVUUpfChG
QUxTRSknKSA9IDAgXTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBPTl9CT09UIGRp
cmVjdGl2ZSBjYW4gb25seSBiZSAnVFJVRScgb3IgJ0ZBTFNFJy4iCgkJCQkJZmkKCQkJCQlkYXRh
c2V0WzldPSRWQUwKCQkJCQkoKFJFUVVJUkVELS0pKQoJCQkJCVJFUVVJUkVfT05fQk9PVD0wCgkJ
CQkJOzsKCQkJCSogKQoJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIFVua25vd24gZGlyZWN0aXZl
ICcke1ZBUn0nIGluICR7MX0uIgoJCQkJCTs7CgkJCWVzYWMKCQlmaQoJZG9uZQoJfSA8ICQxCglp
ZiAoKFJFUVVJUkVEIT0wKSk7IHRoZW4KCQltZXNzYWdlIGZhaWwgIkVSUk9SISBJbmNvbXBsZXRl
IGNsYXNzIGRlZmluaXRpb24gaW4gJyR7MX0nLiIKCWZpCglpZiBbICIke2RhdGFzZXRbOF19IiA9
ICczME1JTicgXTsgdGhlbgoJCW49JHsjQ0xBU1NfREVGX0NMQVNTW0BdfQoJCUNMQVNTX0RFRl9D
TEFTU1skbl09JHtkYXRhc2V0WzBdfQoJCUNMQVNTX0RFRl9MT0dbJG5dPSR7ZGF0YXNldFsxXX0K
CQlDTEFTU19ERUZfRU1BSUxbJG5dPSR7ZGF0YXNldFsyXX0KCQlDTEFTU19ERUZfTUFJTFRPWyRu
XT0ke2RhdGFzZXRbM119CgkJQ0xBU1NfREVGX0VYRUNVVEVbJG5dPSR7ZGF0YXNldFs0XX0KCQlD
TEFTU19ERUZfSEFMVFskbl09JHtkYXRhc2V0WzVdfQoJCUNMQVNTX0RFRl9BTEdPUkhZVEhNWyRu
XT0ke2RhdGFzZXRbNl19CgkJQ0xBU1NfREVGX0JZVEVTWyRuXT0ke2RhdGFzZXRbN119CgkJQ0xB
U1NfREVGX0ZSRVFVRU5DWVskbl09JHtkYXRhc2V0WzhdfQoJCUNMQVNTX0RFRl9PTl9CT09UWyRu
XT0ke2RhdGFzZXRbOV19CglmaQp9CgojIFByb2Nlc3MgY2xhc3MgZmlsZXMKZnVuY3Rpb24gcHJv
Y2Vzc19jbGFzc2VzIHsKCWxvY2FsIENMQVNTRVMKCWxvY2FsIHgKCWlmIFsgISAtZCAkQ0xBU1Nf
RElSIF07IHRoZW4KCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEaXJlY3RvcnkgJyR7Q0xBU1NfRElS
fScgbm90IGFjY2Vzc2libGUuIgoJZmkKCUNMQVNTRVM9JChscyAkQ0xBU1NfRElSIHwgZ3JlcCAt
dkUgJ1tbOnB1bmN0Ol1dJykKCWlmICgoJHsjQ0xBU1NFU1tAXX09PTApKTsgdGhlbgoJCW1lc3Nh
Z2UgZmFpbCAiRVJST1IhIE5vIGNsYXNzZXMgZGVmaW5lZCBpbiAnJHtDTEFTU19ESVJ9Jy4iCglm
aQoJZm9yIHggaW4gJHtDTEFTU0VTW0BdfTsgZG8KCQlsb2FkX2NvbmZpZyAkQ0xBU1NfRElSLyR4
Cglkb25lCn0KCiMgTG9hZCB0aGUgZmlsZSBsaXN0CmZ1bmN0aW9uIGxvYWRfZmlsZV9saXN0IHsK
CWxvY2FsIEZJTEU9JFRFTVBfRElSL2xpc3QKCWxvY2FsIG49MAoJbG9jYWwgRk4KCXVuc2V0IENM
QVNTX0xJU1QKCWlmIFsgISAtZiAkQ09ORi9saXN0cy5jb25mIF07IHRoZW4KCQltZXNzYWdlIGZh
aWwgIkVSUk9SISBGaWxlICR7Q09ORn0vbGlzdHMuY29uZiBjb3VsZCBub3QgYmUgZm91bmQuIgoJ
ZmkKCWlmIFsgISAtZiAkQ0xBU1NfRElSLyQxIF07IHRoZW4KCQltZXNzYWdlIGZhaWwgIkVSUk9S
ISBVbmtub3duIGNsYXNzICckezF9Jy4iCglmaQoJZ3JlcCAtRSAiXlteI11bWzpwcmludDpdXStb
WzpzcGFjZTpdXSskezF9W1s6c3BhY2U6XV0qJCIgJENPTkYvbGlzdHMuY29uZiB8IGN1dCAtZjEg
PiAkRklMRQoJewoJd2hpbGUgcmVhZDsgZG8KCQl0ZXN0IC1hICRSRVBMWQoJCVJDPSQ/CgkJaWYg
KChSQyE9MCkpOyB0aGVuCgkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIE5vbiBleGlzdGVudCBmaWxl
IG9yIGRpcmVjdG9yeSBhdCAnJHtSRVBMWX0nIGluICR7Q09ORn0vbGlzdHMuY29uZi4iCgkJZmkK
CQlDTEFTU19MSVNUWyRuXT0kUkVQTFkKCQkoKG4rKykpCglkb25lCgl9IDwgJEZJTEUKfQoKIyBM
b2FkcyB0aGUgZmlsZXMgYW5kIGNoZWNrc3VtcyBmcm9tIHRoZSBkYXRhYmFzZQpmdW5jdGlvbiBs
b2FkX2RhdGFiYXNlIHsKICAgICAgICBsb2NhbCBuPTAKICAgICAgICBsb2NhbCB4CiAgICAgICAg
dW5zZXQgRklMRV9MSVNUCiAgICAgICAgdW5zZXQgQ0hLU1VNX0xJU1QKICAgICAgICBtZXNzYWdl
IHZlcmJvc2UgIkxvYWRpbmcgY2hlY2tzdW0gZGF0YWJhc2UgZnJvbSAnJHtEQVRBQkFTRX0vJDEn
LiIKICAgICAgICBpZiBbICEgLWYgJENMQVNTX0RJUi8kMSBdOyB0aGVuCiAgICAgICAgICAgICAg
ICBtZXNzYWdlIGZhaWwgIkVSUk9SISBVbmtub3duIGNsYXNzICckezF9Jy4iCiAgICAgICAgZmkK
ICAgICAgICAjYmFzZTY0IC1kaSAkREFUQUJBU0UvJDEuaWRiID4gJFRFTVBfRElSLyQxfgogICAg
ICAgICNmb3IgeCBpbiAkKGN1dCAtZCAnICcgLWYzICRURU1QX0RJUi8kMX4pOyBkbwogICAgICAg
IGZvciB4IGluICQoY3V0IC1kICcgJyAtZjMgJERBVEFCQVNFLyQxLmlkYik7IGRvCiAgICAgICAg
ICAgICAgICBGSUxFX0xJU1RbJG5dPSR4CiAgICAgICAgICAgICAgICAoKG4rKykpCiAgICAgICAg
ZG9uZQogICAgICAgIG49MAogICAgICAgICNmb3IgeCBpbiAkKGN1dCAtZCcgJyAtZjEgJFRFTVBf
RElSLyQxfik7IGRvCiAgICAgICAgZm9yIHggaW4gJChjdXQgLWQnICcgLWYxICREQVRBQkFTRS8k
MS5pZGIpOyBkbwogICAgICAgICAgICAgICAgQ0hLU1VNX0xJU1RbJG5dPSR4CiAgICAgICAgICAg
ICAgICAoKG4rKykpCiAgICAgICAgZG9uZQp9CgojIFJldHVybnMgdGhlIGtleSBiYXNlZCBvbiB2
YWx1ZSBvZiBhcnJheSAobm9uIGdlbmVyaWMgdmVyc2lvbikKZnVuY3Rpb24gYXJyYXlfc2VhcmNo
IHsKCWxvY2FsIG49MAoJbG9jYWwgeAoJbG9jYWwgRk9VTkQ9MAoJZm9yIHggaW4gJHtGSUxFX0xJ
U1RbQF19OyBkbwoJCWlmIFsgIiR4IiA9ICIkMSIgXTsgdGhlbgoJCQlGT1VORD0xCgkJCWJyZWFr
CgkJZWxzZQoJCQkoKG4rKykpCgkJZmkKCWRvbmUKCWlmICgoRk9VTkQ9PTEpKTsgdGhlbgoJCWVj
aG8gJG4KCWZpCn0KCiMgU2VuZCB2aW9sYXRpb24gZW1haWwKZnVuY3Rpb24gc2VuZF92aW9sYXRp
b25fbm90aWNlIHsKCWxvY2FsIG49JDEKCWlmIFsgLW4gIiRWSU9MQVRJT04iIF07IHRoZW4KCQll
Y2hvIC1lICJEZWFyICQoaG9zdG5hbWUpIEFkbWluaXN0cmF0b3IsCgpBQyBJbnRlZ3JpdHkgaGFz
IGRldGVjdGVkIGEgZmlsZSBzZWN1cml0eSB2aW9sYXRpb24uIFRvIHByZXZlbnQgdGhpcyBtZXNz
YWdlIGJlaW5nIHNlbnQgcmVwZWF0ZWRseSwgeW91IGFyZSByZXF1aXJlZCB0byB0YWtlIGFjdGlv
bi4gSWYgdGhpcyBtZXNzYWdlIGlzIGEgZmFsc2UgcG9zaXRpdmUsIHlvdSBtYXkgd2lzaCB0byBy
ZW1vdmUgdGhlIGZpbGUvcyBmcm9tIHRoZSBtb25pdG9yaW5nIGxpc3QgaW4gL2V0Yy9BQy1JbnRl
Z3JpdHkvbGlzdHMuY29uZi4gT3IgeW91IGNhbiB1cGRhdGUgdGhlIEFDIEludGVncml0eSBkYXRh
YmFzZSBieSBydW5uaW5nICdBQy1JbnRlZ3JpdHkgdXBkYXRlLWRiJy4gT3RoZXJ3aXNlIHRoaXMg
dmlvbGF0aW9uIG1heSBtZWFuIHRoYXQgJChob3N0bmFtZSkgaGFzIGhhZCBhIHJlYWwgc2VjdXJp
dHkgYnJlYWNoLgoKSE9TVE5BTUU6ICQoaG9zdG5hbWUpCkNMQVNTOiAke0NMQVNTX0RFRl9DTEFT
U1tuXX0KClRoZSBmb2xsb3dpbmcgZmlsZXMgZmFpbGVkIHZhbGlkYXRpb246CiRWSU9MQVRJT04K
Ci4KCiIgPiAkVEVNUF9ESVIvbWFpbAoJCW1haWwgLXMgIkFDIEludGVncml0eSB0YW1wZXIgbm90
aWZpY2F0aW9uIGZvciAnJChob3N0bmFtZSknIiAke0NMQVNTX0RFRl9NQUlMVE9bbl19IDwgJFRF
TVBfRElSL21haWwKCWZpCn0KCiMgSGFuZGxlIGEgc2VjdXJpdHkgdmlvbGF0aW9uIGFjY29yZGlu
ZyB0byBjbGFzcyBzcGVjaWZpY2F0aW9uCmZ1bmN0aW9uIGhhbmRsZV92aW9sYXRpb24gewoJbG9j
YWwgbj0kMQoJbG9jYWwgRk49JDIKCWxvY2FsIENMQVNTPSQzCgltZXNzYWdlIGluZm8gIklORk8h
IEZpbGUgJEZOIGhhcyBiZWVuIHRhbXBlcmVkIHdpdGguIgoJZWNobyAiJChkYXRlICcrJUYgJVQn
KSAkRk4gaW4gY2xhc3MgJyRDTEFTUyciID4+ICREQVRBQkFTRS92aW9sYXRpb25zLmNhY2hlCglp
ZiBbICIke0NMQVNTX0RFRl9MT0dbbl19IiA9ICJUUlVFIiBdOyB0aGVuCgkJbG9nZ2VyIC1wIGF1
dGguY3JpdCAiQUMgSW50ZWdyaXR5IHJlcG9ydHMgZmlsZSBzZWN1cml0eSB2aW9sYXRpb24gaW4g
JEZOLiBGaWxlIG1vbml0b3JlZCBpbiBjbGFzcyAnJHtDTEFTU30nLiIKCWZpCglpZiBbICIke0NM
QVNTX0RFRl9FTUFJTFtuXX0iID0gIlRSVUUiIF07IHRoZW4KCQlWSU9MQVRJT049IiRWSU9MQVRJ
T05cbiRGTiIKCWZpCglpZiBbIC1uICIke0NMQVNTX0RFRl9FWEVDVVRFW25dfSIgXTsgdGhlbgoJ
CSR7Q0xBU1NfREVGX0VYRUNVVEVbbl19IDI+ICRFUlIKCWZpCglpZiBbICIke0NMQVNTX0RFRl9I
QUxUW25dfSIgPSAnVFJVRScgXTsgdGhlbgoJCWxvZ2dlciAqLmVtZXJnICJBIHNlY3VyaXR5IHZp
b2xhdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBhbmQgc3lzdGVtIGlzIHNodXR0aW5nIGRvd24gbm93
LiIKCQlWSU9MQVRJT049IiRWSU9MQVRJT05cblxuT3RoZXIgZmlsZXMgbWF5IGFsc28gaGF2ZSBm
YWlsZWQgdmFsaWRhdGlvbi4gSG93ZXZlciwgY2xhc3MgJyR7Q0xBU1N9JyBpcyBjb25maWd1cmVk
IHRvIHNodXRkb3duIHRoZSBzeXN0ZW0gYXMgc29vbiBhcyBhIHZpb2xhdGlvbiBoYXMgYmVlbiBk
ZXRlY3RlZC4gJChob3N0bmFtZSkgaXMgc2h1dHRpbmcgZG93biBub3cuIgoJCXNlbmRfdmlvbGF0
aW9uX25vdGljZSAkbgoJCXJtIC1yZiAke1RFTVBfRElSfQoJCXJtIC1mICREQVRBQkFTRS8ucnVu
CgkJc3luYwoJCXNsZWVwIDUKCQlzaHV0ZG93biAtaCBub3cKCWZpCn0KCiMgUGVyZm9ybSBhbiBv
bi1kZW1hbmQgY2hlY2sKZnVuY3Rpb24gY2hlY2tfaW50ZWdyaXR5IHsKCWxvY2FsIG49MAoJbG9j
YWwgaQoJbG9jYWwgeAoJbG9jYWwgeQoJbG9jYWwgegoJbG9jYWwgYQoJcHJvY2Vzc19jbGFzc2Vz
CglpZiBbICEgLWQgJERBVEFCQVNFIF07IHRoZW4KCQltZXNzYWdlIGZhaWwgIkVSUk9SISBObyBk
YXRhYmFzZSBmb3VuZCBhdCAkREFUQUJBU0UuIgoJZmkKCWZvciB4IGluICR7Q0xBU1NfREVGX0NM
QVNTW0BdfTsgZG8KCQl1bnNldCBWSU9MQVRJT04KCQlsb2FkX2ZpbGVfbGlzdCAkeAoJCWxvYWRf
ZGF0YWJhc2UgJHgKCQlmb3IgeSBpbiAke0NMQVNTX0xJU1RbQF19OyBkbwoJCQlpZiBbIC1kICR5
IF07IHRoZW4KCQkJCXJtIC1mICRURU1QX0RJUi9kaXJjb250CgkJCQl0b3VjaCAkVEVNUF9ESVIv
ZGlyY29udAoJCQkJZm9yIHogaW4gJChscyAtUiAkeSB8IGdyZXAgLUUgJ14vW1s6cHJpbnQ6XV0r
OiQnKTsgZG8KCQkJCQlMRU5HVEg9JCgoJHsjen0tMSkpCgkJCQkJej0ke3o6MDokTEVOR1RIfQoJ
CQkJCWZvciBhIGluICQobHMgLUEgJHopOyBkbwoJCQkJCQlpZiBbIC1mICR6LyRhIF07IHRoZW4K
CQkJCQkJCU5FV19DSEtTVU09JCgke0NMQVNTX0RFRl9BTEdPUkhZVEhNW25dfSAtYiAkei8kYSkK
CQkJCQkJCWVjaG8gIiR7TkVXX0NIS1NVTX0iID4+ICRURU1QX0RJUi9kaXJjb250CgkJCQkJCQlp
PSQoYXJyYXlfc2VhcmNoICR6LyRhKQoJCQkJCQkJaWYgWyAteiAiJGkiIF07IHRoZW4KCQkJCQkJ
CQltZXNzYWdlIHdhcm5pbmcgIldBUk5JTkchIFNwZWNpZmllZCBmaWxlICR7en0vJHthfSBub3Qg
Zm91bmQgaW4gZGF0YWJhc2UuIgoJCQkJCQkJZmkKCQkJCQkJCU5FV19DSEtTVU09JHtORVdfQ0hL
U1VNOjA6JHtDTEFTU19ERUZfQllURVNbbl19fQoJCQkJCQkJaWYgWyAhICIke05FV19DSEtTVU19
IiA9ICIke0NIS1NVTV9MSVNUW2ldfSIgXTsgdGhlbgoJCQkJCQkJCWhhbmRsZV92aW9sYXRpb24g
JG4gJHovJGEgJHgKCQkJCQkJCWZpCgkJCQkJCWZpCgkJCQkJZG9uZQoJCQkJZG9uZQoJCQkJTkVX
X0NIS1NVTT0kKCR7Q0xBU1NfREVGX0FMR09SSFlUSE1bbl19IC1iICR7VEVNUF9ESVJ9L2RpcmNv
bnQgfCBjdXQgLWQnICcgLWYxKQoJCQkJaT0kKGFycmF5X3NlYXJjaCAkeSkKCQkJCWlmIFsgLXog
IiRpIiBdOyB0aGVuCgkJCQkJbWVzc2FnZSB3YXJuaW5nICJXQVJOSU5HISBTcGVjaWZpZWQgZGly
ZWN0b3J5ICR7eX0gbm90IGZvdW5kIGluIGRhdGFiYXNlLiIKCQkJCWZpCgkJCQlORVdfQ0hLU1VN
PSR7TkVXX0NIS1NVTTowOiR7Q0xBU1NfREVGX0JZVEVTW25dfX0KCQkJCWlmIFsgISAiJHtORVdf
Q0hLU1VNfSIgPSAiJHtDSEtTVU1fTElTVFtpXX0iIF07IHRoZW4KCQkJCQloYW5kbGVfdmlvbGF0
aW9uICRuICR5ICR4CgkJCQlmaQoJCQllbHNlCgkJCQlORVdfQ0hLU1VNPSQoJHtDTEFTU19ERUZf
QUxHT1JIWVRITVtuXX0gLWIgJHkgfCBjdXQgLWQnICcgLWYxKQoJCQkJaT0kKGFycmF5X3NlYXJj
aCAkeSkKCQkJCWlmIFsgLXogIiRpIiBdOyB0aGVuCgkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEg
U3BlY2lmaWVkIGZpbGUgJHt5fSBub3QgZm91bmQgaW4gZGF0YWJhc2UuIgoJCQkJZmkKCQkJCU5F
V19DSEtTVU09JHtORVdfQ0hLU1VNOjA6JHtDTEFTU19ERUZfQllURVNbbl19fQoJCQkJaWYgWyAh
ICIke05FV19DSEtTVU19IiA9ICIke0NIS1NVTV9MSVNUW2ldfSIgXTsgdGhlbgoJCQkJCWhhbmRs
ZV92aW9sYXRpb24gJG4gJHkgJHgKCQkJCWZpCgkJCWZpCgkJZG9uZQoJCXNlbmRfdmlvbGF0aW9u
X25vdGljZSAkbgoJCSgobisrKSkKCWRvbmUKfQoKIyBleGl0IGNsZWFubHkgb24gQ1RSTC1DCmZ1
bmN0aW9uIHRyYXBfYWJvcnQgewoJcm0gLWYgJERBVEFCQVNFLy5ydW4KCW1lc3NhZ2UgYWJvcnQg
IkFib3J0ZWQgYnkgdXNlciBvciBhbm90aGVyIHByb2Nlc3MuIgp9CgojIFBBUlNFIFVTRVIgT1BU
SU9OUwppZiBbICEgIiQod2hvYW1pKSIgPSAncm9vdCcgXTsgdGhlbgoJbWVzc2FnZSBhYm9ydCAn
WW91IG11c3QgYmUgcm9vdCB0byBydW4gdGhpcyBjb21tYW5kLicKZmkKaWYgWyAhIC1mICREQVRB
QkFTRS8uc2Vzc2lvbiBdIHx8IFsgISAiJChjYXQgJERBVEFCQVNFLy5zZXNzaW9uKSIgPSAiJCh1
cHRpbWUgLXMpIiBdOyB0aGVuCgl1cHRpbWUgLXMgPiAkREFUQUJBU0UvLnNlc3Npb24KCXJtIC1m
ICREQVRBQkFTRS8ucnVuIDI+Ji0KZmkKaWYgWyAtZiAkREFUQUJBU0UvLnJ1biBdOyB0aGVuCglt
ZXNzYWdlIGFib3J0ICJBQyBJbnRlZ3JpdHkgaXMgY3VycmVudGx5IHBlcmZvcm1pbmcgJChjYXQg
JHtEQVRBQkFTRX0vLnJ1bikgb3BlcmF0aW9ucy4gClBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIgpm
aQp0cmFwIHRyYXBfYWJvcnQgS0lMTCBJTlQgQUJSVCBURVJNCmNkIC8KaWYgWyAhIC1kICRURU1Q
X0RJUiBdOyB0aGVuCglta2RpciAtcCAkVEVNUF9ESVIKCWNobW9kIDA3MDAgJFRFTVBfRElSIDI+
PiAkRVJSCmZpCmVjaG8gJ2JhY2tncm91bmQgdmVyaWZpY2F0aW9uJyA+ICREQVRBQkFTRS8ucnVu
CmNoZWNrX2ludGVncml0eQpybSAtcmYgJHtURU1QX0RJUn0Kcm0gLWYgJERBVEFCQVNFLy5ydW4K
ZXhpdCAwCg==" | base64 -di - > "/sbin/acicheck_bihourly"; then
	rollback
fi
log_undo 'rm -f "/sbin/acicheck_bihourly"'
chown root:root "/sbin/acicheck_bihourly"
chmod 0500 "/sbin/acicheck_bihourly"
echo -e "Created file '/sbin/acicheck_bihourly'"
if ! echo "IyEvYmluL2Jhc2gKIwojICAgIE5BTUU6IEFDIEludGVncml0eSBob3VybHkgY3JvbgojIFZFUlNJ
T046IDEuMC4zCiMgIEFVVEhPUjogSm9leSBEb2JpYXMKIyAgICBEQVRFOiAyMDE2LTA2LTA0CiNN
T0RJRklFRDogMjAyMS0wNS0wNwojICAgTk9URVM6IFdha2VzIHVwIGVhY2ggaG91ciBhbmQgY2hl
Y2tzIGFsbCBjbGFzc2VzIHRoYXQgYXJlIG1hcmtlZCBIT1VSIGFuZAojICAgICAgICAgIDMwTUlO
IGluIHRoZWlyIEZSRVFVRU5DWSBkaXJlY3RpdmUuIENvZGUgaXMgYWx3YXlzIGJvcnJvd2VkIGZy
b20KIyAgICAgICAgICAvc2Jpbi9BQy1JbnRlZ3JpdHkgYnV0IHdpdGggcHJvZ3Jlc3MgbW9uaXRv
cmluZyBhbmQgdmVyYm9zZSBvdXRwdXQKIyAgICAgICAgICByZW1vdmVkLiBJdCBhbHNvIGNoZWNr
cyBEQUlMWSBjbGFzc2VzIGlmIG5vdCBydW4geWV0IHRvZGF5LgojCgojIERFQ0xBUkUgQ09OU1RB
TlRTCgovYmluL2Jhc2gKLiAvcm9vdC8uYmFzaF9wcm9maWxlID4gL2Rldi9udWxsCgpDT05GPS9l
dGMvYWNfaW50ZWdyaXR5CkNMQVNTX0RJUj0kQ09ORi9jbGFzc2VzClRFTVBfRElSPS92YXIvdG1w
L2FjaW50ZWdyaXR5CkVSUj0kVEVNUF9ESVIvZXJyb3IudHh0CkRBVEFCQVNFPS92YXIvYWNpbnRl
Z3JpdHkKUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgpWSU9MQVRJT049JycKCiMg
REVDTEFSRSBQUk9DRVNTSU5HIEZVTkNUSU9OUwoKIyBTZW5kcyBhbiBlcnJvciBsb2cgdG8gdGhl
IGFwcHJvcHJpYXRlIHBsYWNlCmZ1bmN0aW9uIHNlbmRfbG9nIHsKCWlmIFsgLXMgJEVSUiBdOyB0
aGVuCgkJbG9nZ2VyIC1wIGF1dGguZXJyIC1mICRFUlIKCQlyZXR1cm4gMAoJZWxzZQoJCXJldHVy
biAxCglmaQp9CgojIG1hbmFnZSBtZXNzYWdlcyBhcyBzY3JlZW4gb3V0cHV0IG9yIHNlcnZpY2Ug
c3RhdHVzCmZ1bmN0aW9uIG1lc3NhZ2UgewkKCWNhc2UgJDEgaW4KCQl3YXJuICkKCQkJZWNobyAt
ZSAiJDIiID4+ICRFUlIKCQkJZWNobyAtZSAiJDIiID4mMgoJCQk7OwoJCWZhaWwgKQoJCQllY2hv
IC1lICIkMiIgPj4gJEVSUgoJCQllY2hvIC1lICIkMiIgPiYyCgkJCXNlbmRfbG9nCgkJCXJtIC1y
ZiAkVEVNUF9ESVIKCQkJcm0gLWYgJERBVEFCQVNFLy5ydW4KCQkJZXhpdCA1CgkJCTs7CgkJaW5m
byApCgkJCWVjaG8gLWUgIiQyIgoJCQk7OwoJCWZpbmlzaCApCgkJCWlmIHNlbmRfbG9nOyB0aGVu
CgkJCQllY2hvIC1lICJUaGVyZSB3ZXJlIGVycm9ycy5cbiQoY2F0ICRFUlIpIgoJCQlmaQoJCQll
Y2hvIC1lICIkMiIKCQkJOzsKCQlhYm9ydCApCgkJCWVjaG8gLWUgIiQyIgoJCQlybSAtcmYgJFRF
TVBfRElSCgkJCWV4aXQgMQoJCQk7OwoJZXNhYwp9CgojIFJldHVybnMgVFJVRSBpZiBzdXBwbGll
ZCBsaW5lIGluIG5vdCBhIGNvbW1lbnQKZnVuY3Rpb24gdmFsaWRhdGVfbGluZSB7CglMTj0kQAoJ
WyAhICIkKGVjaG8gJExOIHwgZ3JlcCAtRSAnXiMnKSIgPSAiJExOIiBdCn0KCiMgUmV0dXJucyBU
UlVFIGlmIHN1cHBsaWVkIGVtYWlsIGlzIHZhaWQgZm9ybWF0CmZ1bmN0aW9uIHZhbGlkYXRlX2Vt
YWlsIHsKCWVjaG8gIiRAIiB8IGdyZXAgLXFFICJeW1s6YWxudW06XV8tXC5dK0AoW1s6YWxudW06
XV8tXStcLikrW1s6YWxwaGE6XV17MiwzfShcLltbOmFscGhhOl1dezIsM30pPyQiCn0KCiMgTG9h
ZCBjbGFzcyBmaWxlcwpmdW5jdGlvbiBsb2FkX2NvbmZpZyB7Cglsb2NhbCBuCglsb2NhbCBWQVIK
CWxvY2FsIFZBTAoJbG9jYWwgUkVRVUlSRUQ9OAoJbG9jYWwgUkVRVUlSRV9NQUlMVE89MAoJbG9j
YWwgUkVRVUlSRV9DTEFTUz0xCglsb2NhbCBSRVFVSVJFX0xPRz0xCglsb2NhbCBSRVFVSVJFX0VN
QUlMPTEKCWxvY2FsIFNFVF9FTUFJTD0wCglsb2NhbCBSRVFVSVJFX0VYRUNVVEU9MQoJbG9jYWwg
UkVRVUlSRV9IQUxUPTEKCWxvY2FsIFJFUVVJUkVfT05fQk9PVD0xCglsb2NhbCBSRVFVSVJFX0FM
R09SSFlUSE09MQoJbG9jYWwgUkVRVUlSRV9GUkVRVUVOQ1k9MQoJbG9jYWwgZGF0YXNldAoJewoJ
d2hpbGUgcmVhZDsgZG8KCQlpZiB2YWxpZGF0ZV9saW5lICRSRVBMWTsgdGhlbgoJCQlWQVI9JChl
Y2hvICRSRVBMWSB8IGN1dCAtZD0gLWYxKQoJCQlWQUw9JChlY2hvICRSRVBMWSB8IGN1dCAtZD0g
LWYyKQoJCQljYXNlICRWQVIgaW4KCQkJCUNMQVNTICkKCQkJCQlpZiBbICEgIiQoYmFzZW5hbWUg
JFZBTCkiID0gIiQoYmFzZW5hbWUgJDEpIiBdOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJS
T1IhIEluY29ycmVjdCBjbGFzcyBkZWNsYXJhdGlvbiBpbiAkezF9LiIKCQkJCQllbGlmICgoUkVR
VUlSRV9DTEFTUz09MCkpOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIER1cGxpY2F0
ZSBjbGFzcyBkZWNsYXJhdGlvbiBpbiAkezF9LiIKCQkJCQlmaQoJCQkJCWRhdGFzZXRbMF09JFZB
TAoJCQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9DTEFTUz0wCgkJCQkJOzsKCQkJCUxP
RyApCgkJCQkJaWYgKChSRVFVSVJFX0xPRz09MCkpOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAi
RVJST1IhIER1cGxpY2F0ZSBMT0cgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVsaWYgWyAkKGVj
aG8gJFZBTCB8IGdyZXAgLUVjICcoVFJVRSl8KEZBTFNFKScpID0gMCBdOyB0aGVuCgkJCQkJCW1l
c3NhZ2UgZmFpbCAiRVJST1IhIExPRyBkaXJlY3RpdmUgY2FuIG9ubHkgYmUgJ1RSVUUnIG9yICdG
QUxTRScuIgoJCQkJCWZpCgkJCQkJZGF0YXNldFsxXT0kVkFMCgkJCQkJKChSRVFVSVJFRC0tKSkK
CQkJCQlSRVFVSVJFX0xPRz0wCgkJCQkJOzsKCQkJCUVNQUlMICkKCQkJCQlpZiAoKFJFUVVJUkVf
RU1BSUw9PTApKTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsaWNhdGUgRU1B
SUwgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVsaWYgWyAkKGVjaG8gJFZBTCB8IGdyZXAgLUVj
ICcoVFJVRSl8KEZBTFNFKScpID0gMCBdOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1Ih
IEVNQUlMIGRpcmVjdGl2ZSBjYW4gb25seSBiZSAnVFJVRScgb3IgJ0ZBTFNFJy4iCgkJCQkJZmkK
CQkJCQlpZiBbICIkVkFMIiA9ICdUUlVFJyBdICYmICgoU0VUX0VNQUlMPT0wKSk7IHRoZW4KCQkJ
CQkJUkVRVUlSRV9NQUlMVE89MQoJCQkJCQkoKFJFUVVJUkVEKyspKQoJCQkJCWZpIAoJCQkJCWRh
dGFzZXRbMl09JFZBTAoJCQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9FTUFJTD0wCgkJ
CQkJOzsKCQkJCU1BSUxUTyApCgkJCQkJaWYgKChTRVRfRU1BSUw9PTEpKTsgdGhlbgoJCQkJCQlt
ZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsaWNhdGUgTUFJTFRPIGRpcmVjdGl2ZSBpbiAkezF9LiIK
CQkJCQlmaQoJCQkJCWlmICgoUkVRVUlSRV9NQUlMVE89PTEpKSAmJiBbICIkVkFMIiA9ICcnIF07
IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgTWlzc2luZyBlbWFpbCBhZGRyZXNzIGlu
ICR7MX0uIgoJCQkJCWZpCgkJCQkJaWYgWyAhICIkVkFMIiA9ICcnIF07IHRoZW4KCQkJCQkJaWYg
dmFsaWRhdGVfZW1haWwgJFZBTDsgdGhlbgoJCQkJCQkJZGF0YXNldFszXT0kVkFMCgkJCQkJCWVs
c2UKCQkJCQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIEVtYWlsIGFkZHJlc3MgZm9ybWF0IGlzIG5v
dCB2YWxpZCBpbiAkezF9LiIKCQkJCQkJZmkKCQkJCQlmaQoJCQkJCWlmICgoUkVRVUlSRV9NQUlM
VE89PTEpKTsgdGhlbgoJCQkJCQkoKFJFUVVJUkVELS0pKQoJCQkJCQlSRVFVSVJFX01BSUxUTz0w
CgkJCQkJZmkKCQkJCQk7OwoJCQkJRVhFQ1VURSApCgkJCQkJaWYgKChSRVFVSVJFX0VYRUNVVEU9
PTApKTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsY2F0ZSBFWEVDVVRFIGRp
cmVjdGl2ZSBpbiAkezF9LiIKCQkJCQlmaQoJCQkJCVZBTEZJTEU9JChlY2hvICRWQUwgfCBjdXQg
LWQnICcgLWYxKQoJCQkJCWlmIFsgLWYgJFZBTEZJTEUgXSAmJiBbICEgLXggJFZBTEZJTEUgXTsg
dGhlbgoJCQkJCQltZXNzYWdlIHdhcm4gIldBUk5JTkchICcke1ZBTEZJTEV9JyBjYW5ub3QgYmUg
Zm91bmQgaW4gJHsxfS4iCgkJCQkJZmkKCQkJCQlkYXRhc2V0WzRdPSRWQUwKCQkJCQkoKFJFUVVJ
UkVELS0pKQoJCQkJCVJFUVVJUkVfRVhFQ1VURT0wCgkJCQkJOzsKCQkJCUhBTFQgKQoJCQkJCWlm
ICgoUkVRVUlSRV9IQUxUPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRHVw
bGljYXRlIEhBTFQgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVsaWYgWyAkKGVjaG8gJFZBTCB8
IGdyZXAgLUVjICcoVFJVRSl8KEZBTFNFKScpID0gMCBdOyB0aGVuCgkJCQkJCW1lc3NhZ2UgZmFp
bCAiRVJST1IhIEhBTFQgZGlyZWN0aXZlIGNhbiBvbmx5IGJlICdUUlVFJyBvciAnRkFMU0UnLiIK
CQkJCQlmaQoJCQkJCWRhdGFzZXRbNV09JFZBTAoJCQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVR
VUlSRV9IQUxUPTAKCQkJCQk7OwoJCQkJQUxHT1JIWVRITSApCgkJCQkJaWYgKChSRVFVSVJFX0FM
R09SSFlUSE09PTApKTsgdGhlbgoJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9SISBEdXBsaWNhdGUg
QUxHT1JIWVRITSBkaXJlY3RpdmUgaW4gJHsxfS4iCgkJCQkJZmkKCQkJCQljYXNlICRWQUwgaW4K
CQkJCQkJTUQ1ICkKCQkJCQkJCVZBTD1tZDVzdW0KCQkJCQkJCUJZVEVTPTMyCgkJCQkJCQk7OwoJ
CQkJCQlTSEExICkKCQkJCQkJCVZBTD1zaGExc3VtCgkJCQkJCQlCWVRFUz00MAoJCQkJCQkJOzsK
CQkJCQkJU0hBMjI0ICkKCQkJCQkJCVZBTD1zaGEyMjRzdW0KCQkJCQkJCUJZVEVTPTU2CgkJCQkJ
CQk7OwoJCQkJCQlTSEEyNTYgKQoJCQkJCQkJVkFMPXNoYTI1NnN1bQoJCQkJCQkJQllURVM9NjQK
CQkJCQkJCTs7CgkJCQkJCVNIQTM4NCApCgkJCQkJCQlWQUw9c2hhMzg0c3VtCgkJCQkJCQlCWVRF
Uz05NgoJCQkJCQkJOzsKCQkJCQkJU0hBNTEyICkKCQkJCQkJCVZBTD1zaGE1MTJzdW0KCQkJCQkJ
CUJZVEVTPTEyOAoJCQkJCQkJOzsKCQkJCQkJKiApCgkJCQkJCQltZXNzYWdlIGZhaWwgIkVSUk9S
ISBJbnZhbGlkIGNoZWNrc3VtIHR5cGUgZm9yIEFMR09SSFlUSE0gZGlyZWN0aXZlIGluICR7MX0u
Ck11c3QgYmUgJ01ENScsICdTSEExJywgJ1NIQTIyNCcsICdTSEEyNTYnLCAnU0hBMzg0JyBvciAn
U0hBNTEyJy4iCgkJCQkJCQk7OwoJCQkJCWVzYWMKCQkJCQlkYXRhc2V0WzZdPSRWQUwKCQkJCQlk
YXRhc2V0WzddPSRCWVRFUwoJCQkJCSgoUkVRVUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9BTEdPUkhZ
VEhNPTAKCQkJCQk7OwoJCQkJRlJFUVVFTkNZICkKCQkJCQlpZiAoKFJFUVVJUkVfRlJFUVVFTkNZ
PT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgRHVwbGljYXRlIEZSRVFVRU5D
WSBkaXJlY3RpdmUgaW4gJHsxfS4iCgkJCQkJZWxpZiBbICEgIiRWQUwiID0gJzMwTUlOJyBdICYm
IFsgISAiJFZBTCIgPSAnSE9VUicgXSAmJiBbICEgIiRWQUwiID0gJ0RBSUxZJyBdICYmIFsgISAi
JFZBTCIgPSAnTkVWRVInIF07IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWlsICJFUlJPUiEgSW52YWxp
ZCBGUkVRVUVOQ1kgZGlyZWN0aXZlIGluICR7MX0uCk11c3QgYmUgJzMwTUlOJywgJ0hPVVInLCAn
REFJTFknIG9yICdORVZFUicuIgoJCQkJCWZpCgkJCQkJZGF0YXNldFs4XT0kVkFMCgkJCQkJKChS
RVFVSVJFRC0tKSkKCQkJCQlSRVFVSVJFX0ZSRVFVRU5DWT0wCgkJCQkJOzsKCQkJCU9OX0JPT1Qg
KQoJCQkJCWlmICgoUkVRVUlSRV9PTl9CT09UPT0wKSk7IHRoZW4KCQkJCQkJbWVzc2FnZSBmYWls
ICJFUlJPUiEgRHVwbGljYXRlIE9OX0JPT1QgZGlyZWN0aXZlIGluICR7MX0uIgoJCQkJCWVsaWYg
WyAkKGVjaG8gJFZBTCB8IGdyZXAgLUVjICcoVFJVRSl8KEZBTFNFKScpID0gMCBdOyB0aGVuCgkJ
CQkJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIE9OX0JPT1QgZGlyZWN0aXZlIGNhbiBvbmx5IGJlICdU
UlVFJyBvciAnRkFMU0UnLiIKCQkJCQlmaQoJCQkJCWRhdGFzZXRbOV09JFZBTAoJCQkJCSgoUkVR
VUlSRUQtLSkpCgkJCQkJUkVRVUlSRV9PTl9CT09UPTAKCQkJCQk7OwoJCQkJKiApCgkJCQkJbWVz
c2FnZSBmYWlsICJFUlJPUiEgVW5rbm93biBkaXJlY3RpdmUgJyR7VkFSfScgaW4gJHsxfS4iCgkJ
CQkJOzsKCQkJZXNhYwoJCWZpCglkb25lCgl9IDwgJDEKCWlmICgoUkVRVUlSRUQhPTApKTsgdGhl
bgoJCW1lc3NhZ2UgZmFpbCAiRVJST1IhIEluY29tcGxldGUgY2xhc3MgZGVmaW5pdGlvbiBpbiAn
JHsxfScuIgoJZmkKCWlmIFsgISAiJHtkYXRhc2V0WzhdfSIgPSAnTkVWRVInIF07IHRoZW4KCQlp
ZiBbICEgLWYgJERBVEFCQVNFLy5kYWlseV8kKGRhdGUgJyslWSVtJWQnKSBdIHx8IFsgISAiJHtk
YXRhc2V0WzhdfSIgPSAnREFJTFknIF07IHRoZW4KCQkJbj0keyNDTEFTU19ERUZfQ0xBU1NbQF19
CgkJCUNMQVNTX0RFRl9DTEFTU1skbl09JHtkYXRhc2V0WzBdfQoJCQlDTEFTU19ERUZfTE9HWyRu
XT0ke2RhdGFzZXRbMV19CgkJCUNMQVNTX0RFRl9FTUFJTFskbl09JHtkYXRhc2V0WzJdfQoJCQlD
TEFTU19ERUZfTUFJTFRPWyRuXT0ke2RhdGFzZXRbM119CgkJCUNMQVNTX0RFRl9FWEVDVVRFWyRu
XT0ke2RhdGFzZXRbNF19CgkJCUNMQVNTX0RFRl9IQUxUWyRuXT0ke2RhdGFzZXRbNV19CgkJCUNM
QVNTX0RFRl9BTEdPUkhZVEhNWyRuXT0ke2RhdGFzZXRbNl19CgkJCUNMQVNTX0RFRl9CWVRFU1sk
bl09JHtkYXRhc2V0WzddfQoJCQlDTEFTU19ERUZfRlJFUVVFTkNZWyRuXT0ke2RhdGFzZXRbOF19
CgkJCUNMQVNTX0RFRl9PTl9CT09UWyRuXT0ke2RhdGFzZXRbOV19CgkJZmkKCWZpCn0KCiMgUHJv
Y2VzcyBjbGFzcyBmaWxlcwpmdW5jdGlvbiBwcm9jZXNzX2NsYXNzZXMgewoJbG9jYWwgQ0xBU1NF
UwoJbG9jYWwgeAoJaWYgWyAhIC1kICRDTEFTU19ESVIgXTsgdGhlbgoJCW1lc3NhZ2UgZmFpbCAi
RVJST1IhIERpcmVjdG9yeSAnJHtDTEFTU19ESVJ9JyBub3QgYWNjZXNzaWJsZS4iCglmaQoJQ0xB
U1NFUz0kKGxzICRDTEFTU19ESVIgfCBncmVwIC12RSAnW1s6cHVuY3Q6XV0nKQoJaWYgKCgkeyND
TEFTU0VTW0BdfT09MCkpOyB0aGVuCgkJbWVzc2FnZSBmYWlsICJFUlJPUiEgTm8gY2xhc3NlcyBk
ZWZpbmVkIGluICcke0NMQVNTX0RJUn0nLiIKCWZpCglmb3IgeCBpbiAke0NMQVNTRVNbQF19OyBk
bwoJCWxvYWRfY29uZmlnICRDTEFTU19ESVIvJHgKCWRvbmUKCWZvciB4IGluICR7Q0xBU1NfREVG
X0ZSRVFVRU5DWVtAXX07IGRvCgkJaWYgWyAiJHgiID0gJ0RBSUxZJyBdOyB0aGVuCgkJCXJtIC1y
ZiAkREFUQUJBU0UvLmRhaWx5XyoKCQkJdG91Y2ggJERBVEFCQVNFLy5kYWlseV8kKGRhdGUgJysl
WSVtJWQnKQoJCQlicmVhawoJCWZpCglkb25lCn0KCiMgTG9hZCB0aGUgZmlsZSBsaXN0CmZ1bmN0
aW9uIGxvYWRfZmlsZV9saXN0IHsKCWxvY2FsIEZJTEU9JFRFTVBfRElSL2xpc3QKCWxvY2FsIG49
MAoJbG9jYWwgRk4KCXVuc2V0IENMQVNTX0xJU1QKCWlmIFsgISAtZiAkQ09ORi9saXN0cy5jb25m
IF07IHRoZW4KCQltZXNzYWdlIGZhaWwgIkVSUk9SISBGaWxlICR7Q09ORn0vbGlzdHMuY29uZiBj
b3VsZCBub3QgYmUgZm91bmQuIgoJZmkKCWlmIFsgISAtZiAkQ0xBU1NfRElSLyQxIF07IHRoZW4K
CQltZXNzYWdlIGZhaWwgIkVSUk9SISBVbmtub3duIGNsYXNzICckezF9Jy4iCglmaQoJZ3JlcCAt
RSAiXlteI11bWzpwcmludDpdXStbWzpzcGFjZTpdXSskezF9W1s6c3BhY2U6XV0qJCIgJENPTkYv
bGlzdHMuY29uZiB8IGN1dCAtZjEgPiAkRklMRQoJewoJd2hpbGUgcmVhZDsgZG8KCQl0ZXN0IC1h
ICRSRVBMWQoJCVJDPSQ/CgkJaWYgKChSQyE9MCkpOyB0aGVuCgkJCW1lc3NhZ2UgZmFpbCAiRVJS
T1IhIE5vbiBleGlzdGVudCBmaWxlIG9yIGRpcmVjdG9yeSBhdCAnJHtSRVBMWX0nIGluICR7Q09O
Rn0vbGlzdHMuY29uZi4iCgkJZmkKCQlDTEFTU19MSVNUWyRuXT0kUkVQTFkKCQkoKG4rKykpCglk
b25lCgl9IDwgJEZJTEUKfQoKIyBMb2FkcyB0aGUgZmlsZXMgYW5kIGNoZWNrc3VtcyBmcm9tIHRo
ZSBkYXRhYmFzZQpmdW5jdGlvbiBsb2FkX2RhdGFiYXNlIHsKICAgICAgICBsb2NhbCBuPTAKICAg
ICAgICBsb2NhbCB4CiAgICAgICAgdW5zZXQgRklMRV9MSVNUCiAgICAgICAgdW5zZXQgQ0hLU1VN
X0xJU1QKICAgICAgICBtZXNzYWdlIHZlcmJvc2UgIkxvYWRpbmcgY2hlY2tzdW0gZGF0YWJhc2Ug
ZnJvbSAnJHtEQVRBQkFTRX0vJDEnLiIKICAgICAgICBpZiBbICEgLWYgJENMQVNTX0RJUi8kMSBd
OyB0aGVuCiAgICAgICAgICAgICAgICBtZXNzYWdlIGZhaWwgIkVSUk9SISBVbmtub3duIGNsYXNz
ICckezF9Jy4iCiAgICAgICAgZmkKICAgICAgICAjYmFzZTY0IC1kaSAkREFUQUJBU0UvJDEuaWRi
ID4gJFRFTVBfRElSLyQxfgogICAgICAgICNmb3IgeCBpbiAkKGN1dCAtZCAnICcgLWYzICRURU1Q
X0RJUi8kMX4pOyBkbwogICAgICAgIGZvciB4IGluICQoY3V0IC1kICcgJyAtZjMgJERBVEFCQVNF
LyQxLmlkYik7IGRvCiAgICAgICAgICAgICAgICBGSUxFX0xJU1RbJG5dPSR4CiAgICAgICAgICAg
ICAgICAoKG4rKykpCiAgICAgICAgZG9uZQogICAgICAgIG49MAogICAgICAgICNmb3IgeCBpbiAk
KGN1dCAtZCcgJyAtZjEgJFRFTVBfRElSLyQxfik7IGRvCiAgICAgICAgZm9yIHggaW4gJChjdXQg
LWQnICcgLWYxICREQVRBQkFTRS8kMS5pZGIpOyBkbwogICAgICAgICAgICAgICAgQ0hLU1VNX0xJ
U1RbJG5dPSR4CiAgICAgICAgICAgICAgICAoKG4rKykpCiAgICAgICAgZG9uZQp9CgojIFJldHVy
bnMgdGhlIGtleSBiYXNlZCBvbiB2YWx1ZSBvZiBhcnJheSAobm9uIGdlbmVyaWMgdmVyc2lvbikK
ZnVuY3Rpb24gYXJyYXlfc2VhcmNoIHsKCWxvY2FsIG49MAoJbG9jYWwgeAoJbG9jYWwgRk9VTkQ9
MAoJZm9yIHggaW4gJHtGSUxFX0xJU1RbQF19OyBkbwoJCWlmIFsgIiR4IiA9ICIkMSIgXTsgdGhl
bgoJCQlGT1VORD0xCgkJCWJyZWFrCgkJZWxzZQoJCQkoKG4rKykpCgkJZmkKCWRvbmUKCWlmICgo
Rk9VTkQ9PTEpKTsgdGhlbgoJCWVjaG8gJG4KCWZpCn0KCiMgU2VuZCB2aW9sYXRpb24gZW1haWwK
ZnVuY3Rpb24gc2VuZF92aW9sYXRpb25fbm90aWNlIHsKCWxvY2FsIG49JDEKCWlmIFsgLW4gIiRW
SU9MQVRJT04iIF07IHRoZW4KCQllY2hvIC1lICJEZWFyICQoaG9zdG5hbWUpIEFkbWluaXN0cmF0
b3IsCgpBQyBJbnRlZ3JpdHkgaGFzIGRldGVjdGVkIGEgZmlsZSBzZWN1cml0eSB2aW9sYXRpb24u
IFRvIHByZXZlbnQgdGhpcyBtZXNzYWdlIGJlaW5nIHNlbnQgcmVwZWF0ZWRseSwgeW91IGFyZSBy
ZXF1aXJlZCB0byB0YWtlIGFjdGlvbi4gSWYgdGhpcyBtZXNzYWdlIGlzIGEgZmFsc2UgcG9zaXRp
dmUsIHlvdSBtYXkgd2lzaCB0byByZW1vdmUgdGhlIGZpbGUvcyBmcm9tIHRoZSBtb25pdG9yaW5n
IGxpc3QgaW4gL2V0Yy9BQy1JbnRlZ3JpdHkvbGlzdHMuY29uZi4gT3IgeW91IGNhbiB1cGRhdGUg
dGhlIEFDIEludGVncml0eSBkYXRhYmFzZSBieSBydW5uaW5nICdBQy1JbnRlZ3JpdHkgdXBkYXRl
LWRiJy4gT3RoZXJ3aXNlIHRoaXMgdmlvbGF0aW9uIG1heSBtZWFuIHRoYXQgJChob3N0bmFtZSkg
aGFzIGhhZCBhIHJlYWwgc2VjdXJpdHkgYnJlYWNoLgoKSE9TVE5BTUU6ICQoaG9zdG5hbWUpCkNM
QVNTOiAke0NMQVNTX0RFRl9DTEFTU1tuXX0KClRoZSBmb2xsb3dpbmcgZmlsZXMgZmFpbGVkIHZh
bGlkYXRpb246CiRWSU9MQVRJT04KCi4KCiIgPiAkVEVNUF9ESVIvbWFpbAoJCW1haWwgLXMgIkFD
IEludGVncml0eSB0YW1wZXIgbm90aWZpY2F0aW9uIGZvciAnJChob3N0bmFtZSknIiAke0NMQVNT
X0RFRl9NQUlMVE9bbl19IDwgJFRFTVBfRElSL21haWwKCWZpCn0KCiMgSGFuZGxlIGEgc2VjdXJp
dHkgdmlvbGF0aW9uIGFjY29yZGluZyB0byBjbGFzcyBzcGVjaWZpY2F0aW9uCmZ1bmN0aW9uIGhh
bmRsZV92aW9sYXRpb24gewoJbG9jYWwgbj0kMQoJbG9jYWwgRk49JDIKCWxvY2FsIENMQVNTPSQz
CgltZXNzYWdlIGluZm8gIklORk8hIEZpbGUgJEZOIGhhcyBiZWVuIHRhbXBlcmVkIHdpdGguIgoJ
ZWNobyAiJChkYXRlICcrJUYgJVQnKSAkRk4gaW4gY2xhc3MgJyRDTEFTUyciID4+ICREQVRBQkFT
RS92aW9sYXRpb25zLmNhY2hlCglpZiBbICIke0NMQVNTX0RFRl9MT0dbbl19IiA9ICJUUlVFIiBd
OyB0aGVuCgkJbG9nZ2VyIC1wIGF1dGguY3JpdCAiQUMgSW50ZWdyaXR5IHJlcG9ydHMgZmlsZSBz
ZWN1cml0eSB2aW9sYXRpb24gaW4gJEZOLiBGaWxlIG1vbml0b3JlZCBpbiBjbGFzcyAnJHtDTEFT
U30nLiIKCWZpCglpZiBbICIke0NMQVNTX0RFRl9FTUFJTFtuXX0iID0gIlRSVUUiIF07IHRoZW4K
CQlWSU9MQVRJT049IiRWSU9MQVRJT05cbiRGTiIKCWZpCglpZiBbIC1uICIke0NMQVNTX0RFRl9F
WEVDVVRFW25dfSIgXTsgdGhlbgoJCSR7Q0xBU1NfREVGX0VYRUNVVEVbbl19IDI+ICRFUlIKCWZp
CglpZiBbICIke0NMQVNTX0RFRl9IQUxUW25dfSIgPSAnVFJVRScgXTsgdGhlbgoJCWxvZ2dlciAq
LmVtZXJnICJBIHNlY3VyaXR5IHZpb2xhdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBhbmQgc3lzdGVt
IGlzIHNodXR0aW5nIGRvd24gbm93LiIKCQlWSU9MQVRJT049IiRWSU9MQVRJT05cblxuT3RoZXIg
ZmlsZXMgbWF5IGFsc28gaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4gSG93ZXZlciwgY2xhc3MgJyR7
Q0xBU1N9JyBpcyBjb25maWd1cmVkIHRvIHNodXRkb3duIHRoZSBzeXN0ZW0gYXMgc29vbiBhcyBh
IHZpb2xhdGlvbiBoYXMgYmVlbiBkZXRlY3RlZC4gJChob3N0bmFtZSkgaXMgc2h1dHRpbmcgZG93
biBub3cuIgoJCXNlbmRfdmlvbGF0aW9uX25vdGljZSAkbgoJCXJtIC1yZiAke1RFTVBfRElSfQoJ
CXJtIC1mICREQVRBQkFTRS8ucnVuCgkJc3luYwoJCXNsZWVwIDUKCQlzaHV0ZG93biAtaCBub3cK
CWZpCn0KCiMgUGVyZm9ybSBhbiBvbi1kZW1hbmQgY2hlY2sKZnVuY3Rpb24gY2hlY2tfaW50ZWdy
aXR5IHsKCWxvY2FsIG49MAoJbG9jYWwgaQoJbG9jYWwgeAoJbG9jYWwgeQoJbG9jYWwgegoJbG9j
YWwgYQoJcHJvY2Vzc19jbGFzc2VzCglpZiBbICEgLWQgJERBVEFCQVNFIF07IHRoZW4KCQltZXNz
YWdlIGZhaWwgIkVSUk9SISBObyBkYXRhYmFzZSBmb3VuZCBhdCAkREFUQUJBU0UuIgoJZmkKCWZv
ciB4IGluICR7Q0xBU1NfREVGX0NMQVNTW0BdfTsgZG8KCQl1bnNldCBWSU9MQVRJT04KCQlsb2Fk
X2ZpbGVfbGlzdCAkeAoJCWxvYWRfZGF0YWJhc2UgJHgKCQlmb3IgeSBpbiAke0NMQVNTX0xJU1Rb
QF19OyBkbwoJCQlpZiBbIC1kICR5IF07IHRoZW4KCQkJCXJtIC1mICRURU1QX0RJUi9kaXJjb250
CgkJCQl0b3VjaCAkVEVNUF9ESVIvZGlyY29udAoJCQkJZm9yIHogaW4gJChscyAtUiAkeSB8IGdy
ZXAgLUUgJ14vW1s6cHJpbnQ6XV0rOiQnKTsgZG8KCQkJCQlMRU5HVEg9JCgoJHsjen0tMSkpCgkJ
CQkJej0ke3o6MDokTEVOR1RIfQoJCQkJCWZvciBhIGluICQobHMgLUEgJHopOyBkbwoJCQkJCQlp
ZiBbIC1mICR6LyRhIF07IHRoZW4KCQkJCQkJCU5FV19DSEtTVU09JCgke0NMQVNTX0RFRl9BTEdP
UkhZVEhNW25dfSAtYiAkei8kYSkKCQkJCQkJCWVjaG8gIiR7TkVXX0NIS1NVTX0iID4+ICRURU1Q
X0RJUi9kaXJjb250CgkJCQkJCQlpPSQoYXJyYXlfc2VhcmNoICR6LyRhKQoJCQkJCQkJaWYgWyAt
eiAiJGkiIF07IHRoZW4KCQkJCQkJCQltZXNzYWdlIHdhcm5pbmcgIldBUk5JTkchIFNwZWNpZmll
ZCBmaWxlICR7en0vJHthfSBub3QgZm91bmQgaW4gZGF0YWJhc2UuIgoJCQkJCQkJZmkKCQkJCQkJ
CU5FV19DSEtTVU09JHtORVdfQ0hLU1VNOjA6JHtDTEFTU19ERUZfQllURVNbbl19fQoJCQkJCQkJ
aWYgWyAhICIke05FV19DSEtTVU19IiA9ICIke0NIS1NVTV9MSVNUW2ldfSIgXTsgdGhlbgoJCQkJ
CQkJCWhhbmRsZV92aW9sYXRpb24gJG4gJHovJGEgJHgKCQkJCQkJCWZpCgkJCQkJCWZpCgkJCQkJ
ZG9uZQoJCQkJZG9uZQoJCQkJTkVXX0NIS1NVTT0kKCR7Q0xBU1NfREVGX0FMR09SSFlUSE1bbl19
IC1iICR7VEVNUF9ESVJ9L2RpcmNvbnQgfCBjdXQgLWQnICcgLWYxKQoJCQkJaT0kKGFycmF5X3Nl
YXJjaCAkeSkKCQkJCWlmIFsgLXogIiRpIiBdOyB0aGVuCgkJCQkJbWVzc2FnZSB3YXJuaW5nICJX
QVJOSU5HISBTcGVjaWZpZWQgZGlyZWN0b3J5ICR7eX0gbm90IGZvdW5kIGluIGRhdGFiYXNlLiIK
CQkJCWZpCgkJCQlORVdfQ0hLU1VNPSR7TkVXX0NIS1NVTTowOiR7Q0xBU1NfREVGX0JZVEVTW25d
fX0KCQkJCWlmIFsgISAiJHtORVdfQ0hLU1VNfSIgPSAiJHtDSEtTVU1fTElTVFtpXX0iIF07IHRo
ZW4KCQkJCQloYW5kbGVfdmlvbGF0aW9uICRuICR5ICR4CgkJCQlmaQoJCQllbHNlCgkJCQlORVdf
Q0hLU1VNPSQoJHtDTEFTU19ERUZfQUxHT1JIWVRITVtuXX0gLWIgJHkgfCBjdXQgLWQnICcgLWYx
KQoJCQkJaT0kKGFycmF5X3NlYXJjaCAkeSkKCQkJCWlmIFsgLXogIiRpIiBdOyB0aGVuCgkJCQkJ
bWVzc2FnZSBmYWlsICJFUlJPUiEgU3BlY2lmaWVkIGZpbGUgJHt5fSBub3QgZm91bmQgaW4gZGF0
YWJhc2UuIgoJCQkJZmkKCQkJCU5FV19DSEtTVU09JHtORVdfQ0hLU1VNOjA6JHtDTEFTU19ERUZf
QllURVNbbl19fQoJCQkJaWYgWyAhICIke05FV19DSEtTVU19IiA9ICIke0NIS1NVTV9MSVNUW2ld
fSIgXTsgdGhlbgoJCQkJCWhhbmRsZV92aW9sYXRpb24gJG4gJHkgJHgKCQkJCWZpCgkJCWZpCgkJ
ZG9uZQoJCXNlbmRfdmlvbGF0aW9uX25vdGljZSAkbgoJCSgobisrKSkKCWRvbmUKfQoKIyBleGl0
IGNsZWFubHkgb24gQ1RSTC1DCmZ1bmN0aW9uIHRyYXBfYWJvcnQgewoJcm0gLWYgJERBVEFCQVNF
Ly5ydW4KCW1lc3NhZ2UgYWJvcnQgIkFib3J0ZWQgYnkgdXNlciBvciBhbm90aGVyIHByb2Nlc3Mu
Igp9CgojIFBBUlNFIFVTRVIgT1BUSU9OUwppZiBbICEgIiQod2hvYW1pKSIgPSAncm9vdCcgXTsg
dGhlbgoJbWVzc2FnZSBhYm9ydCAnWW91IG11c3QgYmUgcm9vdCB0byBydW4gdGhpcyBjb21tYW5k
LicKZmkKaWYgWyAhIC1mICREQVRBQkFTRS8uc2Vzc2lvbiBdIHx8IFsgISAiJChjYXQgJERBVEFC
QVNFLy5zZXNzaW9uKSIgPSAiJCh1cHRpbWUgLXMpIiBdOyB0aGVuCgl1cHRpbWUgLXMgPiAkREFU
QUJBU0UvLnNlc3Npb24KCXJtIC1mICREQVRBQkFTRS8ucnVuIDI+Ji0KZmkKaWYgWyAtZiAkREFU
QUJBU0UvLnJ1biBdOyB0aGVuCgltZXNzYWdlIGFib3J0ICJBQyBJbnRlZ3JpdHkgaXMgY3VycmVu
dGx5IHBlcmZvcm1pbmcgJChjYXQgJHtEQVRBQkFTRX0vLnJ1bikgb3BlcmF0aW9ucy4gClBsZWFz
ZSB0cnkgYWdhaW4gbGF0ZXIuIgpmaQp0cmFwIHRyYXBfYWJvcnQgS0lMTCBJTlQgQUJSVCBURVJN
CmNkIC8KaWYgWyAhIC1kICRURU1QX0RJUiBdOyB0aGVuCglta2RpciAtcCAkVEVNUF9ESVIKCWNo
bW9kIDA3MDAgJFRFTVBfRElSIDI+PiAkRVJSCmZpCmVjaG8gJ2JhY2tncm91bmQgdmVyaWZpY2F0
aW9uJyA+ICREQVRBQkFTRS8ucnVuCmNoZWNrX2ludGVncml0eQpybSAtcmYgJHtURU1QX0RJUn0K
cm0gLWYgJERBVEFCQVNFLy5ydW4KZXhpdCAwCg==" | base64 -di - > "/sbin/acicheck_hourly"; then
	rollback
fi
log_undo 'rm -f "/sbin/acicheck_hourly"'
chown root:root "/sbin/acicheck_hourly"
chmod 0500 "/sbin/acicheck_hourly"
echo -e "Created file '/sbin/acicheck_hourly'"
if ! echo "IyEvYmluL2Jhc2gKIwojICAgIE5BTUU6IEFDIEludGVncml0eSB1bmluc3RhbGxlcgojIFZFUlNJ
T046IDEuMAojICBBVVRIT1I6IEpvZXkgRG9iaWFzCiMgICAgREFURTogMjAxNi0wNC0wNQojICAg
Tk9URVM6IEp1c3QgcmVtb3ZlcyBBQyBJbnRlZ3JpdHkgZnJvbSBjcm9uIGFuZCByYy5zeXNpbml0
IGJlZm9yZSBkZWxldGluZwojICAgICAgICAgIGFsbCBmaWxlcy4KIwoKTkFNRT0nQUMgSW50ZWdy
aXR5JwpNT0Q9JChob3N0bmFtZSkKVkVSPTEuMApFTUFJTD1qb2V5LWRvYmlhc0Bhc2lhY29tdGVr
LmNvbQpUSElTPSQwCkNPTkY9L2V0Yy9hY19pbnRlZ3JpdHkKQ0xBU1NfRElSPSRDT05GL2NsYXNz
ZXMKVEVNUF9ESVI9L3Zhci90bXAvYWNpbnRlZ3JpdHkKREFUQUJBU0U9L3Zhci9hY2ludGVncml0
eQpQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluCgojIFBBUlNFIFVTRVIgT1BUSU9O
UwppZiBbICEgIiQod2hvYW1pKSIgPSAncm9vdCcgXTsgdGhlbgoJZWNobyAnWW91IG11c3QgYmUg
cm9vdCB0byBydW4gdGhpcyBjb21tYW5kLicKCWV4aXQgMQpmaQppZiBbIC1mICREQVRBQkFTRS8u
cnVuIF07IHRoZW4KCWVjaG8gLWUgIlxuQUMgSW50ZWdyaXR5IGlzIGN1cnJlbnRseSBwZXJmb3Jt
aW5nICQoY2F0ICR7REFUQUJBU0V9Ly5ydW4pIG9wZXJhdGlvbnMuIApQbGVhc2UgdHJ5IGFnYWlu
IGxhdGVyLiIKCWV4aXQgMQpmaQpjZCAvCnN5c3RlbWN0bCBkaXNhYmxlIGFjX2ludGVncml0eS5z
ZXJ2aWNlCnNsZWVwIDEKcm0gLWYgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hY19pbnRlZ3JpdHkuKgpy
bSAtZiAvdmFyL2FjaW50ZWdyaXR5L2FjaXN0YXJ0CnJtIC1mIC92YXIvYWNpbnRlZ3JpdHkvYWNp
c3RvcApybSAtZiAvc2Jpbi9hY19pbnRlZ3JpdHkKcm0gLWYgL3NiaW4vYWNpY2hlY2sqCnJtIC1y
ZiAkQ09ORgpybSAtcmYgJERBVEFCQVNFCnJtIC1yZiAke1RFTVBfRElSfQpybSAtZiAkMAplY2hv
IC1lICJVbmluc3RhbGxhdGlvbiAnJE5BTUUnIGNvbXBsZXRlIGF0ICQoZGF0ZSAnKyVGICVUJyki
CmV4aXQgMAo=" | base64 -di - > "/sbin/uninstall_ac_integrity"; then
	rollback
fi
log_undo 'rm -f "/sbin/uninstall_ac_integrity"'
chown root:root "/sbin/uninstall_ac_integrity"
chmod 0500 "/sbin/uninstall_ac_integrity"
echo -e "Created file '/sbin/uninstall_ac_integrity'"
#!/bin/bash
#
#    NAME: AC Integrity setup
# VERSION: 1.0
#  AUTHOR: Joey Dobias
#    DATE: 2016-06-05
#   NOTES: Sets the email address if the administrator and generates the first
#          checksum files. Default is to set critical and severe only with
#          checking run at boot and once-per day for critical files.
#

CONF=/etc/ac_integrity
CLASS_DIR=$CONF/classes
TEMP_DIR=/var/tmp/acintegrity

# Returns TRUE if supplied email is vaid format
function validate_email {
        [ $(echo "$@" | grep -Ec "^[[:alnum:]_-\.]+@([[:alnum:]_-]+\.)+[[:alpha:]]{2,3}(\.[[:alpha:]]{2,3})?$") = 1 ]
}

echo -n "AC Integrity has been installed.
A basic configuration will now be applied to provide minimal system
protection. Afterwards, the security database will be created.

Please provide an email address to send critical events to. Use "." to disable
email function.

Email: "
while read; do
        if [ "$REPLY" = '.' ]; then
                VAL1=FALSE
                VAL2=''
                break
        elif validate_email $REPLY; then
                VAL1=TRUE
                VAL2=$REPLY
                break
        else
                echo -en "Invalid email address. Please try again."
                sleep 3
                echo -en "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
                echo -n "                                         "
                echo -en "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
                echo -n "Email: "
        fi
done
m4 -DVAL1=$VAL1 -DVAL2=$VAL2 ${TEMP_DIR}/crit_temp > ${CLASS_DIR}/critical
m4 -DVAL1=$VAL1 -DVAL2=$VAL2 ${TEMP_DIR}/sevr_temp > ${CLASS_DIR}/severe
chmod 0400 ${CLASS_DIR}/*
echo -e "\nDefault classes created in /etc/ac_integrity/classes."
ac_integrity update-db
ac_integrity start boot
systemctl enable ac_integrity.service
sleep 1
ac_integrity status
exit 0
cd "${MBS_ORIGIN}"
echo -e "Installation 'install_ac_integrity_1.0.3' complete at $(date '+%Y-%m-%d %T')"
