Subject: Re: Smarter make update / pkg_chk algo
To: Greg Troxel <gdt@ir.bbn.com>
From: David Brownlee <abs@NetBSD.org>
List: tech-pkg
Date: 05/25/2005 23:24:01
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-1580028857-1117059841=:675
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

On Wed, 25 May 2005, David Brownlee wrote:

> On Wed, 25 May 2005, Greg Troxel wrote:
[...]
>> That's what I'm actually doing, since I started using pkg_chk before
>> it worked without a tree.  I have been using a local patch to make -l
>> output the dependencies first, so I can use a script to remove
>> mismatches and then add. (I've posted my script before, but there's no
>> reason for anyone to use it now that pkg_chk works without a pkgsrc
>> tree.)

 	I've added a tsort phase to the output of 'pkg_chk -l' - is
 	that pretty much what you had envisioned at that point?

-- 
 		David/absolute       -- www.NetBSD.org: No hype required --
--0-1580028857-1117059841=:675
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=pkg_chk.sh
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.62.0505252324010.675@localhost.>
Content-Description: 
Content-Disposition: attachment; filename=pkg_chk.sh

IyFAU0hAIC1lDQojDQojICRJZDogcGtnX2Noay5zaCx2IDEuMTQgMjAwNS8w
NC8yMCAxNTozMjoyNSBhYnMgRXhwICQNCiMNCiMgVE9ETzogSGFuZGxlIHVw
ZGF0ZXMgd2l0aCBkZXBlbmRlbmNpZXMgdmlhIGJpbmFyeSBwYWNrYWdlcw0K
DQpQQVRIPS91c3Ivc2JpbjovdXNyL2Jpbjoke1BBVEh9DQoNCmNoZWNrX3Bh
Y2thZ2VzX2luc3RhbGxlZCgpDQogICAgew0KICAgIFVQREFURV9UT0RPPQ0K
ICAgIE1JU1NJTkdfVE9ETz0NCiAgICBNSVNNQVRDSF9UT0RPPQ0KDQogICAg
Zm9yIHBrZ2RpciBpbiAkKiA7IGRvDQoNCglpZiBbIC1uICIkb3B0X0IiIF07
dGhlbg0KCSAgICBleHRyYWN0X3BrZ192YXJzICRwa2dkaXIgUEtHTkFNRSBG
SUxFU0RJUiBQS0dESVIgRElTVElORk9fRklMRSBQQVRDSERJUg0KCWVsc2UN
CgkgICAgZXh0cmFjdF9wa2dfdmFycyAkcGtnZGlyIFBLR05BTUUNCglmaQ0K
CWlmIFsgLXogIiRQS0dOQU1FIiBdOyB0aGVuDQoJICAgIE1JU1NfRE9ORT0k
TUlTU19ET05FIiAiJHBrZ2Rpcg0KCSAgICBjb250aW51ZQ0KCWZpDQoJaWYg
WyAhIC1kICRQS0dfREJESVIvJFBLR05BTUUgXTt0aGVuDQoJICAgIG1zZ19u
ICIkUEtHTkFNRTogIg0KCSAgICBwa2c9JChlY2hvICRQS0dOQU1FIHwgJHtT
RUR9ICdzLy1bMC05XS4qLy8nKQ0KCSAgICBwa2dpbnN0YWxsZWQ9JChzaCAt
YyAiJHtQS0dfSU5GT30gLWUgJHBrZyIgfHwgdHJ1ZSkNCgkgICAgSU5TVEFM
TD0NCgkgICAgaWYgWyAtbiAiJHBrZ2luc3RhbGxlZCIgXTt0aGVuDQoJCW1z
Z19uICJ2ZXJzaW9uIG1pc21hdGNoIC0gJHBrZ2luc3RhbGxlZCINCgkJTUlT
TUFUQ0hfVE9ETz0iJE1JU01BVENIX1RPRE8gJHBrZ2luc3RhbGxlZCINCgkJ
VVBEQVRFX1RPRE89IiRVUERBVEVfVE9ETyAkUEtHTkFNRSAkcGtnZGlyIg0K
CSAgICBlbHNlDQoJCW1zZ19uICJtaXNzaW5nIg0KCQlNSVNTSU5HX1RPRE89
IiRNSVNTSU5HX1RPRE8gJFBLR05BTUUgJHBrZ2RpciINCgkgICAgZmkNCgkg
ICAgaWYgWyAtZiAkUEFDS0FHRVMvJFBLR05BTUUudGd6IF0gO3RoZW4NCgkJ
bXNnX24gIiAoYmluYXJ5IHBhY2thZ2UgYXZhaWxhYmxlKSINCgkgICAgZmkN
CgkgICAgbXNnDQoJZWxzZQ0KCSAgICBpZiBbIC1uICIkb3B0X0IiIF07dGhl
bg0KCQljdXJyZW50X2J1aWxkX3Zlcj0kKGdldF9idWlsZF92ZXIpDQoJCWlu
c3RhbGxlZF9idWlsZF92ZXI9JCgke1NFRH0gInN8XlteOl0qL1teOl0qOnx8
IiAkUEtHX0RCRElSLyRQS0dOQU1FLytCVUlMRF9WRVJTSU9OKQ0KCQlpZiBb
IHgiJGN1cnJlbnRfYnVpbGRfdmVyIiAhPSB4IiRpbnN0YWxsZWRfYnVpbGRf
dmVyIiBdO3RoZW4NCgkJICAgIG1zZyAiJFBLR05BTUU6IGJ1aWxkLXZlcnNp
b24gbWlzbWF0Y2giDQoJCSAgICB2ZXJib3NlICItLWN1cnJlbnQtLSINCgkJ
ICAgIHZlcmJvc2UgIiRjdXJyZW50X2J1aWxkX3ZlciINCgkJICAgIHZlcmJv
c2UgIi0taW5zdGFsbGVkLS0iDQoJCSAgICB2ZXJib3NlICIkaW5zdGFsbGVk
X2J1aWxkX3ZlciINCgkJICAgIHZlcmJvc2UgIi0tLS0iDQoJCSAgICBNSVNN
QVRDSF9UT0RPPSIkTUlTTUFUQ0hfVE9ETyAkUEtHTkFNRSINCgkJICAgICMg
c2hvdWxkIHdlIG1hcmsgdGhpcyBwa2cgdG8gYmUgdXBkYXRlZCBpZiAtdSBp
cyBnaXZlbiA/Pw0KCQllbHNlDQoJCSAgICB2ZXJib3NlICIkUEtHTkFNRTog
T0siDQoJCWZpDQoJICAgIGVsc2UNCgkJdmVyYm9zZSAiJFBLR05BTUU6IE9L
Ig0KCSAgICBmaQ0KCWZpDQogICAgZG9uZQ0KICAgIH0NCg0KZXh0cmFjdF9t
YWtlX3ZhcnMoKQ0KICAgIHsNCiAgICBNQUtFRklMRT0kMQ0KICAgIHNoaWZ0
DQogICAgdmVyYm9zZSAiRXh0cmFjdCAkQCBmcm9tICRNQUtFRklMRSINCiAg
ICBNQUtFREFUQT0iLlBIT05ZOiB4XG54OlxuIjsNCiAgICBmb3IgdmFyIGlu
ICQqIDsgZG8NCglNQUtFREFUQT0kTUFLRURBVEEiXHRAZWNobyAkdmFyPVwk
eyR2YXJ9XG4iDQogICAgZG9uZQ0KICAgIGV2YWwgJChwcmludGYgIiRNQUtF
REFUQSIgfCAke01BS0V9IC1mIC0gLWYgJE1BS0VGSUxFIHggfCBcDQoJCQkJ
CSR7U0VEfSAtZSAncy9bXj1dKj0vJiIvJyAtZSAncy8kLyIvJykNCiAgICB9
DQoNCiMgJDEgPSBuYW1lIG9mIHZhcmlhYmxlDQojICQyID0gZGVmYXVsdCB2
YWx1ZQ0KZXh0cmFjdF9ta19kaXJfdmFyKCkNCiAgICB7DQogICAgaWYgWyAt
eiAiYGV2YWwgZWNobyBcXCQkMWAiIF0gOyB0aGVuDQoJZXZhbCAkKHByaW50
ZiAiQlNEX1BLR19NSz0xXG4uUEhPTlk6IHhcbng6XG5cdEBlY2hvICQxPSIn
JCcieyQxfVxuIiB8ICR7TUFLRX0gLWYgLSAtZiAkTUFLRUNPTkYgeCkNCglp
ZiBbIC16ICJgZXZhbCBlY2hvIFxcJCQxYCIgXTsgdGhlbg0KCSAgICBldmFs
ICIkMT0kMiINCglmaQ0KCWlmIFsgISAtZCBgZXZhbCBlY2hvIFxcJCQxYCBd
O3RoZW4NCgkgICAgZmF0YWwgIlVuYWJsZSB0byBsb2NhdGUgJDEgYGV2YWwg
ZWNobyBcXCQkMWAiDQoJZmkNCiAgICBmaQ0KICAgIH0NCg0KZXh0cmFjdF9w
a2dfdmFycygpDQogICAgew0KICAgIFBLR0RJUj0kMQ0KICAgIFBLR05BTUU9
DQogICAgc2hpZnQ7DQogICAgaWYgWyAtbiAiJG9wdF9iIiAtYSAteiAiJG9w
dF9zIiBdIDsgdGhlbg0KCWZvciBwa2cgaW4gJFBLR0RCIDsgZG8NCgkgICAg
Y2FzZSAkcGtnIGluDQoJCSIkUEtHRElSOiIqKQ0KCQkgICAgUEtHTkFNRT1g
ZWNobyAkcGtnfCAke1NFRH0gJ3MvW146XSo6Ly8nYA0KCQkgICAgcmV0dXJu
Ow0KCQk7Ow0KCSAgICBlc2FjDQoJZG9uZQ0KCW1zZyAiV0FSTklORzogTm8g
YmluYXJ5IHBhY2thZ2UgZm9yICRQS0dESVIiDQogICAgZWxzZQ0KCWlmIFsg
ISAtZiAkUEtHU1JDRElSLyRwa2dkaXIvTWFrZWZpbGUgXTt0aGVuDQoJICAg
IG1zZyAiV0FSTklORzogTm8gJHBrZ2Rpci9NYWtlZmlsZSAtIHBhY2thZ2Ug
bW92ZWQgb3Igb2Jzb2xldGU/Ig0KCSAgICByZXR1cm4NCglmaQ0KCWNkICRQ
S0dTUkNESVIvJFBLR0RJUg0KCWV4dHJhY3RfbWFrZV92YXJzIE1ha2VmaWxl
ICIkQCINCglpZiBbIC16ICIkUEtHTkFNRSIgXTsgdGhlbg0KCSAgICBmYXRh
bCAiVW5hYmxlIHRvIGV4dHJhY3QgUEtHTkFNRSBmb3IgJHBrZ2RpciINCglm
aQ0KICAgIGZpDQogICAgfQ0KDQpleHRyYWN0X3ZhcmlhYmxlcygpDQogICAg
ew0KICAgIGV4dHJhY3RfbWtfZGlyX3ZhciBQS0dTUkNESVIgL3Vzci9wa2dz
cmMNCiAgICBleHRyYWN0X21rX2Rpcl92YXIgUEtHX0RCRElSIC92YXIvZGIv
cGtnDQoNCiAgICAjIE5vdyB3ZSBoYXZlIFBLR1NSQ0RJUiwgdXNlIGl0IHRv
IGRldGVybWluZSBQQUNLQUdFUywgYW5kIFBLR0NIS19DT05GDQogICAgIyBh
cyB3ZWxsIGFzIEFXSywgR1JFUCwgU0VELCBQS0dDSEtfVEFHUyBhbmQgUEtH
Q0hLX05PVEFHUw0KICAgICMNCg0KICAgIGlmIFsgLXogIiRvcHRfYiIgLW8g
LW4gIiRvcHRfcyIgLW8gLWQgJFBLR1NSQ0RJUi9wa2d0b29scy9wa2dfY2hr
IF0gOyB0aGVuDQoJY2QgJFBLR1NSQ0RJUi9wa2d0b29scy9wa2dfY2hrDQoJ
ZXh0cmFjdF9tYWtlX3ZhcnMgTWFrZWZpbGUgQVdLIEdSRVAgU0VEIFBBQ0tB
R0VTIFBLR19JTkZPIFBLR19BREQgXA0KCQkJUEtHX0RFTEVURSBQS0dDSEtf
Q09ORiBQS0dDSEtfVEFHUyBQS0dDSEtfTk9UQUdTDQoJaWYgWyAteiAiJFBB
Q0tBR0VTIiBdO3RoZW4NCgkgICAgUEFDS0FHRVM9JFBLR1NSQ0RJUi9wYWNr
YWdlcw0KCWZpDQogICAgZWxpZiBbICRNQUtFQ09ORiAhPSAvZGV2L251bGwg
XSA7IHRoZW4NCglleHRyYWN0X21ha2VfdmFycyAkTUFLRUNPTkYgUEFDS0FH
RVMgUEtHQ0hLX0NPTkYgUEtHQ0hLX1RBR1MgUEtHQ0hLX05PVEFHUw0KCWlm
IFsgLXogIiRQQUNLQUdFUyIgXSA7IHRoZW4NCgkgICAgUEFDS0FHRVM9YHB3
ZGANCglmaQ0KICAgIGZpDQoNCiAgICBpZiBbIC16ICIkUEtHQ0hLX0NPTkYi
IF07dGhlbg0KCVBLR0NIS19DT05GPSRQS0dTUkNESVIvcGtnY2hrLmNvbmYN
CiAgICBmaQ0KICAgIH0NCg0KZmF0YWwoKQ0KICAgIHsNCiAgICBtc2cgIioq
KiAkQCINCiAgICBleGl0IDENCiAgICB9DQoNCmZhdGFsX21heWJlKCkNCiAg
ICB7DQogICAgbXNnICIkQCINCiAgICBpZiBbIC16ICIkb3B0X2siIF07dGhl
bg0KCWV4aXQgMQ0KICAgIGZpDQogICAgfQ0KDQpnZXRfYnVpbGRfdmVyKCkN
CiAgICB7DQogICAgaWYgWyAtbiAiJG9wdF9iIiAtYSAteiAiJG9wdF9zIiBd
IDsgdGhlbg0KCSR7UEtHX0lORk99IC0uIC1iICRQQUNLQUdFUy8kUEtHTkFN
RS50Z3ogfCB0YWlsICs0IHwgJHtTRUR9ICJzfF5bXjpdKi9bXjpdKjp8fCIg
fCAke0dSRVB9IC4NCglyZXR1cm4NCiAgICBmaQ0KICAgIGZpbGVzPSIiDQog
ICAgZm9yIGYgaW4gTWFrZWZpbGUgJHtGSUxFU0RJUn0vKiAke1BLR0RJUn0v
KjsgZG8NCglpZiBbIC1mICRmIF07dGhlbg0KCSAgICBmaWxlcz0iJGZpbGVz
ICRmIg0KCWZpDQogICAgZG9uZQ0KICAgIGlmIFsgLWYgJHtESVNUSU5GT19G
SUxFfSBdOyB0aGVuDQoJZm9yIGYgaW4gJCgke0FXS30gJ05GID09IDQgJiYg
JDMgPT0gIj0iIHsgZ3N1YigiWygpXSIsICIiLCAkMik7IHByaW50ICQyIH0n
IDwgJHtESVNUSU5GT19GSUxFfSk7IGRvIA0KCSAgICBpZiBbIC1mICR7UEFU
Q0hESVJ9LyRmIF07IHRoZW4NCgkJZmlsZXM9IiRmaWxlcyAke1BBVENIRElS
fS8kZiI7DQoJICAgIGZpOw0KCWRvbmUNCiAgICBmaQ0KICAgIGlmIFsgLWQg
JHtQQVRDSERJUn0gXTsgdGhlbg0KCWZvciBmIGluICR7UEFUQ0hESVJ9L3Bh
dGNoLSo7IGRvDQoJICAgIGNhc2UgJGYgaW4NCgkgICAgKi5vcmlnfCoucmVq
fCp+KSA7Ow0KCSAgICAke1BBVENIRElSfS9wYXRjaC1sb2NhbC0qKQ0KCQlm
aWxlcz0iJGZpbGVzICRmIiA7Ow0KCSAgICBlc2FjDQoJZG9uZQ0KICAgIGZp
DQogICAgY2F0ICRmaWxlcyB8ICR7R1JFUH0gJ1wkTmV0QlNEJw0KICAgIH0N
Cg0KbGlzdF9wYWNrYWdlcygpDQogICAgew0KICAgIENIRUNLTElTVD0nICcN
CiAgICBmb3IgcGtnZGlyIGluICQqIDsgZG8NCglleHRyYWN0X3BrZ192YXJz
ICRwa2dkaXIgUEtHTkFNRQ0KCWlmIFsgLXogIiRQS0dOQU1FIiBdOyB0aGVu
DQoJICAgIGNvbnRpbnVlDQoJZmkNCglpZiBbICEgLWYgJFBBQ0tBR0VTLyRQ
S0dOQU1FLnRneiBdIDt0aGVuDQoJICAgIGZhdGFsX21heWJlICIgKiogJFBL
R05BTUUgLSBiaW5hcnkgcGFja2FnZSBtaXNzaW5nIg0KCSAgICBjb250aW51
ZQ0KCWZpDQoJdmVyYm9zZSAiJFBLR05BTUUudGd6OiBmb3VuZCINCglDSEVD
S0xJU1Q9IiRDSEVDS0xJU1QkUEtHTkFNRSAiOw0KICAgIGRvbmUNCiAgICB3
aGlsZSBbICIkQ0hFQ0tMSVNUIiAhPSAnICcgXTsgZG8NCglQS0dMSVNUPSIk
UEtHTElTVCRDSEVDS0xJU1QiDQoJTkVYVENIRUNLPScgJw0KCWZvciBwa2cg
aW4gJENIRUNLTElTVCA7IGRvDQoJICAgIGlmIFsgISAtZiAkUEFDS0FHRVMv
JHBrZy50Z3ogXSA7IHRoZW4NCgkJZmF0YWxfbWF5YmUgIiAqKiAkcGtnLnRn
eiAtIGJpbmFyeSBwYWNrYWdlIGRlcGVuZGVuY3kgbWlzc2luZyINCgkJY29u
dGludWUNCgkgICAgZmkNCgkgICAgZm9yIGRlcCBpbiAkKCR7UEtHX0lORk99
IC0uIC1OICRQQUNLQUdFUy8kcGtnLnRneiB8ICR7U0VEfSAnMSwvQnVpbHQg
dXNpbmc6L2QnIHwgJHtHUkVQfSAuLikgOyBkbw0KCQljYXNlICIkUEtHTElT
VCRORVhUQ0hFQ0siIGluDQoJCSAgICAqXCAkZGVwXCAqKQ0KCQkJdmVyYm9z
ZSAiJHBrZzogRHVwbGljYXRlIGRlcGVuZCAkZGVwIg0KCQkJOzsNCgkJICAg
ICopDQoJCQlORVhUQ0hFQ0s9IiRORVhUQ0hFQ0skZGVwICINCgkJCXZlcmJv
c2UgIiRwa2c6IEFkZCBkZXBlbmQgJGRlcCINCgkJCTs7DQoJCWVzYWMNCgkg
ICAgZG9uZQ0KCWRvbmUNCglDSEVDS0xJU1Q9IiRORVhUQ0hFQ0siDQogICAg
ZG9uZQ0KICAgIGZvciBwa2cgaW4gJFBLR0xJU1QgOyBkbw0KCWVjaG8gJHBr
Zy50Z3oNCiAgICBkb25lDQogICAgfQ0KDQptc2coKQ0KICAgIHsNCiAgICBp
ZiBbIC1uICIkb3B0X0wiIF0gOyB0aGVuDQoJZWNobyAiJEAiID4+ICIkb3B0
X0wiDQogICAgZmkNCiAgICBpZiBbIC1uICIkb3B0X2wiIF0gOyB0aGVuDQoJ
ZWNobyAiJEAiID4mMg0KICAgIGVsc2UNCgllY2hvICIkQCINCiAgICBmaQ0K
ICAgIH0NCg0KbXNnX3Byb2dyZXNzKCkNCiAgICB7DQogICAgbXNnICJbICRA
IF0iDQogICAgfQ0KDQptc2dfbigpDQogICAgew0KICAgIG1zZyAkYWNfbiAi
JCoiJGFjX2MNCiAgICB9DQoNCnBrZ19mZXRjaCgpDQogICAgew0KICAgIFBL
R05BTUU9JDENCiAgICBQS0dESVI9JDINCg0KICAgIHJ1bl9jbWQgImNkICRQ
S0dTUkNESVIvJFBLR0RJUiAmJiAke01BS0V9IGZldGNoLWxpc3QgfCBzaCIN
CiAgICBpZiBbIC1uICIkRkFJTCIgXTsgdGhlbg0KCUZBSUxfRE9ORT0kRkFJ
TF9ET05FIiAiJFBLR05BTUUNCiAgICBlbHNlDQoJRkVUQ0hfRE9ORT0kRkVU
Q0hfRE9ORSIgIiRQS0dOQU1FDQogICAgZmkNCiAgICB9DQoNCnBrZ19pbnN0
YWxsKCkNCiAgICB7DQogICAgUEtHTkFNRT0kMQ0KICAgIFBLR0RJUj0kMg0K
ICAgIElOU1RBTEw9JDMNCg0KICAgIGlmIFsgLWQgJFBLR19EQkRJUi8kUEtH
TkFNRSBdO3RoZW4NCgltc2cgIiRQS0dOQU1FIGluc3RhbGxlZCBpbiBwcmV2
aW91cyBzdGFnZSINCiAgICBlbGlmIFsgLW4gIiRvcHRfYiIgLWEgLWYgJFBB
Q0tBR0VTLyRQS0dOQU1FLnRneiBdIDsgdGhlbg0KCWlmIFsgJElOU1RBTEwg
PSBVcGRhdGUgXTt0aGVuDQoJICAgIFBLRz0kKGVjaG8gJFBLR05BTUUgfCAk
e1NFRH0gJ3MvLVswLTldLiovLycpDQoJICAgIHJ1bl9jbWQgIiR7UEtHX0RF
TEVURX0gJFBLRyIgMQ0KCSAgICBpZiBbIC1uICIkRkFJTCIgXTsgdGhlbg0K
CQlmYXRhbCAiQ2FuIG9ubHkgdXBkYXRlIHBhY2thZ2VzIHdpdGggZGVwZW5k
ZW5jaWVzIHZpYSAtcyINCgkgICAgZmkNCglmaQ0KCWlmIFsgLW4gIiRzYXZl
ZF9QS0dfUEFUSCIgXSA7IHRoZW4NCgkgICAgZXhwb3J0IFBLR19QQVRIPSRz
YXZlZF9QS0dfUEFUSA0KCWZpDQoJY2QgJFBBQ0tBR0VTDQoJcnVuX2NtZCAi
JHtQS0dfQUREfSAkUEtHTkFNRS50Z3oiDQoJaWYgWyAtbiAiJHNhdmVkX1BL
R19QQVRIIiBdIDsgdGhlbg0KCSAgICB1bnNldCBQS0dfUEFUSA0KCWZpDQog
ICAgZWxpZiBbIC1uICIkb3B0X3MiIF07IHRoZW4NCglydW5fY21kICJjZCAk
UEtHU1JDRElSLyRQS0dESVIgJiYgJHtNQUtFfSB1cGRhdGUgQ0xFQU5ERVBF
TkRTPXllcyINCiAgICBmaQ0KDQogICAgaWYgWyAteiAiJG9wdF9uIiAtYSAh
IC1kICRQS0dfREJESVIvJFBLR05BTUUgXTt0aGVuDQoJRkFJTD0xDQogICAg
ZmkNCg0KICAgIGlmIFsgLW4gIiRGQUlMIiBdOyB0aGVuDQoJRkFJTF9ET05F
PSRGQUlMX0RPTkUiICIkUEtHTkFNRQ0KICAgIGVsaWYgWyAkSU5TVEFMTCA9
IFVwZGF0ZSBdO3RoZW4NCglVUERBVEVfRE9ORT0kVVBEQVRFX0RPTkUiICIk
UEtHTkFNRQ0KICAgIGVsc2UNCglJTlNUQUxMX0RPTkU9JElOU1RBTExfRE9O
RSIgIiRQS0dOQU1FDQogICAgZmkNCiAgICB9DQoNCnBrZ19mZXRjaGxpc3Qo
KQ0KICAgIHsNCiAgICBQS0dMSVNUPSRADQogICAgbXNnX3Byb2dyZXNzIEZl
dGNoDQogICAgd2hpbGUgWyAkIyAhPSAwIF07IGRvIA0KCXBrZ19mZXRjaCAk
MSAkMg0KCXNoaWZ0IDsgc2hpZnQ7DQogICAgZG9uZQ0KICAgIH0NCg0KcGtn
X2luc3RhbGxsaXN0KCkNCiAgICB7DQogICAgSU5TVEFMTD0kMSA7IHNoaWZ0
DQogICAgbXNnX3Byb2dyZXNzICRJTlNUQUxMDQogICAgd2hpbGUgWyAkIyAh
PSAwIF07IGRvDQoJcGtnX2luc3RhbGwgJDEgJDIgJElOU1RBTEwNCglzaGlm
dCA7IHNoaWZ0Ow0KICAgIGRvbmUNCiAgICB9DQoNCnJ1bl9jbWQoKQ0KICAg
IHsNCiAgICBGQUlMPQ0KICAgIGlmIFsgLW4gIiQyIiBdOyB0aGVuDQoJRkFJ
TE9LPSQyDQogICAgZWxzZQ0KCUZBSUxPSz0kb3B0X2sNCiAgICBmaQ0KICAg
IG1zZyAkMQ0KICAgIGlmIFsgLXogIiRvcHRfbiIgXTt0aGVuDQoJaWYgWyAt
biAiJG9wdF9MIiBdIDsgdGhlbg0KCSAgICBzaCAtYyAiJDEiID4+ICIkb3B0
X0wiIDI+JjEgfHwgRkFJTD0xDQoJZWxzZQ0KCSAgICBzaCAtYyAiJDEiIHx8
IEZBSUw9MQ0KCWZpDQoJaWYgWyAtbiAiJEZBSUwiIF0gOyB0aGVuDQogICAg
ICAgICAgICBtc2cgIioqICckMScgZmFpbGVkIg0KCSAgICBpZiBbIC1uICIk
b3B0X0wiIF0gOyB0aGVuDQoJCXRhaWwgLTEwMCAiJG9wdF9MIiB8IGVncmVw
IC12ICdeKFwqXCpcKiBFcnJvciBjb2RlIDF8U3RvcFwuKScgfFwNCgkJCXRh
aWwgLTQwDQoJICAgIGZpDQogICAgICAgICAgICBpZiBbICIkRkFJTE9LIiAh
PSAxIF07IHRoZW4NCiAgICAgICAgICAgICAgICBleGl0IDENCiAgICAgICAg
ICAgIGZpDQogICAgICAgIGZpDQogICAgZmkNCiAgICB9DQoNCnVzYWdlKCkN
CiAgICB7DQogICAgaWYgWyAtbiAiJDEiIF0gOyB0aGVuDQoJZWNobyAiJEAi
DQoJZWNobw0KICAgIGZpDQogICAgZWNobyAnVXNhZ2U6IHBrZ19jaGsgW29w
dHNdDQoJLWEgICAgICBBZGQgYWxsIG1pc3NpbmcgcGFja2FnZXMgKGltcGxp
ZXMgLWMpDQoJLUIgICAgICBDaGVjayB0aGUgIkJ1aWxkIHZlcnNpb24iIG9m
IHBhY2thZ2VzIChpbXBsaWVzIC1pKQ0KCS1iICAgICAgSW5zdGFsbCBiaW5h
cnkgcGFja2FnZXMNCgktQyBjb25mIFVzZSBwa2djaGsuY29uZiBmaWxlICdj
b25mJw0KCS1jICAgICAgQ2hlY2sgaW5zdGFsbGVkIHBhY2thZ2VzIGFnYWlu
c3QgcGtnY2hrLmNvbmYNCgktRCB0YWdzIENvbW1hIHNlcGFyYXRlZCBsaXN0
IG9mIGFkZGl0aW9uYWwgcGtnY2hrLmNvbmYgdGFncyB0byBzZXQNCgktZiAg
ICAgIFBlcmZvcm0gYSAnbWFrZSBmZXRjaCcgZm9yIGFsbCByZXF1aXJlZCBw
YWNrYWdlcw0KCS1nICAgICAgR2VuZXJhdGUgYW4gaW5pdGlhbCBwa2djaGsu
Y29uZiBmaWxlDQoJLWggICAgICBUaGlzIGhlbHANCgktaQlDaGVjayB2ZXJz
aW9ucyBvZiBpbnN0YWxsZWQgcGFja2FnZXMgKG5vdCB1c2luZyBwa2djaGsu
Y29uZikNCgktawlDb250aW51ZSB3aXRoIGZ1cnRoZXIgcGFja2FnZXMgaWYg
ZXJyb3JzIGFyZSBlbmNvdW50ZXJlZA0KCS1MIGZpbGUgUmVkaXJlY3Qgb3V0
cHV0IGZyb20gY29tbWFuZHMgcnVuIGludG8gZmlsZSAoc2hvdWxkIGJlIGZ1
bGxwYXRoKQ0KCS1sCUxpc3QgYmluYXJ5IHBhY2thZ2VzIGluY2x1ZGluZyBk
ZXBlbmRlbmNpZXMgKGltcGxpZXMgLWMpDQoJLU4JTGlzdCBpbnN0YWxsZWQg
cGFja2FnZXMgZm9yIHdoaWNoIGEgbmV3ZXIgdmVyc2lvbiBpcyBpbiBUT0RP
DQoJLW4JRGlzcGxheSBhY3Rpb25zIHRoYXQgd291bGQgYmUgdGFrZW4sIGJ1
dCBkbyBub3QgcGVyZm9ybSB0aGVtDQoJLVAgZGlyICBTZXQgUEFDS0FHRVMg
ZGlyIChvdmVycmlkZXMgYW55IG90aGVyIHNldHRpbmcpDQoJLXIJUmVjdXJz
aXZlbHkgcmVtb3ZlIG1pc21hdGNoZXMgKHVzZSB3aXRoIGNhcmUpIChpbXBs
aWVzIC1pKQ0KCS1zICAgICAgSW5zdGFsbCBwYWNrYWdlcyBieSBidWlsZGlu
ZyBmcm9tIHNvdXJjZQ0KCS1VIHRhZ3MgQ29tbWEgc2VwYXJhdGVkIGxpc3Qg
b2YgcGtnY2hrLmNvbmYgdGFncyB0byB1bnNldA0KCS11ICAgICAgVXBkYXRl
IGFsbCBtaXNtYXRjaGVkIHBhY2thZ2VzIChpbXBsaWVzIC1pKQ0KCS12ICAg
ICAgVmVyYm9zZQ0KDQpwa2dfY2hrIHZlcmlmaWVzIGluc3RhbGxlZCBwYWNr
YWdlcyBhZ2FpbnN0IHBrZ3NyYy4NClRoZSBtb3N0IGNvbW1vbiB1c2FnZSBp
cyAncGtnX2NoayAtaScgdG8gY2hlY2sgYWxsIGluc3RhbGxlZCBwYWNrYWdl
cy4NCkZvciBtb3JlIGFkdmFuY2VkIHVzYWdlLCBpbmNsdWRpbmcgZGVmaW5p
bmcgYSBzZXQgb2YgZGVzaXJlZCBwYWNrYWdlcyBiYXNlZA0Kb24gaG9zdG5h
bWUgYW5kIHR5cGUsIHNlZSBwa2dfY2hrKDgpLg0KDQpJZiBuZWl0aGVyIC1i
IG5vciAtcyBpcyBnaXZlbiwgYm90aCBhcmUgYXNzdW1lZCB3aXRoIC1iIHBy
ZWZlcnJlZC4NCicNCiAgICBleGl0IDENCiAgICB9DQoNCnZlcmJvc2UoKQ0K
ICAgIHsNCiAgICBpZiBbIC1uICIkb3B0X3YiIF0gOyB0aGVuDQoJbXNnICIk
QCINCiAgICBmaQ0KICAgIH0NCg0KYXJncz0kKGdldG9wdCBCQzpEOkw6UDpV
OmFiY2ZnaGlrbE5ucnN1diAkKikNCmlmIFsgJD8gIT0gMCBdOyB0aGVuDQog
ICAgb3B0X2g9MQ0KZmkNCnNldCAtLSAkYXJncw0Kd2hpbGUgWyAkIyAhPSAw
IF07IGRvDQogICAgY2FzZSAiJDEiIGluDQoJLWEgKQlvcHRfYT0xIDsgb3B0
X2M9MSA7Ow0KCS1CICkgICAgb3B0X0I9MSA7IG9wdF9pPTEgOzsNCgktYiAp
CW9wdF9iPTEgOzsNCgktQyApCW9wdF9DPSIkMiIgOyBzaGlmdDs7DQoJLWMg
KQlvcHRfYz0xIDs7DQoJLUQgKQlvcHRfRD0iJDIiIDsgc2hpZnQ7Ow0KCS1m
ICkJb3B0X2Y9MSA7Ow0KCS1nICkJb3B0X2c9MSA7Ow0KCS1oICkJb3B0X2g9
MSA7Ow0KCS1pICkJb3B0X2k9MSA7Ow0KCS1rICkJb3B0X2s9MSA7Ow0KCS1M
ICkJb3B0X0w9IiQyIiA7IHNoaWZ0OzsNCgktbCApCW9wdF9sPTEgOzsNCgkt
TiApCW9wdF9OPTEgOzsNCgktbiApCW9wdF9uPTEgOzsNCgktUCApCW9wdF9Q
PSIkMiIgOyBzaGlmdDs7DQoJLXIgKQlvcHRfcj0xIDsgb3B0X2k9MSA7Ow0K
CS1zICkJb3B0X3M9MSA7Ow0KCS1VICkJb3B0X1U9IiQyIiA7IHNoaWZ0OzsN
CgktdSApCW9wdF91PTEgOyBvcHRfaT0xIDs7DQoJLXYgKQlvcHRfdj0xIDs7
DQoJLS0gKQlzaGlmdDsgYnJlYWsgOzsNCiAgICBlc2FjDQogICAgc2hpZnQN
CmRvbmUNCg0KaWYgWyAteiAiJG9wdF9iIiAtYSAteiAiJG9wdF9zIiBdO3Ro
ZW4NCiAgICBvcHRfYj0xOyBvcHRfcz0xOw0KZmkNCg0KaWYgWyAteiAiJG9w
dF9hIiAtYSAteiAiJG9wdF9jIiAtYSAteiAiJG9wdF9nIiAtYSAteiAiJG9w
dF9pIiAtYSAteiAiJG9wdF9OIiAtYSAteiAiJG9wdF9sIiBdOw0KdGhlbg0K
ICAgIHVzYWdlICJNdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mIC1hLCAt
YywgLWcsIC1pLCAtbCwgLU4sIG9yIC11IjsNCmZpDQoNCmlmIFsgLW4gIiRv
cHRfaCIgLW8gJCMgIT0gMCBdO3RoZW4NCiAgICB1c2FnZQ0KZmkNCg0KIyBI
aWRlIFBLR19QQVRIIHRvIGF2b2lkIGJyZWFrYWdlIGluICdtYWtlJyBjYWxs
cw0Kc2F2ZWRfUEtHX1BBVEg9JFBLR19QQVRIDQp1bnNldCBQS0dfUEFUSCB8
fCB0cnVlDQoNCnRlc3QgLW4gIiRBV0siIHx8IEFXSz0iQEFXS0AiDQp0ZXN0
IC1uICIkR1JFUCIgfHwgR1JFUD0iQEdSRVBAIg0KdGVzdCAtbiAiJE1BS0Ui
IHx8IE1BS0U9IkBNQUtFQCINCnRlc3QgLW4gIiRNQUtFQ09ORiIgfHwgTUFL
RUNPTkY9IkBNQUtFQ09ORkAiDQp0ZXN0IC1uICIkUEtHX0lORk8iIHx8IFBL
R19JTkZPPSJAUEtHX0lORk9AIg0KdGVzdCAtbiAiJFNFRCIgfHwgU0VEPSJA
U0VEQCINCg0KaWYgWyAhIC1mICRNQUtFQ09ORiBdIDsgdGhlbg0KICAgIGlm
IFsgLWYgL2V0Yy9tay5jb25mIF0gOyB0aGVuDQoJTUFLRUNPTkY9L2V0Yy9t
ay5jb25mDQogICAgZWxzZQ0KCU1BS0VDT05GPS9kZXYvbnVsbA0KICAgIGZp
DQpmaQ0KDQojIGdyYWJiZWQgZnJvbSBHTlUgY29uZmlndXJlDQppZiAoZWNo
byAidGVzdGluZ1xjIjsgZWNobyAxLDIsMykgfCBncmVwIGMgPi9kZXYvbnVs
bDsgdGhlbg0KICAjIFN0YXJkZW50IFZpc3RyYSBTVlI0IGdyZXAgbGFja3Mg
LWUsIHNheXMgZ2hhemlAY2FpcC5ydXRnZXJzLmVkdS4NCiAgaWYgKGVjaG8g
LW4gdGVzdGluZzsgZWNobyAxLDIsMykgfCAke1NFRH0gcy8tbi94bi8gfCBn
cmVwIHhuID4vZGV2L251bGw7IHRoZW4NCiAgICBhY19uPSBhY19jPScNCicg
YWNfdD0nCScNCiAgZWxzZQ0KICAgIGFjX249LW4gYWNfYz0gYWNfdD0NCiAg
ZmkNCmVsc2UNCiAgYWNfbj0gYWNfYz0nXGMnIGFjX3Q9DQpmaQ0KDQppZiBb
IC1uICIkb3B0X0wiIF0gOyB0aGVuDQogICAgcm0gLWYgJG9wdF9MDQpmaQ0K
DQpleHRyYWN0X3ZhcmlhYmxlcw0KaWYgWyAtbiAiJG9wdF9DIiBdIDsgdGhl
bg0KICAgIFBLR0NIS19DT05GPSIkb3B0X0MiDQpmaQ0KaWYgWyAtbiAiJG9w
dF9QIiBdIDsgdGhlbg0KICAgIFBBQ0tBR0VTPSIkb3B0X1AiDQpmaQ0KaWYg
WyAtZCAkUEFDS0FHRVMvQWxsIF0gOyB0aGVuDQogICAgUEFDS0FHRVM9IiRQ
QUNLQUdFUy9BbGwiDQpmaQ0KDQppZiBbIC1uICIkb3B0X04iIF07IHRoZW4N
Cgkke1BLR19JTkZPfSB8IFwNCgkJJHtTRUR9IC1lICJzL1sgCV0uKi8vIiAt
ZSAicy8tW14tXSokLy8iIFwNCgkJICAgICAgIC1lICJzL3B5WzAtOV1bMC05
XXB0aC0vcHktLyIgXA0KCQkgICAgICAgLWUgInMvcHlbMC05XVswLTldLS9w
eS0vIiB8IFwNCgkJd2hpbGUgcmVhZCBhDQoJCWRvDQoJCQliPSQoZ3JlcCAi
byAkYS1bMC05XSIgJFBLR1NSQ0RJUi9kb2MvVE9ETyB8IFwNCgkJCQlzZWQg
LWUgInMvWyAJXSpvIC8vIikNCgkJaWYgWyAiJGIiIF0NCgkJdGhlbg0KCQkJ
ZWNobyAkYTogJGINCgkJZmkNCglkb25lDQpmaQ0KDQppZiBbIC1uICIkb3B0
X2IiIC1hIC16ICIkb3B0X3MiIC1hIC1kICRQQUNLQUdFUyBdIDsgdGhlbg0K
ICAgIG1zZ19wcm9ncmVzcyBTY2FuICRQQUNLQUdFUw0KICAgIGNkICRQQUNL
QUdFUw0KICAgIGZvciBmIGluIGBscyAtdCAqLnRnemAgOyBkbyAjIFNvcnQg
YnkgdGltZSB0byBwaWNrIHVwIG5ld2VzdCBmaXJzdA0KCVBLR0RJUj1gJHtQ
S0dfSU5GT30gLS4gLUIgJFBBQ0tBR0VTLyRmfCR7QVdLfSAtRj0gJyQxPT0i
UEtHUEFUSCJ7cHJpbnQgJDJ9J2ANCglQS0dOQU1FPWBlY2hvICRmIHwgJHtT
RUR9ICdzL1wudGd6JC8vJ2ANCglQS0dEQj0iJHtQS0dEQn0gJFBLR0RJUjok
UEtHTkFNRSINCiAgICBkb25lDQpmaQ0KDQpjZCAkUEtHU1JDRElSDQpyZWFs
X3BrZ3NyY2Rpcj0kKHB3ZCkNCg0KaWYgWyAtbiAiJG9wdF9pIiBdO3RoZW4N
CiAgICBQS0dESVJMSVNUPSQoc2ggLWMgIiR7UEtHX0lORk99IC1CIFwqIiB8
ICR7QVdLfSAtRj0gJy9QS0dQQVRIPS97cHJpbnRmICQyIiAifScpDQpmaQ0K
DQppZiBbIC1uICIkb3B0X2ciIF07IHRoZW4NCglpZiBbIC1yICRQS0dDSEtf
Q09ORiBdOyB0aGVuDQoJCW12ICRQS0dDSEtfQ09ORiAke1BLR0NIS19DT05G
fS5vbGQNCglmaQ0KCWVjaG8gIiMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkg
YXQgJChkYXRlKSIgPiAkUEtHQ0hLX0NPTkYNCgkke1BLR19JTkZPfSAtcUJh
IHwgJHtBV0t9ICcvXlBLR1BBVEgvIHsgc3ViKCJQS0dQQVRIPVsgXSoiLCAi
Iik7IHByaW50IH0nID4+ICRQS0dDSEtfQ09ORg0KZmkNCg0KaWYgWyAtbiAi
JG9wdF9jIiAtbyAtbiAiJG9wdF9sIiBdO3RoZW4NCg0KICAgIGlmIFsgISAt
ciAkUEtHQ0hLX0NPTkYgXTt0aGVuDQoJZmF0YWwgIlVuYWJsZSB0byByZWFk
IFBLR0NIS19DT05GICckUEtHQ0hLX0NPTkYnIg0KICAgIGZpDQoNCiAgICAj
IERldGVybWluZSBsaXN0IG9mIHRhZ3MNCiAgICAjDQogICAgZXh0cmFjdF9t
YWtlX3ZhcnMgTWFrZWZpbGUgT1BTWVMgT1NfVkVSU0lPTiBNQUNISU5FX0FS
Q0gNCiAgICBUQUdTPSIkKGhvc3RuYW1lIHwgJHtTRUR9IC1lICdzLFwuLios
LCcpLCQoaG9zdG5hbWUpLCRPUFNZUy0kT1NfVkVSU0lPTi0kTUFDSElORV9B
UkNILCRPUFNZUy0kT1NfVkVSU0lPTiwkT1BTWVMtJE1BQ0hJTkVfQVJDSCwk
T1BTWVMsJE9TX1ZFUlNJT04sJE1BQ0hJTkVfQVJDSCINCiAgICBpZiBbIC1m
IC91c3IvWDExUjYvbGliL2xpYlgxMS5zbyAtbyAtZiAvdXNyL1gxMVI2L2xp
Yi9saWJYMTEuYSBdO3RoZW4NCglUQUdTPSIkVEFHUyx4MTEiDQogICAgZmkN
CiAgICBpZiBbIC1uICIkUEtHQ0hLX1RBR1MiIF07dGhlbg0KCVRBR1M9IiRU
QUdTLCRQS0dDSEtfVEFHUyINCiAgICBmaQ0KICAgIGlmIFsgLW4gIiRQS0dD
SEtfTk9UQUdTIiBdO3RoZW4NCglpZiBbIC1uICIkb3B0X1UiIF07dGhlbg0K
CQlvcHRfVT0iJG9wdF9VLCRQS0dDSEtfTk9UQUdTIg0KCWVsc2UNCgkJb3B0
X1U9IiRQS0dDSEtfTk9UQUdTIg0KCWZpDQogICAgZmkNCiAgICBpZiBbIC1u
ICIkb3B0X0QiIF07dGhlbg0KCVRBR1M9IiRUQUdTLCRvcHRfRCINCiAgICBm
aQ0KICAgIHZlcmJvc2UgInNldCAgIFRBR1M9JFRBR1MiDQogICAgdmVyYm9z
ZSAidW5zZXQgVEFHUz0kb3B0X1UiDQoNCiAgICAjIEV4dHJhY3QgbGlzdCBv
ZiB2YWxpZCBwa2dkaXJzIChza2lwIGFueSAnYWxyZWFkeXNldCcgaW4gJFBL
R0RJUkxJU1QpDQogICAgIw0KICAgIFBLR0RJUkxJU1Q9IiRQS0dESVJMSVNU
ICIkKCR7QVdLfSAtdiBhbHJlYWR5c2V0PSIkUEtHRElSTElTVCIgLXYgc2V0
bGlzdD0kVEFHUyAtdiB1bnNldGxpc3Q9JG9wdF9VICcNCiAgICBCRUdJTiB7
DQoJc3BsaXQoYWxyZWFkeXNldCwgdG1wLCAiICIpOw0KCWZvciAodGFnIGlu
IHRtcCkgeyBza2lwW3RtcFt0YWddXSA9IDE7IH0NCg0KCXNwbGl0KHNldGxp
c3QsIHRtcCwgIiwiKTsNCglmb3IgKHRhZyBpbiB0bXApIHsgdGFnbGlzdFt0
bXBbdGFnXV0gPSAxOyB9DQoNCglzcGxpdCh1bnNldGxpc3QsIHRtcCwgIiwi
KTsNCglmb3IgKHRhZyBpbiB0bXApIHsgc2tpcFt0bXBbdGFnXV0gPSAxOyBk
ZWxldGUgdGFnbGlzdFt0bXBbdGFnXV0gfQ0KDQoJdGFnbGlzdFsiKiJdID0g
IioiDQogICAgfQ0KICAgIGZ1bmN0aW9uIGFuZF9leHByX3dpdGhfZGljdChl
eHByLCBkaWN0LCBhcnksIGksIHIsIGQpIHsNCglzcGxpdChleHByLGFyeSwv
XCsvKTsNCglyID0gMTsNCglmb3IgKGkgaW4gYXJ5KSB7DQoJCWlmIChhcnlb
aV0gfiAvXlwvLykgew0KCQkJaWYgKGdldGxpbmUgZCA8IGFyeVtpXSA9PSAt
MSkNCgkJCSAgICB7IHIgPSAwOyBicmVhayA7fQ0KCQl9DQoJCWVsc2UgaWYg
KCEgKGFyeVtpXSBpbiBkaWN0KSkNCgkJCXsgciA9IDA7IGJyZWFrIDt9DQoJ
fQ0KCXJldHVybiByOw0KICAgIH0NCiAgICB7DQogICAgc3ViKCIjLioiLCAi
Iik7DQogICAgaWYgKHNraXBbJDFdKQ0KCXsgbmV4dDsgfQ0KICAgIG5lZWQg
PSAwOw0KICAgIGZvciAoZiA9IDEgOyBmPD1ORiA7ICsrZikgewkJCSMgRm9y
IGVhY2ggd29yZCBvbiB0aGUgbGluZQ0KCWlmIChzdWIoIl4tIiwgIiIsICRm
KSkgeyAJIyBJZiBpdCBiZWdpbnMgd2l0aCBhICctJw0KCQlpZiAoYW5kX2V4
cHJfd2l0aF9kaWN0KCRmLCB0YWdsaXN0KSkNCgkJCW5leHQ7CQkjIElmIGl0
IGlzIHRydWUsIGRpc2NhcmQNCgl9IGVsc2Ugew0KCQlpZiAoYW5kX2V4cHJf
d2l0aF9kaWN0KCRmLCB0YWdsaXN0KSkNCgkJCW5lZWQgPSAxOwkjIElmIGl0
IGlzIHRydWUsIG5vdGUgbmVlZGVkDQoJfQ0KICAgIH0NCiAgICBpZiAoTkYg
PT0gMSB8fCBuZWVkKQ0KCXsgcHJpbnQgJDEgfQ0KICAgIH0NCiAgICAnIDwg
JFBLR0NIS19DT05GDQogICAgKQ0KZmkNCg0KaWYgWyAtbiAiJG9wdF9sIiBd
IDsgdGhlbg0KICAgIGxpc3RfcGFja2FnZXMgJFBLR0RJUkxJU1QNCmVsc2UN
CiAgICAjIENoZWNrICRQS0dESVJMSVNUIHBhY2thZ2VzIGFyZSBpbnN0YWxs
ZWQgYW5kIGNvcnJlY3QgdmVyc2lvbg0KICAgICMNCiAgICBjaGVja19wYWNr
YWdlc19pbnN0YWxsZWQgJFBLR0RJUkxJU1QNCmZpDQoNCmlmIFsgLW4gIiRv
cHRfciIgLWEgLW4gIiRNSVNNQVRDSF9UT0RPIiBdOyB0aGVuDQogICAgcnVu
X2NtZCAiJHtQS0dfREVMRVRFfSAtciAkTUlTTUFUQ0hfVE9ETyIgMQ0KICAg
IGlmIFsgLW4gIiRvcHRfYSIgXSA7IHRoZW4NCgltc2dfcHJvZ3Jlc3MgUmVj
aGVja2luZyBwYWNrYWdlcyBhZnRlciBkZWxldGlvbnMNCgljaGVja19wYWNr
YWdlc19pbnN0YWxsZWQgJFBLR0RJUkxJU1QgIyBNYXkgbmVlZCB0byBhZGQg
bW9yZSBwYWNrYWdlcw0KICAgIGZpDQpmaQ0KDQpVUERBVEVfRkVUQ0hfVE9E
Tz0iJFVQREFURV9UT0RPIg0KaWYgWyAtbiAiJFVQREFURV9UT0RPIiBdO3Ro
ZW4NCiAgICAjIEdlbmVyYXRlIGxpc3QgaW5jbHVkaW5nIHBhY2thZ2VzIHdo
aWNoIGRlcGVuZCBvbiB1cGRhdGVzDQogICAgIw0KICAgIHNldCAtLSAkVVBE
QVRFX1RPRE8NCiAgICB3aGlsZSBbICQjICE9IDAgXTsgZG8NCglQS0dOQU1F
PSQoZWNobyAkMSB8ICR7U0VEfSAncy8tWzAtOV0uKi8vJykNCglpZiBbIC1m
ICRQS0dfREJESVIvJFBLR05BTUUtWzAtOV0qLytSRVFVSVJFRF9CWSBdO3Ro
ZW4NCgkgICAgTElTVD0iJExJU1QkMXwkMnwkKGNhdCAkUEtHX0RCRElSLyRQ
S0dOQU1FLVswLTldKi8rUkVRVUlSRURfQlkgfCB4YXJncyBlY2hvKVxuIg0K
CWVsc2UNCgkgICAgTElTVD0iJExJU1QkMXwkMlxuIg0KCWZpDQoJc2hpZnQg
OyBzaGlmdDsNCiAgICBkb25lDQoNCiAgICAjIGRyb3AgYW55IHBhY2thZ2Vz
IHdob3NlICdwYXJlbnRzJyBhcmUgYWxzbyB0byBiZSB1cGRhdGVkDQogICAg
Iw0KICAgIFVQREFURV9UT0RPPSQocHJpbnRmICIkTElTVCIgfCAke0FXS30g
LUYgJ3wnICcNCiAgICB7DQogICAgcGtnMmRpclskMV0gPSAkMg0KICAgIHNw
bGl0KCQzLCBkZXBsaXN0LCAiICIpDQogICAgZm9yIChwa2cgaW4gZGVwbGlz
dCkNCgl7DQoJZGVwID0gZGVwbGlzdFtwa2ddDQoJc3ViKCItWzAtOV0uKiIs
ICIiLCBkZXApICMgU3RyaXAgdmVyc2lvbg0KCWNvdmVyZWRbZGVwXSA9IDEN
Cgl9DQogICAgfQ0KICAgIEVORCB7DQogICAgZm9yIChwa2cgaW4gcGtnMmRp
cikNCgl7DQoJY2hrID0gcGtnDQoJc3ViKCItWzAtOV0uKiIsICIiLCBjaGsp
OyAjIFN0cmlwIHZlcnNpb24NCglpZiAoIWNvdmVyZWRbY2hrXSkNCgkgICAg
cHJpbnQgcGtnIiAicGtnMmRpcltwa2ddDQoJfQ0KICAgIH0NCiAgICAnKQ0K
ZmkNCg0KaWYgWyAtbiAiJG9wdF9mIiBdIDsgdGhlbg0KICAgIHBrZ19mZXRj
aGxpc3QgJFVQREFURV9GRVRDSF9UT0RPDQogICAgcGtnX2ZldGNobGlzdCAk
TUlTU0lOR19UT0RPDQpmaQ0KaWYgWyAtbiAiJG9wdF91IiBdIDsgdGhlbg0K
ICAgIHBrZ19pbnN0YWxsbGlzdCBVcGRhdGUgICRVUERBVEVfVE9ETw0KZmkN
CmlmIFsgLW4gIiRvcHRfYSIgXSA7IHRoZW4NCiAgICBwa2dfaW5zdGFsbGxp
c3QgSW5zdGFsbCAkTUlTU0lOR19UT0RPDQpmaQ0KDQppZiBbIC1uICIkVVBE
QVRFX0RPTkUiIF07dGhlbg0KICAgIG1zZyAiVXBkYXRlZDokVVBEQVRFX0RP
TkUiDQpmaQ0KaWYgWyAtbiAiJElOU1RBTExfRE9ORSIgXTt0aGVuDQogICAg
bXNnICJJbnN0YWxsZWQ6JElOU1RBTExfRE9ORSINCmZpDQppZiBbIC1uICIk
RkFJTF9ET05FIiBdO3RoZW4NCiAgICBtc2cgIkZhaWxlZDokRkFJTF9ET05F
Ig0KZmkNCmlmIFsgLW4gIiRNSVNTX0RPTkUiIF07dGhlbg0KICAgIG1zZyAi
TWlzc2luZzokTUlTU19ET05FIg0KZmkNCg==

--0-1580028857-1117059841=:675--