MakeClass ( 8 1/2 )

Jacek M. Holeczek (holeczek@us.edu.pl)
Fri, 21 May 1999 10:17:08 +0200 (MET DST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.3.96.990521101128.7070C@uranos.cto.us.edu.pl>

Hi,
( Seems that my yesterday's mail is lost, so here it is again. )
Please find attached a new version of my MakeClass suite.
It's divided into two pieces.
The first piece ( this mail ) contains the MakeClass macro itself, and ...
if you are using emacs, please find attached an emacs.rc.add ( some code
to be placed in your private .emacs file ) which gives you outline/folding
editor settings to be used with both the MakeClass.cxx itself, and with
files generated by this macro ( try "EmacsMenu -> Hide -> Hide Body" or
C-c @ C-t and enjoy ).
The second part will contain example files and notes how to use them.
Have fun,
Jacek.

---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MakeClass.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521101708.7070D@uranos.cto.us.edu.pl>
Content-Description: MakeClass.cxx

Ly8gIyBNYWtlQ2xhc3MuY3h4IA0KDQovLyAjIEhvdyB0byBnZW5lcmF0ZSBh
bmQgdXNlIHRoZSBza2VsZXRvbiBhbmFseXNpcyBjbGFzcyBmb3IgYSBUcmVl
LiANCi8vDQovLyAgIFRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIHByb2R1Y2Vk
OiBjbGFzc25hbWUuaHh4IGFuZCBjbGFzc25hbWUuY3h4DQovLyAgIGlmIGNs
YXNzbmFtZSBpcyBOVUxMLCBjbGFzc25hbWUgd2lsbCBiZSBuYW1lb2Z0cmVl
Lg0KLy8NCi8vICAgVGhlIGdlbmVyYXRlZCBjb2RlIGluIGNsYXNzbmFtZS5o
eHggaW5jbHVkZXMgdGhlIGZvbGxvd2luZzoNCi8vICAgICAgLSBJZGVudGlm
aWNhdGlvbiBvZiB0aGUgb3JpZ2luYWwgVHJlZSBhbmQgSW5wdXQgRmlsZSBO
YW1lDQovLyAgICAgIC0gRGVmaW5pdGlvbiBvZiBhbmFseXNpcyBjbGFzcyAo
ZGF0YSBhbmQgZnVuY3Rpb25zKQ0KLy8gICAgICAtIHRoZSBmb2xsb3dpbmcg
Y2xhc3MgZnVuY3Rpb25zOg0KLy8gICAgICAgICAtIGNsYXNzbmFtZShDaGFy
X3QgKmZpbGVuYW1lID0gMCkgdG8gY29ubmVjdCBhIGZpbGUgd2l0aCBUcmVl
DQovLyAgICAgICAgIC0gY2xhc3NuYW1lKFRUcmVlICp0cmVlKSB0byBjb25u
ZWN0IGEgVHJlZQ0KLy8gICAgICAgICAtIH5jbGFzc25hbWUoKQ0KLy8gICAg
ICAgICAtIEdldEVudHJpZXMoKSB0byBnZXQgdGhlIG51bWJlciBvZiBldmVu
dHMgaW4gVHJlZQ0KLy8gICAgICAgICAtIEdldEV2ZW50KEludF90IGV2ZW50
KSB0byBwcmVwYXJlIHRoZSBmaWxsaW5nIG9mIGRhdGEgZnJvbSBldmVudA0K
Ly8gICAgICAgICAtIEluaXQoVFRyZWUgKnRyZWUpIHRvIGluaXRpYWxpemUg
d2l0aCBhIG5ldyBUcmVlDQovLyAgICAgICAgIC0gTG9vcChJbnRfdCAoKmFu
YWx5c2lzKShjbGFzc25hbWUgKikpIHdoaWNoIGxvb3BzIG92ZXIgYWxsIGV2
ZW50cw0KLy8gICAgICAgICAgIGluIFRyZWUgY2FsbGluZyB0aGUgZ2l2ZW4g
YW5hbHlzaXMgZnVuY3Rpb24gZm9yIGV2ZXJ5IGV2ZW50LCBpZg0KLy8gICAg
ICAgICAgIHRoZSBhbmFseXNpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uIHpl
cm8gdmFsdWUsIGJyZWFrcyB0aGUgbG9vcA0KLy8gICAgICAgICAtIFNob3co
SW50X3QgZXZlbnQpIHRvIHJlYWQgYW5kIGR1bXAgZXZlbnQgKCBhbGwgYnJh
bmNoZXMgKQ0KLy8NCi8vICAgVGhlIGdlbmVyYXRlZCBjb2RlIGluIGNsYXNz
bmFtZS5jeHggaW5jbHVkZXMgb25seSB0aGUgc2tlbGV0b24gb2YgdGhlDQov
LyAgIG1haW4gYW5hbHlzaXMgZnVuY3Rpb24gTG9vcCgpLg0KLy8NCi8vICAg
VG8gdXNlIHRoZSBNYWtlQ2xhc3MgZnVuY3Rpb246DQovLyAgICAgIC0gY29u
bmVjdCB5b3VyIFRyZWUgZmlsZSAoZWc6IFRGaWxlIGYoIm15ZmlsZS5yb290
Iik7KQ0KLy8gICAgICAtIE1ha2VDbGFzcyhULCJNeUNsYXNzIik7DQovLyAg
IHdoZXJlIFQgaXMgdGhlIG5hbWUgb2YgdGhlIFRyZWUgaW4gdGhlIG15Zmls
ZS5yb290IGZpbGUsIGFuZA0KLy8gICBNeUNsYXNzLmh4eCwgTXlDbGFzcy5j
eHggYXJlIG5hbWVzIG9mIGZpbGVzIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlv
bi4NCi8vICAgVGhlbiwgaW4gYSBSb290IHNlc3Npb24sIHlvdSBjYW4gZG8s
IGZvciBleGFtcGxlOg0KLy8gICAgICBSb290ID4gLkwgTXlDbGFzcy5jeHgN
Ci8vICAgICAgUm9vdCA+IE15Q2xhc3MgdA0KLy8gICAgICBSb290ID4gdC5H
ZXRFdmVudCgxMik7IC8vIFByZXBhcmUgdG8gZmlsbCB0IHdpdGggZXZlbnQg
bnVtYmVyIDEyDQovLyAgICAgIFJvb3QgPiB0LlNob3coKTsgICAgICAgLy8g
U2hvdyB2YWx1ZXMgb2YgZXZlbnQgMTINCi8vICAgICAgUm9vdCA+IHQuU2hv
dygxNik7ICAgICAvLyBSZWFkIGFuZCBzaG93IHZhbHVlcyBvZiBldmVudCAx
Ng0KLy8gICAgICBSb290ID4gdC5Mb29wKCk7ICAgICAgIC8vIExvb3Agb3Zl
ciBhbGwgZXZlbnRzDQovLw0KDQovLyAjIEludF90IE1ha2VDbGFzcyhUVHJl
ZSAqdCwgY29uc3QgY2hhciAqY2xhc3NuYW1lID0gMCkgDQpJbnRfdCBNYWtl
Q2xhc3MoVFRyZWUgKnQsIGNvbnN0IGNoYXIgKmNsYXNzbmFtZSA9IDApDQp7
DQogIC8vICMgQ2hlY2sgYWdhaW5zdCBhbiBpbnZhbGlkIFRyZWUgcG9pbnRl
ciANCiAgaWYgKCF0KSByZXR1cm4gMTsNCiAgaWYgKCF0LT5Jc0EoKS0+SW5o
ZXJpdHNGcm9tKCJUVHJlZSIpKSB7DQogICAgcHJpbnRmKCJBdHRlbXB0IHRv
IE1ha2VDbGFzcyBmb3IgYSBub24tVFRyZWUgb2JqZWN0XG4iKTsNCiAgICBy
ZXR1cm4gMjsNCiAgfQ0KICANCiAgLy8gIyBDb25uZWN0IG91dHB1dCBmaWxl
cyANCiAgY2hhciAqdGhlYWQgPSBuZXcgY2hhclsyNTZdOw0KICANCiAgaWYg
KCFjbGFzc25hbWUpIGNsYXNzbmFtZSA9IHQtPkdldE5hbWUoKTsNCiAgc3By
aW50Zih0aGVhZCwiJXMuaHh4IixjbGFzc25hbWUpOw0KICBGSUxFICpmcCA9
IGZvcGVuKHRoZWFkLCJ3Iik7DQogIGlmICghZnApIHsNCiAgICBwcmludGYo
IkNhbm5vdCBvcGVuIG91dHB1dCBmaWxlOiVzXG4iLHRoZWFkKTsNCiAgICBk
ZWxldGUgW10gdGhlYWQ7DQogICAgcmV0dXJuIDM7DQogIH0NCiAgY2hhciAq
dGNpbXAgPSBuZXcgY2hhclsyNTZdOw0KICBzcHJpbnRmKHRjaW1wLCIlcy5j
eHgiLGNsYXNzbmFtZSk7DQogIEZJTEUgKmZwYyA9IGZvcGVuKHRjaW1wLCJ3
Iik7DQogIGlmICghZnBjKSB7DQogICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiBv
dXRwdXQgZmlsZTolc1xuIix0Y2ltcCk7DQogICAgZGVsZXRlIFtdIHRoZWFk
Ow0KICAgIGRlbGV0ZSBbXSB0Y2ltcDsNCiAgICByZXR1cm4gMzsNCiAgfQ0K
ICBjaGFyICp0cmVlZmlsZSA9IG5ldyBjaGFyWzEwMDBdOw0KICBpZiAodC0+
R2V0RGlyZWN0b3J5KCkgJiYgdC0+R2V0RGlyZWN0b3J5KCktPkdldEZpbGUo
KSkNCiAgICBzdHJjcHkodHJlZWZpbGUsdC0+R2V0RGlyZWN0b3J5KCktPkdl
dEZpbGUoKS0+R2V0TmFtZSgpKTsNCiAgZWxzZSAgICAgICAgIHN0cmNweSh0
cmVlZmlsZSwiTWVtb3J5IERpcmVjdG9yeSIpOw0KICANCiAgLy8gIyAqKiog
R2VuZXJhdGUgY2xhc3NuYW1lLmh4eCAqKiogDQogIC8vICMgUHJpbnQgdGhl
IGhlYWRlciANCiAgVE9iakFycmF5ICpsZWF2ZXMgPSB0LT5HZXRMaXN0T2ZM
ZWF2ZXMoKTsNCiAgSW50X3QgbmxlYXZlcyA9IGxlYXZlcy0+R2V0RW50cmll
c0Zhc3QoKTsNCiAgVERhdGltZSB0ZDsNCiAgZnByaW50ZihmcCwiLy8gIyBc
biIpOw0KICBmcHJpbnRmKGZwLCIvLyAjIFRoaXMgY2xhc3MgaGFzIGJlZW4g
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgXG4iKTsNCiAgZnByaW50ZihmcCwi
Ly8gIyAoJXMgYnkgUk9PVCB2ZXJzaW9uJXMpIFxuIix0ZC5Bc1N0cmluZygp
LGdST09ULT5HZXRWZXJzaW9uKCkpOw0KICBmcHJpbnRmKGZwLCIvLyAjIGZy
b20gVFRyZWUgJXMvJXMgXG4iLHQtPkdldE5hbWUoKSx0LT5HZXRUaXRsZSgp
KTsNCiAgZnByaW50ZihmcCwiLy8gIyBmb3VuZCBvbiBmaWxlOiAlcyBcbiIs
dHJlZWZpbGUpOw0KICBmcHJpbnRmKGZwLCIvLyAjIFxuIik7DQogIGZwcmlu
dGYoZnAsIlxuIik7DQogIGZwcmludGYoZnAsIi8vICMgKioqIFRoZSAlcyBj
bGFzcyBpbnRlcmZhY2UgKioqIFxuIixjbGFzc25hbWUpOw0KICBmcHJpbnRm
KGZwLCIjaWZuZGVmICVzX2h4eFxuIixjbGFzc25hbWUpOw0KICBmcHJpbnRm
KGZwLCIjZGVmaW5lICVzX2h4eFxuIixjbGFzc25hbWUpOw0KICBmcHJpbnRm
KGZwLCJcbiIpOw0KICBmcHJpbnRmKGZwLCIvLyAjIFJlcXVpcmVkIGluY2x1
ZGVzIFxuIik7DQogIGZwcmludGYoZnAsIiNpZm5kZWYgX19DSU5UX19cbiIp
Ow0KICBmcHJpbnRmKGZwLCIjaW5jbHVkZSA8c3RkaW8uaD5cbiIpOw0KICBm
cHJpbnRmKGZwLCIjaW5jbHVkZSA8c3RyZWFtLmg+XG4iKTsNCiAgZnByaW50
ZihmcCwiI2luY2x1ZGUgXCJUUk9PVC5oXCJcbiIpOw0KICBmcHJpbnRmKGZw
LCIjaW5jbHVkZSBcIlRUcmVlLmhcIlxuIik7DQogIGZwcmludGYoZnAsIiNp
bmNsdWRlIFwiVEZpbGUuaFwiXG4iKTsNCiAgZnByaW50ZihmcCwiI2luY2x1
ZGUgXCJBcGkuaFwiXG4iKTsNCiAgZnByaW50ZihmcCwiI2Vsc2VcbiIpOw0K
ICBmcHJpbnRmKGZwLCJjbGFzcyBUQnJhbmNoO1xuIik7DQogIGZwcmludGYo
ZnAsImNsYXNzIFRUcmVlO1xuIik7DQogIGZwcmludGYoZnAsImNsYXNzIFRG
aWxlO1xuIik7DQogIGZwcmludGYoZnAsIiNlbmRpZlxuIik7DQogIGZwcmlu
dGYoZnAsIlxuIik7DQogIGZwcmludGYoZnAsIi8vICMgY2xhc3MgJXMgXG4i
LGNsYXNzbmFtZSk7DQogIGZwcmludGYoZnAsImNsYXNzICVzIHtcbiIsY2xh
c3NuYW1lKTsNCiAgZnByaW50ZihmcCwicHVibGljOlxuIik7DQogIGZwcmlu
dGYoZnAsIiAgLy8gIyBwdWJsaWMgdmFyaWFibGVzIFxuIik7DQogIGZwcmlu
dGYoZnAsIiAgVFRyZWUgICAgICAgICAgICpmVHJlZTsgLy8gcG9pbnRlciB0
byB0aGUgYW5hbHlzZWQgVFRyZWVcbiIpOw0KICBmcHJpbnRmKGZwLCIgIElu
dF90ICAgICAgICAgICBmRXZlbnQ7IC8vIGN1cnJlbnQgRXZlbnQgbnVtYmVy
XG4iKTsNCiAgDQogIC8vICMgRmlyc3QgbG9vcCBvbiBhbGwgYnJhbmNoZXMg
dG8gZ2VuZXJhdGUgYnJhbmNoIGRlY2xhcmF0aW9ucyANCiAgZnByaW50Zihm
cCwiICAvLyAjIGRlY2xhcmF0aW9uIG9mIGJyYW5jaGVzIFxuIik7DQogIElu
dF90IG5iLCBpOw0KICBuYiA9IHQtPkdldExpc3RPZkJyYW5jaGVzKCkuR2V0
RW50cmllc0Zhc3QoKTsNCiAgZm9yIChpPTA7aTxuYjtpKyspICB7DQogICAg
YnJhbmNoID0gKFRCcmFuY2gqKXQtPkdldExpc3RPZkJyYW5jaGVzKCkuVW5j
aGVja2VkQXQoaSk7DQogICAgZnByaW50ZihmcCwiJXMlLTE1cyBicmFuY2hf
JXM7XG4iLCIgICIsIkludF90IiwgYnJhbmNoLT5HZXROYW1lKCkpOw0KICAg
IGZwcmludGYoZnAsIiVzJS0xNXMgKmJyYW5jaF9wb2ludGVyXyVzO1xuIiwi
ICAiLCJUQnJhbmNoIiwgYnJhbmNoLT5HZXROYW1lKCkpOw0KICB9DQogIA0K
ICAvLyAjIEZpcnN0IGxvb3Agb24gYWxsIGxlYXZlcyB0byBnZW5lcmF0ZSBs
ZWFmIGRlY2xhcmF0aW9ucyANCiAgZnByaW50ZihmcCwiICAvLyAjIGRlY2xh
cmF0aW9uIG9mIGxlYXZlcyBcbiIpOw0KICBJbnRfdCBsZW4sIGw7DQogIFRM
ZWFmICpsZWFmY291bnQ7DQogIFRMZWFmT2JqZWN0ICpsZWFmb2JqOw0KICBj
aGFyICpibmFtZTsNCiAgY29uc3QgY2hhciAqaGVhZE9LICA9ICIgICI7DQog
IGNvbnN0IGNoYXIgKmhlYWRjb20gPSAiICAvLyAiOw0KICBjb25zdCBjaGFy
ICpoZWFkOw0KICBjaGFyIGJyYW5jaG5hbWVbNjRdOw0KICBmb3IgKGw9MDts
PG5sZWF2ZXM7bCsrKSB7DQogICAgVExlYWYgKmxlYWYgPSAoVExlYWYqKWxl
YXZlcy0+VW5jaGVja2VkQXQobCk7DQogICAgbGVuID0gbGVhZi0+R2V0TGVu
KCk7DQogICAgbGVhZmNvdW50ID1sZWFmLT5HZXRMZWFmQ291bnQoKTsNCiAg
ICBUQnJhbmNoICpicmFuY2ggPSBsZWFmLT5HZXRCcmFuY2goKTsNCiAgICBp
ZiAobGVhZmNvdW50KSBzdHJjcHkoYnJhbmNobmFtZSxicmFuY2gtPkdldE5h
bWUoKSk7DQogICAgZWxzZSAgICAgICAgICAgc3RyY3B5KGJyYW5jaG5hbWUs
bGVhZi0+R2V0VGl0bGUoKSk7DQogICAgY2hhciAqdHdvZGltID0gKGNoYXIq
KXN0cnN0cihsZWFmLT5HZXRUaXRsZSgpLCJdWyIpOw0KICAgIGJuYW1lID0g
YnJhbmNobmFtZTsNCiAgICB3aGlsZSAoKmJuYW1lKSB7aWYgKCpibmFtZSA9
PSAnLicpICpibmFtZT0nXyc7IGJuYW1lKys7fQ0KICAgIGlmIChicmFuY2gt
PklzQSgpID09IFRCcmFuY2hPYmplY3Q6OkNsYXNzKCkpIHsNCiAgICAgIGlm
IChicmFuY2gtPkdldExpc3RPZkJyYW5jaGVzKCktPkdldEVudHJpZXNGYXN0
KCkpIGNvbnRpbnVlOw0KICAgICAgbGVhZm9iaiA9IChUTGVhZk9iamVjdCop
bGVhZjsNCiAgICAgIGlmIChsZWFmb2JqLT5HZXRDbGFzcygpKSBoZWFkID0g
aGVhZE9LOw0KICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgIGhlYWQg
PSBoZWFkY29tOw0KICAgICAgZnByaW50ZihmcCwiJXMlLTE1cyAqbGVhZl8l
cztcbiIsaGVhZCxsZWFmb2JqLT5HZXRUeXBlTmFtZSgpLGxlYWZvYmotPkdl
dE5hbWUoKSk7DQogICAgICBmcHJpbnRmKGZwLCIlcyUtMTVzIColcygpIHsi
LGhlYWQsbGVhZm9iai0+R2V0VHlwZU5hbWUoKSxsZWFmb2JqLT5HZXROYW1l
KCkpOw0KICAgICAgZnByaW50ZihmcCwiaWYgKGJyYW5jaF8lcykgcmV0dXJu
IGxlYWZfJXM7IixicmFuY2gtPkdldE5hbWUoKSxsZWFmb2JqLT5HZXROYW1l
KCkpOw0KICAgICAgZnByaW50ZihmcCwiYnJhbmNoX3BvaW50ZXJfJXMtPkdl
dEV2ZW50KGZFdmVudCk7IixicmFuY2gtPkdldE5hbWUoKSk7DQogICAgICBm
cHJpbnRmKGZwLCJicmFuY2hfJXM9MTtyZXR1cm4gbGVhZl8lczt9XG4iLGJy
YW5jaC0+R2V0TmFtZSgpLGxlYWZvYmotPkdldE5hbWUoKSk7DQogICAgICBj
b250aW51ZTsNCiAgICB9DQogICAgaWYgKGxlYWZjb3VudCkgew0KICAgICAg
bGVuID0gbGVhZmNvdW50LT5HZXRNYXhpbXVtKCk7DQogICAgICBpZiAodHdv
ZGltKSB7DQoJZnByaW50ZihmcCwiICAlLTE1cyBsZWFmXyVzWyVkXSVzO1xu
IixsZWFmLT5HZXRUeXBlTmFtZSgpLGJyYW5jaG5hbWUsbGVuLChjaGFyKiko
dHdvZGltKzEpKTsNCgkvLyBmcHJpbnRmKGZwLCIgICUtMTVzICgmJXMoKSlb
JWRdJXMgeyIsbGVhZi0+R2V0VHlwZU5hbWUoKSxicmFuY2huYW1lLGxlbiwo
Y2hhciopKHR3b2RpbSsxKSk7DQoJZnByaW50ZihmcCwiICAlLTE1cyAoKiVz
KCkpJXMgeyIsbGVhZi0+R2V0VHlwZU5hbWUoKSxicmFuY2huYW1lLChjaGFy
KikodHdvZGltKzEpKTsNCglmcHJpbnRmKGZwLCJpZiAoYnJhbmNoXyVzKSBy
ZXR1cm4gbGVhZl8lczsiLGJyYW5jaC0+R2V0TmFtZSgpLGJyYW5jaG5hbWUp
Ow0KCWZwcmludGYoZnAsImJyYW5jaF9wb2ludGVyXyVzLT5HZXRFdmVudChm
RXZlbnQpOyIsYnJhbmNoLT5HZXROYW1lKCkpOw0KCWZwcmludGYoZnAsImJy
YW5jaF8lcz0xO3JldHVybiBsZWFmXyVzO31cbiIsYnJhbmNoLT5HZXROYW1l
KCksYnJhbmNobmFtZSk7DQogICAgICB9IGVsc2Ugew0KCWZwcmludGYoZnAs
IiAgJS0xNXMgbGVhZl8lc1slZF07XG4iLGxlYWYtPkdldFR5cGVOYW1lKCks
YnJhbmNobmFtZSxsZW4pOw0KCS8vIGZwcmludGYoZnAsIiAgJS0xNXMgKCYl
cygpKVslZF0geyIsbGVhZi0+R2V0VHlwZU5hbWUoKSxicmFuY2huYW1lLGxl
bik7DQoJZnByaW50ZihmcCwiICAlLTE1cyAqcygpIHsiLGxlYWYtPkdldFR5
cGVOYW1lKCksYnJhbmNobmFtZSk7DQoJZnByaW50ZihmcCwiaWYgKGJyYW5j
aF8lcykgcmV0dXJuIGxlYWZfJXM7IixicmFuY2gtPkdldE5hbWUoKSxicmFu
Y2huYW1lKTsNCglmcHJpbnRmKGZwLCJicmFuY2hfcG9pbnRlcl8lcy0+R2V0
RXZlbnQoZkV2ZW50KTsiLGJyYW5jaC0+R2V0TmFtZSgpKTsNCglmcHJpbnRm
KGZwLCJicmFuY2hfJXM9MTtyZXR1cm4gbGVhZl8lczt9XG4iLGJyYW5jaC0+
R2V0TmFtZSgpLGJyYW5jaG5hbWUpOw0KICAgICAgfQ0KICAgIH0gZWxzZSB7
DQogICAgICBmcHJpbnRmKGZwLCIgICUtMTVzIGxlYWZfJXM7XG4iLGxlYWYt
PkdldFR5cGVOYW1lKCksYnJhbmNobmFtZSk7DQogICAgICBmcHJpbnRmKGZw
LCIgICUtMTVzICYlcygpIHsiLGxlYWYtPkdldFR5cGVOYW1lKCksYnJhbmNo
bmFtZSk7DQogICAgICBmcHJpbnRmKGZwLCJpZiAoYnJhbmNoXyVzKSByZXR1
cm4gbGVhZl8lczsiLGJyYW5jaC0+R2V0TmFtZSgpLGJyYW5jaG5hbWUpOw0K
ICAgICAgZnByaW50ZihmcCwiYnJhbmNoX3BvaW50ZXJfJXMtPkdldEV2ZW50
KGZFdmVudCk7IixicmFuY2gtPkdldE5hbWUoKSk7DQogICAgICBmcHJpbnRm
KGZwLCJicmFuY2hfJXM9MTtyZXR1cm4gbGVhZl8lczt9XG4iLGJyYW5jaC0+
R2V0TmFtZSgpLGJyYW5jaG5hbWUpOw0KICAgIH0NCiAgfQ0KICANCiAgLy8g
IyBHZW5lcmF0ZSBjbGFzcyBtZW1iZXIgZnVuY3Rpb25zIHByb3RvdHlwZXMg
DQogIGZwcmludGYoZnAsIiAgXG4iKTsNCiAgZnByaW50ZihmcCwiICAvLyAj
IHB1YmxpYyBmdW5jdGlvbnMgXG4iKTsNCiAgZnByaW50ZihmcCwiICAlcyhD
aGFyX3QgKmZpbGVuYW1lID0gMCk7XG4iLGNsYXNzbmFtZSk7DQogIGZwcmlu
dGYoZnAsIiAgJXMoVFRyZWUgKnRyZWUpIHtpZiAoIXRyZWUpICVzKCk7ZWxz
ZSBJbml0KHRyZWUpO31cbiIsY2xhc3NuYW1lLGNsYXNzbmFtZSk7DQogIGZw
cmludGYoZnAsIiAgfiVzKCkgezt9XG4iLGNsYXNzbmFtZSk7DQogIGZwcmlu
dGYoZnAsIiAgU3RhdF90IEdldEVudHJpZXMoKSB7aWYgKCFmVHJlZSkgcmV0
dXJuIDA7cmV0dXJuIGZUcmVlLT5HZXRFbnRyaWVzKCk7fVxuIik7DQogIGZw
cmludGYoZnAsIiAgSW50X3QgR2V0RXZlbnQoSW50X3QgZXZlbnQpO1xuIik7
DQogIGZwcmludGYoZnAsIiAgdm9pZCBJbml0KFRUcmVlICp0cmVlKTtcbiIp
Ow0KICBmcHJpbnRmKGZwLCIgIEludF90IExvb3AoKTtcbiIpOw0KICBmcHJp
bnRmKGZwLCIgIEludF90IExvb3AoSW50X3QgKCphbmFseXNpcykoJXMgKikp
O1xuIixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCIgIHZvaWQgU2hvdyhJ
bnRfdCBldmVudCA9IC0xKTtcbiIpOw0KICBmcHJpbnRmKGZwLCJ9O1xuIik7
DQogIGZwcmludGYoZnAsIlxuIik7DQogIGZwcmludGYoZnAsIiNlbmRpZlxu
Iik7DQogIGZwcmludGYoZnAsIlxuIik7DQogIA0KICBmcHJpbnRmKGZwLCIv
LyAjICoqKiBUaGUgJXMgY2xhc3MgaW1wbGVtZW50YXRpb24gKioqIFxuIixj
bGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCIjaWZkZWYgJXNfY3h4XG4iLGNs
YXNzbmFtZSk7DQogIGZwcmludGYoZnAsIlxuIik7DQogIA0KICAvLyAjIEdl
bmVyYXRlIGNsYXNzIGNvbnN0cnVjdG9yIGNsYXNzbmFtZShDaGFyX3QgKmZp
bGVuYW1lKSANCiAgZnByaW50ZihmcCwiLy8gIyAlczo6JXMoQ2hhcl90ICpm
aWxlbmFtZSkgXG4iLGNsYXNzbmFtZSxjbGFzc25hbWUpOw0KICBmcHJpbnRm
KGZwLCIlczo6JXMoQ2hhcl90ICpmaWxlbmFtZSlcbiIsY2xhc3NuYW1lLGNs
YXNzbmFtZSk7DQogIGZwcmludGYoZnAsIntcbiIpOw0KICBmcHJpbnRmKGZw
LCIgIC8vICMgSWYgcGFyYW1ldGVyIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZp
ZWQgKG9yIHplcm8pLCBjb25uZWN0IHRoZSBmaWxlIFxuIik7DQogIGZwcmlu
dGYoZnAsIiAgLy8gIyB1c2VkIHRvIGdlbmVyYXRlIHRoaXMgY2xhc3MgKCAl
cyApLiBcbiIsdHJlZWZpbGUpOw0KICBmcHJpbnRmKGZwLCIgIGlmICghZmls
ZW5hbWUgfHwgISgqZmlsZW5hbWUpKSB7XG4iKTsNCiAgZnByaW50ZihmcCwi
ICAgIGZpbGVuYW1lID0gXCIlc1wiO1xuIix0cmVlZmlsZSk7DQogIGZwcmlu
dGYoZnAsIiAgfVxuIik7DQogIGZwcmludGYoZnAsIiAgLy8gIyBGaW5kIHRo
ZSByZXF1aXJlZCBmaWxlIGluIFJPT1QgYW5kLCBpZiBub3QgZm91bmQsIG9w
ZW4gaXQuIFxuIik7DQogIGZwcmludGYoZnAsIiAgVEZpbGUgKmYgPSAoVEZp
bGUqKWdST09ULT5HZXRMaXN0T2ZGaWxlcygpLT5GaW5kT2JqZWN0KGZpbGVu
YW1lKTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGlmICghZikge1xuIik7DQog
IGZwcmludGYoZnAsIiAgICBmID0gbmV3IFRGaWxlKGZpbGVuYW1lKTtcbiIp
Ow0KICBmcHJpbnRmKGZwLCIgIH1cbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8v
ICMgRmluZCB0aGUgJXMgdHJlZSBhbmQgaW5pdGlhbGl6ZSBvYmplY3QuIFxu
Iix0LT5HZXROYW1lKCkpOw0KICBmcHJpbnRmKGZwLCIgIFRUcmVlICp0ID0g
KFRUcmVlKilnRGlyZWN0b3J5LT5HZXQoXCIlc1wiKTtcbiIsdC0+R2V0TmFt
ZSgpKTsNCiAgZnByaW50ZihmcCwiICBJbml0KHQpO1xuIik7DQogIGZwcmlu
dGYoZnAsIn1cbiIpOw0KICBmcHJpbnRmKGZwLCJcbiIpOw0KICANCiAgLy8g
IyBHZW5lcmF0ZSBjbGFzcyBtZW1iZXIgZnVuY3Rpb24gR2V0RXZlbnQoSW50
X3QgZXZlbnQpIA0KICBmcHJpbnRmKGZwLCIvLyAjIEludF90ICVzOjpHZXRF
dmVudChJbnRfdCBldmVudCkgXG4iLGNsYXNzbmFtZSk7DQogIGZwcmludGYo
ZnAsIkludF90ICVzOjpHZXRFdmVudChJbnRfdCBldmVudClcbiIsY2xhc3Nu
YW1lKTsNCiAgZnByaW50ZihmcCwie1xuIik7DQogIGZwcmludGYoZnAsIiAg
Ly8gIyBQcmVwYXJlIHRvIHJlYWQgc3BlY2lmaWVkIGV2ZW50IGZyb20gdGhl
IFRyZWUuIFxuIik7DQogIGZwcmludGYoZnAsIiAgaWYgKCFmVHJlZSkgcmV0
dXJuIDA7XG4iKTsNCiAgLy8gZnByaW50ZihmcCwiICAvLyBpZiAoZkV2ZW50
PT1ldmVudCkgcmV0dXJuIDE7XG4iKTsNCiAgZnByaW50ZihmcCwiICBmRXZl
bnQgPSBldmVudDtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgU2V0IGJy
YW5jaCBzdGF0dXNlcyB0byAwIFxuIik7DQogIG5iID0gdC0+R2V0TGlzdE9m
QnJhbmNoZXMoKS5HZXRFbnRyaWVzRmFzdCgpOw0KICBmb3IgKGk9MDtpPG5i
O2krKykgIHsNCiAgICBicmFuY2ggPSAoVEJyYW5jaCopdC0+R2V0TGlzdE9m
QnJhbmNoZXMoKS5VbmNoZWNrZWRBdChpKTsNCiAgICBmcHJpbnRmKGZwLCIg
IGJyYW5jaF8lcyA9IDA7XG4iLGJyYW5jaC0+R2V0TmFtZSgpKTsNCiAgfQ0K
ICBmcHJpbnRmKGZwLCIgIHJldHVybiAxO1xuIik7DQogIGZwcmludGYoZnAs
In1cbiIpOw0KICBmcHJpbnRmKGZwLCJcbiIpOw0KICANCiAgLy8gIyBHZW5l
cmF0ZSBjbGFzcyBtZW1iZXIgZnVuY3Rpb24gSW5pdChUVHJlZSAqdHJlZSkg
DQogIGZwcmludGYoZnAsIi8vICMgdm9pZCAlczo6SW5pdChUVHJlZSAqdHJl
ZSkgXG4iLGNsYXNzbmFtZSk7DQogIGZwcmludGYoZnAsInZvaWQgJXM6Oklu
aXQoVFRyZWUgKnRyZWUpXG4iLGNsYXNzbmFtZSk7DQogIGZwcmludGYoZnAs
IntcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgSW5pdGlhbGl6ZSBwdWJs
aWMgdmFyaWFibGVzLiBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGZUcmVlID0g
dHJlZTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGZFdmVudCA9IC0xO1xuIik7
DQogIGZwcmludGYoZnAsIiAgaWYgKCF0cmVlKSByZXR1cm47XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAvLyAjIFNldCBicmFuY2ggYWRkcmVzc2VzLiBcbiIp
Ow0KICBmb3IgKGw9MDtsPG5sZWF2ZXM7bCsrKSB7DQogICAgVExlYWYgKmxl
YWYgPSAoVExlYWYqKWxlYXZlcy0+VW5jaGVja2VkQXQobCk7DQogICAgbGVu
ID0gbGVhZi0+R2V0TGVuKCk7DQogICAgbGVhZmNvdW50ID1sZWFmLT5HZXRM
ZWFmQ291bnQoKTsNCiAgICBUQnJhbmNoICpicmFuY2ggPSBsZWFmLT5HZXRC
cmFuY2goKTsNCiAgICBpZiAobGVhZmNvdW50KSBzdHJjcHkoYnJhbmNobmFt
ZSxicmFuY2gtPkdldE5hbWUoKSk7DQogICAgZWxzZSAgICAgICAgICAgc3Ry
Y3B5KGJyYW5jaG5hbWUsbGVhZi0+R2V0VGl0bGUoKSk7DQogICAgYm5hbWUg
PSBicmFuY2huYW1lOw0KICAgIHdoaWxlICgqYm5hbWUpIHtpZiAoKmJuYW1l
ID09ICcuJykgKmJuYW1lPSdfJzsgYm5hbWUrKzt9DQogICAgY2hhciAqYnJh
ayA9IHN0cnN0cihicmFuY2huYW1lLCJbIik7DQogICAgaWYgKGJyYWspICpi
cmFrID0gMDsNCiAgICBoZWFkID0gaGVhZE9LOw0KICAgIGlmIChicmFuY2gt
PklzQSgpID09IFRCcmFuY2hPYmplY3Q6OkNsYXNzKCkpIHsNCiAgICAgIGlm
IChicmFuY2gtPkdldExpc3RPZkJyYW5jaGVzKCktPkdldEVudHJpZXNGYXN0
KCkpIGNvbnRpbnVlOw0KICAgICAgbGVhZm9iaiA9IChUTGVhZk9iamVjdCop
bGVhZjsNCiAgICAgIGlmICghbGVhZm9iai0+R2V0Q2xhc3MoKSkgaGVhZCA9
IGhlYWRjb207DQogICAgICBzdHJjcHkoYnJhbmNobmFtZSxicmFuY2gtPkdl
dE5hbWUoKSk7DQogICAgfQ0KICAgIGlmIChsZWFmY291bnQpIGxlbiA9IGxl
YWZjb3VudC0+R2V0TWF4aW11bSgpKzE7DQogICAgaWYgKGxlbiA+IDEpIGZw
cmludGYoZnAsIiVzZlRyZWUtPlNldEJyYW5jaEFkZHJlc3MoXCIlc1wiLGxl
YWZfJXMpO1xuIixoZWFkLGJyYW5jaC0+R2V0TmFtZSgpLGJyYW5jaG5hbWUp
Ow0KICAgIGVsc2UgICAgICAgICBmcHJpbnRmKGZwLCIlc2ZUcmVlLT5TZXRC
cmFuY2hBZGRyZXNzKFwiJXNcIiwmbGVhZl8lcyk7XG4iLGhlYWQsYnJhbmNo
LT5HZXROYW1lKCksYnJhbmNobmFtZSk7DQogIH0NCiAgZnByaW50ZihmcCwi
ICAvLyAjIFNldCBicmFuY2ggc3RhdHVzZXMgdG8gMCwgaW5pdGlhbGl6ZSBi
cmFuY2ggcG9pbnRlcnMgXG4iKTsNCiAgZnByaW50ZihmcCwiICBmVHJlZS0+
U2V0QnJhbmNoU3RhdHVzKFwiKlwiLDApOyAvLyBkaXNhYmxlIGFsbCBicmFu
Y2hlc1xuIik7DQogIG5iID0gdC0+R2V0TGlzdE9mQnJhbmNoZXMoKS5HZXRF
bnRyaWVzRmFzdCgpOw0KICBmb3IgKGk9MDtpPG5iO2krKykgIHsNCiAgICBi
cmFuY2ggPSAoVEJyYW5jaCopdC0+R2V0TGlzdE9mQnJhbmNoZXMoKS5VbmNo
ZWNrZWRBdChpKTsNCiAgICBmcHJpbnRmKGZwLCIgIGJyYW5jaF8lcyA9IDA7
XG4iLGJyYW5jaC0+R2V0TmFtZSgpKTsNCiAgICBmcHJpbnRmKGZwLCIgIGJy
YW5jaF9wb2ludGVyXyVzID0gZlRyZWUtPkdldEJyYW5jaChcIiVzXCIpO1xu
IixicmFuY2gtPkdldE5hbWUoKSxicmFuY2gtPkdldE5hbWUoKSk7DQogIH0N
CiAgZnByaW50ZihmcCwifVxuIik7DQogIGZwcmludGYoZnAsIlxuIik7DQog
IA0KICAvLyAjIEdlbmVyYXRlIGNsYXNzIG1lbWJlciBmdW5jdGlvbiBMb29w
KEludF90ICgqYW5hbHlzaXMpKGNsYXNzbmFtZSAqKSkgDQogIGZwcmludGYo
ZnAsIi8vICMgSW50X3QgJXM6Okxvb3AoSW50X3QgKCphbmFseXNpcykoJXMg
KikpIFxuIixjbGFzc25hbWUsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwi
SW50X3QgJXM6Okxvb3AoSW50X3QgKCphbmFseXNpcykoJXMgKikpXG4iLGNs
YXNzbmFtZSxjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCJ7XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAvLyAjIEV4ZWN1dGUgdGhlIGFuYWx5c2lzIGZ1bmN0
aW9uIGZvciBldmVyeSBldmVudC4gSW4gY2FzZSB0aGUgXG4iKTsNCiAgZnBy
aW50ZihmcCwiICAvLyAjIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybnMgYSBu
b24gemVybyB2YWx1ZSwgYnJlYWsgdGhlIGxvb3AuIFxuIik7DQogIGZwcmlu
dGYoZnAsIiAgaWYgKCFmVHJlZSB8fCAhYW5hbHlzaXMpIHJldHVybiAwO1xu
Iik7DQogIGZwcmludGYoZnAsIiAgXG4iKTsNCiAgZnByaW50ZihmcCwiICAv
LyAjIExvY2FsIHZhcmlhYmxlcyAoIGNvbW1vbiB0byBjb21waWxlZCBhbmQg
aW50ZXJwcmV0ZWQgY29kZSApLiBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIFN0
YXRfdCBuZW50cmllcyA9IEdldEVudHJpZXMoKTsgLy8gTnVtYmVyIG9mIGVu
dHJpZXMgaW4gdGhlIFRyZWUuXG4iKTsNCiAgZnByaW50ZihmcCwiICBJbnRf
dCBuZXZlbnRzID0gMDsgLy8gSG93IG1hbnkgZXZlbnRzIHdlcmUgYW5hbHlz
ZWQuXG4iKTsNCiAgZnByaW50ZihmcCwiICBcbiIpOw0KICBmcHJpbnRmKGZw
LCIgIC8vICMgVGhpcyBpcyB0aGUgZXZlbnQgbG9vcCBpbiBjb21waWxlZCBj
b2RlLiBcbiIpOw0KICBmcHJpbnRmKGZwLCIjaWZuZGVmIF9fQ0lOVF9fXG4i
KTsNCiAgZnByaW50ZihmcCwiICBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8v
ICMgRmlyc3QgZGVmaW5lIHNvbWUgbG9jYWwgdmFyaWFibGVzIGFuZCBvYmpl
Y3RzLiBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGNoYXIgdGVtcFs2NF07IC8v
IElOVEVSUFJFVEVERlVOQ1xuIik7DQogIGZwcmludGYoZnAsIiAgbG9uZyBv
ZmZzZXQgPSAwOyAvLyBJTlRFUlBSRVRFREZVTkNcbiIpOw0KICBmcHJpbnRm
KGZwLCIgIEdfX0NsYXNzSW5mbyBnbG9iYWxzY29wZTsgLy8gSU5URVJQUkVU
RURGVU5DXG4iKTsNCiAgZnByaW50ZihmcCwiICBHX19DYWxsRnVuYyBmdW5j
OyAvLyBJTlRFUlBSRVRFREZVTkMsIENPTVBJTEVESU5URVJGQUNFTUVUSE9E
LCBCWVRFQ09ERUZVTkNcbiIpOw0KICBmcHJpbnRmKGZwLCIgIFxuIik7DQog
IGZwcmludGYoZnAsIiAgLy8gIyBUaGVuIGV4ZWN1dGUgdGhlIGxvb3AuIFxu
Iik7DQogIGZwcmludGYoZnAsIiAgc3dpdGNoKEdfX2lzaW50ZXJwcmV0ZWRw
MmYoKCh2b2lkKilhbmFseXNpcykpKSB7XG4iKTsNCiAgZnByaW50ZihmcCwi
ICAgIC8vICMgdXNpbmcgZnVuY3Rpb24gY2FsbCBhcyBzdHJpbmcgXG4iKTsN
CiAgZnByaW50ZihmcCwiICBjYXNlIEdfX0lOVEVSUFJFVEVERlVOQzpcbiIp
Ow0KICBmcHJpbnRmKGZwLCIgICAgc3ByaW50Zih0ZW1wLFwiKCVzICopJSVw
XCIsKHZvaWQqKXRoaXMpO1xuIixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZw
LCIgICAgZnVuYy5TZXRGdW5jKCZnbG9iYWxzY29wZSwoY2hhciopYW5hbHlz
aXMsdGVtcCwmb2Zmc2V0KTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgZm9y
IChJbnRfdCBpPTA7IGk8bmVudHJpZXM7IGkrKykge1xuIik7DQogIGZwcmlu
dGYoZnAsIiAgICAgIG5ldmVudHMgKz0gR2V0RXZlbnQoaSk7XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAgICAgaWYgKGZ1bmMuRXhlY0ludCgodm9pZCopTlVM
TCkpIGJyZWFrO1xuIik7DQogIGZwcmludGYoZnAsIiAgICB9XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAgIGJyZWFrO1xuIik7DQogIGZwcmludGYoZnAsIiAg
ICAvLyAjIHVzaW5nIGludGVyZmFjZSBtZXRob2QgXG4iKTsNCiAgZnByaW50
ZihmcCwiICBjYXNlIEdfX0NPTVBJTEVESU5URVJGQUNFTUVUSE9EOlxuIik7
DQogIGZwcmludGYoZnAsIiAgICBmdW5jLlNldEZ1bmMoKEdfX0ludGVyZmFj
ZU1ldGhvZClhbmFseXNpcyk7XG4iKTsNCiAgZnByaW50ZihmcCwiICAgIGZ1
bmMuU2V0QXJnKCgobG9uZyl0aGlzKSk7XG4iKTsNCiAgZnByaW50ZihmcCwi
ICAgIGZvciAoSW50X3QgaT0wOyBpPG5lbnRyaWVzOyBpKyspIHtcbiIpOw0K
ICBmcHJpbnRmKGZwLCIgICAgICBuZXZlbnRzICs9IEdldEV2ZW50KGkpO1xu
Iik7DQogIGZwcmludGYoZnAsIiAgICAgIGlmIChmdW5jLkV4ZWNJbnQoKHZv
aWQqKU5VTEwpKSBicmVhaztcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgfVxu
Iik7DQogIGZwcmludGYoZnAsIiAgICBicmVhaztcbiIpOw0KICBmcHJpbnRm
KGZwLCIgICAgLy8gIyBieXRlY29kZSB2ZXJzaW9uIG9mIGludGVycHJldGVk
IGZ1bmMgXG4iKTsNCiAgZnByaW50ZihmcCwiICBjYXNlIEdfX0JZVEVDT0RF
RlVOQzpcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgZnVuYy5TZXRCeXRlY29k
ZSgoc3RydWN0IEdfX2J5dGVjb2RlZnVuYyopYW5hbHlzaXMpO1xuIik7DQog
IGZwcmludGYoZnAsIiAgICBmdW5jLlNldEFyZygoKGxvbmcpdGhpcykpO1xu
Iik7DQogIGZwcmludGYoZnAsIiAgICBmb3IgKEludF90IGk9MDsgaTxuZW50
cmllczsgaSsrKSB7XG4iKTsNCiAgZnByaW50ZihmcCwiICAgICAgbmV2ZW50
cyArPSBHZXRFdmVudChpKTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgICBp
ZiAoZnVuYy5FeGVjSW50KCh2b2lkKilOVUxMKSkgYnJlYWs7XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAgIH1cbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgYnJl
YWs7XG4iKTsNCiAgZnByaW50ZihmcCwiICAgIC8vICMgdXNpbmcgdHJ1ZSBw
b2ludGVyIHRvIGZ1bmN0aW9uIFxuIik7DQogIGZwcmludGYoZnAsIiAgY2Fz
ZSBHX19DT01QSUxFRFRSVUVGVU5DOlxuIik7DQogIGZwcmludGYoZnAsIiAg
ICAvLyAjIHBvaW50ZXIgbm90IGluIENJTlQgZ2xvYmFsIGZ1bmN0aW9uIHRh
YmxlIFxuIik7DQogIGZwcmludGYoZnAsIiAgY2FzZSBHX19VTktOT1dORlVO
QzpcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgZm9yIChJbnRfdCBpPTA7IGk8
bmVudHJpZXM7IGkrKykge1xuIik7DQogIGZwcmludGYoZnAsIiAgICAgIG5l
dmVudHMgKz0gR2V0RXZlbnQoaSk7XG4iKTsNCiAgZnByaW50ZihmcCwiICAg
ICAgaWYgKCgqYW5hbHlzaXMpKHRoaXMpKSBicmVhaztcbiIpOw0KICBmcHJp
bnRmKGZwLCIgICAgfVxuIik7DQogIGZwcmludGYoZnAsIiAgICBicmVhaztc
biIpOw0KICBmcHJpbnRmKGZwLCIgICAgLy8gIyB0aGlzIHNob3VsZCBuZXZl
ciBoYXBwZW4gKCB1bmtub3duIGtpbmQgb2YgcG9pbnRlciApIFxuIik7DQog
IGZwcmludGYoZnAsIiAgZGVmYXVsdDpcbiIpOw0KICBmcHJpbnRmKGZwLCIg
ICAgY2VyciA8PCBcIkVycm9yIDogVW5rbm93biBraW5kIG9mIHBvaW50ZXIg
dG8gZnVuY3Rpb25cIiA8PCBlbmRsO1xuIik7DQogIGZwcmludGYoZnAsIiAg
ICBicmVhaztcbiIpOw0KICBmcHJpbnRmKGZwLCIgIH1cbiIpOw0KICBmcHJp
bnRmKGZwLCIgIFxuIik7DQogIGZwcmludGYoZnAsIiAgLy8gIyBUaGlzIGlz
IHRoZSBldmVudCBsb29wIGluIGludGVycHJldGVkIGNvZGUuIFxuIik7DQog
IGZwcmludGYoZnAsIiNlbHNlXG4iKTsNCiAgZnByaW50ZihmcCwiICBcbiIp
Ow0KICBmcHJpbnRmKGZwLCIgIC8vICMgY3VycmVudCBDSU5UIGNhbm5vdCBk
ZWFsIHdpdGggdGhpcyBcbiIpOw0KICBmcHJpbnRmKGZwLCIjaWYgMFxuIik7
DQogIGZwcmludGYoZnAsIiAgZm9yIChJbnRfdCBpPTA7IGk8bmVudHJpZXM7
IGkrKykge1xuIik7DQogIGZwcmludGYoZnAsIiAgICBuZXZlbnRzICs9IEdl
dEV2ZW50KGkpO1xuIik7DQogIGZwcmludGYoZnAsIiAgICBpZiAoKCphbmFs
eXNpcykodGhpcykpIGJyZWFrOyAvLyBjdXJyZW50IENJTlQgY2Fubm90IGRl
YWwgd2l0aCBpdFxuIik7DQogIGZwcmludGYoZnAsIiAgfVxuIik7DQogIGZw
cmludGYoZnAsIiAgLy8gIyBzbyB3ZSBuZWVkIHRvIHVzZSB0aGlzIFxuIik7
DQogIGZwcmludGYoZnAsIiNlbHNlXG4iKTsNCiAgZnByaW50ZihmcCwiICBJ
bnRfdCByZXN1bHQ7XG4iKTsNCiAgZnByaW50ZihmcCwiICBmb3IgKEludF90
IGk9MDsgaTxuZW50cmllczsgaSsrKSB7XG4iKTsNCiAgZnByaW50ZihmcCwi
ICAgIG5ldmVudHMgKz0gR2V0RXZlbnQoaSk7XG4iKTsNCiAgZnByaW50Zihm
cCwiICAgIHJlc3VsdCA9ICgqYW5hbHlzaXMpKHRoaXMpO1xuIik7DQogIGZw
cmludGYoZnAsIiAgICBpZiAocmVzdWx0KSBicmVhaztcbiIpOw0KICBmcHJp
bnRmKGZwLCIgIH1cbiIpOw0KICBmcHJpbnRmKGZwLCIjZW5kaWZcbiIpOw0K
ICBmcHJpbnRmKGZwLCIgIFxuIik7DQogIGZwcmludGYoZnAsIiNlbmRpZlxu
Iik7DQogIGZwcmludGYoZnAsIiAgXG4iKTsNCiAgZnByaW50ZihmcCwiICAv
LyAjIFdlIGFyZSBkb25lLCByZXR1cm4uIFxuIik7DQogIGZwcmludGYoZnAs
IiAgcmV0dXJuIG5ldmVudHM7XG4iKTsNCiAgZnByaW50ZihmcCwifVxuIik7
DQogIGZwcmludGYoZnAsIlxuIik7DQogIA0KICAvLyAjIEdlbmVyYXRlIGNs
YXNzIG1lbWJlciBmdW5jdGlvbiBTaG93KEludF90IGV2ZW50KSANCiAgZnBy
aW50ZihmcCwiLy8gIyB2b2lkICVzOjpTaG93KEludF90IGV2ZW50KSBcbiIs
Y2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwidm9pZCAlczo6U2hvdyhJbnRf
dCBldmVudClcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwie1xuIik7
DQogIGZwcmludGYoZnAsIiAgLy8gIyBQcmludCBjb250ZW50cyBvZiBldmVu
dCAoIGFsbCBicmFuY2hlcyApLiBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8v
ICMgSWYgZXZlbnQgaXMgbm90IHNwZWNpZmllZCwgcHJpbnQgY3VycmVudCBl
dmVudC4gXG4iKTsNCiAgZnByaW50ZihmcCwiICBpZiAoIWZUcmVlKSByZXR1
cm47XG4iKTsNCiAgZnByaW50ZihmcCwiICBpZiAoZXZlbnQ+PTApIGZFdmVu
dCA9IGV2ZW50OyBlbHNlIGV2ZW50ID0gZkV2ZW50O1xuIik7DQogIGZwcmlu
dGYoZnAsIiAgaWYgKGZFdmVudDwwKSByZXR1cm47XG4iKTsNCiAgZnByaW50
ZihmcCwiICBmVHJlZS0+U2V0QnJhbmNoU3RhdHVzKFwiKlwiLDEpOyAgLy8g
ZW5hYmxlIGFsbCBicmFuY2hlc1xuIik7DQogIGZwcmludGYoZnAsIiAgZlRy
ZWUtPlNob3coZkV2ZW50KTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGZUcmVl
LT5TZXRCcmFuY2hTdGF0dXMoXCIqXCIsMCk7ICAvLyBkaXNhYmxlIGFsbCBi
cmFuY2hlc1xuIik7DQogIGZwcmludGYoZnAsIiAgLy8gIyBTZXQgYnJhbmNo
IHN0YXR1c2VzIHRvIDEgXG4iKTsNCiAgbmIgPSB0LT5HZXRMaXN0T2ZCcmFu
Y2hlcygpLkdldEVudHJpZXNGYXN0KCk7DQogIGZvciAoaT0wO2k8bmI7aSsr
KSAgew0KICAgIGJyYW5jaCA9IChUQnJhbmNoKil0LT5HZXRMaXN0T2ZCcmFu
Y2hlcygpLlVuY2hlY2tlZEF0KGkpOw0KICAgIGZwcmludGYoZnAsIiAgYnJh
bmNoXyVzID0gMTtcbiIsYnJhbmNoLT5HZXROYW1lKCkpOw0KICB9DQogIGZw
cmludGYoZnAsIn1cbiIpOw0KICBmcHJpbnRmKGZwLCJcbiIpOw0KICANCiAg
ZnByaW50ZihmcCwiI2VuZGlmXG4iKTsNCiAgZnByaW50ZihmcCwiXG4iKTsN
CiAgZnByaW50ZihmcCwiLy8gIyBFbmQgb2YgZmlsZSAlcyBcbiIsdGhlYWQp
Ow0KICANCiAgLy8gIyAqKiogR2VuZXJhdGUgY2xhc3NuYW1lLmN4eCAqKiog
DQogIC8vICMgR2VuZXJhdGUgY2xhc3MgbWVtYmVyIGZ1bmN0aW9uIExvb3Ao
KSANCiAgZnByaW50ZihmcGMsIi8vICMgSW5jbHVkZSB0aGUgJXMgY2xhc3Mg
aW50ZXJmYWNlIHNwZWNpZmljYXRpb24uIFxuIixjbGFzc25hbWUpOw0KICBm
cHJpbnRmKGZwYywiI2lmbmRlZiAlc19jeHhcbiIsY2xhc3NuYW1lKTsNCiAg
ZnByaW50ZihmcGMsIiNkZWZpbmUgJXNfY3h4XG4iLGNsYXNzbmFtZSk7DQog
IGZwcmludGYoZnBjLCIjZW5kaWZcbiIpOw0KICBmcHJpbnRmKGZwYywiI2lu
Y2x1ZGUgXCIlc1wiXG4iLHRoZWFkKTsNCiAgZnByaW50ZihmcGMsIiN1bmRl
ZiAlc19jeHhcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcGMsIlxuIik7
DQogIGZwcmludGYoZnBjLCIvLyAjIFBsYWNlIGhlcmUgYWxsIFJPT1QgcmVs
YXRlZCBpbmNsdWRlcyB0aGF0IHlvdSBuZWVkLiBcbiIpOw0KICBmcHJpbnRm
KGZwYywiI2lmbmRlZiBfX0NJTlRfX1xuXG4iKTsNCiAgZnByaW50ZihmcGMs
IiNlbmRpZlxuIik7DQogIGZwcmludGYoZnBjLCJcbiIpOw0KICBmcHJpbnRm
KGZwYywiLy8gIyBJbnRfdCAlczo6TG9vcCgpIFxuIixjbGFzc25hbWUpOw0K
ICBmcHJpbnRmKGZwYywiSW50X3QgJXM6Okxvb3AoKVxuIixjbGFzc25hbWUp
Ow0KICBmcHJpbnRmKGZwYywie1xuIik7DQogIC8vIGZwcmludGYoZnBjLCIg
IGlmICghZlRyZWUpIHJldHVybjtcbiAgXG4iKTsNCiAgZnByaW50ZihmcGMs
IiAgLy8gIyBMb2NhbCB2YXJpYWJsZXMuIFxuIik7DQogIGZwcmludGYoZnBj
LCIgIFN0YXRfdCBuZW50cmllcyA9IEdldEVudHJpZXMoKTsgLy8gTnVtYmVy
IG9mIGVudHJpZXMgaW4gdGhlIFRyZWUuXG4iKTsNCiAgZnByaW50ZihmcGMs
IiAgSW50X3QgbmV2ZW50cyA9IDA7IC8vIEhvdyBtYW55IGV2ZW50cyB3ZXJl
IGFuYWx5c2VkLlxuIik7DQogIGZwcmludGYoZnBjLCIgIFxuIik7DQogIGZw
cmludGYoZnBjLCIgIC8vICMgVGhpcyBpcyB0aGUgbG9vcCBza2VsZXRvbi4g
XG4iKTsNCiAgZnByaW50ZihmcGMsIiAgZm9yIChJbnRfdCBpPTA7IGk8bmVu
dHJpZXM7IGkrKykge1xuIik7DQogIGZwcmludGYoZnBjLCIgICAgbmV2ZW50
cyArPSBHZXRFdmVudChpKTtcbiIpOw0KICBmcHJpbnRmKGZwYywiICAgIFxu
Iik7DQogIGZwcmludGYoZnBjLCIgIH1cbiIpOw0KICBmcHJpbnRmKGZwYywi
ICBcbiIpOw0KICBmcHJpbnRmKGZwYywiICAvLyAjIFdlIGFyZSBkb25lLCBy
ZXR1cm4uIFxuIik7DQogIGZwcmludGYoZnBjLCIgIHJldHVybiBuZXZlbnRz
O1xuIik7DQogIGZwcmludGYoZnBjLCJ9XG4iKTsNCiAgZnByaW50ZihmcGMs
IlxuIik7DQogIGZwcmludGYoZnBjLCIvLyAjIEVuZCBvZiBmaWxlICVzIFxu
Iix0Y2ltcCk7DQogIA0KICBwcmludGYoIkZpbGVzOiAlcyBhbmQgJXMgZ2Vu
ZXJhdGVkIGZyb20gVHJlZTogJXNcbiIsdGhlYWQsdGNpbXAsdC0+R2V0TmFt
ZSgpKTsNCiAgZGVsZXRlIFtdIHRoZWFkOw0KICBkZWxldGUgW10gdGNpbXA7
DQogIGRlbGV0ZSBbXSB0cmVlZmlsZTsNCiAgZmNsb3NlKGZwKTsNCiAgZmNs
b3NlKGZwYyk7DQogIA0KICByZXR1cm4gMDsNCn0NCg0KLy8gIyBFbmQgb2Yg
ZmlsZSBNYWtlQ2xhc3MuY3h4IA0K
---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="emacs.rc.add"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521101708.7070E@uranos.cto.us.edu.pl>
Content-Description: emacs.rc.add

Ozs7Ow0KOzs7OyBtaW5vciBtb2RlOiBjb2x1bW4NCihhdXRvbG9hZCAnZGlz
cGxheS1jb2x1bW4tbW9kZSAiY29sdW1uIiBuaWwgdCkNCihkaXNwbGF5LWNv
bHVtbi1tb2RlIDEpDQo7Ozs7DQoobG9hZCAicGFyZW4iKSA7IGF1dG9tYXRp
YyBwYXJlbnRoZXNpcyBtYXRjaGluZyBsaWJyYXJ5DQo7Ozs7DQo7Ozs7IC4u
LiBsb2FkIHRoZSBjYy1tb2RlIG1vZGUgLi4uDQooYXV0b2xvYWQgJ2MrKy1t
b2RlICAiY2MtbW9kZSIgIkMrKyBFZGl0aW5nIE1vZGUiIHQpDQooYXV0b2xv
YWQgJ2MtbW9kZSAgICAiY2MtbW9kZSIgIkMgRWRpdGluZyBNb2RlIiB0KQ0K
KGF1dG9sb2FkICdvYmpjLW1vZGUgImNjLW1vZGUiICJPYmplY3RpdmUtQyBF
ZGl0aW5nIE1vZGUiIHQpDQo7Ozs7IC4uLiB0byBiZSB1c2VkIHdpdGggYysr
LCBjIGFuZCBvYmplY3RpdmUtYyBmaWxlcw0KKHNldHEgYXV0by1tb2RlLWFs
aXN0DQogICAgICAoYXBwZW5kDQogICAgICAgJygoIlxcLkMkIiAgLiBjKyst
bW9kZSkNCgkgKCJcXC5IJCIgIC4gYysrLW1vZGUpDQoJICgiXFwuY2MkIiAu
IGMrKy1tb2RlKQ0KCSAoIlxcLmhoJCIgLiBjKystbW9kZSkNCgkgKCJcXC5j
JCIgIC4gYy1tb2RlKQ0KCSAoIlxcLmgkIiAgLiBjLW1vZGUpDQoJICgiXFwu
bSQiICAuIG9iamMtbW9kZSkNCgkgKSBhdXRvLW1vZGUtYWxpc3QpKQ0KOzs7
Ow0KOzs7OyBNeSBDIGFuZCBDKysgb3V0bGluZS1taW5vci1tb2RlIHNldHRp
bmdzICggSmFjZWsgTS4gSG9sZWN6ZWsgMTk5OSApLg0KOzs7Ow0KOzs7OyBP
dXRsaW5lIG1vZGUgaGVhZGluZ3MgYXJlIGxpbmVzIG9mIEMgYW5kIEMrKyBz
b3VyY2UgY29kZSB3aGljaCBjb250YWluLA0KOzs7OyBhdCBhbnkgcG9zaXRp
b24sIEMgb3IgQysrIGNvbW1lbnRhcnkgaGVhZGluZ3MgKCB0aGF0IGlzIGAv
Kicgb3IgYC8vJyApDQo7Ozs7IGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGFz
dGVyaXNrLCBoYXNoIG9yIHVuZGVyc2NvcmUgY2hhcmFjdGVycyAoIG1peGlu
Zw0KOzs7OyBvZiB0aGVtIGlzIGFsbG93ZWQgKSA6IG9uZSBjaGFyYWN0ZXIg
Zm9yIG1ham9yIGhlYWRpbmdzLCB0d28gY2hhcmFjdGVycw0KOzs7OyBmb3Ig
c3ViaGVhZGluZ3MsIGV0Yy4sIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAo
c3ViKWhlYWRpbmcgZGVzY3JpcHRpb24NCjs7OzsgKCBzZWUgYG15LWMtYysr
LW91dGxpbmUtcmVnZXhwJyBhbmQgYG15LWMtYysrLW91dGxpbmUtbGV2ZWwn
IGJlbG93ICkuDQo7Ozs7IEFsbCBvdGhlciBDIGFuZCBDKysgc291cmNlIGNv
ZGUgbGluZXMgYXJlIGJvZHkgbGluZXMuDQo7Ozs7DQo7OyhkZWZ2YXIgbXkt
Yy1jKystb3V0bGluZS1yZWdleHANCjs7ICAiXi4qL1tcKi9dWyBcdF0qXFwo
XFwpW1wqI19dK1xcKFsgXHRdKy4qJFxcfCRcXCkiKQ0KOzsoZGVmdW4gbXkt
Yy1jKystb3V0bGluZS1sZXZlbCAoKQ0KOzsgIChzYXZlLWV4Y3Vyc2lvbg0K
OzsgICAgKGxvb2tpbmctYXQgb3V0bGluZS1yZWdleHApDQo7OyAgICAoLSAo
bWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRjaC1lbmQgMSkpKSkNCjs7OzsNCjs7
OzsgT3V0bGluZSBtb2RlIGhlYWRpbmdzIGFyZSBsaW5lcyBvZiBDIGFuZCBD
Kysgc291cmNlIGNvZGUgd2hpY2ggaW4gdGhlDQo7Ozs7IGJlZ2lubmluZywg
bm90IGNvdW50aW5nIGxlYWRpbmcgd2hpdGUgc3BhY2UgY2hhcmFjdGVycywg
Y29udGFpbiBDIG9yDQo7Ozs7IEMrKyBjb21tZW50YXJ5IGhlYWRpbmdzICgg
dGhhdCBpcyBgLyonIG9yIGAvLycgKSBmb2xsb3dlZCBieSBvbmUgb3INCjs7
OzsgbW9yZSBhc3RlcmlzaywgaGFzaCBvciB1bmRlcnNjb3JlIGNoYXJhY3Rl
cnMgKCB0aGUgY291bnQgb2YgdGhlc2UNCjs7OzsgY2hhcmFjdGVycyBkb2Vz
IG5vdCBtYXR0ZXIsIG1peGluZyBvZiB0aGVtIGlzIGFsbG93ZWQgKSwgb3B0
aW9uYWxseQ0KOzs7OyBmb2xsb3dlZCBieSBhIChzdWIpaGVhZGluZyBkZXNj
cmlwdGlvbi4gVGhlIGhlYWRpbmcncyBuZXN0aW5nIGxldmVsIGlzDQo7Ozs7
IGNhbGN1bGF0ZWQgZnJvbSB0aGUgaW5kZW50YXRpb24gb2YgdGhlIEMgb3Ig
QysrIGNvbW1lbnRhcnkgKCBzZWUNCjs7OzsgYG15LWMtYysrLW91dGxpbmUt
cmVnZXhwJyBhbmQgYG15LWMtYysrLW91dGxpbmUtbGV2ZWwnIGJlbG93ICku
DQo7Ozs7IEFsbCBvdGhlciBDIGFuZCBDKysgc291cmNlIGNvZGUgbGluZXMg
YXJlIGJvZHkgbGluZXMuDQo7Ozs7DQooZGVmdmFyIG15LWMtYysrLW91dGxp
bmUtcmVnZXhwDQogICJeWyBcdF0qXFwoXFwpL1tcKi9dWyBcdF0qW1wqI19d
K1xcKFsgXHRdKy4qJFxcfCRcXCkiKQ0KKGRlZnVuIG15LWMtYysrLW91dGxp
bmUtbGV2ZWwgKCkNCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKGxvb2tpbmct
YXQgb3V0bGluZS1yZWdleHApDQogICAgKHN0cmluZy13aWR0aCAoYnVmZmVy
LXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRjaC1lbmQgMSkp
KSkpDQo7Ozs7DQo7Ozs7IEFsc28gdGhlIGZvbGRvdXQuZWwgaXMgYXV0b21h
dGljYWxseSBsb2FkZWQuIEl0IHByb3ZpZGVzIGZvbGRpbmcgZWRpdG9yDQo7
Ozs7IGV4dGVuc2lvbnMgYW5kIG1vdXNlIGJpbmRpbmdzIGZvciBlbnRlcmlu
ZyBhbmQgZXhpdGluZyBmb2xkcyBhbmQgZm9yDQo7Ozs7IHNob3dpbmcgYW5k
IGhpZGluZyB0ZXh0ICggTWV0YS1Db250cm9sLURvd24tTW91c2UtezEsMiwz
fSAtIHNlZSB0aGUNCjs7OzsgZm9sZG91dC5lbCBzb3VyY2UgY29kZSBmb3Ig
ZGV0YWlscyApLg0KOzs7Ow0KKGFkZC1ob29rICdjLW1vZGUtaG9vaw0KCSAg
KGZ1bmN0aW9uDQoJICAgKGxhbWJkYSAoKQ0KCSAgICAgKHNldHEgb3V0bGlu
ZS1yZWdleHAgbXktYy1jKystb3V0bGluZS1yZWdleHApDQoJICAgICAoc2V0
cSBvdXRsaW5lLWxldmVsICdteS1jLWMrKy1vdXRsaW5lLWxldmVsKQ0KCSAg
ICAgKG91dGxpbmUtbWlub3ItbW9kZSAxKQ0KCSAgICAgKHJlcXVpcmUgJ2Zv
bGRvdXQpKSkpDQooYWRkLWhvb2sgJ2MrKy1tb2RlLWhvb2sNCgkgIChmdW5j
dGlvbg0KCSAgIChsYW1iZGEgKCkNCgkgICAgIChzZXRxIG91dGxpbmUtcmVn
ZXhwIG15LWMtYysrLW91dGxpbmUtcmVnZXhwKQ0KCSAgICAgKHNldHEgb3V0
bGluZS1sZXZlbCAnbXktYy1jKystb3V0bGluZS1sZXZlbCkNCgkgICAgIChv
dXRsaW5lLW1pbm9yLW1vZGUgMSkNCgkgICAgIChyZXF1aXJlICdmb2xkb3V0
KSkpKQ0KOzs7Ow0KOzs7OyBFbmQgb2YgbXkgQyBhbmQgQysrIG91dGxpbmUt
bWlub3ItbW9kZSBzZXR0aW5ncy4NCjs7OzsNCjs7OzsgSGlnaGxpZ2h0aW5n
IGJ5IGZvbnQtbG9jay5lbCBtb2RlLg0KKGdsb2JhbC1mb250LWxvY2stbW9k
ZSB0KQ0KKHNldHEgZm9udC1sb2NrLXN1cHBvcnQtbW9kZSAnbGF6eS1sb2Nr
LW1vZGUpDQooc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQp
DQo7Ozs7DQo=
---559023410-1804928587-927200978=:9606--