---559023410-851401618-929533218=:5761
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi,
This is the ( completely unexpected ) fourth part of my MakeClass suite.
Please find attached a new version of the MakeClass.cxx macro.
The new root 2.22/05 ( just released ) contains a fix for a potential
problem that may arise with certain cases of ntuples. This fix is also
"imported" into the attached macro.
Users of root releases prior to 2.22/05 should comment out the line which
contains the string "SetAddress((void*)-1)", otherwise you may get
segmentation violations ( with certain cases of ntuples ).
All instructions / hints / advises / notes / warnings from previous three
parts of my MakeClass suite also apply ( there are no changes in example
files due to the newly introduced fix ).
Have fun,
Jacek.
---559023410-851401618-929533218=:5761
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MakeClass.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990616134018.5761B@uranos.cto.us.edu.pl>
Content-Description: MakeClass.cxx
Ly8gIyBNYWtlQ2xhc3MuY3h4IA0KDQovLyAjIEhvdyB0byBnZW5lcmF0ZSBh
bmQgdXNlIHRoZSBza2VsZXRvbiBhbmFseXNpcyBjbGFzcyBmb3IgYSBUcmVl
LiANCi8vDQovLyAgIFRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIHByb2R1Y2Vk
OiBjbGFzc25hbWUuaHh4IGFuZCBjbGFzc25hbWUuY3h4DQovLyAgIGlmIGNs
YXNzbmFtZSBpcyBOVUxMLCBjbGFzc25hbWUgd2lsbCBiZSBuYW1lb2Z0cmVl
Lg0KLy8NCi8vICAgVGhlIGdlbmVyYXRlZCBjb2RlIGluIGNsYXNzbmFtZS5o
eHggaW5jbHVkZXMgdGhlIGZvbGxvd2luZzoNCi8vICAgICAgLSBJZGVudGlm
aWNhdGlvbiBvZiB0aGUgb3JpZ2luYWwgVHJlZSBhbmQgSW5wdXQgRmlsZSBO
YW1lDQovLyAgICAgIC0gRGVmaW5pdGlvbiBvZiBhbmFseXNpcyBjbGFzcyAo
ZGF0YSBhbmQgZnVuY3Rpb25zKQ0KLy8gICAgICAtIHRoZSBmb2xsb3dpbmcg
Y2xhc3MgZnVuY3Rpb25zOg0KLy8gICAgICAgICAtIGNsYXNzbmFtZShDaGFy
X3QgKmZpbGVuYW1lID0gMCkgdG8gY29ubmVjdCBhIGZpbGUgd2l0aCBUcmVl
DQovLyAgICAgICAgIC0gY2xhc3NuYW1lKFRUcmVlICp0cmVlKSB0byBjb25u
ZWN0IGEgVHJlZQ0KLy8gICAgICAgICAtIH5jbGFzc25hbWUoKQ0KLy8gICAg
ICAgICAtIEdldEVudHJpZXMoKSB0byBnZXQgdGhlIG51bWJlciBvZiBlbnRy
aWVzIGluIFRyZWUNCi8vICAgICAgICAgLSBHZXRFbnRyeShJbnRfdCBlbnRy
eSkgdG8gcHJlcGFyZSB0aGUgZmlsbGluZyBvZiBkYXRhIGZyb20gZW50cnkN
Ci8vICAgICAgICAgLSBJbml0KFRUcmVlICp0cmVlKSB0byBpbml0aWFsaXpl
IHdpdGggYSBuZXcgVHJlZQ0KLy8gICAgICAgICAtIExvb3AoSW50X3QgKCph
bmFseXNpcykoY2xhc3NuYW1lICopKSB3aGljaCBsb29wcyBvdmVyIGFsbCBl
bnRyaWVzDQovLyAgICAgICAgICAgaW4gVHJlZSBjYWxsaW5nIHRoZSBnaXZl
biBhbmFseXNpcyBmdW5jdGlvbiBmb3IgZXZlcnkgZW50cnksIGlmDQovLyAg
ICAgICAgICAgdGhlIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybnMgYSBub24g
emVybyB2YWx1ZSwgYnJlYWtzIHRoZSBsb29wDQovLyAgICAgICAgIC0gU2hv
dyhJbnRfdCBlbnRyeSkgdG8gcmVhZCBhbmQgZHVtcCBlbnRyeSAoIGFsbCBi
cmFuY2hlcyApDQovLw0KLy8gICBUaGUgZ2VuZXJhdGVkIGNvZGUgaW4gY2xh
c3NuYW1lLmN4eCBpbmNsdWRlcyBvbmx5IHRoZSBza2VsZXRvbiBvZiB0aGUN
Ci8vICAgbWFpbiBhbmFseXNpcyBmdW5jdGlvbiBMb29wKCkuDQovLw0KLy8g
ICBUbyB1c2UgdGhlIE1ha2VDbGFzcyBmdW5jdGlvbjoNCi8vICAgICAgLSBj
b25uZWN0IHlvdXIgVHJlZSBmaWxlIChlZzogVEZpbGUgZigibXlmaWxlLnJv
b3QiKTspDQovLyAgICAgIC0gTWFrZUNsYXNzKFQsIk15Q2xhc3MiKTsNCi8v
ICAgd2hlcmUgVCBpcyB0aGUgbmFtZSBvZiB0aGUgVHJlZSBpbiB0aGUgbXlm
aWxlLnJvb3QgZmlsZSwgYW5kDQovLyAgIE15Q2xhc3MuaHh4LCBNeUNsYXNz
LmN4eCBhcmUgbmFtZXMgb2YgZmlsZXMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0
aW9uLg0KLy8gICBUaGVuLCBpbiBhIFJvb3Qgc2Vzc2lvbiwgeW91IGNhbiBk
bywgZm9yIGV4YW1wbGU6DQovLyAgICAgIFJvb3QgPiAuTCBNeUNsYXNzLmN4
eA0KLy8gICAgICBSb290ID4gTXlDbGFzcyB0DQovLyAgICAgIFJvb3QgPiB0
LkdldEVudHJ5KDEyKTsgLy8gUHJlcGFyZSB0byBmaWxsIHQgd2l0aCBlbnRy
eSBudW1iZXIgMTINCi8vICAgICAgUm9vdCA+IHQuU2hvdygpOyAgICAgICAv
LyBTaG93IHZhbHVlcyBvZiBlbnRyeSAxMg0KLy8gICAgICBSb290ID4gdC5T
aG93KDE2KTsgICAgIC8vIFJlYWQgYW5kIHNob3cgdmFsdWVzIG9mIGVudHJ5
IDE2DQovLyAgICAgIFJvb3QgPiB0Lkxvb3AoKTsgICAgICAgLy8gTG9vcCBv
dmVyIGFsbCBlbnRyaWVzDQovLw0KDQovLyAjIEludF90IE1ha2VDbGFzcyhU
VHJlZSAqdCwgY29uc3QgY2hhciAqY2xhc3NuYW1lID0gMCkgDQpJbnRfdCBN
YWtlQ2xhc3MoVFRyZWUgKnQsIGNvbnN0IGNoYXIgKmNsYXNzbmFtZSA9IDAp
DQp7DQogIC8vICMgQ2hlY2sgYWdhaW5zdCBhbiBpbnZhbGlkIFRyZWUgcG9p
bnRlciANCiAgaWYgKCF0KSByZXR1cm4gMTsNCiAgaWYgKCF0LT5Jc0EoKS0+
SW5oZXJpdHNGcm9tKCJUVHJlZSIpKSB7DQogICAgcHJpbnRmKCJBdHRlbXB0
IHRvIE1ha2VDbGFzcyBmb3IgYSBub24tVFRyZWUgb2JqZWN0XG4iKTsNCiAg
ICByZXR1cm4gMjsNCiAgfQ0KICANCiAgLy8gIyBDb25uZWN0IG91dHB1dCBm
aWxlcyANCiAgY2hhciAqdGhlYWQgPSBuZXcgY2hhclsyNTZdOw0KICANCiAg
aWYgKCFjbGFzc25hbWUpIGNsYXNzbmFtZSA9IHQtPkdldE5hbWUoKTsNCiAg
c3ByaW50Zih0aGVhZCwiJXMuaHh4IixjbGFzc25hbWUpOw0KICBGSUxFICpm
cCA9IGZvcGVuKHRoZWFkLCJ3Iik7DQogIGlmICghZnApIHsNCiAgICBwcmlu
dGYoIkNhbm5vdCBvcGVuIG91dHB1dCBmaWxlOiVzXG4iLHRoZWFkKTsNCiAg
ICBkZWxldGUgW10gdGhlYWQ7DQogICAgcmV0dXJuIDM7DQogIH0NCiAgY2hh
ciAqdGNpbXAgPSBuZXcgY2hhclsyNTZdOw0KICBzcHJpbnRmKHRjaW1wLCIl
cy5jeHgiLGNsYXNzbmFtZSk7DQogIEZJTEUgKmZwYyA9IGZvcGVuKHRjaW1w
LCJ3Iik7DQogIGlmICghZnBjKSB7DQogICAgcHJpbnRmKCJDYW5ub3Qgb3Bl
biBvdXRwdXQgZmlsZTolc1xuIix0Y2ltcCk7DQogICAgZGVsZXRlIFtdIHRo
ZWFkOw0KICAgIGRlbGV0ZSBbXSB0Y2ltcDsNCiAgICByZXR1cm4gMzsNCiAg
fQ0KICBjaGFyICp0cmVlZmlsZSA9IG5ldyBjaGFyWzEwMDBdOw0KICBpZiAo
dC0+R2V0RGlyZWN0b3J5KCkgJiYgdC0+R2V0RGlyZWN0b3J5KCktPkdldEZp
bGUoKSkNCiAgICBzdHJjcHkodHJlZWZpbGUsdC0+R2V0RGlyZWN0b3J5KCkt
PkdldEZpbGUoKS0+R2V0TmFtZSgpKTsNCiAgZWxzZSBzdHJjcHkodHJlZWZp
bGUsIk1lbW9yeSBEaXJlY3RvcnkiKTsNCiAgDQogIC8vICMgKioqIEdlbmVy
YXRlIGNsYXNzbmFtZS5oeHggKioqIA0KICAvLyAjIFByaW50IHRoZSBoZWFk
ZXIgDQogIFRPYmpBcnJheSAqbGVhdmVzID0gdC0+R2V0TGlzdE9mTGVhdmVz
KCk7DQogIEludF90IG5sZWF2ZXMgPSBsZWF2ZXMtPkdldEVudHJpZXNGYXN0
KCk7DQogIFREYXRpbWUgdGQ7DQogIGZwcmludGYoZnAsIi8vICMgXG4iKTsN
CiAgZnByaW50ZihmcCwiLy8gIyBUaGlzIGNsYXNzIGhhcyBiZWVuIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIFxuIik7DQogIGZwcmludGYoZnAsIi8vICMg
KCVzIGJ5IFJPT1QgdmVyc2lvbiVzKSBcbiIsdGQuQXNTdHJpbmcoKSxnUk9P
VC0+R2V0VmVyc2lvbigpKTsNCiAgZnByaW50ZihmcCwiLy8gIyBmcm9tIFRU
cmVlICVzLyVzIFxuIix0LT5HZXROYW1lKCksdC0+R2V0VGl0bGUoKSk7DQog
IGZwcmludGYoZnAsIi8vICMgZm91bmQgb24gZmlsZTogJXMgXG4iLHRyZWVm
aWxlKTsNCiAgZnByaW50ZihmcCwiLy8gIyBcbiIpOw0KICBmcHJpbnRmKGZw
LCJcbiIpOw0KICBmcHJpbnRmKGZwLCIvLyAjICoqKiBUaGUgJXMgY2xhc3Mg
aW50ZXJmYWNlICoqKiBcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwi
I2lmbmRlZiAlc19oeHhcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwi
I2RlZmluZSAlc19oeHhcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwi
XG4iKTsNCiAgZnByaW50ZihmcCwiLy8gIyBSZXF1aXJlZCBpbmNsdWRlcyBc
biIpOw0KICBmcHJpbnRmKGZwLCIjaWZuZGVmIF9fQ0lOVF9fXG4iKTsNCiAg
ZnByaW50ZihmcCwiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsNCiAgZnByaW50
ZihmcCwiI2luY2x1ZGUgPHN0cmVhbS5oPlxuIik7DQogIGZwcmludGYoZnAs
IiNpbmNsdWRlIFwiVFJPT1QuaFwiXG4iKTsNCiAgZnByaW50ZihmcCwiI2lu
Y2x1ZGUgXCJUVHJlZS5oXCJcbiIpOw0KICBmcHJpbnRmKGZwLCIjaW5jbHVk
ZSBcIlRGaWxlLmhcIlxuIik7DQogIGZwcmludGYoZnAsIiNpbmNsdWRlIFwi
QXBpLmhcIlxuIik7DQogIGZwcmludGYoZnAsIiNlbHNlXG4iKTsNCiAgZnBy
aW50ZihmcCwiY2xhc3MgVEJyYW5jaDtcbiIpOw0KICBmcHJpbnRmKGZwLCJj
bGFzcyBUVHJlZTtcbiIpOw0KICBmcHJpbnRmKGZwLCJjbGFzcyBURmlsZTtc
biIpOw0KICBmcHJpbnRmKGZwLCIjZW5kaWZcbiIpOw0KICBmcHJpbnRmKGZw
LCJcbiIpOw0KICBmcHJpbnRmKGZwLCIvLyAjIGNsYXNzICVzIFxuIixjbGFz
c25hbWUpOw0KICBmcHJpbnRmKGZwLCJjbGFzcyAlcyB7XG4iLGNsYXNzbmFt
ZSk7DQogIGZwcmludGYoZnAsInB1YmxpYzpcbiIpOw0KICBmcHJpbnRmKGZw
LCIgIC8vICMgcHVibGljIHZhcmlhYmxlcyBcbiIpOw0KICBmcHJpbnRmKGZw
LCIgIFRUcmVlICAgICAgICAgICAqZlRyZWU7IC8vIHBvaW50ZXIgdG8gdGhl
IGFuYWx5c2VkIFRUcmVlXG4iKTsNCiAgZnByaW50ZihmcCwiICBJbnRfdCAg
ICAgICAgICAgZkVudHJ5OyAvLyBjdXJyZW50IGVudHJ5IG51bWJlclxuIik7
DQogIA0KICAvLyAjIExvb3Agb24gYWxsIGxlYXZlcyB0byBnZW5lcmF0ZSBi
cmFuY2ggYW5kIGxlYWYgZGVjbGFyYXRpb25zIA0KICBmcHJpbnRmKGZwLCIg
IC8vICMgZGVjbGFyYXRpb24gb2YgYnJhbmNoZXMgYW5kIGxlYXZlcyBcbiIp
Ow0KICBJbnRfdCBsZW4sIGw7DQogIFRMZWFmICpsZWFmY291bnQ7DQogIFRM
ZWFmT2JqZWN0ICpsZWFmb2JqOw0KICBjaGFyICpibmFtZTsNCiAgY29uc3Qg
Y2hhciAqaGVhZE9LICA9ICIgICI7DQogIGNvbnN0IGNoYXIgKmhlYWRjb20g
PSAiICAvLyAiOw0KICBjb25zdCBjaGFyICpoZWFkOw0KICBjaGFyIGJyYW5j
aG5hbWVbNjRdOw0KICBjaGFyIGxlYWZuYW1lWzY0XTsNCiAgVE9iakFycmF5
IGJyYW5jaGVzKG5sZWF2ZXMvNCArIDEpOw0KICBJbnRfdCAqbGVhZlN0YXR1
cyA9IG5ldyBJbnRfdFtubGVhdmVzXTsNCiAgZm9yIChsPTA7bDxubGVhdmVz
O2wrKykgew0KICAgIGxlYWZTdGF0dXNbbF0gPSAwOw0KICAgIFRMZWFmICps
ZWFmID0gKFRMZWFmKilsZWF2ZXMtPlVuY2hlY2tlZEF0KGwpOw0KICAgIGxl
biA9IGxlYWYtPkdldExlbigpOw0KICAgIGxlYWZjb3VudCA9IGxlYWYtPkdl
dExlYWZDb3VudCgpOw0KICAgIFRCcmFuY2ggKmJyYW5jaCA9IGxlYWYtPkdl
dEJyYW5jaCgpOw0KICAgIGlmICghYnJhbmNoZXMuRmluZE9iamVjdChicmFu
Y2gpKSB7DQogICAgICBicmFuY2hlcy5BZGQoYnJhbmNoKTsNCiAgICAgIHN0
cmNweShicmFuY2huYW1lLGJyYW5jaC0+R2V0TmFtZSgpKTsNCiAgICAgIGJu
YW1lID0gc3Ryc3RyKGJyYW5jaG5hbWUsIlsiKTsNCiAgICAgIGlmIChibmFt
ZSkgKmJuYW1lID0gMDsNCiAgICAgIGJuYW1lID0gYnJhbmNobmFtZTsNCiAg
ICAgIHdoaWxlICgqYm5hbWUpIHtpZiAoKmJuYW1lID09ICcuJykgKmJuYW1l
PSdfJzsgYm5hbWUrKzt9DQogICAgICBmcHJpbnRmKGZwLCIgIC8vIGJyYW5j
aCAlc1xuIixicmFuY2gtPkdldE5hbWUoKSk7DQogICAgICBmcHJpbnRmKGZw
LCIgIEludF90ICAgICAgICAgICBJc1JlYWRfJXM7XG4iLGJyYW5jaG5hbWUp
Ow0KICAgICAgZnByaW50ZihmcCwiICBUQnJhbmNoICAgICAgICAgKmJfJXM7
XG4iLGJyYW5jaG5hbWUpOw0KICAgIH0gZWxzZSBsZWFmU3RhdHVzW2xdID0g
MTsNCiAgICBpZiAobGVhZmNvdW50KSBzdHJjcHkobGVhZm5hbWUsYnJhbmNo
LT5HZXROYW1lKCkpOw0KICAgIGVsc2UgICAgICAgICAgIHN0cmNweShsZWFm
bmFtZSxsZWFmLT5HZXRUaXRsZSgpKTsNCiAgICBibmFtZSA9IHN0cnN0cihs
ZWFmbmFtZSwiWyIpOw0KICAgIGlmIChibmFtZSkgKmJuYW1lID0gMDsNCiAg
ICBibmFtZSA9IGxlYWZuYW1lOw0KICAgIHdoaWxlICgqYm5hbWUpIHtpZiAo
KmJuYW1lID09ICcuJykgKmJuYW1lPSdfJzsgYm5hbWUrKzt9DQogICAgY2hh
ciAqdHdvZGltID0gKGNoYXIqKXN0cnN0cihsZWFmLT5HZXRUaXRsZSgpLCJd
WyIpOw0KICAgIGhlYWQgPSBoZWFkT0s7DQogICAgaWYgKGJyYW5jaC0+SXNB
KCkgPT0gVEJyYW5jaE9iamVjdDo6Q2xhc3MoKSkgew0KICAgICAgaWYgKGJy
YW5jaC0+R2V0TGlzdE9mQnJhbmNoZXMoKS0+R2V0RW50cmllc0Zhc3QoKSkg
Y29udGludWU7DQogICAgICBsZWFmb2JqID0gKFRMZWFmT2JqZWN0KilsZWFm
Ow0KICAgICAgaWYgKCFsZWFmb2JqLT5HZXRDbGFzcygpKSBoZWFkID0gaGVh
ZGNvbTsNCiAgICAgIGZwcmludGYoZnAsIiVzJS0xNXMgKmxfJXM7XG4iLGhl
YWQsbGVhZm9iai0+R2V0VHlwZU5hbWUoKSxsZWFmb2JqLT5HZXROYW1lKCkp
Ow0KICAgICAgZnByaW50ZihmcCwiJXMlLTE1cyAqJXMoKSB7IixoZWFkLGxl
YWZvYmotPkdldFR5cGVOYW1lKCksbGVhZm9iai0+R2V0TmFtZSgpKTsNCiAg
ICAgIGZwcmludGYoZnAsImlmIChJc1JlYWRfJXMpIHJldHVybiBsXyVzOyIs
YnJhbmNobmFtZSxsZWFmb2JqLT5HZXROYW1lKCkpOw0KICAgICAgZnByaW50
ZihmcCwiYl8lcy0+R2V0RW50cnkoZkVudHJ5KTsiLGJyYW5jaG5hbWUpOw0K
ICAgICAgZnByaW50ZihmcCwiSXNSZWFkXyVzPTE7cmV0dXJuIGxfJXM7fVxu
IixicmFuY2huYW1lLGxlYWZvYmotPkdldE5hbWUoKSk7DQogICAgICBjb250
aW51ZTsNCiAgICB9DQogICAgaWYgKGxlYWZjb3VudCkgew0KICAgICAgbGVu
ID0gbGVhZmNvdW50LT5HZXRNYXhpbXVtKCk7DQogICAgICBpZiAodHdvZGlt
KSB7DQoJZnByaW50ZihmcCwiJXMlLTE1cyBsXyVzWyVkXSVzO1xuIixoZWFk
LGxlYWYtPkdldFR5cGVOYW1lKCksbGVhZm5hbWUsbGVuLChjaGFyKikodHdv
ZGltICsgMSkpOw0KCS8vIGZwcmludGYoZnAsIiVzJS0xNXMgKCYlcygpKVsl
ZF0lcyB7IixoZWFkLGxlYWYtPkdldFR5cGVOYW1lKCksbGVhZm5hbWUsbGVu
LChjaGFyKikodHdvZGltICsgMSkpOw0KCWZwcmludGYoZnAsIiVzJS0xNXMg
KColcygpKSVzIHsiLGhlYWQsbGVhZi0+R2V0VHlwZU5hbWUoKSxsZWFmbmFt
ZSwoY2hhciopKHR3b2RpbSArIDEpKTsNCglmcHJpbnRmKGZwLCJpZiAoSXNS
ZWFkXyVzKSByZXR1cm4gbF8lczsiLGJyYW5jaG5hbWUsbGVhZm5hbWUpOw0K
CWZwcmludGYoZnAsImJfJXMtPkdldEVudHJ5KGZFbnRyeSk7IixicmFuY2hu
YW1lKTsNCglmcHJpbnRmKGZwLCJJc1JlYWRfJXM9MTtyZXR1cm4gbF8lczt9
XG4iLGJyYW5jaG5hbWUsbGVhZm5hbWUpOw0KICAgICAgfSBlbHNlIHsNCglm
cHJpbnRmKGZwLCIlcyUtMTVzIGxfJXNbJWRdO1xuIixoZWFkLGxlYWYtPkdl
dFR5cGVOYW1lKCksbGVhZm5hbWUsbGVuKTsNCgkvLyBmcHJpbnRmKGZwLCIl
cyUtMTVzICgmJXMoKSlbJWRdIHsiLGhlYWQsbGVhZi0+R2V0VHlwZU5hbWUo
KSxsZWFmbmFtZSxsZW4pOw0KCWZwcmludGYoZnAsIiVzJS0xNXMgKiVzKCkg
eyIsaGVhZCxsZWFmLT5HZXRUeXBlTmFtZSgpLGxlYWZuYW1lKTsNCglmcHJp
bnRmKGZwLCJpZiAoSXNSZWFkXyVzKSByZXR1cm4gbF8lczsiLGJyYW5jaG5h
bWUsbGVhZm5hbWUpOw0KCWZwcmludGYoZnAsImJfJXMtPkdldEVudHJ5KGZF
bnRyeSk7IixicmFuY2huYW1lKTsNCglmcHJpbnRmKGZwLCJJc1JlYWRfJXM9
MTtyZXR1cm4gbF8lczt9XG4iLGJyYW5jaG5hbWUsbGVhZm5hbWUpOw0KICAg
ICAgfQ0KICAgIH0gZWxzZSB7DQogICAgICBmcHJpbnRmKGZwLCIlcyUtMTVz
IGxfJXM7XG4iLGhlYWQsbGVhZi0+R2V0VHlwZU5hbWUoKSxsZWFmbmFtZSk7
DQogICAgICBmcHJpbnRmKGZwLCIlcyUtMTVzICYlcygpIHsiLGhlYWQsbGVh
Zi0+R2V0VHlwZU5hbWUoKSxsZWFmbmFtZSk7DQogICAgICBmcHJpbnRmKGZw
LCJpZiAoSXNSZWFkXyVzKSByZXR1cm4gbF8lczsiLGJyYW5jaG5hbWUsbGVh
Zm5hbWUpOw0KICAgICAgZnByaW50ZihmcCwiYl8lcy0+R2V0RW50cnkoZkVu
dHJ5KTsiLGJyYW5jaG5hbWUpOw0KICAgICAgZnByaW50ZihmcCwiSXNSZWFk
XyVzPTE7cmV0dXJuIGxfJXM7fVxuIixicmFuY2huYW1lLGxlYWZuYW1lKTsN
CiAgICB9DQogIH0NCiAgDQogIC8vICMgR2VuZXJhdGUgY2xhc3MgbWVtYmVy
IGZ1bmN0aW9ucyBwcm90b3R5cGVzIA0KICBmcHJpbnRmKGZwLCIgIFxuIik7
DQogIGZwcmludGYoZnAsIiAgLy8gIyBwdWJsaWMgZnVuY3Rpb25zIFxuIik7
DQogIGZwcmludGYoZnAsIiAgJXMoQ2hhcl90ICpmaWxlbmFtZSA9IDApO1xu
IixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCIgICVzKFRUcmVlICp0cmVl
KSB7aWYgKCF0cmVlKSAlcygpO2Vsc2UgSW5pdCh0cmVlKTt9XG4iLGNsYXNz
bmFtZSxjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCIgIH4lcygpIHs7fVxu
IixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCIgIFN0YXRfdCBHZXRFbnRy
aWVzKCkge2lmICghZlRyZWUpIHJldHVybiAwO3JldHVybiBmVHJlZS0+R2V0
RW50cmllcygpO31cbiIpOw0KICBmcHJpbnRmKGZwLCIgIEludF90IEdldEVu
dHJ5KEludF90IGVudHJ5KTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIHZvaWQg
SW5pdChUVHJlZSAqdHJlZSk7XG4iKTsNCiAgZnByaW50ZihmcCwiICBJbnRf
dCBMb29wKCk7XG4iKTsNCiAgZnByaW50ZihmcCwiICBJbnRfdCBMb29wKElu
dF90ICgqYW5hbHlzaXMpKCVzICopKTtcbiIsY2xhc3NuYW1lKTsNCiAgZnBy
aW50ZihmcCwiICB2b2lkIFNob3coSW50X3QgZW50cnkgPSAtMSk7XG4iKTsN
CiAgZnByaW50ZihmcCwifTtcbiIpOw0KICBmcHJpbnRmKGZwLCJcbiIpOw0K
ICBmcHJpbnRmKGZwLCIjZW5kaWZcbiIpOw0KICBmcHJpbnRmKGZwLCJcbiIp
Ow0KICANCiAgZnByaW50ZihmcCwiLy8gIyAqKiogVGhlICVzIGNsYXNzIGlt
cGxlbWVudGF0aW9uICoqKiBcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50Zihm
cCwiI2lmZGVmICVzX2N4eFxuIixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZw
LCJcbiIpOw0KICANCiAgLy8gIyBHZW5lcmF0ZSBjbGFzcyBjb25zdHJ1Y3Rv
ciBjbGFzc25hbWUoQ2hhcl90ICpmaWxlbmFtZSkgDQogIGZwcmludGYoZnAs
Ii8vICMgJXM6OiVzKENoYXJfdCAqZmlsZW5hbWUpIFxuIixjbGFzc25hbWUs
Y2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcCwiJXM6OiVzKENoYXJfdCAqZmls
ZW5hbWUpXG4iLGNsYXNzbmFtZSxjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZw
LCJ7XG4iKTsNCiAgZnByaW50ZihmcCwiICAvLyAjIElmIHBhcmFtZXRlciBm
aWxlbmFtZSBpcyBub3Qgc3BlY2lmaWVkIChvciB6ZXJvKSwgY29ubmVjdCB0
aGUgZmlsZSBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgdXNlZCB0byBn
ZW5lcmF0ZSB0aGlzIGNsYXNzICggJXMgKS4gXG4iLHRyZWVmaWxlKTsNCiAg
ZnByaW50ZihmcCwiICBpZiAoIWZpbGVuYW1lIHx8ICEoKmZpbGVuYW1lKSkg
e1xuIik7DQogIGZwcmludGYoZnAsIiAgICBmaWxlbmFtZSA9IFwiJXNcIjtc
biIsdHJlZWZpbGUpOw0KICBmcHJpbnRmKGZwLCIgIH1cbiIpOw0KICBmcHJp
bnRmKGZwLCIgIC8vICMgRmluZCB0aGUgcmVxdWlyZWQgZmlsZSBpbiBST09U
IGFuZCwgaWYgbm90IGZvdW5kLCBvcGVuIGl0LiBcbiIpOw0KICBmcHJpbnRm
KGZwLCIgIFRGaWxlICpmID0gKFRGaWxlKilnUk9PVC0+R2V0TGlzdE9mRmls
ZXMoKS0+RmluZE9iamVjdChmaWxlbmFtZSk7XG4iKTsNCiAgZnByaW50Zihm
cCwiICBpZiAoIWYpIHtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgZiA9IG5l
dyBURmlsZShmaWxlbmFtZSk7XG4iKTsNCiAgZnByaW50ZihmcCwiICB9XG4i
KTsNCiAgZnByaW50ZihmcCwiICAvLyAjIEZpbmQgdGhlICVzIHRyZWUgYW5k
IGluaXRpYWxpemUgb2JqZWN0LiBcbiIsdC0+R2V0TmFtZSgpKTsNCiAgZnBy
aW50ZihmcCwiICBUVHJlZSAqdCA9IChUVHJlZSopZ0RpcmVjdG9yeS0+R2V0
KFwiJXNcIik7XG4iLHQtPkdldE5hbWUoKSk7DQogIGZwcmludGYoZnAsIiAg
SW5pdCh0KTtcbiIpOw0KICBmcHJpbnRmKGZwLCJ9XG4iKTsNCiAgZnByaW50
ZihmcCwiXG4iKTsNCiAgDQogIC8vICMgR2VuZXJhdGUgY2xhc3MgbWVtYmVy
IGZ1bmN0aW9uIEdldEVudHJ5KEludF90IGVudHJ5KSANCiAgZnByaW50Zihm
cCwiLy8gIyBJbnRfdCAlczo6R2V0RW50cnkoSW50X3QgZW50cnkpIFxuIixj
bGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCJJbnRfdCAlczo6R2V0RW50cnko
SW50X3QgZW50cnkpXG4iLGNsYXNzbmFtZSk7DQogIGZwcmludGYoZnAsIntc
biIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgUHJlcGFyZSB0byByZWFkIHNw
ZWNpZmllZCBlbnRyeSBmcm9tIHRoZSBUcmVlLiBcbiIpOw0KICBmcHJpbnRm
KGZwLCIgIC8vICMgSW4gY2FzZSB0aGUgZW50cnkgaXMgYWxyZWFkeSByZWFk
LCBqdXN0IHJldHVybi4gXG4iKTsNCiAgZnByaW50ZihmcCwiICBpZiAoIWZU
cmVlKSByZXR1cm4gMDtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGlmIChmRW50
cnk9PWVudHJ5KSByZXR1cm4gMTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGZF
bnRyeSA9IGVudHJ5O1xuIik7DQogIGZwcmludGYoZnAsIiAgLy8gIyBTZXQg
YnJhbmNoIHN0YXR1c2VzIHRvIDAuIFxuIik7DQogIGZvciAobD0wO2w8bmxl
YXZlcztsKyspIHsNCiAgICBpZiAobGVhZlN0YXR1c1tsXSkgY29udGludWU7
DQogICAgVExlYWYgKmxlYWYgPSAoVExlYWYqKWxlYXZlcy0+VW5jaGVja2Vk
QXQobCk7DQogICAgVEJyYW5jaCAqYnJhbmNoID0gbGVhZi0+R2V0QnJhbmNo
KCk7DQogICAgc3RyY3B5KGJyYW5jaG5hbWUsYnJhbmNoLT5HZXROYW1lKCkp
Ow0KICAgIGJuYW1lID0gc3Ryc3RyKGJyYW5jaG5hbWUsIlsiKTsNCiAgICBp
ZiAoYm5hbWUpICpibmFtZSA9IDA7DQogICAgYm5hbWUgPSBicmFuY2huYW1l
Ow0KICAgIHdoaWxlICgqYm5hbWUpIHtpZiAoKmJuYW1lID09ICcuJykgKmJu
YW1lPSdfJzsgYm5hbWUrKzt9DQogICAgZnByaW50ZihmcCwiICBJc1JlYWRf
JXMgPSAwO1xuIixicmFuY2huYW1lKTsNCiAgfQ0KICBmcHJpbnRmKGZwLCIg
IC8vICMgV2UgYXJlIGRvbmUsIHJldHVybi4gXG4iKTsNCiAgZnByaW50Zihm
cCwiICByZXR1cm4gMTtcbiIpOw0KICBmcHJpbnRmKGZwLCJ9XG4iKTsNCiAg
ZnByaW50ZihmcCwiXG4iKTsNCiAgDQogIC8vICMgR2VuZXJhdGUgY2xhc3Mg
bWVtYmVyIGZ1bmN0aW9uIEluaXQoVFRyZWUgKnRyZWUpIA0KICBmcHJpbnRm
KGZwLCIvLyAjIHZvaWQgJXM6OkluaXQoVFRyZWUgKnRyZWUpIFxuIixjbGFz
c25hbWUpOw0KICBmcHJpbnRmKGZwLCJ2b2lkICVzOjpJbml0KFRUcmVlICp0
cmVlKVxuIixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCJ7XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAvLyAjIEluaXRpYWxpemUgcHVibGljIHZhcmlhYmxl
cy4gXG4iKTsNCiAgZnByaW50ZihmcCwiICBmVHJlZSA9IHRyZWU7XG4iKTsN
CiAgZnByaW50ZihmcCwiICBmRW50cnkgPSAtMTtcbiIpOw0KICBmcHJpbnRm
KGZwLCIgIGlmICghdHJlZSkgcmV0dXJuO1xuIik7DQogIGZwcmludGYoZnAs
IiAgLy8gIyBTZXQgYnJhbmNoIHN0YXR1c2VzIHRvIDAsIGdldCBicmFuY2gg
cG9pbnRlcnMsIFxuIik7DQogIGZwcmludGYoZnAsIiAgLy8gIyBzZXQgYnJh
bmNoIGFkZHJlc3Nlcy4gXG4iKTsNCiAgZnByaW50ZihmcCwiICBmVHJlZS0+
U2V0QnJhbmNoU3RhdHVzKFwiKlwiLDEpOyAvLyBlbmFibGUgYWxsIGJyYW5j
aGVzXG4iKTsNCiAgZm9yIChsPTA7bDxubGVhdmVzO2wrKykgew0KICAgIGlm
IChsZWFmU3RhdHVzW2xdKSBjb250aW51ZTsNCiAgICBUTGVhZiAqbGVhZiA9
IChUTGVhZiopbGVhdmVzLT5VbmNoZWNrZWRBdChsKTsNCiAgICBsZW4gPSBs
ZWFmLT5HZXRMZW4oKTsNCiAgICBsZWFmY291bnQgPSBsZWFmLT5HZXRMZWFm
Q291bnQoKTsNCiAgICBUQnJhbmNoICpicmFuY2ggPSBsZWFmLT5HZXRCcmFu
Y2goKTsNCiAgICBzdHJjcHkoYnJhbmNobmFtZSxicmFuY2gtPkdldE5hbWUo
KSk7DQogICAgYm5hbWUgPSBzdHJzdHIoYnJhbmNobmFtZSwiWyIpOw0KICAg
IGlmIChibmFtZSkgKmJuYW1lID0gMDsNCiAgICBibmFtZSA9IGJyYW5jaG5h
bWU7DQogICAgd2hpbGUgKCpibmFtZSkge2lmICgqYm5hbWUgPT0gJy4nKSAq
Ym5hbWU9J18nOyBibmFtZSsrO30NCiAgICBpZiAobGVhZmNvdW50KSBzdHJj
cHkobGVhZm5hbWUsYnJhbmNoLT5HZXROYW1lKCkpOw0KICAgIGVsc2UgICAg
ICAgICAgIHN0cmNweShsZWFmbmFtZSxsZWFmLT5HZXRUaXRsZSgpKTsNCiAg
ICBibmFtZSA9IHN0cnN0cihsZWFmbmFtZSwiWyIpOw0KICAgIGlmIChibmFt
ZSkgKmJuYW1lID0gMDsNCiAgICBibmFtZSA9IGxlYWZuYW1lOw0KICAgIHdo
aWxlICgqYm5hbWUpIHtpZiAoKmJuYW1lID09ICcuJykgKmJuYW1lPSdfJzsg
Ym5hbWUrKzt9DQogICAgZnByaW50ZihmcCwiICAvLyBicmFuY2ggJXNcbiIs
YnJhbmNoLT5HZXROYW1lKCkpOw0KICAgIGZwcmludGYoZnAsIiAgSXNSZWFk
XyVzID0gMDtcbiIsYnJhbmNobmFtZSk7DQogICAgaGVhZCA9IGhlYWRPSzsN
CiAgICBpZiAoYnJhbmNoLT5Jc0EoKSA9PSBUQnJhbmNoT2JqZWN0OjpDbGFz
cygpKSB7DQogICAgICBpZiAoYnJhbmNoLT5HZXRMaXN0T2ZCcmFuY2hlcygp
LT5HZXRFbnRyaWVzRmFzdCgpKSB7DQoJZnByaW50ZihmcCwiJXNiXyVzID0g
ZlRyZWUtPkdldEJyYW5jaChcIiVzXCIpO1xuIixoZWFkLGJyYW5jaG5hbWUs
YnJhbmNoLT5HZXROYW1lKCkpOw0KCWZwcmludGYoZnAsIiVzYl8lcy0+U2V0
QWRkcmVzcygodm9pZCopLTEpO1xuIixoZWFkLGJyYW5jaG5hbWUpOw0KCWZw
cmludGYoZnAsIiVzZlRyZWUtPlNldEJyYW5jaFN0YXR1cyhcIiVzXCIsMCk7
IC8vIGRpc2FibGUgdGhpcyBicmFuY2hcbiIsaGVhZCxicmFuY2gtPkdldE5h
bWUoKSk7DQoJY29udGludWU7DQogICAgICB9DQogICAgICBsZWFmb2JqID0g
KFRMZWFmT2JqZWN0KilsZWFmOw0KICAgICAgaWYgKCFsZWFmb2JqLT5HZXRD
bGFzcygpKSBoZWFkID0gaGVhZGNvbTsNCiAgICAgIHN0cmNweShsZWFmbmFt
ZSxicmFuY2huYW1lKTsNCiAgICB9DQogICAgZnByaW50ZihmcCwiJXNiXyVz
ID0gZlRyZWUtPkdldEJyYW5jaChcIiVzXCIpO1xuIixoZWFkLGJyYW5jaG5h
bWUsYnJhbmNoLT5HZXROYW1lKCkpOw0KICAgIGlmIChsZWFmY291bnQpIGxl
biA9IGxlYWZjb3VudC0+R2V0TWF4aW11bSgpICsgMTsNCiAgICBpZiAobGVu
ID4gMSkgZnByaW50ZihmcCwiJXNiXyVzLT5TZXRBZGRyZXNzKGxfJXMpO1xu
IixoZWFkLGJyYW5jaG5hbWUsbGVhZm5hbWUpOw0KICAgIGVsc2UgICAgICAg
ICBmcHJpbnRmKGZwLCIlc2JfJXMtPlNldEFkZHJlc3MoJmxfJXMpO1xuIixo
ZWFkLGJyYW5jaG5hbWUsbGVhZm5hbWUpOw0KICB9DQogIGZwcmludGYoZnAs
In1cbiIpOw0KICBmcHJpbnRmKGZwLCJcbiIpOw0KICANCiAgLy8gIyBHZW5l
cmF0ZSBjbGFzcyBtZW1iZXIgZnVuY3Rpb24gTG9vcChJbnRfdCAoKmFuYWx5
c2lzKShjbGFzc25hbWUgKikpIA0KICBmcHJpbnRmKGZwLCIvLyAjIEludF90
ICVzOjpMb29wKEludF90ICgqYW5hbHlzaXMpKCVzICopKSBcbiIsY2xhc3Nu
YW1lLGNsYXNzbmFtZSk7DQogIGZwcmludGYoZnAsIkludF90ICVzOjpMb29w
KEludF90ICgqYW5hbHlzaXMpKCVzICopKVxuIixjbGFzc25hbWUsY2xhc3Nu
YW1lKTsNCiAgZnByaW50ZihmcCwie1xuIik7DQogIGZwcmludGYoZnAsIiAg
Ly8gIyBFeGVjdXRlIHRoZSBhbmFseXNpcyBmdW5jdGlvbiBmb3IgZXZlcnkg
ZW50cnkuIEluIGNhc2UgdGhlIFxuIik7DQogIGZwcmludGYoZnAsIiAgLy8g
IyBhbmFseXNpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uIHplcm8gdmFsdWUs
IGJyZWFrIHRoZSBsb29wLiBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGlmICgh
ZlRyZWUgfHwgIWFuYWx5c2lzKSByZXR1cm4gMDtcbiIpOw0KICBmcHJpbnRm
KGZwLCIgIFxuIik7DQogIGZwcmludGYoZnAsIiAgLy8gIyBMb2NhbCB2YXJp
YWJsZXMgKCBjb21tb24gdG8gY29tcGlsZWQgYW5kIGludGVycHJldGVkIGNv
ZGUgKS4gXG4iKTsNCiAgZnByaW50ZihmcCwiICBTdGF0X3QgbmVudHJpZXMg
PSBHZXRFbnRyaWVzKCk7IC8vIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBU
cmVlLlxuIik7DQogIGZwcmludGYoZnAsIiAgSW50X3QgaWVudHJpZXMgPSAw
OyAvLyBIb3cgbWFueSBlbnRyaWVzIHdlcmUgYW5hbHlzZWQuXG4iKTsNCiAg
ZnByaW50ZihmcCwiICBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgVGhp
cyBpcyB0aGUgZW50cnkgbG9vcCBpbiBjb21waWxlZCBjb2RlLiBcbiIpOw0K
ICBmcHJpbnRmKGZwLCIjaWZuZGVmIF9fQ0lOVF9fXG4iKTsNCiAgZnByaW50
ZihmcCwiICBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgRmlyc3QgZGVm
aW5lIHNvbWUgbG9jYWwgdmFyaWFibGVzIGFuZCBvYmplY3RzLiBcbiIpOw0K
ICBmcHJpbnRmKGZwLCIgIGNoYXIgdGVtcFs2NF07IC8vIElOVEVSUFJFVEVE
RlVOQ1xuIik7DQogIGZwcmludGYoZnAsIiAgbG9uZyBvZmZzZXQgPSAwOyAv
LyBJTlRFUlBSRVRFREZVTkNcbiIpOw0KICBmcHJpbnRmKGZwLCIgIEdfX0Ns
YXNzSW5mbyBnbG9iYWxzY29wZTsgLy8gSU5URVJQUkVURURGVU5DXG4iKTsN
CiAgZnByaW50ZihmcCwiICBHX19DYWxsRnVuYyBmdW5jOyAvLyBJTlRFUlBS
RVRFREZVTkMsIENPTVBJTEVESU5URVJGQUNFTUVUSE9ELCBCWVRFQ09ERUZV
TkNcbiIpOw0KICBmcHJpbnRmKGZwLCIgIFxuIik7DQogIGZwcmludGYoZnAs
IiAgLy8gIyBUaGVuIGV4ZWN1dGUgdGhlIGxvb3AuIFxuIik7DQogIGZwcmlu
dGYoZnAsIiAgc3dpdGNoKEdfX2lzaW50ZXJwcmV0ZWRwMmYoKCh2b2lkKilh
bmFseXNpcykpKSB7XG4iKTsNCiAgZnByaW50ZihmcCwiICAgIC8vICMgdXNp
bmcgZnVuY3Rpb24gY2FsbCBhcyBzdHJpbmcgXG4iKTsNCiAgZnByaW50Zihm
cCwiICBjYXNlIEdfX0lOVEVSUFJFVEVERlVOQzpcbiIpOw0KICBmcHJpbnRm
KGZwLCIgICAgc3ByaW50Zih0ZW1wLFwiKCVzICopJSVwXCIsKHZvaWQqKXRo
aXMpO1xuIixjbGFzc25hbWUpOw0KICBmcHJpbnRmKGZwLCIgICAgZnVuYy5T
ZXRGdW5jKCZnbG9iYWxzY29wZSwoY2hhciopYW5hbHlzaXMsdGVtcCwmb2Zm
c2V0KTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgZm9yIChJbnRfdCBpPTA7
IGk8bmVudHJpZXM7IGkrKykge1xuIik7DQogIGZwcmludGYoZnAsIiAgICAg
IGllbnRyaWVzICs9IEdldEVudHJ5KGkpO1xuIik7DQogIGZwcmludGYoZnAs
IiAgICAgIGlmIChmdW5jLkV4ZWNJbnQoKHZvaWQqKU5VTEwpKSBicmVhaztc
biIpOw0KICBmcHJpbnRmKGZwLCIgICAgfVxuIik7DQogIGZwcmludGYoZnAs
IiAgICBicmVhaztcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgLy8gIyB1c2lu
ZyBpbnRlcmZhY2UgbWV0aG9kIFxuIik7DQogIGZwcmludGYoZnAsIiAgY2Fz
ZSBHX19DT01QSUxFRElOVEVSRkFDRU1FVEhPRDpcbiIpOw0KICBmcHJpbnRm
KGZwLCIgICAgZnVuYy5TZXRGdW5jKChHX19JbnRlcmZhY2VNZXRob2QpYW5h
bHlzaXMpO1xuIik7DQogIGZwcmludGYoZnAsIiAgICBmdW5jLlNldEFyZygo
KGxvbmcpdGhpcykpO1xuIik7DQogIGZwcmludGYoZnAsIiAgICBmb3IgKElu
dF90IGk9MDsgaTxuZW50cmllczsgaSsrKSB7XG4iKTsNCiAgZnByaW50Zihm
cCwiICAgICAgaWVudHJpZXMgKz0gR2V0RW50cnkoaSk7XG4iKTsNCiAgZnBy
aW50ZihmcCwiICAgICAgaWYgKGZ1bmMuRXhlY0ludCgodm9pZCopTlVMTCkp
IGJyZWFrO1xuIik7DQogIGZwcmludGYoZnAsIiAgICB9XG4iKTsNCiAgZnBy
aW50ZihmcCwiICAgIGJyZWFrO1xuIik7DQogIGZwcmludGYoZnAsIiAgICAv
LyAjIGJ5dGVjb2RlIHZlcnNpb24gb2YgaW50ZXJwcmV0ZWQgZnVuYyBcbiIp
Ow0KICBmcHJpbnRmKGZwLCIgIGNhc2UgR19fQllURUNPREVGVU5DOlxuIik7
DQogIGZwcmludGYoZnAsIiAgICBmdW5jLlNldEJ5dGVjb2RlKChzdHJ1Y3Qg
R19fYnl0ZWNvZGVmdW5jKilhbmFseXNpcyk7XG4iKTsNCiAgZnByaW50Zihm
cCwiICAgIGZ1bmMuU2V0QXJnKCgobG9uZyl0aGlzKSk7XG4iKTsNCiAgZnBy
aW50ZihmcCwiICAgIGZvciAoSW50X3QgaT0wOyBpPG5lbnRyaWVzOyBpKysp
IHtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgICBpZW50cmllcyArPSBHZXRF
bnRyeShpKTtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgICBpZiAoZnVuYy5F
eGVjSW50KCh2b2lkKilOVUxMKSkgYnJlYWs7XG4iKTsNCiAgZnByaW50Zihm
cCwiICAgIH1cbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgYnJlYWs7XG4iKTsN
CiAgZnByaW50ZihmcCwiICAgIC8vICMgdXNpbmcgdHJ1ZSBwb2ludGVyIHRv
IGZ1bmN0aW9uIFxuIik7DQogIGZwcmludGYoZnAsIiAgY2FzZSBHX19DT01Q
SUxFRFRSVUVGVU5DOlxuIik7DQogIGZwcmludGYoZnAsIiAgICAvLyAjIHBv
aW50ZXIgbm90IGluIENJTlQgZ2xvYmFsIGZ1bmN0aW9uIHRhYmxlIFxuIik7
DQogIGZwcmludGYoZnAsIiAgY2FzZSBHX19VTktOT1dORlVOQzpcbiIpOw0K
ICBmcHJpbnRmKGZwLCIgICAgZm9yIChJbnRfdCBpPTA7IGk8bmVudHJpZXM7
IGkrKykge1xuIik7DQogIGZwcmludGYoZnAsIiAgICAgIGllbnRyaWVzICs9
IEdldEVudHJ5KGkpO1xuIik7DQogIGZwcmludGYoZnAsIiAgICAgIGlmICgo
KmFuYWx5c2lzKSh0aGlzKSkgYnJlYWs7XG4iKTsNCiAgZnByaW50ZihmcCwi
ICAgIH1cbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgYnJlYWs7XG4iKTsNCiAg
ZnByaW50ZihmcCwiICAgIC8vICMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVu
ICggdW5rbm93biBraW5kIG9mIHBvaW50ZXIgKSBcbiIpOw0KICBmcHJpbnRm
KGZwLCIgIGRlZmF1bHQ6XG4iKTsNCiAgZnByaW50ZihmcCwiICAgIGNlcnIg
PDwgXCJFcnJvciA6IFVua25vd24ga2luZCBvZiBwb2ludGVyIHRvIGZ1bmN0
aW9uXCIgPDwgZW5kbDtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgYnJlYWs7
XG4iKTsNCiAgZnByaW50ZihmcCwiICB9XG4iKTsNCiAgZnByaW50ZihmcCwi
ICBcbiIpOw0KICBmcHJpbnRmKGZwLCIgIC8vICMgVGhpcyBpcyB0aGUgZW50
cnkgbG9vcCBpbiBpbnRlcnByZXRlZCBjb2RlLiBcbiIpOw0KICBmcHJpbnRm
KGZwLCIjZWxzZVxuIik7DQogIGZwcmludGYoZnAsIiAgXG4iKTsNCiAgZnBy
aW50ZihmcCwiICAvLyAjIGN1cnJlbnQgQ0lOVCBjYW5ub3QgZGVhbCB3aXRo
IHRoaXMgXG4iKTsNCiAgZnByaW50ZihmcCwiI2lmIDBcbiIpOw0KICBmcHJp
bnRmKGZwLCIgIGZvciAoSW50X3QgaT0wOyBpPG5lbnRyaWVzOyBpKyspIHtc
biIpOw0KICBmcHJpbnRmKGZwLCIgICAgaWVudHJpZXMgKz0gR2V0RW50cnko
aSk7XG4iKTsNCiAgZnByaW50ZihmcCwiICAgIGlmICgoKmFuYWx5c2lzKSh0
aGlzKSkgYnJlYWs7IC8vIGN1cnJlbnQgQ0lOVCBjYW5ub3QgZGVhbCB3aXRo
IGl0XG4iKTsNCiAgZnByaW50ZihmcCwiICB9XG4iKTsNCiAgZnByaW50Zihm
cCwiICAvLyAjIHNvIHdlIG5lZWQgdG8gdXNlIHRoaXMgXG4iKTsNCiAgZnBy
aW50ZihmcCwiI2Vsc2VcbiIpOw0KICBmcHJpbnRmKGZwLCIgIEludF90IHJl
c3VsdDtcbiIpOw0KICBmcHJpbnRmKGZwLCIgIGZvciAoSW50X3QgaT0wOyBp
PG5lbnRyaWVzOyBpKyspIHtcbiIpOw0KICBmcHJpbnRmKGZwLCIgICAgaWVu
dHJpZXMgKz0gR2V0RW50cnkoaSk7XG4iKTsNCiAgZnByaW50ZihmcCwiICAg
IHJlc3VsdCA9ICgqYW5hbHlzaXMpKHRoaXMpO1xuIik7DQogIGZwcmludGYo
ZnAsIiAgICBpZiAocmVzdWx0KSBicmVhaztcbiIpOw0KICBmcHJpbnRmKGZw
LCIgIH1cbiIpOw0KICBmcHJpbnRmKGZwLCIjZW5kaWZcbiIpOw0KICBmcHJp
bnRmKGZwLCIgIFxuIik7DQogIGZwcmludGYoZnAsIiNlbmRpZlxuIik7DQog
IGZwcmludGYoZnAsIiAgXG4iKTsNCiAgZnByaW50ZihmcCwiICAvLyAjIFdl
IGFyZSBkb25lLCByZXR1cm4uIFxuIik7DQogIGZwcmludGYoZnAsIiAgcmV0
dXJuIGllbnRyaWVzO1xuIik7DQogIGZwcmludGYoZnAsIn1cbiIpOw0KICBm
cHJpbnRmKGZwLCJcbiIpOw0KICANCiAgLy8gIyBHZW5lcmF0ZSBjbGFzcyBt
ZW1iZXIgZnVuY3Rpb24gU2hvdyhJbnRfdCBlbnRyeSkgDQogIGZwcmludGYo
ZnAsIi8vICMgdm9pZCAlczo6U2hvdyhJbnRfdCBlbnRyeSkgXG4iLGNsYXNz
bmFtZSk7DQogIGZwcmludGYoZnAsInZvaWQgJXM6OlNob3coSW50X3QgZW50
cnkpXG4iLGNsYXNzbmFtZSk7DQogIGZwcmludGYoZnAsIntcbiIpOw0KICBm
cHJpbnRmKGZwLCIgIC8vICMgUHJpbnQgY29udGVudHMgb2YgZW50cnkgKCBh
bGwgYnJhbmNoZXMgKS4gXG4iKTsNCiAgZnByaW50ZihmcCwiICAvLyAjIElm
IGVudHJ5IGlzIG5vdCBzcGVjaWZpZWQsIHByaW50IGN1cnJlbnQgZW50cnku
IFxuIik7DQogIGZwcmludGYoZnAsIiAgaWYgKCFmVHJlZSkgcmV0dXJuO1xu
Iik7DQogIGZwcmludGYoZnAsIiAgaWYgKGVudHJ5Pj0wKSBmRW50cnkgPSBl
bnRyeTsgZWxzZSBlbnRyeSA9IGZFbnRyeTtcbiIpOw0KICBmcHJpbnRmKGZw
LCIgIGlmIChmRW50cnk8MCkgcmV0dXJuO1xuIik7DQogIGZwcmludGYoZnAs
IiAgLy8gIyBTZXQgYnJhbmNoIHN0YXR1c2VzIHRvIDEuIFxuIik7DQogIGZw
cmludGYoZnAsIiAgZlRyZWUtPlNldEJyYW5jaFN0YXR1cyhcIipcIiwxKTsg
Ly8gZW5hYmxlIGFsbCBicmFuY2hlc1xuIik7DQogIGZvciAobD0wO2w8bmxl
YXZlcztsKyspIHsNCiAgICBpZiAobGVhZlN0YXR1c1tsXSkgY29udGludWU7
DQogICAgVExlYWYgKmxlYWYgPSAoVExlYWYqKWxlYXZlcy0+VW5jaGVja2Vk
QXQobCk7DQogICAgVEJyYW5jaCAqYnJhbmNoID0gbGVhZi0+R2V0QnJhbmNo
KCk7DQogICAgc3RyY3B5KGJyYW5jaG5hbWUsYnJhbmNoLT5HZXROYW1lKCkp
Ow0KICAgIGJuYW1lID0gc3Ryc3RyKGJyYW5jaG5hbWUsIlsiKTsNCiAgICBp
ZiAoYm5hbWUpICpibmFtZSA9IDA7DQogICAgYm5hbWUgPSBicmFuY2huYW1l
Ow0KICAgIHdoaWxlICgqYm5hbWUpIHtpZiAoKmJuYW1lID09ICcuJykgKmJu
YW1lPSdfJzsgYm5hbWUrKzt9DQogICAgaWYgKChicmFuY2gtPklzQSgpID09
IFRCcmFuY2hPYmplY3Q6OkNsYXNzKCkpICYmDQoJKGJyYW5jaC0+R2V0TGlz
dE9mQnJhbmNoZXMoKS0+R2V0RW50cmllc0Zhc3QoKSkpIHsNCiAgICAgIGZw
cmludGYoZnAsIiAgSXNSZWFkXyVzID0gMDtcbiIsYnJhbmNobmFtZSk7DQog
ICAgICBmcHJpbnRmKGZwLCIgIGZUcmVlLT5TZXRCcmFuY2hTdGF0dXMoXCIl
c1wiLDApOyAvLyBkaXNhYmxlIHRoaXMgYnJhbmNoXG4iLGJyYW5jaC0+R2V0
TmFtZSgpKTsNCiAgICB9IGVsc2UgZnByaW50ZihmcCwiICBJc1JlYWRfJXMg
PSAxO1xuIixicmFuY2huYW1lKTsNCiAgfQ0KICBmcHJpbnRmKGZwLCIgIC8v
ICMgU2hvdyBlbnRyeS4gXG4iKTsNCiAgZnByaW50ZihmcCwiICBmVHJlZS0+
U2hvdyhmRW50cnkpO1xuIik7DQogIGZwcmludGYoZnAsIn1cbiIpOw0KICBm
cHJpbnRmKGZwLCJcbiIpOw0KICANCiAgZnByaW50ZihmcCwiI2VuZGlmXG4i
KTsNCiAgZnByaW50ZihmcCwiXG4iKTsNCiAgZnByaW50ZihmcCwiLy8gIyBF
bmQgb2YgZmlsZSAlcyBcbiIsdGhlYWQpOw0KICANCiAgLy8gIyAqKiogR2Vu
ZXJhdGUgY2xhc3NuYW1lLmN4eCAqKiogDQogIC8vICMgUHJpbnQgdGhlIGhl
YWRlciANCiAgZnByaW50ZihmcGMsIi8vICMgSW5jbHVkZSB0aGUgJXMgY2xh
c3MgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24uIFxuIixjbGFzc25hbWUpOw0K
ICBmcHJpbnRmKGZwYywiI2lmbmRlZiAlc19jeHhcbiIsY2xhc3NuYW1lKTsN
CiAgZnByaW50ZihmcGMsIiNkZWZpbmUgJXNfY3h4XG4iLGNsYXNzbmFtZSk7
DQogIGZwcmludGYoZnBjLCIjZW5kaWZcbiIpOw0KICBmcHJpbnRmKGZwYywi
I2luY2x1ZGUgXCIlc1wiXG4iLHRoZWFkKTsNCiAgZnByaW50ZihmcGMsIiN1
bmRlZiAlc19jeHhcbiIsY2xhc3NuYW1lKTsNCiAgZnByaW50ZihmcGMsIlxu
Iik7DQogIGZwcmludGYoZnBjLCIvLyAjIFBsYWNlIGhlcmUgYWxsIFJPT1Qg
cmVsYXRlZCBpbmNsdWRlcyB0aGF0IHlvdSBuZWVkLiBcbiIpOw0KICBmcHJp
bnRmKGZwYywiI2lmbmRlZiBfX0NJTlRfX1xuXG4iKTsNCiAgZnByaW50Zihm
cGMsIiNlbmRpZlxuIik7DQogIGZwcmludGYoZnBjLCJcbiIpOw0KICANCiAg
Ly8gIyBHZW5lcmF0ZSBjbGFzcyBtZW1iZXIgZnVuY3Rpb24gTG9vcCgpIA0K
ICBmcHJpbnRmKGZwYywiLy8gIyBJbnRfdCAlczo6TG9vcCgpIFxuIixjbGFz
c25hbWUpOw0KICBmcHJpbnRmKGZwYywiSW50X3QgJXM6Okxvb3AoKVxuIixj
bGFzc25hbWUpOw0KICBmcHJpbnRmKGZwYywie1xuIik7DQogIC8vIGZwcmlu
dGYoZnBjLCIgIGlmICghZlRyZWUpIHJldHVybjtcbiAgXG4iKTsNCiAgZnBy
aW50ZihmcGMsIiAgLy8gIyBMb2NhbCB2YXJpYWJsZXMuIFxuIik7DQogIGZw
cmludGYoZnBjLCIgIFN0YXRfdCBuZW50cmllcyA9IEdldEVudHJpZXMoKTsg
Ly8gTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIFRyZWUuXG4iKTsNCiAgZnBy
aW50ZihmcGMsIiAgSW50X3QgaWVudHJpZXMgPSAwOyAvLyBIb3cgbWFueSBl
bnRyaWVzIHdlcmUgYW5hbHlzZWQuXG4iKTsNCiAgZnByaW50ZihmcGMsIiAg
XG4iKTsNCiAgZnByaW50ZihmcGMsIiAgLy8gIyBUaGlzIGlzIHRoZSBsb29w
IHNrZWxldG9uLiBcbiIpOw0KICBmcHJpbnRmKGZwYywiICBmb3IgKEludF90
IGk9MDsgaTxuZW50cmllczsgaSsrKSB7XG4iKTsNCiAgZnByaW50ZihmcGMs
IiAgICBpZW50cmllcyArPSBHZXRFbnRyeShpKTtcbiIpOw0KICBmcHJpbnRm
KGZwYywiICAgIFxuIik7DQogIGZwcmludGYoZnBjLCIgIH1cbiIpOw0KICBm
cHJpbnRmKGZwYywiICBcbiIpOw0KICBmcHJpbnRmKGZwYywiICAvLyAjIFdl
IGFyZSBkb25lLCByZXR1cm4uIFxuIik7DQogIGZwcmludGYoZnBjLCIgIHJl
dHVybiBpZW50cmllcztcbiIpOw0KICBmcHJpbnRmKGZwYywifVxuIik7DQog
IGZwcmludGYoZnBjLCJcbiIpOw0KICBmcHJpbnRmKGZwYywiLy8gIyBFbmQg
b2YgZmlsZSAlcyBcbiIsdGNpbXApOw0KICANCiAgLy8gIyBXZSBhcmUgZG9u
ZSANCiAgcHJpbnRmKCJGaWxlczogJXMgYW5kICVzIGdlbmVyYXRlZCBmcm9t
IFRyZWU6ICVzXG4iLHRoZWFkLHRjaW1wLHQtPkdldE5hbWUoKSk7DQogIGRl
bGV0ZSBbXSB0aGVhZDsNCiAgZGVsZXRlIFtdIHRjaW1wOw0KICBkZWxldGUg
W10gdHJlZWZpbGU7DQogIGZjbG9zZShmcCk7DQogIGZjbG9zZShmcGMpOw0K
ICANCiAgcmV0dXJuIDA7DQp9DQoNCi8vICMgRW5kIG9mIGZpbGUgTWFrZUNs
YXNzLmN4eCANCg==
---559023410-851401618-929533218=:5761--