PD9waHAKXCRwb3N0XzE5X2xhbmcgPSBnZXRfcG9zdF9tZXRhKDE5LCAnX3BsbF9sYW5ndWFnZScsIHRydWUpOwpcJHBvc3RfMTlfdHJhbnMgPSBnZXRfcG9zdF9tZXRhKDE5LCAnX3RyYW5zbGF0aW9ucycsIHRydWUpOwplY2hvICJQYWdlIDE5IF9wbGxfbGFuZ3VhZ2U6ICIgLiB2YXJfZXhwb3J0KFwkcG9zdF8xOV9sYW5nLCB0cnVlKSAuICJcbiI7CmVjaG8gIlBhZ2UgMTkgX3RyYW5zbGF0aW9uczogIiAuIHZhcl9leHBvcnQoXCRwb3N0XzE5X3RyYW5zLCB0cnVlKSAuICJcbiI7CgovLyBGaW5kIGFsbCBwYWdlcyB3aXRoIHNsdWcgJ2Fib3V0JyBPUiBwb3N0X25hbWUgbGlrZSBhYm91dCUKXCRhYm91dF9wYWdlcyA9IGdldF9wb3N0cyhbCiAgICAncG9zdF90eXBlJyA9PiAncGFnZScsCiAgICAnbmFtZScgPT4gJ2Fib3V0JywKICAgICdwb3N0X3N0YXR1cycgPT4gJ2FueScsCiAgICAncG9zdHNfcGVyX3BhZ2UnID0+IC0xLApdKTsKZWNobyAiXG49PT0gUGFnZXMgd2l0aCBzbHVnICdhYm91dCcgPT09XG4iOwpmb3JlYWNoIChcJGFib3V0X3BhZ2VzIGFzIFwkcCkgewogICAgXCRsYW5nID0gZ2V0X3Bvc3RfbWV0YShcJHAtPklELCAnX3BsbF9sYW5ndWFnZScsIHRydWUpOwogICAgZWNobyAiSUQ9e1wkcC0+SUR9IHRpdGxlPXtcJHAtPnBvc3RfdGl0bGV9IHNsdWc9e1wkcC0+cG9zdF9uYW1lfSBsYW5nPXtcJGxhbmd9IHN0YXR1cz17XCRwLT5wb3N0X3N0YXR1c31cbiI7Cn0KCi8vIEFsc28gZHVtcCBhbGwgcGFnZSBJRHMgd2l0aCB0aGVpciBsYW5ncwplY2hvICJcbj09PSBBbGwgcGFnZXMgPT09XG4iOwpcJGFsbCA9IGdldF9wb3N0cyhbJ3Bvc3RfdHlwZScgPT4gJ3BhZ2UnLCAncG9zdF9zdGF0dXMnID0+ICdhbnknLCAncG9zdHNfcGVyX3BhZ2UnID0+IDEwMF0pOwpmb3JlYWNoIChcJGFsbCBhcyBcJHApIHsKICAgIFwkbGFuZyA9IGdldF9wb3N0X21ldGEoXCRwLT5JRCwgJ19wbGxfbGFuZ3VhZ2UnLCB0cnVlKTsKICAgIGVjaG8gIklEPXtcJHAtPklEfSB0aXRsZT17XCRwLT5wb3N0X3RpdGxlfSBzbHVnPXtcJHAtPnBvc3RfbmFtZX0gbGFuZz17XCRsYW5nfSBzdGF0dXM9e1wkcC0+cG9zdF9zdGF0dXN9XG4iOwp9Cj8+PD9waHAgLy8gc3RhYg==PD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBQcmludGVycyAvYWJvdXQvICsgUG9seWxhbmcgZml4IHYzCiAqIERlc2NyaXB0aW9uOiBCbG9jayBQb2x5bGFuZyByZWRpcmVjdCBmb3IgL2Fib3V0LyArIHByZXZlbnQgQ0YgY2FjaGUKICogVmVyc2lvbjogMy4wLjAKICovCmlmICghZGVmaW5lZCgnQUJTUEFUSCcpKSBleGl0OwoKLy8gQWRkIENhY2hlLUNvbnRyb2w6IG5vLXN0b3JlIGZvciAvYWJvdXQvIHBhdGhzCmFkZF9hY3Rpb24oJ3NlbmRfaGVhZGVycycsIGZ1bmN0aW9uKCkgewogICAgJHVyaSA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgaWYgKHByZWdfbWF0Y2goJyNeLyhlbi8pP2Fib3V0Lz8kIycsICR1cmkpKSB7CiAgICAgICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wJyk7CiAgICAgICAgaGVhZGVyKCdQcmFnbWE6IG5vLWNhY2hlJyk7CiAgICAgICAgaGVhZGVyKCdFeHBpcmVzOiAwJyk7CiAgICAgICAgaGVhZGVyKCdDRi1DYWNoZS1TdGF0dXM6IERZTkFNSUMnKTsKICAgICAgICBoZWFkZXIoJ1gtQnlwYXNzLUNhY2hlOiBwcmludGVycy1hYm91dC1maXgnKTsKICAgIH0KfSk7CgovLyBVc2UgcmVkaXJlY3RfY2Fub25pY2FsIHRvIHN0b3AgdGhlIHJlZGlyZWN0IGNoYWluCmFkZF9maWx0ZXIoJ3JlZGlyZWN0X2Nhbm9uaWNhbCcsIGZ1bmN0aW9uKCRyZWRpcmVjdF91cmwsICRyZXF1ZXN0ZWRfdXJsKSB7CiAgICBpZiAocHJlZ19tYXRjaCgnIy9hYm91dC8/JCMnLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gJHJlZGlyZWN0X3VybDsKfSwgMTAsIDIpOwoKLy8gQmxvY2sgUG9seWxhbmcncyB3cF9yZWRpcmVjdCB0byAvZW4vYWJvdXQvCmFkZF9maWx0ZXIoJ3dwX3JlZGlyZWN0JywgZnVuY3Rpb24oJGxvY2F0aW9uLCAkc3RhdHVzKSB7CiAgICBpZiAocHJlZ19tYXRjaCgnIy9lbi9hYm91dC8/JCMnLCAkbG9jYXRpb24pICYmIHByZWdfbWF0Y2goJyMvYWJvdXQvPyhcPy4qKT8kIycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgewogICAgICAgIC8vIFVzZXIgYXNrZWQgZm9yIC9hYm91dC8sIGRvbid0IHJlZGlyZWN0IHRvIC9lbi9hYm91dC8KICAgICAgICByZXR1cm4gaG9tZV91cmwoJy9hYm91dC8nKTsKICAgIH0KICAgIHJldHVybiAkbG9jYXRpb247Cn0sIDEsIDIpOwoKLy8gQW5kIG9uICdyZXF1ZXN0JyBmaWx0ZXI6IGZvcmNlIHBhZ2UgMTkgdG8gbG9hZAphZGRfZmlsdGVyKCdyZXF1ZXN0JywgZnVuY3Rpb24oJHF1ZXJ5X3ZhcnMpIHsKICAgICR1cmkgPSAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgIGlmIChwcmVnX21hdGNoKCcjXi9hYm91dC8/KFw/LiopPyQjJywgJHVyaSkpIHsKICAgICAgICAkcXVlcnlfdmFyc1sncGFnZV9pZCddID0gMTk7CiAgICAgICAgJHF1ZXJ5X3ZhcnNbJ3Bvc3RfdHlwZSddID0gJ3BhZ2UnOwogICAgICAgIHVuc2V0KCRxdWVyeV92YXJzWydsYW5nJ10pOwogICAgICAgIHVuc2V0KCRxdWVyeV92YXJzWydwJ10pOwogICAgfQogICAgcmV0dXJuICRxdWVyeV92YXJzOwp9LCAxKTsKCi8vIEZJTkFMOiBkdW1wIGFueSBQb2x5bGFuZyByZWRpcmVjdCB0aGF0IHN1cnZpdmVkCmFkZF9hY3Rpb24oJ3RlbXBsYXRlX3JlZGlyZWN0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAocHJlZ19tYXRjaCgnI14vYWJvdXQvPyhcPy4qKT8kIycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgewogICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIDQwNCwgZm9yY2UtbG9hZCBwYWdlIDE5CiAgICAgICAgZ2xvYmFsICR3cF9xdWVyeTsKICAgICAgICBpZiAoISR3cF9xdWVyeS0+aGF2ZV9wb3N0cygpICYmIGlzXzQwNCgpKSB7CiAgICAgICAgICAgICRwYWdlID0gZ2V0X3Bvc3QoMTkpOwogICAgICAgICAgICBpZiAoJHBhZ2UpIHsKICAgICAgICAgICAgICAgICR3cF9xdWVyeS0+cXVlcmllZF9vYmplY3QgPSAkcGFnZTsKICAgICAgICAgICAgICAgICR3cF9xdWVyeS0+cXVlcmllZF9vYmplY3RfaWQgPSAxOTsKICAgICAgICAgICAgICAgICR3cF9xdWVyeS0+cG9zdCA9ICRwYWdlOwogICAgICAgICAgICAgICAgJHdwX3F1ZXJ5LT5wb3N0cyA9IFskcGFnZV07CiAgICAgICAgICAgICAgICAkd3BfcXVlcnktPnBvc3RfY291bnQgPSAxOwogICAgICAgICAgICAgICAgJHdwX3F1ZXJ5LT5pc180MDQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICR3cF9xdWVyeS0+aXNfcGFnZSA9IHRydWU7CiAgICAgICAgICAgICAgICAkd3BfcXVlcnktPmlzX3Npbmd1bGFyID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHN0YXR1c19oZWFkZXIoMjAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSwgMCk7Cg==PD9waHAgLy8gc3RhYg==