LyoKICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL3NyYy9mY2RiZy5jLHYgMS4xMCAyMDAyLzA4LzIyIDE4OjUzOjIyIGtlaXRocCBFeHAgJAogKgogKiBDb3B5cmlnaHQgqSAyMDAwIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAqCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAogKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwogKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBLZWl0aCBQYWNrYXJkIG5vdCBiZSB1c2VkIGluCiAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAogKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBtYWtlcyBubwogKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQKICogaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KICoKICogS0VJVEggUEFDS0FSRCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwogKiBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAogKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCiAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSAiZmNpbnQuaCIKCnZvaWQKRmNWYWx1ZVByaW50IChjb25zdCBGY1ZhbHVlIHYpCnsKICAgIEZjU3RyQnVmCWJ1ZjsKICAgIEZjQ2hhcjgJaW5pdF9idWZbMTAyNF07CiAgICAKICAgIHN3aXRjaCAodi50eXBlKSB7CiAgICBjYXNlIEZjVHlwZVZvaWQ6CglwcmludGYgKCIgPHZvaWQ+Iik7CglicmVhazsKICAgIGNhc2UgRmNUeXBlSW50ZWdlcjoKCXByaW50ZiAoIiAlZChpKSIsIHYudS5pKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVEb3VibGU6CglwcmludGYgKCIgJWcoZikiLCB2LnUuZCk7CglicmVhazsKICAgIGNhc2UgRmNUeXBlU3RyaW5nOgoJcHJpbnRmICgiIFwiJXNcIiIsIHYudS5zKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVCb29sOgoJcHJpbnRmICgiICVzIiwgdi51LmIgPyAiRmNUcnVlIiA6ICJGY0ZhbHNlIik7CglicmVhazsKICAgIGNhc2UgRmNUeXBlTWF0cml4OgoJcHJpbnRmICgiICglZiAlZjsgJWYgJWYpIiwgdi51Lm0tPnh4LCB2LnUubS0+eHksIHYudS5tLT55eCwgdi51Lm0tPnl5KTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVDaGFyU2V0OgkvKiBYWFggKi8KCXByaW50ZiAoIiBzZXQiKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVMYW5nU2V0OgoJRmNTdHJCdWZJbml0ICgmYnVmLCBpbml0X2J1Ziwgc2l6ZW9mIChpbml0X2J1ZikpOwogICAgICAgIGlmIChGY05hbWVVbnBhcnNlTGFuZ1NldCAoJmJ1Ziwgdi51LmwpICYmIEZjU3RyQnVmQ2hhciAoJmJ1ZiwnXDAnKSkKCSAgICBwcmludGYgKCIgJXMiLCBidWYuYnVmKTsKCWVsc2UKCSAgICBwcmludGYgKCJsYW5nc2V0IChhbGxvYyBlcnJvcikiKTsKCUZjU3RyQnVmRGVzdHJveSAoJmJ1Zik7CglicmVhazsKICAgIGNhc2UgRmNUeXBlRlRGYWNlOgoJcHJpbnRmICgiIGZhY2UiKTsKCWJyZWFrOwogICAgfQp9Cgp2b2lkCkZjVmFsdWVMaXN0UHJpbnQgKGNvbnN0IEZjVmFsdWVMaXN0ICpsKQp7CiAgICBmb3IgKDsgbDsgbCA9IGwtPm5leHQpCiAgICB7CglGY1ZhbHVlUHJpbnQgKGwtPnZhbHVlKTsKCXN3aXRjaCAobC0+YmluZGluZykgewoJY2FzZSBGY1ZhbHVlQmluZGluZ1dlYWs6CgkgICAgcHJpbnRmICgiKHcpIik7CgkgICAgYnJlYWs7CgljYXNlIEZjVmFsdWVCaW5kaW5nU3Ryb25nOgoJICAgIHByaW50ZiAoIihzKSIpOwoJICAgIGJyZWFrOwoJY2FzZSBGY1ZhbHVlQmluZGluZ1NhbWU6CgkgICAgcHJpbnRmICgiKD0pIik7CgkgICAgYnJlYWs7Cgl9CiAgICB9Cn0KCnZvaWQKRmNQYXR0ZXJuUHJpbnQgKGNvbnN0IEZjUGF0dGVybiAqcCkKewogICAgaW50CQkgICAgaTsKICAgIEZjUGF0dGVybkVsdCAgICplOwogICAgCiAgICBpZiAoIXApCiAgICB7CglwcmludGYgKCJOdWxsIHBhdHRlcm5cbiIpOwoJcmV0dXJuOwogICAgfQogICAgcHJpbnRmICgiUGF0dGVybiAlZCBvZiAlZFxuIiwgcC0+bnVtLCBwLT5zaXplKTsKICAgIGZvciAoaSA9IDA7IGkgPCBwLT5udW07IGkrKykKICAgIHsKCWUgPSAmcC0+ZWx0c1tpXTsKCXByaW50ZiAoIlx0JXM6IiwgZS0+b2JqZWN0KTsKCUZjVmFsdWVMaXN0UHJpbnQgKGUtPnZhbHVlcyk7CglwcmludGYgKCJcbiIpOwogICAgfQogICAgcHJpbnRmICgiXG4iKTsKfQoKdm9pZApGY09wUHJpbnQgKEZjT3Agb3ApCnsKICAgIHN3aXRjaCAob3ApIHsKICAgIGNhc2UgRmNPcEludGVnZXI6IHByaW50ZiAoIkludGVnZXIiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BEb3VibGU6IHByaW50ZiAoIkRvdWJsZSIpOyBicmVhazsKICAgIGNhc2UgRmNPcFN0cmluZzogcHJpbnRmICgiU3RyaW5nIik7IGJyZWFrOwogICAgY2FzZSBGY09wTWF0cml4OiBwcmludGYgKCJNYXRyaXgiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BCb29sOiBwcmludGYgKCJCb29sIik7IGJyZWFrOwogICAgY2FzZSBGY09wQ2hhclNldDogcHJpbnRmICgiQ2hhclNldCIpOyBicmVhazsKICAgIGNhc2UgRmNPcEZpZWxkOiBwcmludGYgKCJGaWVsZCIpOyBicmVhazsKICAgIGNhc2UgRmNPcENvbnN0OiBwcmludGYgKCJDb25zdCIpOyBicmVhazsKICAgIGNhc2UgRmNPcEFzc2lnbjogcHJpbnRmICgiQXNzaWduIik7IGJyZWFrOwogICAgY2FzZSBGY09wQXNzaWduUmVwbGFjZTogcHJpbnRmICgiQXNzaWduUmVwbGFjZSIpOyBicmVhazsKICAgIGNhc2UgRmNPcFByZXBlbmQ6IHByaW50ZiAoIlByZXBlbmQiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BQcmVwZW5kRmlyc3Q6IHByaW50ZiAoIlByZXBlbmRGaXJzdCIpOyBicmVhazsKICAgIGNhc2UgRmNPcEFwcGVuZDogcHJpbnRmICgiQXBwZW5kIik7IGJyZWFrOwogICAgY2FzZSBGY09wQXBwZW5kTGFzdDogcHJpbnRmICgiQXBwZW5kTGFzdCIpOyBicmVhazsKICAgIGNhc2UgRmNPcFF1ZXN0OiBwcmludGYgKCJRdWVzdCIpOyBicmVhazsKICAgIGNhc2UgRmNPcE9yOiBwcmludGYgKCJPciIpOyBicmVhazsKICAgIGNhc2UgRmNPcEFuZDogcHJpbnRmICgiQW5kIik7IGJyZWFrOwogICAgY2FzZSBGY09wRXF1YWw6IHByaW50ZiAoIkVxdWFsIik7IGJyZWFrOwogICAgY2FzZSBGY09wTm90RXF1YWw6IHByaW50ZiAoIk5vdEVxdWFsIik7IGJyZWFrOwogICAgY2FzZSBGY09wTGVzczogcHJpbnRmICgiTGVzcyIpOyBicmVhazsKICAgIGNhc2UgRmNPcExlc3NFcXVhbDogcHJpbnRmICgiTGVzc0VxdWFsIik7IGJyZWFrOwogICAgY2FzZSBGY09wTW9yZTogcHJpbnRmICgiTW9yZSIpOyBicmVhazsKICAgIGNhc2UgRmNPcE1vcmVFcXVhbDogcHJpbnRmICgiTW9yZUVxdWFsIik7IGJyZWFrOwogICAgY2FzZSBGY09wQ29udGFpbnM6IHByaW50ZiAoIkNvbnRhaW5zIik7IGJyZWFrOwogICAgY2FzZSBGY09wTm90Q29udGFpbnM6IHByaW50ZiAoIk5vdENvbnRhaW5zIik7IGJyZWFrOwogICAgY2FzZSBGY09wUGx1czogcHJpbnRmICgiUGx1cyIpOyBicmVhazsKICAgIGNhc2UgRmNPcE1pbnVzOiBwcmludGYgKCJNaW51cyIpOyBicmVhazsKICAgIGNhc2UgRmNPcFRpbWVzOiBwcmludGYgKCJUaW1lcyIpOyBicmVhazsKICAgIGNhc2UgRmNPcERpdmlkZTogcHJpbnRmICgiRGl2aWRlIik7IGJyZWFrOwogICAgY2FzZSBGY09wTm90OiBwcmludGYgKCJOb3QiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BOaWw6IHByaW50ZiAoIk5pbCIpOyBicmVhazsKICAgIGNhc2UgRmNPcENvbW1hOiBwcmludGYgKCJDb21tYSIpOyBicmVhazsKICAgIGNhc2UgRmNPcEludmFsaWQ6IHByaW50ZiAoIkludmFsaWQiKTsgYnJlYWs7CiAgICB9Cn0KCnZvaWQKRmNFeHByUHJpbnQgKGNvbnN0IEZjRXhwciAqZXhwcikKewogICAgaWYgKCFleHByKSBwcmludGYgKCJub25lIik7CiAgICBlbHNlIHN3aXRjaCAoZXhwci0+b3ApIHsKICAgIGNhc2UgRmNPcEludGVnZXI6IHByaW50ZiAoIiVkIiwgZXhwci0+dS5pdmFsKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BEb3VibGU6IHByaW50ZiAoIiVnIiwgZXhwci0+dS5kdmFsKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BTdHJpbmc6IHByaW50ZiAoIlwiJXNcIiIsIGV4cHItPnUuc3ZhbCk7IGJyZWFrOwogICAgY2FzZSBGY09wTWF0cml4OiBwcmludGYgKCJbJWcgJWcgJWcgJWddIiwKCQkJICAgICAgZXhwci0+dS5tdmFsLT54eCwKCQkJICAgICAgZXhwci0+dS5tdmFsLT54eSwKCQkJICAgICAgZXhwci0+dS5tdmFsLT55eCwKCQkJICAgICAgZXhwci0+dS5tdmFsLT55eSk7IGJyZWFrOwogICAgY2FzZSBGY09wQm9vbDogcHJpbnRmICgiJXMiLCBleHByLT51LmJ2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BDaGFyU2V0OiBwcmludGYgKCJjaGFyc2V0XG4iKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BOaWw6IHByaW50ZiAoIm5pbFxuIik7IGJyZWFrOwogICAgY2FzZSBGY09wRmllbGQ6IHByaW50ZiAoIiVzIiwgZXhwci0+dS5maWVsZCk7IGJyZWFrOwogICAgY2FzZSBGY09wQ29uc3Q6IHByaW50ZiAoIiVzIiwgZXhwci0+dS5jb25zdGFudCk7IGJyZWFrOwogICAgY2FzZSBGY09wUXVlc3Q6CglGY0V4cHJQcmludCAoZXhwci0+dS50cmVlLmxlZnQpOwoJcHJpbnRmICgiIHF1ZXN0ICIpOwoJRmNFeHByUHJpbnQgKGV4cHItPnUudHJlZS5yaWdodC0+dS50cmVlLmxlZnQpOwoJcHJpbnRmICgiIGNvbG9uICIpOwoJRmNFeHByUHJpbnQgKGV4cHItPnUudHJlZS5yaWdodC0+dS50cmVlLnJpZ2h0KTsKCWJyZWFrOwogICAgY2FzZSBGY09wQXNzaWduOgogICAgY2FzZSBGY09wQXNzaWduUmVwbGFjZToKICAgIGNhc2UgRmNPcFByZXBlbmRGaXJzdDoKICAgIGNhc2UgRmNPcFByZXBlbmQ6CiAgICBjYXNlIEZjT3BBcHBlbmQ6CiAgICBjYXNlIEZjT3BBcHBlbmRMYXN0OgogICAgY2FzZSBGY09wT3I6CiAgICBjYXNlIEZjT3BBbmQ6CiAgICBjYXNlIEZjT3BFcXVhbDoKICAgIGNhc2UgRmNPcE5vdEVxdWFsOgogICAgY2FzZSBGY09wTGVzczoKICAgIGNhc2UgRmNPcExlc3NFcXVhbDoKICAgIGNhc2UgRmNPcE1vcmU6CiAgICBjYXNlIEZjT3BNb3JlRXF1YWw6CiAgICBjYXNlIEZjT3BDb250YWluczoKICAgIGNhc2UgRmNPcE5vdENvbnRhaW5zOgogICAgY2FzZSBGY09wUGx1czoKICAgIGNhc2UgRmNPcE1pbnVzOgogICAgY2FzZSBGY09wVGltZXM6CiAgICBjYXNlIEZjT3BEaXZpZGU6CiAgICBjYXNlIEZjT3BDb21tYToKCUZjRXhwclByaW50IChleHByLT51LnRyZWUubGVmdCk7CglwcmludGYgKCIgIik7Cglzd2l0Y2ggKGV4cHItPm9wKSB7CgljYXNlIEZjT3BBc3NpZ246IHByaW50ZiAoIkFzc2lnbiIpOyBicmVhazsKCWNhc2UgRmNPcEFzc2lnblJlcGxhY2U6IHByaW50ZiAoIkFzc2lnblJlcGxhY2UiKTsgYnJlYWs7CgljYXNlIEZjT3BQcmVwZW5kRmlyc3Q6IHByaW50ZiAoIlByZXBlbmRGaXJzdCIpOyBicmVhazsKCWNhc2UgRmNPcFByZXBlbmQ6IHByaW50ZiAoIlByZXBlbmQiKTsgYnJlYWs7CgljYXNlIEZjT3BBcHBlbmQ6IHByaW50ZiAoIkFwcGVuZCIpOyBicmVhazsKCWNhc2UgRmNPcEFwcGVuZExhc3Q6IHByaW50ZiAoIkFwcGVuZExhc3QiKTsgYnJlYWs7CgljYXNlIEZjT3BPcjogcHJpbnRmICgiT3IiKTsgYnJlYWs7CgljYXNlIEZjT3BBbmQ6IHByaW50ZiAoIkFuZCIpOyBicmVhazsKCWNhc2UgRmNPcEVxdWFsOiBwcmludGYgKCJFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcE5vdEVxdWFsOiBwcmludGYgKCJOb3RFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcExlc3M6IHByaW50ZiAoIkxlc3MiKTsgYnJlYWs7CgljYXNlIEZjT3BMZXNzRXF1YWw6IHByaW50ZiAoIkxlc3NFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcE1vcmU6IHByaW50ZiAoIk1vcmUiKTsgYnJlYWs7CgljYXNlIEZjT3BNb3JlRXF1YWw6IHByaW50ZiAoIk1vcmVFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcENvbnRhaW5zOiBwcmludGYgKCJDb250YWlucyIpOyBicmVhazsKCWNhc2UgRmNPcE5vdENvbnRhaW5zOiBwcmludGYgKCJOb3RDb250YWlucyIpOyBicmVhazsKCWNhc2UgRmNPcFBsdXM6IHByaW50ZiAoIlBsdXMiKTsgYnJlYWs7CgljYXNlIEZjT3BNaW51czogcHJpbnRmICgiTWludXMiKTsgYnJlYWs7CgljYXNlIEZjT3BUaW1lczogcHJpbnRmICgiVGltZXMiKTsgYnJlYWs7CgljYXNlIEZjT3BEaXZpZGU6IHByaW50ZiAoIkRpdmlkZSIpOyBicmVhazsKCWNhc2UgRmNPcENvbW1hOiBwcmludGYgKCJDb21tYSIpOyBicmVhazsKCWRlZmF1bHQ6IGJyZWFrOwoJfQoJcHJpbnRmICgiICIpOwoJRmNFeHByUHJpbnQgKGV4cHItPnUudHJlZS5yaWdodCk7CglicmVhazsKICAgIGNhc2UgRmNPcE5vdDoKCXByaW50ZiAoIk5vdCAiKTsKCUZjRXhwclByaW50IChleHByLT51LnRyZWUubGVmdCk7CglicmVhazsKICAgIGNhc2UgRmNPcEludmFsaWQ6IHByaW50ZiAoIkludmFsaWQiKTsgYnJlYWs7CiAgICB9Cn0KCnZvaWQKRmNUZXN0UHJpbnQgKGNvbnN0IEZjVGVzdCAqdGVzdCkKewogICAgc3dpdGNoICh0ZXN0LT5raW5kKSB7CiAgICBjYXNlIEZjTWF0Y2hQYXR0ZXJuOgoJcHJpbnRmICgicGF0dGVybiAiKTsKCWJyZWFrOwogICAgY2FzZSBGY01hdGNoRm9udDoKCXByaW50ZiAoImZvbnQgIik7CglicmVhazsKICAgIH0KICAgIHN3aXRjaCAodGVzdC0+cXVhbCkgewogICAgY2FzZSBGY1F1YWxBbnk6CglwcmludGYgKCJhbnkgIik7CglicmVhazsKICAgIGNhc2UgRmNRdWFsQWxsOgoJcHJpbnRmICgiYWxsICIpOwoJYnJlYWs7CiAgICBjYXNlIEZjUXVhbEZpcnN0OgoJcHJpbnRmICgiZmlyc3QgIik7CglicmVhazsKICAgIGNhc2UgRmNRdWFsTm90Rmlyc3Q6CglwcmludGYgKCJub3RfZmlyc3QgIik7CglicmVhazsKICAgIH0KICAgIHByaW50ZiAoIiVzICIsIHRlc3QtPmZpZWxkKTsKICAgIEZjT3BQcmludCAodGVzdC0+b3ApOwogICAgcHJpbnRmICgiICIpOwogICAgRmNFeHByUHJpbnQgKHRlc3QtPmV4cHIpOwogICAgcHJpbnRmICgiXG4iKTsKfQoKdm9pZApGY0VkaXRQcmludCAoY29uc3QgRmNFZGl0ICplZGl0KQp7CiAgICBwcmludGYgKCJFZGl0ICVzICIsIGVkaXQtPmZpZWxkKTsKICAgIEZjT3BQcmludCAoZWRpdC0+b3ApOwogICAgcHJpbnRmICgiICIpOwogICAgRmNFeHByUHJpbnQgKGVkaXQtPmV4cHIpOwp9Cgp2b2lkCkZjU3Vic3RQcmludCAoY29uc3QgRmNTdWJzdCAqc3Vic3QpCnsKICAgIEZjRWRpdAkqZTsKICAgIEZjVGVzdAkqdDsKICAgIAogICAgcHJpbnRmICgibWF0Y2hcbiIpOwogICAgZm9yICh0ID0gc3Vic3QtPnRlc3Q7IHQ7IHQgPSB0LT5uZXh0KQogICAgewoJcHJpbnRmICgiXHQiKTsKCUZjVGVzdFByaW50ICh0KTsKICAgIH0KICAgIHByaW50ZiAoImVkaXRcbiIpOwogICAgZm9yIChlID0gc3Vic3QtPmVkaXQ7IGU7IGUgPSBlLT5uZXh0KQogICAgewoJcHJpbnRmICgiXHQiKTsKCUZjRWRpdFByaW50IChlKTsKCXByaW50ZiAoIjtcbiIpOwogICAgfQogICAgcHJpbnRmICgiXG4iKTsKfQoKdm9pZApGY0ZvbnRTZXRQcmludCAoY29uc3QgRmNGb250U2V0ICpzKQp7CiAgICBpbnQJICAgIGk7CgogICAgcHJpbnRmICgiRm9udFNldCAlZCBvZiAlZFxuIiwgcy0+bmZvbnQsIHMtPnNmb250KTsKICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uZm9udDsgaSsrKQogICAgewoJcHJpbnRmICgiRm9udCAlZCAiLCBpKTsKCUZjUGF0dGVyblByaW50IChzLT5mb250c1tpXSk7CiAgICB9Cn0KCmludApGY0RlYnVnICh2b2lkKQp7CiAgICBzdGF0aWMgaW50ICBpbml0aWFsaXplZDsKICAgIHN0YXRpYyBpbnQgIGRlYnVnOwoKICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICB7CgljaGFyICAgICplOwoKCWluaXRpYWxpemVkID0gMTsKCWUgPSBnZXRlbnYgKCJGQ19ERUJVRyIpOwoJaWYgKGUpCgl7CgkgICAgcHJpbnRmICgiRkNfREVCVUc9JXNcbiIsIGUpOwoJICAgIGRlYnVnID0gYXRvaSAoZSk7CgkgICAgaWYgKGRlYnVnIDwgMCkKCQlkZWJ1ZyA9IDA7Cgl9CiAgICB9CiAgICByZXR1cm4gZGVidWc7Cn0K