Subject: Re: Smarter make update / pkg_chk algo
To: Jeremy C. Reed <reed@reedmedia.net>
From: David Brownlee <abs@NetBSD.org>
List: tech-pkg
Date: 05/26/2005 20:59:39
  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-1428074169-1117137579=:1183
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

yOn Thu, 26 May 2005, Jeremy C. Reed wrote:

> On Thu, 26 May 2005, David Brownlee wrote:
>
>> On Thu, 26 May 2005, Greg Troxel wrote:
>>
>>> The pkg_chk.sh you sent seems to be 1.14 from pkgsrc, without tsort.
>>> I have had my own workaround for a while, so please no rush on my
>>> account, but I'm glad to see these improvements.
>>
>>  	Erk, dangers of working on my build box and sending email from
>>  	my laptop - when I'm in the same building it nfs mounts /pkgsrc
>>  	from the build box... but yesterday was not one of those days :)
>
> The attachment is identical to yesterday's file from
> Message-ID: <Pine.NEB.4.62.0505252304510.675@localhost.>

 	It gets better - that was me copying from my work machine to
 	my home machine... and then re sending from my laptop... which
 	todya is in a third location.

 	This copy should be right - 'pologies.

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

IyFAU0hAIC1lDQojDQojICRJZDogcGtnX2Noay5zaCx2IDEuMTQgMjAwNS8w
NC8yMCAxNTozMjoyNSBhYnMgRXhwICQNCiMNCiMgVE9ETzogVmFyYXRpb24g
b2YgLWcgd2hpY2ggb25seSBsaXN0cyB0b3AgbGV2ZWwgcGFja2FnZXMNCiMg
VE9ETzogTGlzdCB0b3AgbGV2ZWwgcGFja2FnZXMgaW5zdGFsbGVkIGJ1dCBu
b3QgaW4gY29uZmlnDQojIFRPRE86IEdlbmVyYXRlIGxpc3QgZmlsZXMgc28g
LXUgY2FuIHdvcmsgYWdhaW5zdCBhIHJlbW90ZSBVUkwNCg0KUEFUSD0vdXNy
L3NiaW46L3Vzci9iaW46JHtQQVRIfQ0KDQpjaGVja19wYWNrYWdlc19pbnN0
YWxsZWQoKQ0KICAgIHsNCiAgICBNSVNTSU5HX1RPRE89DQogICAgTUlTTUFU
Q0hfVE9ETz0NCg0KICAgIGZvciBwa2dkaXIgaW4gJCogOyBkbw0KDQoJaWYg
WyAtbiAiJG9wdF9CIiBdO3RoZW4NCgkgICAgZXh0cmFjdF9wa2dfdmFycyAk
cGtnZGlyIFBLR05BTUUgRklMRVNESVIgUEtHRElSIERJU1RJTkZPX0ZJTEUg
UEFUQ0hESVINCgllbHNlDQoJICAgIGV4dHJhY3RfcGtnX3ZhcnMgJHBrZ2Rp
ciBQS0dOQU1FDQoJZmkNCglpZiBbIC16ICIkUEtHTkFNRSIgXTsgdGhlbg0K
CSAgICBNSVNTX0RPTkU9JE1JU1NfRE9ORSIgIiRwa2dkaXINCgkgICAgY29u
dGludWUNCglmaQ0KCWlmIFsgISAtZCAkUEtHX0RCRElSLyRQS0dOQU1FIF07
dGhlbg0KCSAgICBtc2dfbiAiJFBLR05BTUU6ICINCgkgICAgcGtnPSQoZWNo
byAkUEtHTkFNRSB8ICR7U0VEfSAncy8tWzAtOV0uKi8vJykNCgkgICAgcGtn
aW5zdGFsbGVkPSQoc2ggLWMgIiR7UEtHX0lORk99IC1lICRwa2ciIHx8IHRy
dWUpDQoJICAgIElOU1RBTEw9DQoJICAgIGlmIFsgLW4gIiRwa2dpbnN0YWxs
ZWQiIF07dGhlbg0KCQltc2dfbiAidmVyc2lvbiBtaXNtYXRjaCAtICRwa2dp
bnN0YWxsZWQiDQoJCU1JU01BVENIX1RPRE89IiRNSVNNQVRDSF9UT0RPICRw
a2dpbnN0YWxsZWQiDQoJICAgIGVsc2UNCgkJbXNnX24gIm1pc3NpbmciDQoJ
CU1JU1NJTkdfVE9ETz0iJE1JU1NJTkdfVE9ETyAkUEtHTkFNRSAkcGtnZGly
Ig0KCSAgICBmaQ0KCSAgICBpZiBbIC1mICRQQUNLQUdFUy8kUEtHTkFNRS50
Z3ogXSA7dGhlbg0KCQltc2dfbiAiIChiaW5hcnkgcGFja2FnZSBhdmFpbGFi
bGUpIg0KCSAgICBmaQ0KCSAgICBtc2cNCgllbHNlDQoJICAgIGlmIFsgLW4g
IiRvcHRfQiIgXTt0aGVuDQoJCWN1cnJlbnRfYnVpbGRfdmVyPSQoZ2V0X2J1
aWxkX3ZlcikNCgkJaW5zdGFsbGVkX2J1aWxkX3Zlcj0kKCR7U0VEfSAic3xe
W146XSovW146XSo6fHwiICRQS0dfREJESVIvJFBLR05BTUUvK0JVSUxEX1ZF
UlNJT04pDQoJCWlmIFsgeCIkY3VycmVudF9idWlsZF92ZXIiICE9IHgiJGlu
c3RhbGxlZF9idWlsZF92ZXIiIF07dGhlbg0KCQkgICAgbXNnICIkUEtHTkFN
RTogYnVpbGQtdmVyc2lvbiBtaXNtYXRjaCINCgkJICAgIHZlcmJvc2UgIi0t
Y3VycmVudC0tIg0KCQkgICAgdmVyYm9zZSAiJGN1cnJlbnRfYnVpbGRfdmVy
Ig0KCQkgICAgdmVyYm9zZSAiLS1pbnN0YWxsZWQtLSINCgkJICAgIHZlcmJv
c2UgIiRpbnN0YWxsZWRfYnVpbGRfdmVyIg0KCQkgICAgdmVyYm9zZSAiLS0t
LSINCgkJICAgIE1JU01BVENIX1RPRE89IiRNSVNNQVRDSF9UT0RPICRQS0dO
QU1FIg0KCQllbHNlDQoJCSAgICB2ZXJib3NlICIkUEtHTkFNRTogT0siDQoJ
CWZpDQoJICAgIGVsc2UNCgkJdmVyYm9zZSAiJFBLR05BTUU6IE9LIg0KCSAg
ICBmaQ0KCWZpDQogICAgZG9uZQ0KICAgIH0NCg0KZGVsZXRlX3BrZ3MoKQ0K
ICAgIHsNCiAgICBmb3IgcGtnIGluICQqIDsgZG8NCglpZiBbIC1kICRQS0df
REJESVIvJHBrZyBdIDsgdGhlbg0KCSAgICBydW5fY21kICIke1BLR19ERUxF
VEV9IC1yICRwa2ciIDENCglmaQ0KICAgIGRvbmUNCiAgICB9DQoNCmV4dHJh
Y3RfbWFrZV92YXJzKCkNCiAgICB7DQogICAgTUFLRUZJTEU9JDENCiAgICBz
aGlmdA0KICAgIHZlcmJvc2UgIkV4dHJhY3QgJEAgZnJvbSAkTUFLRUZJTEUi
DQogICAgTUFLRURBVEE9Ii5QSE9OWTogeFxueDpcbiI7DQogICAgZm9yIHZh
ciBpbiAkKiA7IGRvDQoJTUFLRURBVEE9JE1BS0VEQVRBIlx0QGVjaG8gJHZh
cj1cJHskdmFyfVxuIg0KICAgIGRvbmUNCiAgICBldmFsICQocHJpbnRmICIk
TUFLRURBVEEiIHwgJHtNQUtFfSAtZiAtIC1mICRNQUtFRklMRSB4IHwgXA0K
CQkJCQkke1NFRH0gLWUgJ3MvW149XSo9LyYiLycgLWUgJ3MvJC8iLycpDQog
ICAgfQ0KDQojICQxID0gbmFtZSBvZiB2YXJpYWJsZQ0KIyAkMiA9IGRlZmF1
bHQgdmFsdWUNCmV4dHJhY3RfbWtfZGlyX3ZhcigpDQogICAgew0KICAgIGlm
IFsgLXogImBldmFsIGVjaG8gXFwkJDFgIiBdIDsgdGhlbg0KCWV2YWwgJChw
cmludGYgIkJTRF9QS0dfTUs9MVxuLlBIT05ZOiB4XG54OlxuXHRAZWNobyAk
MT0iJyQnInskMX1cbiIgfCAke01BS0V9IC1mIC0gLWYgJE1BS0VDT05GIHgp
DQoJaWYgWyAteiAiYGV2YWwgZWNobyBcXCQkMWAiIF07IHRoZW4NCgkgICAg
ZXZhbCAiJDE9JDIiDQoJZmkNCglpZiBbICEgLWQgYGV2YWwgZWNobyBcXCQk
MWAgXTt0aGVuDQoJICAgIGZhdGFsICJVbmFibGUgdG8gbG9jYXRlICQxIGBl
dmFsIGVjaG8gXFwkJDFgIg0KCWZpDQogICAgZmkNCiAgICB9DQoNCmV4dHJh
Y3RfcGtnX3ZhcnMoKQ0KICAgIHsNCiAgICBQS0dESVI9JDENCiAgICBQS0dO
QU1FPQ0KICAgIHNoaWZ0Ow0KICAgIGlmIFsgLW4gIiRvcHRfYiIgLWEgLXog
IiRvcHRfcyIgXSA7IHRoZW4NCglmb3IgcGtnIGluICRQS0dEQiA7IGRvDQoJ
ICAgIGNhc2UgJHBrZyBpbg0KCQkiJFBLR0RJUjoiKikNCgkJICAgIFBLR05B
TUU9YGVjaG8gJHBrZ3wgJHtTRUR9ICdzL1teOl0qOi8vJ2ANCgkJICAgIHJl
dHVybjsNCgkJOzsNCgkgICAgZXNhYw0KCWRvbmUNCgltc2cgIldBUk5JTkc6
IE5vIGJpbmFyeSBwYWNrYWdlIGZvciAkUEtHRElSIg0KICAgIGVsc2UNCglp
ZiBbICEgLWYgJFBLR1NSQ0RJUi8kcGtnZGlyL01ha2VmaWxlIF07dGhlbg0K
CSAgICBtc2cgIldBUk5JTkc6IE5vICRwa2dkaXIvTWFrZWZpbGUgLSBwYWNr
YWdlIG1vdmVkIG9yIG9ic29sZXRlPyINCgkgICAgcmV0dXJuDQoJZmkNCglj
ZCAkUEtHU1JDRElSLyRQS0dESVINCglleHRyYWN0X21ha2VfdmFycyBNYWtl
ZmlsZSAiJEAiDQoJaWYgWyAteiAiJFBLR05BTUUiIF07IHRoZW4NCgkgICAg
ZmF0YWwgIlVuYWJsZSB0byBleHRyYWN0IFBLR05BTUUgZm9yICRwa2dkaXIi
DQoJZmkNCiAgICBmaQ0KICAgIH0NCg0KZXh0cmFjdF92YXJpYWJsZXMoKQ0K
ICAgIHsNCiAgICBleHRyYWN0X21rX2Rpcl92YXIgUEtHU1JDRElSIC91c3Iv
cGtnc3JjDQogICAgZXh0cmFjdF9ta19kaXJfdmFyIFBLR19EQkRJUiAvdmFy
L2RiL3BrZw0KDQogICAgIyBOb3cgd2UgaGF2ZSBQS0dTUkNESVIsIHVzZSBp
dCB0byBkZXRlcm1pbmUgUEFDS0FHRVMsIGFuZCBQS0dDSEtfQ09ORg0KICAg
ICMgYXMgd2VsbCBhcyBBV0ssIEdSRVAsIFNFRCwgUEtHQ0hLX1RBR1MgYW5k
IFBLR0NIS19OT1RBR1MNCiAgICAjDQoNCiAgICBpZiBbIC16ICIkb3B0X2Ii
IC1vIC1uICIkb3B0X3MiIC1vIC1kICRQS0dTUkNESVIvcGtndG9vbHMvcGtn
X2NoayBdIDsgdGhlbg0KCWNkICRQS0dTUkNESVIvcGtndG9vbHMvcGtnX2No
aw0KCWV4dHJhY3RfbWFrZV92YXJzIE1ha2VmaWxlIEFXSyBHUkVQIFNFRCBU
U09SVCBTT1JUIFBBQ0tBR0VTIFBLR19JTkZPIFwNCgkJCVBLR19BREQgUEtH
X0RFTEVURSBQS0dDSEtfQ09ORiBQS0dDSEtfVVBEQVRFX0NPTkYgXA0KCQkJ
UEtHQ0hLX1RBR1MgUEtHQ0hLX05PVEFHUw0KCWlmIFsgLXogIiRQQUNLQUdF
UyIgXTt0aGVuDQoJICAgIFBBQ0tBR0VTPSRQS0dTUkNESVIvcGFja2FnZXMN
CglmaQ0KICAgIGVsaWYgWyAkTUFLRUNPTkYgIT0gL2Rldi9udWxsIF0gOyB0
aGVuDQoJZXh0cmFjdF9tYWtlX3ZhcnMgJE1BS0VDT05GIFBBQ0tBR0VTIFBL
R0NIS19DT05GIFBLR0NIS19VUERBVEVfQ09ORiBcDQoJCQlQS0dDSEtfVEFH
UyBQS0dDSEtfTk9UQUdTDQoJaWYgWyAteiAiJFBBQ0tBR0VTIiBdIDsgdGhl
bg0KCSAgICBQQUNLQUdFUz1gcHdkYA0KCWZpDQogICAgZmkNCg0KICAgIGlm
IFsgLXogIiRQS0dDSEtfQ09ORiIgXTt0aGVuDQoJUEtHQ0hLX0NPTkY9JFBL
R1NSQ0RJUi9wa2djaGsuY29uZg0KICAgIGZpDQogICAgaWYgWyAteiAiJFBL
R0NIS19VUERBVEVfQ09ORiIgXTt0aGVuDQoJUEtHQ0hLX1VQREFURV9DT05G
PSRQS0dTUkNESVIvcGtnY2hrX3VwZGF0ZS0kKGhvc3RuYW1lKS5jb25mDQog
ICAgZmkNCiAgICB9DQoNCmZhdGFsKCkNCiAgICB7DQogICAgbXNnICIqKiog
JEAiDQogICAgZXhpdCAxDQogICAgfQ0KDQpmYXRhbF9tYXliZSgpDQogICAg
ew0KICAgIG1zZyAiJEAiDQogICAgaWYgWyAteiAiJG9wdF9rIiBdO3RoZW4N
CglleGl0IDENCiAgICBmaQ0KICAgIH0NCg0KZ2VuZXJhdGVfY29uZl9mcm9t
X2luc3RhbGxlZCgpDQogICAgew0KICAgIEZJTEU9JDENCiAgICBpZiBbIC1y
ICRGSUxFIF07IHRoZW4NCgltdiAkRklMRSAke0ZJTEV9Lm9sZA0KICAgIGZp
DQogICAgZWNobyAiIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBhdCAkKGRh
dGUpIiA+ICRGSUxFDQogICAgZWNobyAkKHBrZ2RpcnNfZnJvbV9pbnN0YWxs
ZWQpIHwgZm10IC0xIAk+PiAkRklMRQ0KICAgIH0NCg0KZ2V0X2J1aWxkX3Zl
cigpDQogICAgew0KICAgIGlmIFsgLW4gIiRvcHRfYiIgLWEgLXogIiRvcHRf
cyIgXSA7IHRoZW4NCgkke1BLR19JTkZPfSAtLiAtYiAkUEFDS0FHRVMvJFBL
R05BTUUudGd6IHwgdGFpbCArNCB8ICR7U0VEfSAic3xeW146XSovW146XSo6
fHwiIHwgJHtHUkVQfSAuDQoJcmV0dXJuDQogICAgZmkNCiAgICBmaWxlcz0i
Ig0KICAgIGZvciBmIGluIE1ha2VmaWxlICR7RklMRVNESVJ9LyogJHtQS0dE
SVJ9Lyo7IGRvDQoJaWYgWyAtZiAkZiBdO3RoZW4NCgkgICAgZmlsZXM9IiRm
aWxlcyAkZiINCglmaQ0KICAgIGRvbmUNCiAgICBpZiBbIC1mICR7RElTVElO
Rk9fRklMRX0gXTsgdGhlbg0KCWZvciBmIGluICQoJHtBV0t9ICdORiA9PSA0
ICYmICQzID09ICI9IiB7IGdzdWIoIlsoKV0iLCAiIiwgJDIpOyBwcmludCAk
MiB9JyA8ICR7RElTVElORk9fRklMRX0pOyBkbyANCgkgICAgaWYgWyAtZiAk
e1BBVENIRElSfS8kZiBdOyB0aGVuDQoJCWZpbGVzPSIkZmlsZXMgJHtQQVRD
SERJUn0vJGYiOw0KCSAgICBmaTsNCglkb25lDQogICAgZmkNCiAgICBpZiBb
IC1kICR7UEFUQ0hESVJ9IF07IHRoZW4NCglmb3IgZiBpbiAke1BBVENIRElS
fS9wYXRjaC0qOyBkbw0KCSAgICBjYXNlICRmIGluDQoJICAgICoub3JpZ3wq
LnJlanwqfikgOzsNCgkgICAgJHtQQVRDSERJUn0vcGF0Y2gtbG9jYWwtKikN
CgkJZmlsZXM9IiRmaWxlcyAkZiIgOzsNCgkgICAgZXNhYw0KCWRvbmUNCiAg
ICBmaQ0KICAgIGNhdCAkZmlsZXMgfCAke0dSRVB9ICdcJE5ldEJTRCcNCiAg
ICB9DQoNCmxpc3RfcGFja2FnZXMoKQ0KICAgIHsNCiAgICBDSEVDS0xJU1Q9
JyAnDQogICAgZm9yIHBrZ2RpciBpbiAkKiA7IGRvDQoJZXh0cmFjdF9wa2df
dmFycyAkcGtnZGlyIFBLR05BTUUNCglpZiBbIC16ICIkUEtHTkFNRSIgXTsg
dGhlbg0KCSAgICBjb250aW51ZQ0KCWZpDQoJaWYgWyAhIC1mICRQQUNLQUdF
Uy8kUEtHTkFNRS50Z3ogXSA7dGhlbg0KCSAgICBmYXRhbF9tYXliZSAiICoq
ICRQS0dOQU1FIC0gYmluYXJ5IHBhY2thZ2UgbWlzc2luZyINCgkgICAgY29u
dGludWUNCglmaQ0KCXZlcmJvc2UgIiRQS0dOQU1FLnRnejogZm91bmQiDQoJ
Q0hFQ0tMSVNUPSIkQ0hFQ0tMSVNUJFBLR05BTUUgIjsNCiAgICBkb25lDQoN
CiAgICBQQUlSTElTVD0NCiAgICBQS0dMSVNUPScgJw0KICAgIHdoaWxlIFsg
IiRDSEVDS0xJU1QiICE9ICcgJyBdOyBkbw0KCU5FWFRDSEVDSz0nICcNCglm
b3IgcGtnIGluICRDSEVDS0xJU1QgOyBkbw0KCSAgICBpZiBbICEgLWYgJFBB
Q0tBR0VTLyRwa2cudGd6IF0gOyB0aGVuDQoJCWZhdGFsX21heWJlICIgKiog
JHBrZy50Z3ogLSBiaW5hcnkgcGFja2FnZSBkZXBlbmRlbmN5IG1pc3Npbmci
DQoJCWNvbnRpbnVlDQoJICAgIGZpDQoJICAgIERFUExJU1Q9IiQoJHtQS0df
SU5GT30gLS4gLU4gJFBBQ0tBR0VTLyRwa2cudGd6IHwgJHtTRUR9ICcxLC9C
dWlsdCB1c2luZzovZCcgfCAke0dSRVB9IC4uKSINCgkgICAgaWYgWyAteiAi
JERFUExJU1QiIF0gOyB0aGVuDQoJCVBBSVJMSVNUPSIke1BBSVJMSVNUfSRw
a2cudGd6ICRwa2cudGd6XG4iDQoJICAgIGZpDQoJICAgIGZvciBkZXAgaW4g
JERFUExJU1QgOyBkbw0KCQlpZiBbICEgLWYgJFBBQ0tBR0VTLyRkZXAudGd6
IF0gOyB0aGVuDQoJCSAgICBmYXRhbF9tYXliZSAiICoqICRkZXAudGd6IC0g
YmluYXJ5IHBhY2thZ2UgZGVwZW5kZW5jeSBtaXNzaW5nIg0KCQkgICAgYnJl
YWsgMg0KCQlmaQ0KCQlQQUlSTElTVD0iJHtQQUlSTElTVH0kZGVwLnRneiAk
cGtnLnRnelxuIg0KCQljYXNlICIkUEtHTElTVCRDSEVDS0xJU1QkTkVYVENI
RUNLIiBpbg0KCQkgICAgKiIgJGRlcCAiKikNCgkJCXZlcmJvc2UgIiRwa2c6
IER1cGxpY2F0ZSBkZXBlbmQgJGRlcCINCgkJCTs7DQoJCSAgICAqKQ0KCQkJ
TkVYVENIRUNLPSIgJGRlcCRORVhUQ0hFQ0siDQoJCQl2ZXJib3NlICIkcGtn
OiBBZGQgZGVwZW5kICRkZXAiDQoJCQk7Ow0KCQllc2FjDQoJICAgIGRvbmUN
CgkgICAgUEtHTElTVD0iJHBrZyAkUEtHTElTVCINCglkb25lDQoJQ0hFQ0tM
SVNUPSIkTkVYVENIRUNLIg0KICAgIGRvbmUNCiAgICBwcmludGYgIiRQQUlS
TElTVCIgfCAke1RTT1JUfQ0KICAgIH0NCg0KcGtnZGlyc19mcm9tX2NvbmYo
KQ0KICAgIHsNCiAgICBDT05GPSQxOyBzaGlmdA0KICAgIExJU1Q9IiQqIg0K
ICAgIGlmIFsgISAtciAkQ09ORiBdO3RoZW4NCglmYXRhbCAiVW5hYmxlIHRv
IHJlYWQgUEtHQ0hLX0NPTkYgJyRDT05GJyINCiAgICBmaQ0KDQogICAgIyBE
ZXRlcm1pbmUgbGlzdCBvZiB0YWdzDQogICAgIw0KICAgIGV4dHJhY3RfbWFr
ZV92YXJzIE1ha2VmaWxlIE9QU1lTIE9TX1ZFUlNJT04gTUFDSElORV9BUkNI
DQogICAgVEFHUz0iJChob3N0bmFtZSB8ICR7U0VEfSAtZSAncyxcLi4qLCwn
KSwkKGhvc3RuYW1lKSwkT1BTWVMtJE9TX1ZFUlNJT04tJE1BQ0hJTkVfQVJD
SCwkT1BTWVMtJE9TX1ZFUlNJT04sJE9QU1lTLSRNQUNISU5FX0FSQ0gsJE9Q
U1lTLCRPU19WRVJTSU9OLCRNQUNISU5FX0FSQ0giDQogICAgaWYgWyAtZiAv
dXNyL1gxMVI2L2xpYi9saWJYMTEuc28gLW8gLWYgL3Vzci9YMTFSNi9saWIv
bGliWDExLmEgXTt0aGVuDQoJVEFHUz0iJFRBR1MseDExIg0KICAgIGZpDQog
ICAgaWYgWyAtbiAiJFBLR0NIS19UQUdTIiBdO3RoZW4NCglUQUdTPSIkVEFH
UywkUEtHQ0hLX1RBR1MiDQogICAgZmkNCiAgICBpZiBbIC1uICIkUEtHQ0hL
X05PVEFHUyIgXTt0aGVuDQoJaWYgWyAtbiAiJG9wdF9VIiBdO3RoZW4NCgkJ
b3B0X1U9IiRvcHRfVSwkUEtHQ0hLX05PVEFHUyINCgllbHNlDQoJCW9wdF9V
PSIkUEtHQ0hLX05PVEFHUyINCglmaQ0KICAgIGZpDQogICAgaWYgWyAtbiAi
JG9wdF9EIiBdO3RoZW4NCglUQUdTPSIkVEFHUywkb3B0X0QiDQogICAgZmkN
CiAgICB2ZXJib3NlICJzZXQgICBUQUdTPSRUQUdTIg0KICAgIHZlcmJvc2Ug
InVuc2V0IFRBR1M9JG9wdF9VIg0KDQogICAgIyBFeHRyYWN0IGxpc3Qgb2Yg
dmFsaWQgcGtnZGlycyAoc2tpcCBhbnkgJ2FscmVhZHlzZXQnIGluICRMSVNU
KQ0KICAgICMNCiAgICBMSVNUPSIkTElTVCAiJCgke0FXS30gLXYgYWxyZWFk
eXNldD0iJExJU1QiIC12IHNldGxpc3Q9JFRBR1MgLXYgdW5zZXRsaXN0PSRv
cHRfVSAnDQogICAgQkVHSU4gew0KCXNwbGl0KGFscmVhZHlzZXQsIHRtcCwg
IiAiKTsNCglmb3IgKHRhZyBpbiB0bXApIHsgc2tpcFt0bXBbdGFnXV0gPSAx
OyB9DQoNCglzcGxpdChzZXRsaXN0LCB0bXAsICIsIik7DQoJZm9yICh0YWcg
aW4gdG1wKSB7IHRhZ2xpc3RbdG1wW3RhZ11dID0gMTsgfQ0KDQoJc3BsaXQo
dW5zZXRsaXN0LCB0bXAsICIsIik7DQoJZm9yICh0YWcgaW4gdG1wKSB7IHNr
aXBbdG1wW3RhZ11dID0gMTsgZGVsZXRlIHRhZ2xpc3RbdG1wW3RhZ11dIH0N
Cg0KCXRhZ2xpc3RbIioiXSA9ICIqIg0KICAgIH0NCiAgICBmdW5jdGlvbiBh
bmRfZXhwcl93aXRoX2RpY3QoZXhwciwgZGljdCwgYXJ5LCBpLCByLCBkKSB7
DQoJc3BsaXQoZXhwcixhcnksL1wrLyk7DQoJciA9IDE7DQoJZm9yIChpIGlu
IGFyeSkgew0KCQlpZiAoYXJ5W2ldIH4gL15cLy8pIHsNCgkJCWlmIChnZXRs
aW5lIGQgPCBhcnlbaV0gPT0gLTEpDQoJCQkgICAgeyByID0gMDsgYnJlYWsg
O30NCgkJfQ0KCQllbHNlIGlmICghIChhcnlbaV0gaW4gZGljdCkpDQoJCQl7
IHIgPSAwOyBicmVhayA7fQ0KCX0NCglyZXR1cm4gcjsNCiAgICB9DQogICAg
ew0KICAgIHN1YigiIy4qIiwgIiIpOw0KICAgIGlmIChza2lwWyQxXSkNCgl7
IG5leHQ7IH0NCiAgICBuZWVkID0gMDsNCiAgICBmb3IgKGYgPSAxIDsgZjw9
TkYgOyArK2YpIHsJCQkjIEZvciBlYWNoIHdvcmQgb24gdGhlIGxpbmUNCglp
ZiAoc3ViKCJeLSIsICIiLCAkZikpIHsgCSMgSWYgaXQgYmVnaW5zIHdpdGgg
YSAnLScNCgkJaWYgKGFuZF9leHByX3dpdGhfZGljdCgkZiwgdGFnbGlzdCkp
DQoJCQluZXh0OwkJIyBJZiBpdCBpcyB0cnVlLCBkaXNjYXJkDQoJfSBlbHNl
IHsNCgkJaWYgKGFuZF9leHByX3dpdGhfZGljdCgkZiwgdGFnbGlzdCkpDQoJ
CQluZWVkID0gMTsJIyBJZiBpdCBpcyB0cnVlLCBub3RlIG5lZWRlZA0KCX0N
CiAgICB9DQogICAgaWYgKE5GID09IDEgfHwgbmVlZCkNCgl7IHByaW50ICQx
IH0NCiAgICB9DQogICAgJyA8ICRDT05GDQogICAgKQ0KICAgIGVjaG8gJExJ
U1QNCiAgICB9DQoNCnBrZ2RpcnNfZnJvbV9pbnN0YWxsZWQoKQ0KICAgIHsN
CiAgICAke1BLR19JTkZPfSAtQnFhIHwgJHtBV0t9IC1GPSAnL1BLR1BBVEg9
L3twcmludCAkMn0nIHwgJHtTT1JUfQ0KICAgIH0NCg0KbXNnKCkNCiAgICB7
DQogICAgaWYgWyAtbiAiJG9wdF9MIiBdIDsgdGhlbg0KCWVjaG8gIiRAIiA+
PiAiJG9wdF9MIg0KICAgIGZpDQogICAgaWYgWyAtbiAiJG9wdF9sIiBdIDsg
dGhlbg0KCWVjaG8gIiRAIiA+JjINCiAgICBlbHNlDQoJZWNobyAiJEAiDQog
ICAgZmkNCiAgICB9DQoNCm1zZ19wcm9ncmVzcygpDQogICAgew0KICAgIG1z
ZyAiWyAkQCBdIg0KICAgIH0NCg0KbXNnX24oKQ0KICAgIHsNCiAgICBtc2cg
JGFjX24gIiQqIiRhY19jDQogICAgfQ0KDQpwa2dfZmV0Y2goKQ0KICAgIHsN
CiAgICBQS0dOQU1FPSQxDQogICAgUEtHRElSPSQyDQoNCiAgICBydW5fY21k
ICJjZCAkUEtHU1JDRElSLyRQS0dESVIgJiYgJHtNQUtFfSBmZXRjaC1saXN0
IHwgc2giDQogICAgaWYgWyAtbiAiJEZBSUwiIF07IHRoZW4NCglGQUlMX0RP
TkU9JEZBSUxfRE9ORSIgIiRQS0dOQU1FDQogICAgZWxzZQ0KCUZFVENIX0RP
TkU9JEZFVENIX0RPTkUiICIkUEtHTkFNRQ0KICAgIGZpDQogICAgfQ0KDQpw
a2dfZmV0Y2hsaXN0KCkNCiAgICB7DQogICAgUEtHTElTVD0kQA0KICAgIG1z
Z19wcm9ncmVzcyBGZXRjaA0KICAgIHdoaWxlIFsgJCMgIT0gMCBdOyBkbyAN
Cglwa2dfZmV0Y2ggJDEgJDINCglzaGlmdCA7IHNoaWZ0Ow0KICAgIGRvbmUN
CiAgICB9DQoNCnBrZ19pbnN0YWxsKCkNCiAgICB7DQogICAgUEtHTkFNRT0k
MQ0KICAgIFBLR0RJUj0kMg0KICAgIElOU1RBTEw9JDMNCg0KICAgIGlmIFsg
LWQgJFBLR19EQkRJUi8kUEtHTkFNRSBdO3RoZW4NCgltc2cgIiRQS0dOQU1F
IGluc3RhbGxlZCBpbiBwcmV2aW91cyBzdGFnZSINCiAgICBlbGlmIFsgLW4g
IiRvcHRfYiIgLWEgLWYgJFBBQ0tBR0VTLyRQS0dOQU1FLnRneiBdIDsgdGhl
bg0KCWlmIFsgLW4gIiRzYXZlZF9QS0dfUEFUSCIgXSA7IHRoZW4NCgkgICAg
ZXhwb3J0IFBLR19QQVRIPSRzYXZlZF9QS0dfUEFUSA0KCWZpDQoJY2QgJFBB
Q0tBR0VTDQoJcnVuX2NtZCAiJHtQS0dfQUREfSAkUEtHTkFNRS50Z3oiDQoJ
aWYgWyAtbiAiJHNhdmVkX1BLR19QQVRIIiBdIDsgdGhlbg0KCSAgICB1bnNl
dCBQS0dfUEFUSA0KCWZpDQogICAgZWxpZiBbIC1uICIkb3B0X3MiIF07IHRo
ZW4NCglydW5fY21kICJjZCAkUEtHU1JDRElSLyRQS0dESVIgJiYgJHtNQUtF
fSB1cGRhdGUgQ0xFQU5ERVBFTkRTPXllcyINCiAgICBmaQ0KDQogICAgaWYg
WyAteiAiJG9wdF9uIiAtYSAhIC1kICRQS0dfREJESVIvJFBLR05BTUUgXTt0
aGVuDQoJRkFJTD0xDQogICAgZmkNCg0KICAgIGlmIFsgLW4gIiRGQUlMIiBd
OyB0aGVuDQoJRkFJTF9ET05FPSRGQUlMX0RPTkUiICIkUEtHTkFNRQ0KICAg
IGVsc2UNCglJTlNUQUxMX0RPTkU9JElOU1RBTExfRE9ORSIgIiRQS0dOQU1F
DQogICAgZmkNCiAgICB9DQoNCnBrZ19pbnN0YWxsbGlzdCgpDQogICAgew0K
ICAgIElOU1RBTEw9JDEgOyBzaGlmdA0KICAgIG1zZ19wcm9ncmVzcyAkSU5T
VEFMTA0KICAgIHdoaWxlIFsgJCMgIT0gMCBdOyBkbw0KCXBrZ19pbnN0YWxs
ICQxICQyICRJTlNUQUxMDQoJc2hpZnQgOyBzaGlmdDsNCiAgICBkb25lDQog
ICAgfQ0KDQpydW5fY21kKCkNCiAgICB7DQogICAgRkFJTD0NCiAgICBpZiBb
IC1uICIkMiIgXTsgdGhlbg0KCUZBSUxPSz0kMg0KICAgIGVsc2UNCglGQUlM
T0s9JG9wdF9rDQogICAgZmkNCiAgICBtc2cgJDENCiAgICBpZiBbIC16ICIk
b3B0X24iIF07dGhlbg0KCWlmIFsgLW4gIiRvcHRfTCIgXSA7IHRoZW4NCgkg
ICAgc2ggLWMgIiQxIiA+PiAiJG9wdF9MIiAyPiYxIHx8IEZBSUw9MQ0KCWVs
c2UNCgkgICAgc2ggLWMgIiQxIiB8fCBGQUlMPTENCglmaQ0KCWlmIFsgLW4g
IiRGQUlMIiBdIDsgdGhlbg0KICAgICAgICAgICAgbXNnICIqKiAnJDEnIGZh
aWxlZCINCgkgICAgaWYgWyAtbiAiJG9wdF9MIiBdIDsgdGhlbg0KCQl0YWls
IC0xMDAgIiRvcHRfTCIgfCBlZ3JlcCAtdiAnXihcKlwqXCogRXJyb3IgY29k
ZSAxfFN0b3BcLiknIHxcDQoJCQl0YWlsIC00MA0KCSAgICBmaQ0KICAgICAg
ICAgICAgaWYgWyAiJEZBSUxPSyIgIT0gMSBdOyB0aGVuDQogICAgICAgICAg
ICAgICAgZXhpdCAxDQogICAgICAgICAgICBmaQ0KICAgICAgICBmaQ0KICAg
IGZpDQogICAgfQ0KDQp1c2FnZSgpDQogICAgew0KICAgIGlmIFsgLW4gIiQx
IiBdIDsgdGhlbg0KCWVjaG8gIiRAIg0KCWVjaG8NCiAgICBmaQ0KICAgIGVj
aG8gJ1VzYWdlOiBwa2dfY2hrIFtvcHRzXQ0KCS1hICAgICAgQWRkIGFsbCBt
aXNzaW5nIHBhY2thZ2VzIChpbXBsaWVzIC1jKQ0KCS1CICAgICAgQ2hlY2sg
dGhlICJCdWlsZCB2ZXJzaW9uIiBvZiBwYWNrYWdlcyAoaW1wbGllcyAtaSkN
CgktYiAgICAgIEluc3RhbGwgYmluYXJ5IHBhY2thZ2VzDQoJLUMgY29uZiBV
c2UgcGtnY2hrLmNvbmYgZmlsZSAnY29uZicNCgktYyAgICAgIENoZWNrIGlu
c3RhbGxlZCBwYWNrYWdlcyBhZ2FpbnN0IHBrZ2Noay5jb25mDQoJLUQgdGFn
cyBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBrZ2Noay5j
b25mIHRhZ3MgdG8gc2V0DQoJLWYgICAgICBQZXJmb3JtIGEgJ21ha2UgZmV0
Y2gnIGZvciBhbGwgcmVxdWlyZWQgcGFja2FnZXMNCgktZyAgICAgIEdlbmVy
YXRlIGFuIGluaXRpYWwgcGtnY2hrLmNvbmYgZmlsZQ0KCS1oICAgICAgVGhp
cyBoZWxwDQoJLWkJQ2hlY2sgdmVyc2lvbnMgb2YgaW5zdGFsbGVkIHBhY2th
Z2VzIChub3QgdXNpbmcgcGtnY2hrLmNvbmYpDQoJLWsJQ29udGludWUgd2l0
aCBmdXJ0aGVyIHBhY2thZ2VzIGlmIGVycm9ycyBhcmUgZW5jb3VudGVyZWQN
CgktTCBmaWxlIFJlZGlyZWN0IG91dHB1dCBmcm9tIGNvbW1hbmRzIHJ1biBp
bnRvIGZpbGUgKHNob3VsZCBiZSBmdWxscGF0aCkNCgktbAlMaXN0IGJpbmFy
eSBwYWNrYWdlcyBpbmNsdWRpbmcgZGVwZW5kZW5jaWVzIChpbXBsaWVzIC1j
KQ0KCS1OCUxpc3QgaW5zdGFsbGVkIHBhY2thZ2VzIGZvciB3aGljaCBhIG5l
d2VyIHZlcnNpb24gaXMgaW4gVE9ETw0KCS1uCURpc3BsYXkgYWN0aW9ucyB0
aGF0IHdvdWxkIGJlIHRha2VuLCBidXQgZG8gbm90IHBlcmZvcm0gdGhlbQ0K
CS1QIGRpciAgU2V0IFBBQ0tBR0VTIGRpciAob3ZlcnJpZGVzIGFueSBvdGhl
ciBzZXR0aW5nKQ0KCS1yCVJlY3Vyc2l2ZWx5IHJlbW92ZSBtaXNtYXRjaGVz
ICh1c2Ugd2l0aCBjYXJlKSAoaW1wbGllcyAtaSkNCgktcyAgICAgIEluc3Rh
bGwgcGFja2FnZXMgYnkgYnVpbGRpbmcgZnJvbSBzb3VyY2UNCgktVSB0YWdz
IENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBrZ2Noay5jb25mIHRhZ3MgdG8g
dW5zZXQNCgktdSAgICAgIFVwZGF0ZSBhbGwgbWlzbWF0Y2hlZCBwYWNrYWdl
cyAoaW1wbGllcyAtaSkNCgktdiAgICAgIFZlcmJvc2UNCg0KcGtnX2NoayB2
ZXJpZmllcyBpbnN0YWxsZWQgcGFja2FnZXMgYWdhaW5zdCBwa2dzcmMuDQpU
aGUgbW9zdCBjb21tb24gdXNhZ2UgaXMgJ3BrZ19jaGsgLWknIHRvIGNoZWNr
IGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgb3INCidwa2dfY2hrIC11JyB0byB1
cGRhdGUgYWxsIG91dCBvZiBkYXRlIHBhY2thZ2VzLg0KRm9yIG1vcmUgYWR2
YW5jZWQgdXNhZ2UsIGluY2x1ZGluZyBkZWZpbmluZyBhIHNldCBvZiBkZXNp
cmVkIHBhY2thZ2VzIGJhc2VkDQpvbiBob3N0bmFtZSBhbmQgdHlwZSwgc2Vl
IHBrZ19jaGsoOCkuDQoNCklmIG5laXRoZXIgLWIgbm9yIC1zIGlzIGdpdmVu
LCBib3RoIGFyZSBhc3N1bWVkIHdpdGggLWIgcHJlZmVycmVkLg0KJw0KICAg
IGV4aXQgMQ0KICAgIH0NCg0KdmVyYm9zZSgpDQogICAgew0KICAgIGlmIFsg
LW4gIiRvcHRfdiIgXSA7IHRoZW4NCgltc2cgIiRAIiA+JjINCiAgICBmaQ0K
ICAgIH0NCg0KYXJncz0kKGdldG9wdCBCQzpEOkw6UDpVOmFiY2ZnaGlrbE5u
cnN1diAkKikNCmlmIFsgJD8gIT0gMCBdOyB0aGVuDQogICAgb3B0X2g9MQ0K
ZmkNCnNldCAtLSAkYXJncw0Kd2hpbGUgWyAkIyAhPSAwIF07IGRvDQogICAg
Y2FzZSAiJDEiIGluDQoJLWEgKQlvcHRfYT0xIDsgb3B0X2M9MSA7Ow0KCS1C
ICkgICAgb3B0X0I9MSA7IG9wdF9pPTEgOzsNCgktYiApCW9wdF9iPTEgOzsN
CgktQyApCW9wdF9DPSIkMiIgOyBzaGlmdDs7DQoJLWMgKQlvcHRfYz0xIDs7
DQoJLUQgKQlvcHRfRD0iJDIiIDsgc2hpZnQ7Ow0KCS1mICkJb3B0X2Y9MSA7
Ow0KCS1nICkJb3B0X2c9MSA7Ow0KCS1oICkJb3B0X2g9MSA7Ow0KCS1pICkJ
b3B0X2k9MSA7Ow0KCS1rICkJb3B0X2s9MSA7Ow0KCS1MICkJb3B0X0w9IiQy
IiA7IHNoaWZ0OzsNCgktbCApCW9wdF9sPTEgOzsNCgktTiApCW9wdF9OPTEg
OzsNCgktbiApCW9wdF9uPTEgOzsNCgktUCApCW9wdF9QPSIkMiIgOyBzaGlm
dDs7DQoJLXIgKQlvcHRfcj0xIDsgb3B0X2k9MSA7Ow0KCS1zICkJb3B0X3M9
MSA7Ow0KCS1VICkJb3B0X1U9IiQyIiA7IHNoaWZ0OzsNCgktdSApCW9wdF91
PTEgOyBvcHRfaT0xIDs7DQoJLXYgKQlvcHRfdj0xIDs7DQoJLS0gKQlzaGlm
dDsgYnJlYWsgOzsNCiAgICBlc2FjDQogICAgc2hpZnQNCmRvbmUNCg0KaWYg
WyAteiAiJG9wdF9iIiAtYSAteiAiJG9wdF9zIiBdO3RoZW4NCiAgICBvcHRf
Yj0xOyBvcHRfcz0xOw0KZmkNCg0KaWYgWyAteiAiJG9wdF9hIiAtYSAteiAi
JG9wdF9jIiAtYSAteiAiJG9wdF9nIiAtYSAteiAiJG9wdF9pIiAtYSAteiAi
JG9wdF9OIiAtYSAteiAiJG9wdF9sIiBdOw0KdGhlbg0KICAgIHVzYWdlICJN
dXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mIC1hLCAtYywgLWcsIC1pLCAt
bCwgLU4sIG9yIC11IjsNCmZpDQoNCmlmIFsgLW4gIiRvcHRfaCIgLW8gJCMg
IT0gMCBdO3RoZW4NCiAgICB1c2FnZQ0KZmkNCg0KIyBIaWRlIFBLR19QQVRI
IHRvIGF2b2lkIGJyZWFrYWdlIGluICdtYWtlJyBjYWxscw0Kc2F2ZWRfUEtH
X1BBVEg9JFBLR19QQVRIDQp1bnNldCBQS0dfUEFUSCB8fCB0cnVlDQoNCnRl
c3QgLW4gIiRBV0siICAgICAgfHwgQVdLPSJAQVdLQCINCnRlc3QgLW4gIiRH
UkVQIiAgICAgfHwgR1JFUD0iQEdSRVBAIg0KdGVzdCAtbiAiJE1BS0UiICAg
ICB8fCBNQUtFPSJATUFLRUAiDQp0ZXN0IC1uICIkTUFLRUNPTkYiIHx8IE1B
S0VDT05GPSJATUFLRUNPTkZAIg0KdGVzdCAtbiAiJFBLR19JTkZPIiB8fCBQ
S0dfSU5GTz0iQFBLR19JTkZPQCINCnRlc3QgLW4gIiRTRUQiICAgICAgfHwg
U0VEPSJAU0VEQCINCnRlc3QgLW4gIiRTT1JUIgkgICAgfHwgU09SVD0iQFNP
UlRAIg0KdGVzdCAtbiAiJFRTT1JUIiAgICB8fCBUU09SVD0iQFRTT1JUQCIN
Cg0KaWYgWyAhIC1mICRNQUtFQ09ORiBdIDsgdGhlbg0KICAgIGlmIFsgLWYg
L2V0Yy9tay5jb25mIF0gOyB0aGVuDQoJTUFLRUNPTkY9L2V0Yy9tay5jb25m
DQogICAgZWxzZQ0KCU1BS0VDT05GPS9kZXYvbnVsbA0KICAgIGZpDQpmaQ0K
DQojIGdyYWJiZWQgZnJvbSBHTlUgY29uZmlndXJlDQppZiAoZWNobyAidGVz
dGluZ1xjIjsgZWNobyAxLDIsMykgfCBncmVwIGMgPi9kZXYvbnVsbDsgdGhl
bg0KICAjIFN0YXJkZW50IFZpc3RyYSBTVlI0IGdyZXAgbGFja3MgLWUsIHNh
eXMgZ2hhemlAY2FpcC5ydXRnZXJzLmVkdS4NCiAgaWYgKGVjaG8gLW4gdGVz
dGluZzsgZWNobyAxLDIsMykgfCAke1NFRH0gcy8tbi94bi8gfCBncmVwIHhu
ID4vZGV2L251bGw7IHRoZW4NCiAgICBhY19uPSBhY19jPScNCicgYWNfdD0n
CScNCiAgZWxzZQ0KICAgIGFjX249LW4gYWNfYz0gYWNfdD0NCiAgZmkNCmVs
c2UNCiAgYWNfbj0gYWNfYz0nXGMnIGFjX3Q9DQpmaQ0KDQppZiBbIC1uICIk
b3B0X0wiIF0gOyB0aGVuDQogICAgcm0gLWYgJG9wdF9MDQpmaQ0KDQpleHRy
YWN0X3ZhcmlhYmxlcw0KaWYgWyAtbiAiJG9wdF9DIiBdIDsgdGhlbg0KICAg
IFBLR0NIS19DT05GPSIkb3B0X0MiDQpmaQ0KaWYgWyAtbiAiJG9wdF9QIiBd
IDsgdGhlbg0KICAgIFBBQ0tBR0VTPSIkb3B0X1AiDQpmaQ0KaWYgWyAtZCAk
UEFDS0FHRVMvQWxsIF0gOyB0aGVuDQogICAgUEFDS0FHRVM9IiRQQUNLQUdF
Uy9BbGwiDQpmaQ0KDQppZiBbIC1uICIkb3B0X04iIF07IHRoZW4NCgkke1BL
R19JTkZPfSB8IFwNCgkJJHtTRUR9IC1lICJzL1sgCV0uKi8vIiAtZSAicy8t
W14tXSokLy8iIFwNCgkJICAgICAgIC1lICJzL3B5WzAtOV1bMC05XXB0aC0v
cHktLyIgXA0KCQkgICAgICAgLWUgInMvcHlbMC05XVswLTldLS9weS0vIiB8
IFwNCgkJd2hpbGUgcmVhZCBhDQoJCWRvDQoJCQliPSQoZ3JlcCAibyAkYS1b
MC05XSIgJFBLR1NSQ0RJUi9kb2MvVE9ETyB8IFwNCgkJCQlzZWQgLWUgInMv
WyAJXSpvIC8vIikNCgkJaWYgWyAiJGIiIF0NCgkJdGhlbg0KCQkJZWNobyAk
YTogJGINCgkJZmkNCglkb25lDQpmaQ0KDQppZiBbIC1uICIkb3B0X2IiIC1h
IC16ICIkb3B0X3MiIC1hIC1kICRQQUNLQUdFUyBdIDsgdGhlbg0KICAgIG1z
Z19wcm9ncmVzcyBTY2FuICRQQUNLQUdFUw0KICAgIGNkICRQQUNLQUdFUw0K
ICAgIGZvciBmIGluIGBscyAtdCAqLnRnemAgOyBkbyAjIFNvcnQgYnkgdGlt
ZSB0byBwaWNrIHVwIG5ld2VzdCBmaXJzdA0KCVBLR0RJUj1gJHtQS0dfSU5G
T30gLS4gLUIgJFBBQ0tBR0VTLyRmfCR7QVdLfSAtRj0gJyQxPT0iUEtHUEFU
SCJ7cHJpbnQgJDJ9J2ANCglQS0dOQU1FPWBlY2hvICRmIHwgJHtTRUR9ICdz
L1wudGd6JC8vJ2ANCglQS0dEQj0iJHtQS0dEQn0gJFBLR0RJUjokUEtHTkFN
RSINCiAgICBkb25lDQpmaQ0KDQpjZCAkUEtHU1JDRElSDQpyZWFsX3BrZ3Ny
Y2Rpcj0kKHB3ZCkNCg0KaWYgWyAtbiAiJG9wdF9nIiBdOyB0aGVuDQogICAg
dmVyYm9zZSAiV3JpdGUgJFBLR0NIS19DT05GIGJhc2VkIG9uIGluc3RhbGxl
ZCBwYWNrYWdlcyINCiAgICBnZW5lcmF0ZV9jb25mX2Zyb21faW5zdGFsbGVk
ICRQS0dDSEtfQ09ORg0KZmkNCg0KaWYgWyAtbiAiJG9wdF9pIiBdO3RoZW4N
CiAgICB2ZXJib3NlICJFbnVtZXJhdGUgUEtHRElSTElTVCBmcm9tIGluc3Rh
bGxlZCBwYWNrYWdlcyINCiAgICBQS0dESVJMSVNUPSQocGtnZGlyc19mcm9t
X2luc3RhbGxlZCkNCmZpDQoNCmlmIFsgLW4gIiRvcHRfYyIgLW8gLW4gIiRv
cHRfbCIgXTt0aGVuCSMgQXBwZW5kIHRvIFBLR0RJUkxJU1QgYmFzZWQgb24g
Y29uZg0KICAgIHZlcmJvc2UgIkFwcGVuZCB0byBQS0dESVJMSVNUIGJhc2Vk
IG9uIGNvbmZpZyAkUEtHQ0hLX0NPTkYiDQogICAgUEtHRElSTElTVD0iJChw
a2dkaXJzX2Zyb21fY29uZiAkUEtHQ0hLX0NPTkYgJFBLR0RJUkxJU1QpIg0K
ZmkNCg0KaWYgWyAtbiAiJG9wdF9sIiBdIDsgdGhlbg0KICAgIGxpc3RfcGFj
a2FnZXMgJFBLR0RJUkxJU1QNCmVsc2UNCiAgICBjaGVja19wYWNrYWdlc19p
bnN0YWxsZWQgJFBLR0RJUkxJU1QNCmZpDQoNCmlmIFsgLW4gIiRNSVNNQVRD
SF9UT0RPIiBdOyB0aGVuDQogICAgZGVsZXRlX2FuZF9yZWNoZWNrPTENCmVs
aWYgWyAtbiAiJG9wdF91IiAtYSAtZiAkUEtHQ0hLX1VQREFURV9DT05GIF0g
OyB0aGVuDQogICAgZGVsZXRlX2FuZF9yZWNoZWNrPTENCmZpDQoNCmlmIFsg
LW4gIiRkZWxldGVfYW5kX3JlY2hlY2siIF07IHRoZW4NCiAgICBpZiBbIC1u
ICIkb3B0X3UiIF0gOyB0aGVuCQkgIyBTYXZlIGN1cnJlbnQgaW5zdGFsbGVk
IGxpc3QNCglpZiBbIC1mICRQS0dDSEtfVVBEQVRFX0NPTkYgXSA7IHRoZW4N
CgkgICAgbXNnICJNZXJnaW5nIGluIHByZXZpb3VzICRQS0dDSEtfVVBEQVRF
X0NPTkYiDQoJICAgIHRtcD0kKGNhdCAkUEtHQ0hLX1VQREFURV9DT05GO2Vj
aG8gJChwa2dkaXJzX2Zyb21faW5zdGFsbGVkKXxmbXQgLTEpDQoJICAgIGVj
aG8gJHRtcCB8IGZtdCAtMSB8ICR7U09SVH0gLXUgPiAkUEtHQ0hLX1VQREFU
RV9DT05GDQoJICAgIHRtcD0NCgllbHNlDQoJICAgIGVjaG8gJChwa2dkaXJz
X2Zyb21faW5zdGFsbGVkKSB8IGZtdCAtMSA+ICRQS0dDSEtfVVBEQVRFX0NP
TkYNCglmaQ0KICAgIGZpDQogICAgaWYgWyAtbiAiJG9wdF9yIiAtbyAtbiAi
JG9wdF91IiBdIDsgdGhlbg0KCWlmIFsgLW4gIiRNSVNNQVRDSF9UT0RPIiBd
OyB0aGVuDQoJICAgIGRlbGV0ZV9wa2dzICRNSVNNQVRDSF9UT0RPDQoJICAg
IG1zZ19wcm9ncmVzcyBSZWNoZWNraW5nIHBhY2thZ2VzIGFmdGVyIGRlbGV0
aW9ucw0KCWZpDQoJaWYgWyAtbiAiJG9wdF91IiBdOyB0aGVuDQoJICAgIFBL
R0RJUkxJU1Q9IiQocGtnZGlyc19mcm9tX2NvbmYgJFBLR0NIS19VUERBVEVf
Q09ORiAkUEtHRElSTElTVCkiDQoJZmkNCglpZiBbIC1uICIkb3B0X3UiIC1v
IC1uICIkb3B0X2EiIF07IHRoZW4NCgkgICAgY2hlY2tfcGFja2FnZXNfaW5z
dGFsbGVkICRQS0dESVJMSVNUICMgTWF5IG5lZWQgdG8gYWRkIG1vcmUNCglm
aQ0KICAgIGZpDQpmaQ0KDQppZiBbIC1uICIkb3B0X2YiIF0gOyB0aGVuDQog
ICAgcGtnX2ZldGNobGlzdCAkTUlTU0lOR19UT0RPDQpmaQ0KDQppZiBbIC1u
ICIkTUlTU0lOR19UT0RPIiBdIDsgdGhlbg0KICAgIGlmIFsgLW4gIiRvcHRf
YSIgLW8gLW4gIiRvcHRfdSIgXSA7IHRoZW4NCglwa2dfaW5zdGFsbGxpc3Qg
SW5zdGFsbCAkTUlTU0lOR19UT0RPDQogICAgZmkNCmZpDQoNCmlmIFsgLW4g
IiRvcHRfdSIgLWEgLXogIiRGQUlMX0RPTkUiIC1hIC1mICRQS0dDSEtfVVBE
QVRFX0NPTkYgXSA7IHRoZW4NCiAgICBydW5fY21kICJybSAtZiAkUEtHQ0hL
X1VQREFURV9DT05GIg0KZmkNCg0KWyAtbiAiJE1JU1NfRE9ORSIgXSAmJgkJ
bXNnICJNaXNzaW5nOiRNSVNTX0RPTkUiDQpbIC1uICIkSU5TVEFMTF9ET05F
IiBdICYmCW1zZyAiSW5zdGFsbGVkOiRJTlNUQUxMX0RPTkUiDQpbIC1uICIk
RkFJTF9ET05FIiBdICYmCQltc2cgIkZhaWxlZDokRkFJTF9ET05FIg0KDQpb
IC16ICIkRkFJTF9ET05FIiBdDQo=

--0-1428074169-1117137579=:1183--